@horietakehiro/aws-cdk-utul 0.33.0 → 0.33.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/buildspec_schedule.yaml +42 -0
  2. package/lib/types/cfn-resource-types/aws-amazonmq-broker.d.ts +2 -1
  3. package/lib/types/cfn-resource-types/aws-amazonmq-broker.js +1 -1
  4. package/lib/types/cfn-resource-types/aws-appconfig-configurationprofile.d.ts +4 -0
  5. package/lib/types/cfn-resource-types/aws-appconfig-configurationprofile.js +1 -1
  6. package/lib/types/cfn-resource-types/aws-appconfig-deployment.d.ts +40 -4
  7. package/lib/types/cfn-resource-types/aws-appconfig-deployment.js +1 -1
  8. package/lib/types/cfn-resource-types/aws-appconfig-environment.d.ts +4 -0
  9. package/lib/types/cfn-resource-types/aws-appconfig-environment.js +1 -1
  10. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +17 -0
  11. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  12. package/lib/types/cfn-resource-types/aws-bedrock-agent.d.ts +5 -0
  13. package/lib/types/cfn-resource-types/aws-bedrock-agent.js +1 -1
  14. package/lib/types/cfn-resource-types/aws-bedrock-datasource.d.ts +25 -16
  15. package/lib/types/cfn-resource-types/aws-bedrock-datasource.js +1 -1
  16. package/lib/types/cfn-resource-types/aws-bedrock-knowledgebase.d.ts +48 -3
  17. package/lib/types/cfn-resource-types/aws-bedrock-knowledgebase.js +1 -1
  18. package/lib/types/cfn-resource-types/aws-bedrock-prompt.d.ts +158 -3
  19. package/lib/types/cfn-resource-types/aws-bedrock-prompt.js +1 -1
  20. package/lib/types/cfn-resource-types/aws-cassandra-keyspace.d.ts +4 -0
  21. package/lib/types/cfn-resource-types/aws-cassandra-keyspace.js +1 -1
  22. package/lib/types/cfn-resource-types/aws-cassandra-type.d.ts +41 -0
  23. package/lib/types/cfn-resource-types/aws-cassandra-type.js +3 -0
  24. package/lib/types/cfn-resource-types/aws-cleanrooms-collaboration.d.ts +18 -0
  25. package/lib/types/cfn-resource-types/aws-cleanrooms-collaboration.js +1 -1
  26. package/lib/types/cfn-resource-types/aws-cleanrooms-membership.d.ts +11 -0
  27. package/lib/types/cfn-resource-types/aws-cleanrooms-membership.js +1 -1
  28. package/lib/types/cfn-resource-types/aws-cloudformation-guardhook.d.ts +1 -1
  29. package/lib/types/cfn-resource-types/aws-cloudformation-guardhook.js +1 -1
  30. package/lib/types/cfn-resource-types/aws-cloudformation-lambdahook.d.ts +1 -1
  31. package/lib/types/cfn-resource-types/aws-cloudformation-lambdahook.js +1 -1
  32. package/lib/types/cfn-resource-types/aws-cloudfront-anycastiplist.d.ts +27 -0
  33. package/lib/types/cfn-resource-types/aws-cloudfront-anycastiplist.js +3 -0
  34. package/lib/types/cfn-resource-types/aws-cloudfront-distribution.d.ts +24 -7
  35. package/lib/types/cfn-resource-types/aws-cloudfront-distribution.js +1 -1
  36. package/lib/types/cfn-resource-types/aws-connect-queue.d.ts +0 -1
  37. package/lib/types/cfn-resource-types/aws-connect-queue.js +1 -1
  38. package/lib/types/cfn-resource-types/aws-customerprofiles-eventtrigger.d.ts +162 -0
  39. package/lib/types/cfn-resource-types/aws-customerprofiles-eventtrigger.js +3 -0
  40. package/lib/types/cfn-resource-types/aws-databrew-dataset.d.ts +9 -0
  41. package/lib/types/cfn-resource-types/aws-databrew-dataset.js +1 -1
  42. package/lib/types/cfn-resource-types/aws-datazone-datasource.d.ts +23 -1
  43. package/lib/types/cfn-resource-types/aws-datazone-datasource.js +1 -1
  44. package/lib/types/cfn-resource-types/aws-datazone-projectmembership.d.ts +1 -1
  45. package/lib/types/cfn-resource-types/aws-datazone-projectmembership.js +1 -1
  46. package/lib/types/cfn-resource-types/aws-datazone-subscriptiontarget.d.ts +1 -1
  47. package/lib/types/cfn-resource-types/aws-datazone-subscriptiontarget.js +1 -1
  48. package/lib/types/cfn-resource-types/aws-dms-dataprovider.d.ts +1 -1
  49. package/lib/types/cfn-resource-types/aws-dms-dataprovider.js +1 -1
  50. package/lib/types/cfn-resource-types/aws-docdb-dbcluster.d.ts +3 -0
  51. package/lib/types/cfn-resource-types/aws-docdb-dbcluster.js +1 -1
  52. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.d.ts +5 -3
  53. package/lib/types/cfn-resource-types/aws-dynamodb-globaltable.js +1 -1
  54. package/lib/types/cfn-resource-types/aws-dynamodb-table.d.ts +1 -0
  55. package/lib/types/cfn-resource-types/aws-dynamodb-table.js +1 -1
  56. package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.d.ts +10 -0
  57. package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.js +1 -1
  58. package/lib/types/cfn-resource-types/aws-ec2-launchtemplate.d.ts +1022 -0
  59. package/lib/types/cfn-resource-types/aws-ec2-launchtemplate.js +3 -0
  60. package/lib/types/cfn-resource-types/aws-ec2-networkacl.d.ts +1 -0
  61. package/lib/types/cfn-resource-types/aws-ec2-networkacl.js +1 -1
  62. package/lib/types/cfn-resource-types/aws-ec2-spotfleet.d.ts +136 -126
  63. package/lib/types/cfn-resource-types/aws-ec2-spotfleet.js +1 -1
  64. package/lib/types/cfn-resource-types/aws-ec2-volume.d.ts +5 -5
  65. package/lib/types/cfn-resource-types/aws-ec2-volume.js +1 -1
  66. package/lib/types/cfn-resource-types/aws-ec2-vpccidrblock.d.ts +4 -0
  67. package/lib/types/cfn-resource-types/aws-ec2-vpccidrblock.js +1 -1
  68. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.d.ts +27 -14
  69. package/lib/types/cfn-resource-types/aws-ec2-vpcendpoint.js +1 -1
  70. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointservice.d.ts +8 -0
  71. package/lib/types/cfn-resource-types/aws-ec2-vpcendpointservice.js +1 -1
  72. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +6 -3
  73. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  74. package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.d.ts +5 -2
  75. package/lib/types/cfn-resource-types/aws-ecs-taskdefinition.js +1 -1
  76. package/lib/types/cfn-resource-types/aws-efs-filesystem.d.ts +10 -1
  77. package/lib/types/cfn-resource-types/aws-efs-filesystem.js +1 -1
  78. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.d.ts +1 -1
  79. package/lib/types/cfn-resource-types/aws-fis-experimenttemplate.js +1 -1
  80. package/lib/types/cfn-resource-types/aws-imagebuilder-image.d.ts +45 -45
  81. package/lib/types/cfn-resource-types/aws-imagebuilder-image.js +1 -1
  82. package/lib/types/cfn-resource-types/aws-lex-bot.d.ts +17 -0
  83. package/lib/types/cfn-resource-types/aws-lex-bot.js +1 -1
  84. package/lib/types/cfn-resource-types/aws-logs-loggroup.d.ts +11 -0
  85. package/lib/types/cfn-resource-types/aws-logs-loggroup.js +1 -1
  86. package/lib/types/cfn-resource-types/aws-logs-metricfilter.d.ts +4 -0
  87. package/lib/types/cfn-resource-types/aws-logs-metricfilter.js +1 -1
  88. package/lib/types/cfn-resource-types/aws-logs-subscriptionfilter.d.ts +4 -0
  89. package/lib/types/cfn-resource-types/aws-logs-subscriptionfilter.js +1 -1
  90. package/lib/types/cfn-resource-types/aws-mediaconnect-bridge.d.ts +10 -0
  91. package/lib/types/cfn-resource-types/aws-mediaconnect-bridge.js +1 -1
  92. package/lib/types/cfn-resource-types/aws-mediaconnect-bridgesource.d.ts +10 -0
  93. package/lib/types/cfn-resource-types/aws-mediaconnect-bridgesource.js +1 -1
  94. package/lib/types/cfn-resource-types/aws-mediaconvert-queue.d.ts +1 -0
  95. package/lib/types/cfn-resource-types/aws-mediaconvert-queue.js +1 -1
  96. package/lib/types/cfn-resource-types/aws-opensearchservice-domain.d.ts +10 -0
  97. package/lib/types/cfn-resource-types/aws-opensearchservice-domain.js +1 -1
  98. package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +151 -0
  99. package/lib/types/cfn-resource-types/aws-pcs-cluster.js +3 -0
  100. package/lib/types/cfn-resource-types/aws-pcs-computenodegroup.d.ts +142 -0
  101. package/lib/types/cfn-resource-types/aws-pcs-computenodegroup.js +3 -0
  102. package/lib/types/cfn-resource-types/aws-pcs-queue.d.ts +65 -0
  103. package/lib/types/cfn-resource-types/aws-pcs-queue.js +3 -0
  104. package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.d.ts +1 -1
  105. package/lib/types/cfn-resource-types/aws-qbusiness-dataaccessor.js +1 -1
  106. package/lib/types/cfn-resource-types/aws-quicksight-analysis.d.ts +4218 -0
  107. package/lib/types/cfn-resource-types/aws-quicksight-analysis.js +3 -0
  108. package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.d.ts +48 -0
  109. package/lib/types/cfn-resource-types/aws-quicksight-custompermissions.js +3 -0
  110. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +4338 -0
  111. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +3 -0
  112. package/lib/types/cfn-resource-types/aws-quicksight-dataset.d.ts +16 -22
  113. package/lib/types/cfn-resource-types/aws-quicksight-dataset.js +1 -1
  114. package/lib/types/cfn-resource-types/aws-quicksight-template.d.ts +4018 -0
  115. package/lib/types/cfn-resource-types/aws-quicksight-template.js +3 -0
  116. package/lib/types/cfn-resource-types/aws-rds-dbcluster.d.ts +24 -13
  117. package/lib/types/cfn-resource-types/aws-rds-dbcluster.js +1 -1
  118. package/lib/types/cfn-resource-types/aws-rds-dbinstance.d.ts +1 -0
  119. package/lib/types/cfn-resource-types/aws-rds-dbinstance.js +1 -1
  120. package/lib/types/cfn-resource-types/aws-redshift-integration.d.ts +3 -5
  121. package/lib/types/cfn-resource-types/aws-redshift-integration.js +1 -1
  122. package/lib/types/cfn-resource-types/aws-resiliencehub-app.d.ts +4 -0
  123. package/lib/types/cfn-resource-types/aws-resiliencehub-app.js +1 -1
  124. package/lib/types/cfn-resource-types/aws-sagemaker-cluster.d.ts +52 -52
  125. package/lib/types/cfn-resource-types/aws-sagemaker-cluster.js +1 -1
  126. package/lib/types/cfn-resource-types/aws-sagemaker-domain.d.ts +5 -0
  127. package/lib/types/cfn-resource-types/aws-sagemaker-domain.js +1 -1
  128. package/lib/types/cfn-resource-types/aws-sagemaker-endpointconfig.d.ts +0 -1
  129. package/lib/types/cfn-resource-types/aws-sagemaker-endpointconfig.js +1 -1
  130. package/lib/types/cfn-resource-types/aws-sagemaker-partnerapp.d.ts +89 -0
  131. package/lib/types/cfn-resource-types/aws-sagemaker-partnerapp.js +3 -0
  132. package/lib/types/cfn-resource-types/aws-sagemaker-space.d.ts +4 -0
  133. package/lib/types/cfn-resource-types/aws-sagemaker-space.js +1 -1
  134. package/lib/types/cfn-resource-types/aws-sagemaker-userprofile.d.ts +5 -0
  135. package/lib/types/cfn-resource-types/aws-sagemaker-userprofile.js +1 -1
  136. package/lib/types/cfn-resource-types/aws-securityhub-configurationpolicy.d.ts +1 -1
  137. package/lib/types/cfn-resource-types/aws-securityhub-configurationpolicy.js +1 -1
  138. package/lib/types/cfn-resource-types/aws-ses-configurationset.d.ts +4 -0
  139. package/lib/types/cfn-resource-types/aws-ses-configurationset.js +1 -1
  140. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.d.ts +10 -1
  141. package/lib/types/cfn-resource-types/aws-ses-mailmanagerruleset.js +1 -1
  142. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.d.ts +1 -1
  143. package/lib/types/cfn-resource-types/aws-ssmquicksetup-configurationmanager.js +1 -1
  144. package/lib/types/cfn-resource-types/aws-synthetics-canary.d.ts +4 -0
  145. package/lib/types/cfn-resource-types/aws-synthetics-canary.js +1 -1
  146. package/lib/types/cfn-resource-types/aws-wisdom-aiagent.d.ts +1 -0
  147. package/lib/types/cfn-resource-types/aws-wisdom-aiagent.js +1 -1
  148. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.d.ts +1 -0
  149. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.js +1 -1
  150. package/lib/types/cfn-resource-types.d.ts +24 -6
  151. package/lib/types/cfn-resource-types.js +50 -32
  152. package/package.json +2 -2
  153. package/lib/types/cfn-resource-types/aws-iot1click-device.d.ts +0 -8
  154. package/lib/types/cfn-resource-types/aws-iot1click-device.js +0 -3
  155. package/lib/types/cfn-resource-types/aws-iot1click-placement.d.ts +0 -14
  156. package/lib/types/cfn-resource-types/aws-iot1click-placement.js +0 -3
  157. package/lib/types/cfn-resource-types/aws-iot1click-project.d.ts +0 -18
  158. package/lib/types/cfn-resource-types/aws-iot1click-project.js +0 -3
@@ -0,0 +1,42 @@
1
+ version: 0.2
2
+
3
+ run-as: root
4
+
5
+ env:
6
+ shell: bash
7
+ parameter-store:
8
+ # NPM_TOKEN: "/Credentials/NPM/access-token"
9
+ GITHUB_TOKEN: "/GitHub/MyToken"
10
+ # variables:
11
+ phases:
12
+ install:
13
+ on-failure: ABORT
14
+ runtime-versions:
15
+ nodejs: 20.x
16
+ commands:
17
+ - echo install nodejs
18
+ pre_build:
19
+ on-failure: ABORT
20
+ commands:
21
+ - node -v
22
+ - npm -v
23
+ - npm ci
24
+ # - npm install ts-node
25
+
26
+ build:
27
+ on-failure: ABORT
28
+ commands:
29
+ - npx ts-node scripts/increment-package-version/main.ts ./package.json
30
+
31
+ post_build:
32
+ commands:
33
+ - git config --global user.email "horie.takehiro@outlook.jp"
34
+ - git config --global user.name "horie.takehiro"
35
+ - git commit -am "release version $(cat package.json | jq -r .version)"
36
+ - git tag v$(cat package.json | jq -r .version)
37
+ # - git merge -X theirs --allow-unrelated-histories release
38
+ - git remote set-url origin https://${GITHUB_TOKEN}@github.com/horietakehiro/aws-cdk-utul.git
39
+ - git push origin main
40
+ - git push origin v$(cat package.json | jq -r .version)
41
+
42
+
@@ -39,9 +39,10 @@ export interface ConfigurationId {
39
39
  }
40
40
  export interface User {
41
41
  ReplicationUser?: boolean;
42
- ConsoleAccess?: boolean;
43
42
  Username: string;
44
43
  Groups?: string[];
44
+ ConsoleAccess?: boolean;
45
+ JolokiaApiAccess?: string;
45
46
  Password: string;
46
47
  }
47
48
  export interface EncryptionOptions {
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFtYXpvbm1xLWJyb2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hbWF6b25tcS1icm9rZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgVHlwZSBkZWZpbml0aW9uIGZvciBBV1M6OkFtYXpvbk1ROjpCcm9rZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FNQVpPTk1RX0JST0tFUiB7XG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG5EYXRhUmVwbGljYXRpb25QcmltYXJ5QnJva2VyQXJuPzogc3RyaW5nXG5Db25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbklkXG5BdXRoZW50aWNhdGlvblN0cmF0ZWd5Pzogc3RyaW5nXG5Vc2VyczogVXNlcltdXG5TdWJuZXRJZHM/OiBzdHJpbmdbXVxuU3RvbXBFbmRwb2ludHM/OiBzdHJpbmdbXVxuTXF0dEVuZHBvaW50cz86IHN0cmluZ1tdXG5BbXFwRW5kcG9pbnRzPzogc3RyaW5nW11cbkRlcGxveW1lbnRNb2RlOiBzdHJpbmdcbkVuZ2luZVR5cGU6IHN0cmluZ1xuRW5jcnlwdGlvbk9wdGlvbnM/OiBFbmNyeXB0aW9uT3B0aW9uc1xuVGFncz86IFRhZ3NFbnRyeVtdXG5Db25maWd1cmF0aW9uUmV2aXNpb24/OiBudW1iZXJcblN0b3JhZ2VUeXBlPzogc3RyaW5nXG5FbmdpbmVWZXJzaW9uPzogc3RyaW5nXG5NYWludGVuYW5jZVdpbmRvd1N0YXJ0VGltZT86IE1haW50ZW5hbmNlV2luZG93XG5Ib3N0SW5zdGFuY2VUeXBlOiBzdHJpbmdcbkF1dG9NaW5vclZlcnNpb25VcGdyYWRlPzogYm9vbGVhblxuTG9ncz86IExvZ0xpc3RcbkNvbmZpZ3VyYXRpb25JZD86IHN0cmluZ1xuRGF0YVJlcGxpY2F0aW9uTW9kZT86IHN0cmluZ1xuQnJva2VyTmFtZTogc3RyaW5nXG5Xc3NFbmRwb2ludHM/OiBzdHJpbmdbXVxuSXBBZGRyZXNzZXM/OiBzdHJpbmdbXVxuT3BlbldpcmVFbmRwb2ludHM/OiBzdHJpbmdbXVxuTGRhcFNlcnZlck1ldGFkYXRhPzogTGRhcFNlcnZlck1ldGFkYXRhXG5QdWJsaWNseUFjY2Vzc2libGU6IGJvb2xlYW5cbklkPzogc3RyaW5nXG5Bcm4/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbklkIHtcblJldmlzaW9uOiBudW1iZXJcbklkOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG5SZXBsaWNhdGlvblVzZXI/OiBib29sZWFuXG5Db25zb2xlQWNjZXNzPzogYm9vbGVhblxuVXNlcm5hbWU6IHN0cmluZ1xuR3JvdXBzPzogc3RyaW5nW11cblBhc3N3b3JkOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGlvbk9wdGlvbnMge1xuS21zS2V5SWQ/OiBzdHJpbmdcblVzZUF3c093bmVkS2V5OiBib29sZWFuXG59XG5leHBvcnQgaW50ZXJmYWNlIFRhZ3NFbnRyeSB7XG5WYWx1ZTogc3RyaW5nXG5LZXk6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBNYWludGVuYW5jZVdpbmRvdyB7XG5EYXlPZldlZWs6IHN0cmluZ1xuVGltZU9mRGF5OiBzdHJpbmdcblRpbWVab25lOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTG9nTGlzdCB7XG5BdWRpdD86IGJvb2xlYW5cbkdlbmVyYWw/OiBib29sZWFuXG59XG5leHBvcnQgaW50ZXJmYWNlIExkYXBTZXJ2ZXJNZXRhZGF0YSB7XG5Ib3N0czogc3RyaW5nW11cblVzZXJSb2xlTmFtZT86IHN0cmluZ1xuVXNlclNlYXJjaE1hdGNoaW5nOiBzdHJpbmdcblJvbGVOYW1lPzogc3RyaW5nXG5Vc2VyQmFzZTogc3RyaW5nXG5Vc2VyU2VhcmNoU3VidHJlZT86IGJvb2xlYW5cblJvbGVTZWFyY2hNYXRjaGluZzogc3RyaW5nXG5TZXJ2aWNlQWNjb3VudFVzZXJuYW1lOiBzdHJpbmdcblJvbGVCYXNlOiBzdHJpbmdcblNlcnZpY2VBY2NvdW50UGFzc3dvcmQ6IHN0cmluZ1xuUm9sZVNlYXJjaFN1YnRyZWU/OiBib29sZWFuXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFtYXpvbm1xLWJyb2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hbWF6b25tcS1icm9rZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgVHlwZSBkZWZpbml0aW9uIGZvciBBV1M6OkFtYXpvbk1ROjpCcm9rZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FNQVpPTk1RX0JST0tFUiB7XG5TZWN1cml0eUdyb3Vwcz86IHN0cmluZ1tdXG5EYXRhUmVwbGljYXRpb25QcmltYXJ5QnJva2VyQXJuPzogc3RyaW5nXG5Db25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbklkXG5BdXRoZW50aWNhdGlvblN0cmF0ZWd5Pzogc3RyaW5nXG5Vc2VyczogVXNlcltdXG5TdWJuZXRJZHM/OiBzdHJpbmdbXVxuU3RvbXBFbmRwb2ludHM/OiBzdHJpbmdbXVxuTXF0dEVuZHBvaW50cz86IHN0cmluZ1tdXG5BbXFwRW5kcG9pbnRzPzogc3RyaW5nW11cbkRlcGxveW1lbnRNb2RlOiBzdHJpbmdcbkVuZ2luZVR5cGU6IHN0cmluZ1xuRW5jcnlwdGlvbk9wdGlvbnM/OiBFbmNyeXB0aW9uT3B0aW9uc1xuVGFncz86IFRhZ3NFbnRyeVtdXG5Db25maWd1cmF0aW9uUmV2aXNpb24/OiBudW1iZXJcblN0b3JhZ2VUeXBlPzogc3RyaW5nXG5FbmdpbmVWZXJzaW9uPzogc3RyaW5nXG5NYWludGVuYW5jZVdpbmRvd1N0YXJ0VGltZT86IE1haW50ZW5hbmNlV2luZG93XG5Ib3N0SW5zdGFuY2VUeXBlOiBzdHJpbmdcbkF1dG9NaW5vclZlcnNpb25VcGdyYWRlPzogYm9vbGVhblxuTG9ncz86IExvZ0xpc3RcbkNvbmZpZ3VyYXRpb25JZD86IHN0cmluZ1xuRGF0YVJlcGxpY2F0aW9uTW9kZT86IHN0cmluZ1xuQnJva2VyTmFtZTogc3RyaW5nXG5Xc3NFbmRwb2ludHM/OiBzdHJpbmdbXVxuSXBBZGRyZXNzZXM/OiBzdHJpbmdbXVxuT3BlbldpcmVFbmRwb2ludHM/OiBzdHJpbmdbXVxuTGRhcFNlcnZlck1ldGFkYXRhPzogTGRhcFNlcnZlck1ldGFkYXRhXG5QdWJsaWNseUFjY2Vzc2libGU6IGJvb2xlYW5cbklkPzogc3RyaW5nXG5Bcm4/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlndXJhdGlvbklkIHtcblJldmlzaW9uOiBudW1iZXJcbklkOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG5SZXBsaWNhdGlvblVzZXI/OiBib29sZWFuXG5Vc2VybmFtZTogc3RyaW5nXG5Hcm91cHM/OiBzdHJpbmdbXVxuQ29uc29sZUFjY2Vzcz86IGJvb2xlYW5cbkpvbG9raWFBcGlBY2Nlc3M/OiBzdHJpbmdcblBhc3N3b3JkOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW5jcnlwdGlvbk9wdGlvbnMge1xuS21zS2V5SWQ/OiBzdHJpbmdcblVzZUF3c093bmVkS2V5OiBib29sZWFuXG59XG5leHBvcnQgaW50ZXJmYWNlIFRhZ3NFbnRyeSB7XG5WYWx1ZTogc3RyaW5nXG5LZXk6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBNYWludGVuYW5jZVdpbmRvdyB7XG5EYXlPZldlZWs6IHN0cmluZ1xuVGltZU9mRGF5OiBzdHJpbmdcblRpbWVab25lOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTG9nTGlzdCB7XG5BdWRpdD86IGJvb2xlYW5cbkdlbmVyYWw/OiBib29sZWFuXG59XG5leHBvcnQgaW50ZXJmYWNlIExkYXBTZXJ2ZXJNZXRhZGF0YSB7XG5Ib3N0czogc3RyaW5nW11cblVzZXJSb2xlTmFtZT86IHN0cmluZ1xuVXNlclNlYXJjaE1hdGNoaW5nOiBzdHJpbmdcblJvbGVOYW1lPzogc3RyaW5nXG5Vc2VyQmFzZTogc3RyaW5nXG5Vc2VyU2VhcmNoU3VidHJlZT86IGJvb2xlYW5cblJvbGVTZWFyY2hNYXRjaGluZzogc3RyaW5nXG5TZXJ2aWNlQWNjb3VudFVzZXJuYW1lOiBzdHJpbmdcblJvbGVCYXNlOiBzdHJpbmdcblNlcnZpY2VBY2NvdW50UGFzc3dvcmQ6IHN0cmluZ1xuUm9sZVNlYXJjaFN1YnRyZWU/OiBib29sZWFuXG59XG4iXX0=
@@ -36,6 +36,10 @@ export interface _AWS_APPCONFIG_CONFIGURATIONPROFILE {
36
36
  * The ARN of an IAM role with permission to access the configuration at the specified LocationUri.
37
37
  */
38
38
  RetrievalRoleArn?: string;
39
+ /**
40
+ * On resource deletion this controls whether the Deletion Protection check should be applied, bypassed, or (the default) whether the behavior should be controlled by the account-level Deletion Protection setting. See https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html
41
+ */
42
+ DeletionProtectionCheck?: ("ACCOUNT_DEFAULT" | "APPLY" | "BYPASS");
39
43
  /**
40
44
  * The application ID.
41
45
  */
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwcGNvbmZpZy1jb25maWd1cmF0aW9ucHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hcHBjb25maWctY29uZmlndXJhdGlvbnByb2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW4gZXhhbXBsZSByZXNvdXJjZSBzY2hlbWEgZGVtb25zdHJhdGluZyBzb21lIGJhc2ljIGNvbnN0cnVjdHMgYW5kIHZhbGlkYXRpb24gcnVsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19BUFBDT05GSUdfQ09ORklHVVJBVElPTlBST0ZJTEUge1xuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBwcm9maWxlIElEXG4gKi9cbkNvbmZpZ3VyYXRpb25Qcm9maWxlSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBVUkkgdG8gbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uLiBZb3UgY2FuIHNwZWNpZnkgdGhlIEFXUyBBcHBDb25maWcgaG9zdGVkIGNvbmZpZ3VyYXRpb24gc3RvcmUsIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBkb2N1bWVudCwgYW4gU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIsIG9yIGFuIEFtYXpvbiBTMyBvYmplY3QuXG4gKi9cbkxvY2F0aW9uVXJpOiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uZmlndXJhdGlvbnMgY29udGFpbmVkIGluIHRoZSBwcm9maWxlLiBXaGVuIGNhbGxpbmcgdGhpcyBBUEksIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBmb3IgVHlwZTogQVdTLkFwcENvbmZpZy5GZWF0dXJlRmxhZ3MsIEFXUy5GcmVlZm9ybVxuICovXG5UeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaWRlbnRpZmllciAoa2V5IElELCBrZXkgYWxpYXMsIG9yIGtleSBBUk4pIHByb3ZpZGVkIHdoZW4gdGhlIHJlc291cmNlIHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gKi9cbkttc0tleUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9maWxlLlxuICovXG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgb2YgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSB0byBlbmNyeXB0IG5ldyBjb25maWd1cmF0aW9uIGRhdGEgdmVyc2lvbnMgaW4gdGhlIEFXUyBBcHBDb25maWcgaG9zdGVkIGNvbmZpZ3VyYXRpb24gc3RvcmUuIFRoaXMgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCBmb3IgaG9zdGVkIGNvbmZpZ3VyYXRpb24gdHlwZXMuIFRvIGVuY3J5cHQgZGF0YSBtYW5hZ2VkIGluIG90aGVyIGNvbmZpZ3VyYXRpb24gc3RvcmVzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGhvdyB0byBzcGVjaWZ5IGFuIEFXUyBLTVMga2V5IGZvciB0aGF0IHBhcnRpY3VsYXIgc2VydmljZS5cbiAqL1xuS21zS2V5QXJuPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBtZXRob2RzIGZvciB2YWxpZGF0aW5nIHRoZSBjb25maWd1cmF0aW9uLlxuICogXG4gKiBAbWF4SXRlbXMgMlxuICovXG5WYWxpZGF0b3JzPzogVmFsaWRhdG9yc1tdXG4vKipcbiAqIFRoZSBBUk4gb2YgYW4gSUFNIHJvbGUgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGUgc3BlY2lmaWVkIExvY2F0aW9uVXJpLlxuICovXG5SZXRyaWV2YWxSb2xlQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBhcHBsaWNhdGlvbiBJRC5cbiAqL1xuQXBwbGljYXRpb25JZDogc3RyaW5nXG4vKipcbiAqIE1ldGFkYXRhIHRvIGFzc2lnbiB0byB0aGUgY29uZmlndXJhdGlvbiBwcm9maWxlLiBUYWdzIGhlbHAgb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgeW91ciBBV1MgQXBwQ29uZmlnIHJlc291cmNlcy4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuXG4gKi9cblRhZ3M/OiBUYWdzW11cbi8qKlxuICogQSBuYW1lIGZvciB0aGUgY29uZmlndXJhdGlvbiBwcm9maWxlLlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQSBsaXN0IG9mIG1ldGhvZHMgZm9yIHZhbGlkYXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9ycyB7XG4vKipcbiAqIEFXUyBBcHBDb25maWcgc3VwcG9ydHMgdmFsaWRhdG9ycyBvZiB0eXBlIEpTT05fU0NIRU1BIGFuZCBMQU1CREEuXG4gKi9cblR5cGU/OiBzdHJpbmdcbi8qKlxuICogRWl0aGVyIHRoZSBKU09OIFNjaGVtYSBjb250ZW50IG9yIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiBhbiBMYW1iZGEgZnVuY3Rpb24uXG4gKi9cbkNvbnRlbnQ/OiBzdHJpbmdcbn1cbi8qKlxuICogTWV0YWRhdGEgdG8gYXNzaWduIHRvIHRoZSBjb25maWd1cmF0aW9uIHByb2ZpbGUuIFRhZ3MgaGVscCBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSB5b3VyIEFXUyBBcHBDb25maWcgcmVzb3VyY2VzLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdzIHtcbi8qKlxuICogVGhlIHRhZyB2YWx1ZSBjYW4gYmUgdXAgdG8gMjU2IGNoYXJhY3RlcnMuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBrZXktdmFsdWUgc3RyaW5nIG1hcC4gVGhlIHRhZyBrZXkgY2FuIGJlIHVwIHRvIDEyOCBjaGFyYWN0ZXJzIGFuZCBtdXN0IG5vdCBzdGFydCB3aXRoIGF3czouXG4gKi9cbktleT86IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwcGNvbmZpZy1jb25maWd1cmF0aW9ucHJvZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hcHBjb25maWctY29uZmlndXJhdGlvbnByb2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW4gZXhhbXBsZSByZXNvdXJjZSBzY2hlbWEgZGVtb25zdHJhdGluZyBzb21lIGJhc2ljIGNvbnN0cnVjdHMgYW5kIHZhbGlkYXRpb24gcnVsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19BUFBDT05GSUdfQ09ORklHVVJBVElPTlBST0ZJTEUge1xuLyoqXG4gKiBUaGUgY29uZmlndXJhdGlvbiBwcm9maWxlIElEXG4gKi9cbkNvbmZpZ3VyYXRpb25Qcm9maWxlSWQ/OiBzdHJpbmdcbi8qKlxuICogQSBVUkkgdG8gbG9jYXRlIHRoZSBjb25maWd1cmF0aW9uLiBZb3UgY2FuIHNwZWNpZnkgdGhlIEFXUyBBcHBDb25maWcgaG9zdGVkIGNvbmZpZ3VyYXRpb24gc3RvcmUsIFN5c3RlbXMgTWFuYWdlciAoU1NNKSBkb2N1bWVudCwgYW4gU1NNIFBhcmFtZXRlciBTdG9yZSBwYXJhbWV0ZXIsIG9yIGFuIEFtYXpvbiBTMyBvYmplY3QuXG4gKi9cbkxvY2F0aW9uVXJpOiBzdHJpbmdcbi8qKlxuICogVGhlIHR5cGUgb2YgY29uZmlndXJhdGlvbnMgY29udGFpbmVkIGluIHRoZSBwcm9maWxlLiBXaGVuIGNhbGxpbmcgdGhpcyBBUEksIGVudGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBmb3IgVHlwZTogQVdTLkFwcENvbmZpZy5GZWF0dXJlRmxhZ3MsIEFXUy5GcmVlZm9ybVxuICovXG5UeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaWRlbnRpZmllciAoa2V5IElELCBrZXkgYWxpYXMsIG9yIGtleSBBUk4pIHByb3ZpZGVkIHdoZW4gdGhlIHJlc291cmNlIHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gKi9cbkttc0tleUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29uZmlndXJhdGlvbiBwcm9maWxlLlxuICovXG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgb2YgdGhlIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIGtleSB0byBlbmNyeXB0IG5ldyBjb25maWd1cmF0aW9uIGRhdGEgdmVyc2lvbnMgaW4gdGhlIEFXUyBBcHBDb25maWcgaG9zdGVkIGNvbmZpZ3VyYXRpb24gc3RvcmUuIFRoaXMgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCBmb3IgaG9zdGVkIGNvbmZpZ3VyYXRpb24gdHlwZXMuIFRvIGVuY3J5cHQgZGF0YSBtYW5hZ2VkIGluIG90aGVyIGNvbmZpZ3VyYXRpb24gc3RvcmVzLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGhvdyB0byBzcGVjaWZ5IGFuIEFXUyBLTVMga2V5IGZvciB0aGF0IHBhcnRpY3VsYXIgc2VydmljZS5cbiAqL1xuS21zS2V5QXJuPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBtZXRob2RzIGZvciB2YWxpZGF0aW5nIHRoZSBjb25maWd1cmF0aW9uLlxuICogXG4gKiBAbWF4SXRlbXMgMlxuICovXG5WYWxpZGF0b3JzPzogVmFsaWRhdG9yc1tdXG4vKipcbiAqIFRoZSBBUk4gb2YgYW4gSUFNIHJvbGUgd2l0aCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgY29uZmlndXJhdGlvbiBhdCB0aGUgc3BlY2lmaWVkIExvY2F0aW9uVXJpLlxuICovXG5SZXRyaWV2YWxSb2xlQXJuPzogc3RyaW5nXG4vKipcbiAqIE9uIHJlc291cmNlIGRlbGV0aW9uIHRoaXMgY29udHJvbHMgd2hldGhlciB0aGUgRGVsZXRpb24gUHJvdGVjdGlvbiBjaGVjayBzaG91bGQgYmUgYXBwbGllZCwgYnlwYXNzZWQsIG9yICh0aGUgZGVmYXVsdCkgd2hldGhlciB0aGUgYmVoYXZpb3Igc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGFjY291bnQtbGV2ZWwgRGVsZXRpb24gUHJvdGVjdGlvbiBzZXR0aW5nLiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwcGNvbmZpZy9sYXRlc3QvdXNlcmd1aWRlL2RlbGV0aW9uLXByb3RlY3Rpb24uaHRtbFxuICovXG5EZWxldGlvblByb3RlY3Rpb25DaGVjaz86IChcIkFDQ09VTlRfREVGQVVMVFwiIHwgXCJBUFBMWVwiIHwgXCJCWVBBU1NcIilcbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uIElELlxuICovXG5BcHBsaWNhdGlvbklkOiBzdHJpbmdcbi8qKlxuICogTWV0YWRhdGEgdG8gYXNzaWduIHRvIHRoZSBjb25maWd1cmF0aW9uIHByb2ZpbGUuIFRhZ3MgaGVscCBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSB5b3VyIEFXUyBBcHBDb25maWcgcmVzb3VyY2VzLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS5cbiAqL1xuVGFncz86IFRhZ3NbXVxuLyoqXG4gKiBBIG5hbWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHByb2ZpbGUuXG4gKi9cbk5hbWU6IHN0cmluZ1xufVxuLyoqXG4gKiBBIGxpc3Qgb2YgbWV0aG9kcyBmb3IgdmFsaWRhdGluZyB0aGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JzIHtcbi8qKlxuICogQVdTIEFwcENvbmZpZyBzdXBwb3J0cyB2YWxpZGF0b3JzIG9mIHR5cGUgSlNPTl9TQ0hFTUEgYW5kIExBTUJEQS5cbiAqL1xuVHlwZT86IHN0cmluZ1xuLyoqXG4gKiBFaXRoZXIgdGhlIEpTT04gU2NoZW1hIGNvbnRlbnQgb3IgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIGFuIExhbWJkYSBmdW5jdGlvbi5cbiAqL1xuQ29udGVudD86IHN0cmluZ1xufVxuLyoqXG4gKiBNZXRhZGF0YSB0byBhc3NpZ24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcHJvZmlsZS4gVGFncyBoZWxwIG9yZ2FuaXplIGFuZCBjYXRlZ29yaXplIHlvdXIgQVdTIEFwcENvbmZpZyByZXNvdXJjZXMuIEVhY2ggdGFnIGNvbnNpc3RzIG9mIGEga2V5IGFuZCBhbiBvcHRpb25hbCB2YWx1ZSwgYm90aCBvZiB3aGljaCB5b3UgZGVmaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ3Mge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlIGNhbiBiZSB1cCB0byAyNTYgY2hhcmFjdGVycy5cbiAqL1xuVmFsdWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGtleS12YWx1ZSBzdHJpbmcgbWFwLiBUaGUgdGFnIGtleSBjYW4gYmUgdXAgdG8gMTI4IGNoYXJhY3RlcnMgYW5kIG11c3Qgbm90IHN0YXJ0IHdpdGggYXdzOi5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4iXX0=
@@ -2,23 +2,59 @@
2
2
  * Resource Type definition for AWS::AppConfig::Deployment
3
3
  */
4
4
  export interface _AWS_APPCONFIG_DEPLOYMENT {
5
+ /**
6
+ * The deployment strategy ID.
7
+ */
5
8
  DeploymentStrategyId: string;
9
+ /**
10
+ * The configuration profile ID.
11
+ */
6
12
  ConfigurationProfileId: string;
13
+ /**
14
+ * The environment ID.
15
+ */
7
16
  EnvironmentId: string;
17
+ /**
18
+ * The AWS Key Management Service key identifier (key ID, key alias, or key ARN) provided when the resource was created or updated.
19
+ */
8
20
  KmsKeyIdentifier?: string;
21
+ /**
22
+ * A description of the deployment.
23
+ */
9
24
  Description?: string;
25
+ /**
26
+ * The configuration version to deploy. If deploying an AWS AppConfig hosted configuration version, you can specify either the version number or version label. For all other configurations, you must specify the version number.
27
+ */
10
28
  ConfigurationVersion: string;
11
- Id?: string;
29
+ /**
30
+ * The sequence number of the deployment.
31
+ */
32
+ DeploymentNumber?: string;
33
+ /**
34
+ * The application ID.
35
+ */
12
36
  ApplicationId: string;
13
37
  DynamicExtensionParameters?: DynamicExtensionParameters[];
14
- Tags?: Tags[];
38
+ /**
39
+ * An array of key-value pairs to apply to this resource.
40
+ */
41
+ Tags?: Tag[];
15
42
  }
16
43
  export interface DynamicExtensionParameters {
44
+ ParameterValue?: string;
17
45
  ExtensionReference?: string;
18
46
  ParameterName?: string;
19
- ParameterValue?: string;
20
47
  }
21
- export interface Tags {
48
+ /**
49
+ * Metadata to assign to the deployment. Tags help organize and categorize your AWS AppConfig resources. Each tag consists of a key and an optional value, both of which you define.
50
+ */
51
+ export interface Tag {
52
+ /**
53
+ * The tag value can be up to 256 characters.
54
+ */
22
55
  Value?: string;
56
+ /**
57
+ * The key-value string map. The valid character set is [a-zA-Z1-9+-=._:/]. The tag key can be up to 128 characters and must not start with aws:.
58
+ */
23
59
  Key?: string;
24
60
  }
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwcGNvbmZpZy1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWFwcGNvbmZpZy1kZXBsb3ltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpBcHBDb25maWc6OkRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FQUENPTkZJR19ERVBMT1lNRU5UIHtcbkRlcGxveW1lbnRTdHJhdGVneUlkOiBzdHJpbmdcbkNvbmZpZ3VyYXRpb25Qcm9maWxlSWQ6IHN0cmluZ1xuRW52aXJvbm1lbnRJZDogc3RyaW5nXG5LbXNLZXlJZGVudGlmaWVyPzogc3RyaW5nXG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuQ29uZmlndXJhdGlvblZlcnNpb246IHN0cmluZ1xuSWQ/OiBzdHJpbmdcbkFwcGxpY2F0aW9uSWQ6IHN0cmluZ1xuRHluYW1pY0V4dGVuc2lvblBhcmFtZXRlcnM/OiBEeW5hbWljRXh0ZW5zaW9uUGFyYW1ldGVyc1tdXG5UYWdzPzogVGFnc1tdXG59XG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNFeHRlbnNpb25QYXJhbWV0ZXJzIHtcbkV4dGVuc2lvblJlZmVyZW5jZT86IHN0cmluZ1xuUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xuUGFyYW1ldGVyVmFsdWU/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGFncyB7XG5WYWx1ZT86IHN0cmluZ1xuS2V5Pzogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwcGNvbmZpZy1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWFwcGNvbmZpZy1kZXBsb3ltZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc291cmNlIFR5cGUgZGVmaW5pdGlvbiBmb3IgQVdTOjpBcHBDb25maWc6OkRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FQUENPTkZJR19ERVBMT1lNRU5UIHtcbi8qKlxuICogVGhlIGRlcGxveW1lbnQgc3RyYXRlZ3kgSUQuXG4gKi9cbkRlcGxveW1lbnRTdHJhdGVneUlkOiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gcHJvZmlsZSBJRC5cbiAqL1xuQ29uZmlndXJhdGlvblByb2ZpbGVJZDogc3RyaW5nXG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCBJRC5cbiAqL1xuRW52aXJvbm1lbnRJZDogc3RyaW5nXG4vKipcbiAqIFRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSBrZXkgaWRlbnRpZmllciAoa2V5IElELCBrZXkgYWxpYXMsIG9yIGtleSBBUk4pIHByb3ZpZGVkIHdoZW4gdGhlIHJlc291cmNlIHdhcyBjcmVhdGVkIG9yIHVwZGF0ZWQuXG4gKi9cbkttc0tleUlkZW50aWZpZXI/OiBzdHJpbmdcbi8qKlxuICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgZGVwbG95bWVudC5cbiAqL1xuRGVzY3JpcHRpb24/OiBzdHJpbmdcbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb24gdmVyc2lvbiB0byBkZXBsb3kuIElmIGRlcGxveWluZyBhbiBBV1MgQXBwQ29uZmlnIGhvc3RlZCBjb25maWd1cmF0aW9uIHZlcnNpb24sIHlvdSBjYW4gc3BlY2lmeSBlaXRoZXIgdGhlIHZlcnNpb24gbnVtYmVyIG9yIHZlcnNpb24gbGFiZWwuIEZvciBhbGwgb3RoZXIgY29uZmlndXJhdGlvbnMsIHlvdSBtdXN0IHNwZWNpZnkgdGhlIHZlcnNpb24gbnVtYmVyLlxuICovXG5Db25maWd1cmF0aW9uVmVyc2lvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGRlcGxveW1lbnQuXG4gKi9cbkRlcGxveW1lbnROdW1iZXI/OiBzdHJpbmdcbi8qKlxuICogVGhlIGFwcGxpY2F0aW9uIElELlxuICovXG5BcHBsaWNhdGlvbklkOiBzdHJpbmdcbkR5bmFtaWNFeHRlbnNpb25QYXJhbWV0ZXJzPzogRHluYW1pY0V4dGVuc2lvblBhcmFtZXRlcnNbXVxuLyoqXG4gKiBBbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYXBwbHkgdG8gdGhpcyByZXNvdXJjZS5cbiAqL1xuVGFncz86IFRhZ1tdXG59XG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNFeHRlbnNpb25QYXJhbWV0ZXJzIHtcblBhcmFtZXRlclZhbHVlPzogc3RyaW5nXG5FeHRlbnNpb25SZWZlcmVuY2U/OiBzdHJpbmdcblBhcmFtZXRlck5hbWU/OiBzdHJpbmdcbn1cbi8qKlxuICogTWV0YWRhdGEgdG8gYXNzaWduIHRvIHRoZSBkZXBsb3ltZW50LiBUYWdzIGhlbHAgb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgeW91ciBBV1MgQXBwQ29uZmlnIHJlc291cmNlcy4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIHRhZyB2YWx1ZSBjYW4gYmUgdXAgdG8gMjU2IGNoYXJhY3RlcnMuXG4gKi9cblZhbHVlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBrZXktdmFsdWUgc3RyaW5nIG1hcC4gVGhlIHZhbGlkIGNoYXJhY3RlciBzZXQgaXMgW2EtekEtWjEtOSstPS5fOi9dLiBUaGUgdGFnIGtleSBjYW4gYmUgdXAgdG8gMTI4IGNoYXJhY3RlcnMgYW5kIG11c3Qgbm90IHN0YXJ0IHdpdGggYXdzOi5cbiAqL1xuS2V5Pzogc3RyaW5nXG59XG4iXX0=
@@ -17,6 +17,10 @@ export interface _AWS_APPCONFIG_ENVIRONMENT {
17
17
  * @maxItems 5
18
18
  */
19
19
  Monitors?: Monitor[];
20
+ /**
21
+ * On resource deletion this controls whether the Deletion Protection check should be applied, bypassed, or (the default) whether the behavior should be controlled by the account-level Deletion Protection setting. See https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html
22
+ */
23
+ DeletionProtectionCheck?: ("ACCOUNT_DEFAULT" | "APPLY" | "BYPASS");
20
24
  /**
21
25
  * The application ID.
22
26
  */
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwcGNvbmZpZy1lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hcHBjb25maWctZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgVHlwZSBkZWZpbml0aW9uIGZvciBBV1M6OkFwcENvbmZpZzo6RW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FQUENPTkZJR19FTlZJUk9OTUVOVCB7XG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCBJRC5cbiAqL1xuRW52aXJvbm1lbnRJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnZpcm9ubWVudC5cbiAqL1xuRGVzY3JpcHRpb24/OiBzdHJpbmdcbi8qKlxuICogQW1hem9uIENsb3VkV2F0Y2ggYWxhcm1zIHRvIG1vbml0b3IgZHVyaW5nIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKiBcbiAqIEBtaW5JdGVtcyAwXG4gKiBAbWF4SXRlbXMgNVxuICovXG5Nb25pdG9ycz86IE1vbml0b3JbXVxuLyoqXG4gKiBUaGUgYXBwbGljYXRpb24gSUQuXG4gKi9cbkFwcGxpY2F0aW9uSWQ6IHN0cmluZ1xuLyoqXG4gKiBNZXRhZGF0YSB0byBhc3NpZ24gdG8gdGhlIGVudmlyb25tZW50LiBUYWdzIGhlbHAgb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgeW91ciBBV1MgQXBwQ29uZmlnIHJlc291cmNlcy4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuXG4gKi9cblRhZ3M/OiBUYWdbXVxuLyoqXG4gKiBBIG5hbWUgZm9yIHRoZSBlbnZpcm9ubWVudC5cbiAqL1xuTmFtZTogc3RyaW5nXG59XG4vKipcbiAqIEFtYXpvbiBDbG91ZFdhdGNoIGFsYXJtIHRvIG1vbml0b3IgZHVyaW5nIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9uaXRvciB7XG4vKipcbiAqIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBBbWF6b24gQ2xvdWRXYXRjaCBhbGFybS5cbiAqL1xuQWxhcm1Bcm46IHN0cmluZ1xuLyoqXG4gKiBBUk4gb2YgYW4gQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlIGZvciBBV1MgQXBwQ29uZmlnIHRvIG1vbml0b3IgQWxhcm1Bcm4uXG4gKi9cbkFsYXJtUm9sZUFybj86IHN0cmluZ1xufVxuLyoqXG4gKiBNZXRhZGF0YSB0byBhc3NpZ24gdG8gdGhlIGVudmlyb25tZW50LiBUYWdzIGhlbHAgb3JnYW5pemUgYW5kIGNhdGVnb3JpemUgeW91ciBBV1MgQXBwQ29uZmlnIHJlc291cmNlcy4gRWFjaCB0YWcgY29uc2lzdHMgb2YgYSBrZXkgYW5kIGFuIG9wdGlvbmFsIHZhbHVlLCBib3RoIG9mIHdoaWNoIHlvdSBkZWZpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbi8qKlxuICogVGhlIHRhZyB2YWx1ZSBjYW4gYmUgdXAgdG8gMjU2IGNoYXJhY3RlcnMuXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIGtleS12YWx1ZSBzdHJpbmcgbWFwLiBUaGUgdmFsaWQgY2hhcmFjdGVyIHNldCBpcyBbYS16QS1aMS05Ky09Ll86L10uIFRoZSB0YWcga2V5IGNhbiBiZSB1cCB0byAxMjggY2hhcmFjdGVycyBhbmQgbXVzdCBub3Qgc3RhcnQgd2l0aCBhd3M6LlxuICovXG5LZXk6IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwcGNvbmZpZy1lbnZpcm9ubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hcHBjb25maWctZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzb3VyY2UgVHlwZSBkZWZpbml0aW9uIGZvciBBV1M6OkFwcENvbmZpZzo6RW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FQUENPTkZJR19FTlZJUk9OTUVOVCB7XG4vKipcbiAqIFRoZSBlbnZpcm9ubWVudCBJRC5cbiAqL1xuRW52aXJvbm1lbnRJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnZpcm9ubWVudC5cbiAqL1xuRGVzY3JpcHRpb24/OiBzdHJpbmdcbi8qKlxuICogQW1hem9uIENsb3VkV2F0Y2ggYWxhcm1zIHRvIG1vbml0b3IgZHVyaW5nIHRoZSBkZXBsb3ltZW50IHByb2Nlc3MuXG4gKiBcbiAqIEBtaW5JdGVtcyAwXG4gKiBAbWF4SXRlbXMgNVxuICovXG5Nb25pdG9ycz86IE1vbml0b3JbXVxuLyoqXG4gKiBPbiByZXNvdXJjZSBkZWxldGlvbiB0aGlzIGNvbnRyb2xzIHdoZXRoZXIgdGhlIERlbGV0aW9uIFByb3RlY3Rpb24gY2hlY2sgc2hvdWxkIGJlIGFwcGxpZWQsIGJ5cGFzc2VkLCBvciAodGhlIGRlZmF1bHQpIHdoZXRoZXIgdGhlIGJlaGF2aW9yIHNob3VsZCBiZSBjb250cm9sbGVkIGJ5IHRoZSBhY2NvdW50LWxldmVsIERlbGV0aW9uIFByb3RlY3Rpb24gc2V0dGluZy4gU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcHBjb25maWcvbGF0ZXN0L3VzZXJndWlkZS9kZWxldGlvbi1wcm90ZWN0aW9uLmh0bWxcbiAqL1xuRGVsZXRpb25Qcm90ZWN0aW9uQ2hlY2s/OiAoXCJBQ0NPVU5UX0RFRkFVTFRcIiB8IFwiQVBQTFlcIiB8IFwiQllQQVNTXCIpXG4vKipcbiAqIFRoZSBhcHBsaWNhdGlvbiBJRC5cbiAqL1xuQXBwbGljYXRpb25JZDogc3RyaW5nXG4vKipcbiAqIE1ldGFkYXRhIHRvIGFzc2lnbiB0byB0aGUgZW52aXJvbm1lbnQuIFRhZ3MgaGVscCBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSB5b3VyIEFXUyBBcHBDb25maWcgcmVzb3VyY2VzLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS5cbiAqL1xuVGFncz86IFRhZ1tdXG4vKipcbiAqIEEgbmFtZSBmb3IgdGhlIGVudmlyb25tZW50LlxuICovXG5OYW1lOiBzdHJpbmdcbn1cbi8qKlxuICogQW1hem9uIENsb3VkV2F0Y2ggYWxhcm0gdG8gbW9uaXRvciBkdXJpbmcgdGhlIGRlcGxveW1lbnQgcHJvY2Vzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yIHtcbi8qKlxuICogQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFtYXpvbiBDbG91ZFdhdGNoIGFsYXJtLlxuICovXG5BbGFybUFybjogc3RyaW5nXG4vKipcbiAqIEFSTiBvZiBhbiBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUgZm9yIEFXUyBBcHBDb25maWcgdG8gbW9uaXRvciBBbGFybUFybi5cbiAqL1xuQWxhcm1Sb2xlQXJuPzogc3RyaW5nXG59XG4vKipcbiAqIE1ldGFkYXRhIHRvIGFzc2lnbiB0byB0aGUgZW52aXJvbm1lbnQuIFRhZ3MgaGVscCBvcmdhbml6ZSBhbmQgY2F0ZWdvcml6ZSB5b3VyIEFXUyBBcHBDb25maWcgcmVzb3VyY2VzLiBFYWNoIHRhZyBjb25zaXN0cyBvZiBhIGtleSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUsIGJvdGggb2Ygd2hpY2ggeW91IGRlZmluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWcge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlIGNhbiBiZSB1cCB0byAyNTYgY2hhcmFjdGVycy5cbiAqL1xuVmFsdWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUga2V5LXZhbHVlIHN0cmluZyBtYXAuIFRoZSB2YWxpZCBjaGFyYWN0ZXIgc2V0IGlzIFthLXpBLVoxLTkrLT0uXzovXS4gVGhlIHRhZyBrZXkgY2FuIGJlIHVwIHRvIDEyOCBjaGFyYWN0ZXJzIGFuZCBtdXN0IG5vdCBzdGFydCB3aXRoIGF3czouXG4gKi9cbktleTogc3RyaW5nXG59XG4iXX0=
@@ -185,8 +185,17 @@ export interface LifecycleHookSpecification {
185
185
  */
186
186
  RoleARN?: string;
187
187
  }
188
+ /**
189
+ * The Availability Zone impairment policy.
190
+ */
188
191
  export interface AvailabilityZoneImpairmentPolicy {
192
+ /**
193
+ * If ``true``, enable zonal shift for your Auto Scaling group.
194
+ */
189
195
  ZonalShiftEnabled: boolean;
196
+ /**
197
+ * Specifies the health check behavior for the impaired Availability Zone in an active zonal shift. If you select ``Replace unhealthy``, instances that appear unhealthy will be replaced in all Availability Zones. If you select ``Ignore unhealthy``, instances will not be replaced in the Availability Zone with the active zonal shift. For more information, see [Auto Scaling group zonal shift](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-zonal-shift.html) in the *Amazon EC2 Auto Scaling User Guide*.
198
+ */
190
199
  ImpairedZoneHealthCheckBehavior: ("IgnoreUnhealthy" | "ReplaceUnhealthy");
191
200
  }
192
201
  /**
@@ -668,7 +677,15 @@ export interface NotificationConfiguration1 {
668
677
  */
669
678
  NotificationTypes?: string[];
670
679
  }
680
+ /**
681
+ * The instance capacity distribution across Availability Zones.
682
+ */
671
683
  export interface AvailabilityZoneDistribution {
684
+ /**
685
+ * If launches fail in an Availability Zone, the following strategies are available. The default is ``balanced-best-effort``.
686
+ * + ``balanced-only`` - If launches fail in an Availability Zone, Auto Scaling will continue to attempt to launch in the unhealthy zone to preserve a balanced distribution.
687
+ * + ``balanced-best-effort`` - If launches fail in an Availability Zone, Auto Scaling will attempt to launch in another healthy Availability Zone instead.
688
+ */
672
689
  CapacityDistributionStrategy?: ("balanced-best-effort" | "balanced-only");
673
690
  }
674
691
  /**
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VTZXRSZXF1ZXN0ID0gUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VSZXF1ZXN0W11cbmV4cG9ydCB0eXBlIENhcGFjaXR5UmVzZXJ2YXRpb25JZHMgPSBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgQ2FwYWNpdHlSZXNlcnZhdGlvblJlc291cmNlR3JvdXBBcm5zID0gc3RyaW5nW11cblxuLyoqXG4gKiBUaGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UgZGVmaW5lcyBhbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cCwgd2hpY2ggaXMgYSBjb2xsZWN0aW9uIG9mIEFtYXpvbiBFQzIgaW5zdGFuY2VzIHRoYXQgYXJlIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGdyb3VwaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgYXV0b21hdGljIHNjYWxpbmcgYW5kIG1hbmFnZW1lbnQuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nLCBzZWUgdGhlIFtBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS93aGF0LWlzLWFtYXpvbi1lYzItYXV0by1zY2FsaW5nLmh0bWwpLiBcbiAqICAgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgY29uZmlndXJlcyBpbnN0YW5jZXMgbGF1bmNoZWQgYXMgcGFydCBvZiBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgZWl0aGVyIGEgW2xhdW5jaCB0ZW1wbGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1sYXVuY2h0ZW1wbGF0ZS5odG1sKSBvciBhIGxhdW5jaCBjb25maWd1cmF0aW9uLiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3UgZG8gbm90IHVzZSBsYXVuY2ggY29uZmlndXJhdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0xhdW5jaCBjb25maWd1cmF0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbGF1bmNoLWNvbmZpZ3VyYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgRm9yIGhlbHAgbWlncmF0aW5nIGZyb20gbGF1bmNoIGNvbmZpZ3VyYXRpb25zIHRvIGxhdW5jaCB0ZW1wbGF0ZXMsIHNlZSBbTWlncmF0ZSBDbG91ZEZvcm1hdGlvbiBzdGFja3MgZnJvbSBsYXVuY2ggY29uZmlndXJhdGlvbnMgdG8gbGF1bmNoIHRlbXBsYXRlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbWlncmF0ZS1sYXVuY2gtY29uZmlndXJhdGlvbnMtd2l0aC1jbG91ZGZvcm1hdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfQVVUT1NDQUxJTkdfQVVUT1NDQUxJTkdHUk9VUCB7XG4vKipcbiAqIE9uZSBvciBtb3JlIGxpZmVjeWNsZSBob29rcyB0byBhZGQgdG8gdGhlIEF1dG8gU2NhbGluZyBncm91cCBiZWZvcmUgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZC5cbiAqL1xuTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25MaXN0PzogTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBBIGxpc3Qgb2YgQ2xhc3NpYyBMb2FkIEJhbGFuY2VycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBdXRvIFNjYWxpbmcgZ3JvdXAuIEZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycywgTmV0d29yayBMb2FkIEJhbGFuY2VycywgYW5kIEdhdGV3YXkgTG9hZCBCYWxhbmNlcnMsIHNwZWNpZnkgdGhlIGBgVGFyZ2V0R3JvdXBBUk5zYGAgcHJvcGVydHkgaW5zdGVhZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHRvIGxhdW5jaCBpbnN0YW5jZXMuXG4gKiAgUmVxdWlyZWQgb25seSBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBgYExhdW5jaFRlbXBsYXRlYGAsIGBgTWl4ZWRJbnN0YW5jZXNQb2xpY3lgYCwgb3IgYGBJbnN0YW5jZUlkYGAuXG4gKi9cbkxhdW5jaENvbmZpZ3VyYXRpb25OYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNlcyB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlIG9uIHlvdXIgYmVoYWxmLiBCeSBkZWZhdWx0LCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB1c2VzIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBgYEFXU1NlcnZpY2VSb2xlRm9yQXV0b1NjYWxpbmdgYCwgd2hpY2ggaXQgY3JlYXRlcyBpZiBpdCBkb2VzIG5vdCBleGlzdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZS1saW5rZWQgcm9sZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2F1dG9zY2FsaW5nLXNlcnZpY2UtbGlua2VkLXJvbGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuU2VydmljZUxpbmtlZFJvbGVBUk4/OiBzdHJpbmdcbkF2YWlsYWJpbGl0eVpvbmVJbXBhaXJtZW50UG9saWN5PzogQXZhaWxhYmlsaXR5Wm9uZUltcGFpcm1lbnRQb2xpY3lcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lcyAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIEluc3RhbmNlcyBhcmUgcmVnaXN0ZXJlZCBhcyB0YXJnZXRzIHdpdGggdGhlIHRhcmdldCBncm91cHMuIFRoZSB0YXJnZXQgZ3JvdXBzIHJlY2VpdmUgaW5jb21pbmcgdHJhZmZpYyBhbmQgcm91dGUgcmVxdWVzdHMgdG8gb25lIG9yIG1vcmUgcmVnaXN0ZXJlZCB0YXJnZXRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2UgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byBkaXN0cmlidXRlIHRyYWZmaWMgYWNyb3NzIHRoZSBpbnN0YW5jZXMgaW4geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2F1dG9zY2FsaW5nLWxvYWQtYmFsYW5jZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuVGFyZ2V0R3JvdXBBUk5zPzogc3RyaW5nW11cbi8qKlxuICogKk9ubHkgbmVlZGVkIGlmIHlvdSB1c2Ugc2ltcGxlIHNjYWxpbmcgcG9saWNpZXMuKiBcbiAqICBUaGUgYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIGJldHdlZW4gb25lIHNjYWxpbmcgYWN0aXZpdHkgZW5kaW5nIGFuZCBhbm90aGVyIG9uZSBzdGFydGluZyBkdWUgdG8gc2ltcGxlIHNjYWxpbmcgcG9saWNpZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NjYWxpbmcgY29vbGRvd25zIGZvciBBbWF6b24gRUMyIEF1dG8gU2NhbGluZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1zY2FsaW5nLWNvb2xkb3ducy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICogIERlZmF1bHQ6IGBgMzAwYGAgc2Vjb25kc1xuICovXG5Db29sZG93bj86IHN0cmluZ1xuLyoqXG4gKiBDb25maWd1cmVzIGFuIEF1dG8gU2NhbGluZyBncm91cCB0byBzZW5kIG5vdGlmaWNhdGlvbnMgd2hlbiBzcGVjaWZpZWQgZXZlbnRzIHRha2UgcGxhY2UuXG4gKi9cbk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zPzogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBkZXNpcmVkIGNhcGFjaXR5IGlzIHRoZSBpbml0aWFsIGNhcGFjaXR5IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgYXQgdGhlIHRpbWUgb2YgaXRzIGNyZWF0aW9uIGFuZCB0aGUgY2FwYWNpdHkgaXQgYXR0ZW1wdHMgdG8gbWFpbnRhaW4uIEl0IGNhbiBzY2FsZSBiZXlvbmQgdGhpcyBjYXBhY2l0eSBpZiB5b3UgY29uZmlndXJlIGF1dG9tYXRpYyBzY2FsaW5nLlxuICogIFRoZSBudW1iZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBncm91cC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgZGVzaXJlZCBjYXBhY2l0eSB3aGVuIGNyZWF0aW5nIHRoZSBzdGFjaywgdGhlIGRlZmF1bHQgaXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAuXG4gKiAgQ2xvdWRGb3JtYXRpb24gbWFya3MgdGhlIEF1dG8gU2NhbGluZyBncm91cCBhcyBzdWNjZXNzZnVsIChieSBzZXR0aW5nIGl0cyBzdGF0dXMgdG8gQ1JFQVRFX0NPTVBMRVRFKSB3aGVuIHRoZSBkZXNpcmVkIGNhcGFjaXR5IGlzIHJlYWNoZWQuIEhvd2V2ZXIsIGlmIGEgbWF4aW11bSBTcG90IHByaWNlIGlzIHNldCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlIG9yIGxhdW5jaCBjb25maWd1cmF0aW9uIHRoYXQgeW91IHNwZWNpZmllZCwgdGhlbiBkZXNpcmVkIGNhcGFjaXR5IGlzIG5vdCB1c2VkIGFzIGEgY3JpdGVyaWEgZm9yIHN1Y2Nlc3MuIFdoZXRoZXIgeW91ciByZXF1ZXN0IGlzIGZ1bGZpbGxlZCBkZXBlbmRzIG9uIFNwb3QgSW5zdGFuY2UgY2FwYWNpdHkgYW5kIHlvdXIgbWF4aW11bSBwcmljZS5cbiAqL1xuRGVzaXJlZENhcGFjaXR5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3YWl0cyBiZWZvcmUgY2hlY2tpbmcgdGhlIGhlYWx0aCBzdGF0dXMgb2YgYW4gRUMyIGluc3RhbmNlIHRoYXQgaGFzIGNvbWUgaW50byBzZXJ2aWNlIGFuZCBtYXJraW5nIGl0IHVuaGVhbHRoeSBkdWUgdG8gYSBmYWlsZWQgaGVhbHRoIGNoZWNrLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGluc3RhbmNlcyBkbyBub3QgaW1tZWRpYXRlbHkgcGFzcyB0aGVpciBoZWFsdGggY2hlY2tzIGFmdGVyIHRoZXkgZW50ZXIgdGhlIGBgSW5TZXJ2aWNlYGAgc3RhdGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NldCB0aGUgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgRGVmYXVsdDogYGAwYGAgc2Vjb25kc1xuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgdW50aWwgYSBuZXcgaW5zdGFuY2UgaXMgY29uc2lkZXJlZCB0byBoYXZlIGZpbmlzaGVkIGluaXRpYWxpemluZyBhbmQgcmVzb3VyY2UgY29uc3VtcHRpb24gdG8gYmVjb21lIHN0YWJsZSBhZnRlciBpdCBlbnRlcnMgdGhlIGBgSW5TZXJ2aWNlYGAgc3RhdGUuIFxuICogIER1cmluZyBhbiBpbnN0YW5jZSByZWZyZXNoLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3YWl0cyBmb3IgdGhlIHdhcm0tdXAgcGVyaW9kIGFmdGVyIGl0IHJlcGxhY2VzIGFuIGluc3RhbmNlIGJlZm9yZSBpdCBtb3ZlcyBvbiB0byByZXBsYWNpbmcgdGhlIG5leHQgaW5zdGFuY2UuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGFsc28gd2FpdHMgZm9yIHRoZSB3YXJtLXVwIHBlcmlvZCBiZWZvcmUgYWdncmVnYXRpbmcgdGhlIG1ldHJpY3MgZm9yIG5ldyBpbnN0YW5jZXMgd2l0aCBleGlzdGluZyBpbnN0YW5jZXMgaW4gdGhlIEFtYXpvbiBDbG91ZFdhdGNoIG1ldHJpY3MgdGhhdCBhcmUgdXNlZCBmb3Igc2NhbGluZywgcmVzdWx0aW5nIGluIG1vcmUgcmVsaWFibGUgdXNhZ2UgZGF0YS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2V0IHRoZSBkZWZhdWx0IGluc3RhbmNlIHdhcm11cCBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWRlZmF1bHQtaW5zdGFuY2Utd2FybXVwLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgIFRvIG1hbmFnZSB2YXJpb3VzIHdhcm0tdXAgc2V0dGluZ3MgYXQgdGhlIGdyb3VwIGxldmVsLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc2V0IHRoZSBkZWZhdWx0IGluc3RhbmNlIHdhcm11cCwgKmV2ZW4gaWYgaXQgaXMgc2V0IHRvIDAgc2Vjb25kcyouIFRvIHJlbW92ZSBhIHZhbHVlIHRoYXQgeW91IHByZXZpb3VzbHkgc2V0LCBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBidXQgc3BlY2lmeSBgYC0xYGAgZm9yIHRoZSB2YWx1ZS4gSG93ZXZlciwgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIGtlZXBpbmcgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2FybXVwIGVuYWJsZWQgYnkgc3BlY2lmeWluZyBhIHZhbHVlIG9mIGBgMGBgIG9yIG90aGVyIG5vbWluYWwgdmFsdWUuXG4gKiAgIERlZmF1bHQ6IE5vbmVcbiAqL1xuRGVmYXVsdEluc3RhbmNlV2FybXVwPzogbnVtYmVyXG5Ta2lwWm9uYWxTaGlmdFZhbGlkYXRpb24/OiBib29sZWFuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIG5ld2x5IGxhdW5jaGVkIGluc3RhbmNlcyBhcmUgcHJvdGVjdGVkIGZyb20gdGVybWluYXRpb24gYnkgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2hlbiBzY2FsaW5nIGluLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwcmV2ZW50aW5nIGluc3RhbmNlcyBmcm9tIHRlcm1pbmF0aW5nIG9uIHNjYWxlIGluLCBzZWUgW1VzZSBpbnN0YW5jZSBzY2FsZS1pbiBwcm90ZWN0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWluc3RhbmNlLXByb3RlY3Rpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuTmV3SW5zdGFuY2VzUHJvdGVjdGVkRnJvbVNjYWxlSW4/OiBib29sZWFuXG5MYXVuY2hUZW1wbGF0ZT86IExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvblxuTWl4ZWRJbnN0YW5jZXNQb2xpY3k/OiBNaXhlZEluc3RhbmNlc1BvbGljeVxuLyoqXG4gKiBBIGxpc3Qgb2Ygc3VibmV0IElEcyBmb3IgYSB2aXJ0dWFsIHByaXZhdGUgY2xvdWQgKFZQQykgd2hlcmUgaW5zdGFuY2VzIGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FuIGJlIGNyZWF0ZWQuXG4gKiAgSWYgdGhpcyByZXNvdXJjZSBzcGVjaWZpZXMgcHVibGljIHN1Ym5ldHMgYW5kIGlzIGFsc28gaW4gYSBWUEMgdGhhdCBpcyBkZWZpbmVkIGluIHRoZSBzYW1lIHN0YWNrIHRlbXBsYXRlLCB5b3UgbXVzdCB1c2UgdGhlIFtEZXBlbmRzT24gYXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLWRlcGVuZHNvbi5odG1sKSB0byBkZWNsYXJlIGEgZGVwZW5kZW5jeSBvbiB0aGUgW1ZQQy1nYXRld2F5IGF0dGFjaG1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBjLWdhdGV3YXktYXR0YWNobWVudC5odG1sKS5cbiAqICAgV2hlbiB5b3UgdXBkYXRlIGBgVlBDWm9uZUlkZW50aWZpZXJgYCwgdGhpcyByZXRhaW5zIHRoZSBzYW1lIEF1dG8gU2NhbGluZyBncm91cCBhbmQgcmVwbGFjZXMgb2xkIGluc3RhbmNlcyB3aXRoIG5ldyBvbmVzLCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBzdWJuZXRzLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBob3cgQ2xvdWRGb3JtYXRpb24gaGFuZGxlcyB0aGVzZSB1cGRhdGVzIGJ5IHVzaW5nIGFuIFtVcGRhdGVQb2xpY3kgYXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLXVwZGF0ZXBvbGljeS5odG1sKS5cbiAqICAgUmVxdWlyZWQgdG8gbGF1bmNoIGluc3RhbmNlcyBpbnRvIGEgbm9uZGVmYXVsdCBWUEMuIElmIHlvdSBzcGVjaWZ5IGBgVlBDWm9uZUlkZW50aWZpZXJgYCB3aXRoIGBgQXZhaWxhYmlsaXR5Wm9uZXNgYCwgdGhlIHN1Ym5ldHMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgdGhpcyBwcm9wZXJ0eSBtdXN0IHJlc2lkZSBpbiB0aG9zZSBBdmFpbGFiaWxpdHkgWm9uZXMuXG4gKi9cblZQQ1pvbmVJZGVudGlmaWVyPzogc3RyaW5nW11cbi8qKlxuICogT25lIG9yIG1vcmUgdGFncy4gWW91IGNhbiB0YWcgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgYW5kIHByb3BhZ2F0ZSB0aGUgdGFncyB0byB0aGUgQW1hem9uIEVDMiBpbnN0YW5jZXMgaXQgbGF1bmNoZXMuIFRhZ3MgYXJlIG5vdCBwcm9wYWdhdGVkIHRvIEFtYXpvbiBFQlMgdm9sdW1lcy4gVG8gYWRkIHRhZ3MgdG8gQW1hem9uIEVCUyB2b2x1bWVzLCBzcGVjaWZ5IHRoZSB0YWdzIGluIGEgbGF1bmNoIHRlbXBsYXRlIGJ1dCB1c2UgY2F1dGlvbi4gSWYgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBzcGVjaWZpZXMgYW4gaW5zdGFuY2UgdGFnIHdpdGggYSBrZXkgdGhhdCBpcyBhbHNvIHNwZWNpZmllZCBmb3IgdGhlIEF1dG8gU2NhbGluZyBncm91cCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGF0IGluc3RhbmNlIHRhZyB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIEF1dG8gU2NhbGluZyBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy10YWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cblRhZ3M/OiBUYWdQcm9wZXJ0eVtdXG4vKipcbiAqIFJlc2VydmVkLlxuICovXG5Db250ZXh0Pzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIENhcGFjaXR5IFJlYmFsYW5jaW5nIGlzIGVuYWJsZWQuIE90aGVyd2lzZSwgQ2FwYWNpdHkgUmViYWxhbmNpbmcgaXMgZGlzYWJsZWQuIFdoZW4geW91IHR1cm4gb24gQ2FwYWNpdHkgUmViYWxhbmNpbmcsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGF0dGVtcHRzIHRvIGxhdW5jaCBhIFNwb3QgSW5zdGFuY2Ugd2hlbmV2ZXIgQW1hem9uIEVDMiBub3RpZmllcyB0aGF0IGEgU3BvdCBJbnN0YW5jZSBpcyBhdCBhbiBlbGV2YXRlZCByaXNrIG9mIGludGVycnVwdGlvbi4gQWZ0ZXIgbGF1bmNoaW5nIGEgbmV3IGluc3RhbmNlLCBpdCB0aGVuIHRlcm1pbmF0ZXMgYW4gb2xkIGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2UgQ2FwYWNpdHkgUmViYWxhbmNpbmcgdG8gaGFuZGxlIEFtYXpvbiBFQzIgU3BvdCBJbnRlcnJ1cHRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWNhcGFjaXR5LXJlYmFsYW5jaW5nLmh0bWwpIGluIHRoZSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5DYXBhY2l0eVJlYmFsYW5jZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIElEIG9mIHRoZSBpbnN0YW5jZSB1c2VkIHRvIGJhc2UgdGhlIGxhdW5jaCBjb25maWd1cmF0aW9uIG9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGUgYW4gQXV0byBTY2FsaW5nIGdyb3VwIHVzaW5nIGFuIEVDMiBpbnN0YW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvY3JlYXRlLWFzZy1mcm9tLWluc3RhbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgSWYgeW91IHNwZWNpZnkgYGBMYXVuY2hUZW1wbGF0ZWBgLCBgYE1peGVkSW5zdGFuY2VzUG9saWN5YGAsIG9yIGBgTGF1bmNoQ29uZmlndXJhdGlvbk5hbWVgYCwgZG9uJ3Qgc3BlY2lmeSBgYEluc3RhbmNlSWRgYC5cbiAqL1xuSW5zdGFuY2VJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmVzIHdoZXJlIGluc3RhbmNlcyBpbiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGNhbiBiZSBjcmVhdGVkLiBVc2VkIGZvciBsYXVuY2hpbmcgaW50byB0aGUgZGVmYXVsdCBWUEMgc3VibmV0IGluIGVhY2ggQXZhaWxhYmlsaXR5IFpvbmUgd2hlbiBub3QgdXNpbmcgdGhlIGBgVlBDWm9uZUlkZW50aWZpZXJgYCBwcm9wZXJ0eSwgb3IgZm9yIGF0dGFjaGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlIHdoZW4gYW4gZXhpc3RpbmcgbmV0d29yayBpbnRlcmZhY2UgSUQgaXMgc3BlY2lmaWVkIGluIGEgbGF1bmNoIHRlbXBsYXRlLlxuICovXG5BdmFpbGFiaWxpdHlab25lcz86IHN0cmluZ1tdXG5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uPzogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbjFcbkF2YWlsYWJpbGl0eVpvbmVEaXN0cmlidXRpb24/OiBBdmFpbGFiaWxpdHlab25lRGlzdHJpYnV0aW9uXG4vKipcbiAqIEVuYWJsZXMgdGhlIG1vbml0b3Jpbmcgb2YgZ3JvdXAgbWV0cmljcyBvZiBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAuIEJ5IGRlZmF1bHQsIHRoZXNlIG1ldHJpY3MgYXJlIGRpc2FibGVkLlxuICovXG5NZXRyaWNzQ29sbGVjdGlvbj86IE1ldHJpY3NDb2xsZWN0aW9uW11cbkluc3RhbmNlTWFpbnRlbmFuY2VQb2xpY3k/OiBJbnN0YW5jZU1haW50ZW5hbmNlUG9saWN5XG4vKipcbiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGdyb3VwLlxuICogICBXaXRoIGEgbWl4ZWQgaW5zdGFuY2VzIHBvbGljeSB0aGF0IHVzZXMgaW5zdGFuY2Ugd2VpZ2h0aW5nLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBtYXkgbmVlZCB0byBnbyBhYm92ZSBgYE1heFNpemVgYCB0byBtZWV0IHlvdXIgY2FwYWNpdHkgcmVxdWlyZW1lbnRzLiBJbiB0aGlzIGV2ZW50LCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIG5ldmVyIGdvIGFib3ZlIGBgTWF4U2l6ZWBgIGJ5IG1vcmUgdGhhbiB5b3VyIGxhcmdlc3QgaW5zdGFuY2Ugd2VpZ2h0ICh3ZWlnaHRzIHRoYXQgZGVmaW5lIGhvdyBtYW55IHVuaXRzIGVhY2ggaW5zdGFuY2UgY29udHJpYnV0ZXMgdG8gdGhlIGRlc2lyZWQgY2FwYWNpdHkgb2YgdGhlIGdyb3VwKS5cbiAqL1xuTWF4U2l6ZTogc3RyaW5nXG4vKipcbiAqIFRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIGdyb3VwLlxuICovXG5NaW5TaXplOiBzdHJpbmdcbi8qKlxuICogQSBwb2xpY3kgb3IgYSBsaXN0IG9mIHBvbGljaWVzIHRoYXQgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBpbnN0YW5jZSB0byB0ZXJtaW5hdGUuIFRoZXNlIHBvbGljaWVzIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhhdCB5b3UgbGlzdCB0aGVtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb25maWd1cmUgdGVybWluYXRpb24gcG9saWNpZXMgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLXRlcm1pbmF0aW9uLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgdmFsdWVzOiBgYERlZmF1bHRgYCB8IGBgQWxsb2NhdGlvblN0cmF0ZWd5YGAgfCBgYENsb3Nlc3RUb05leHRJbnN0YW5jZUhvdXJgYCB8IGBgTmV3ZXN0SW5zdGFuY2VgYCB8IGBgT2xkZXN0SW5zdGFuY2VgYCB8IGBgT2xkZXN0TGF1bmNoQ29uZmlndXJhdGlvbmBgIHwgYGBPbGRlc3RMYXVuY2hUZW1wbGF0ZWBgIHwgYGBhcm46YXdzOmxhbWJkYTpyZWdpb246YWNjb3VudC1pZDpmdW5jdGlvbjpteS1mdW5jdGlvbjpteS1hbGlhc2BgXG4gKi9cblRlcm1pbmF0aW9uUG9saWNpZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgcGVyIFJlZ2lvbiBwZXIgYWNjb3VudC5cbiAqICBUaGUgbmFtZSBjYW4gY29udGFpbiBhbnkgQVNDSUkgY2hhcmFjdGVyIDMzIHRvIDEyNiBpbmNsdWRpbmcgbW9zdCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLCBkaWdpdHMsIGFuZCB1cHBlciBhbmQgbG93ZXJjYXNlZCBsZXR0ZXJzLlxuICogICBZb3UgY2Fubm90IHVzZSBhIGNvbG9uICg6KSBpbiB0aGUgbmFtZS5cbiAqL1xuQXV0b1NjYWxpbmdHcm91cE5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRyYWZmaWMgc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cblRyYWZmaWNTb3VyY2VzPzogVHJhZmZpY1NvdXJjZUlkZW50aWZpZXJbXVxuLyoqXG4gKiBUaGUgdW5pdCBvZiBtZWFzdXJlbWVudCBmb3IgdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgZGVzaXJlZCBjYXBhY2l0eS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc3VwcG9ydHMgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgZm9yIGF0dHJpYnV0ZS1iYXNlZCBpbnN0YW5jZSB0eXBlIHNlbGVjdGlvbiBvbmx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGUgYSBtaXhlZCBpbnN0YW5jZXMgZ3JvdXAgdXNpbmcgYXR0cmlidXRlLWJhc2VkIGluc3RhbmNlIHR5cGUgc2VsZWN0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9jcmVhdGUtbWl4ZWQtaW5zdGFuY2VzLWdyb3VwLWF0dHJpYnV0ZS1iYXNlZC1pbnN0YW5jZS10eXBlLXNlbGVjdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICogIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNwZWNpZmllcyBgYHVuaXRzYGAsIHdoaWNoIHRyYW5zbGF0ZXMgaW50byBudW1iZXIgb2YgaW5zdGFuY2VzLlxuICogIFZhbGlkIHZhbHVlczogYGB1bml0c2BgIHwgYGB2Y3B1YGAgfCBgYG1lbW9yeS1taWJgYFxuICovXG5EZXNpcmVkQ2FwYWNpdHlUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwbGFjZW1lbnQgZ3JvdXAgaW50byB3aGljaCB0byBsYXVuY2ggeW91ciBpbnN0YW5jZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BsYWNlbWVudCBncm91cHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9wbGFjZW1lbnQtZ3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlIGZvciBMaW51eCBJbnN0YW5jZXMqLlxuICogICBBICpjbHVzdGVyKiBwbGFjZW1lbnQgZ3JvdXAgaXMgYSBsb2dpY2FsIGdyb3VwaW5nIG9mIGluc3RhbmNlcyB3aXRoaW4gYSBzaW5nbGUgQXZhaWxhYmlsaXR5IFpvbmUuIFlvdSBjYW5ub3Qgc3BlY2lmeSBtdWx0aXBsZSBBdmFpbGFiaWxpdHkgWm9uZXMgYW5kIGEgY2x1c3RlciBwbGFjZW1lbnQgZ3JvdXAuXG4gKi9cblBsYWNlbWVudEdyb3VwPzogc3RyaW5nXG5DYXBhY2l0eVJlc2VydmF0aW9uU3BlY2lmaWNhdGlvbj86IENhcGFjaXR5UmVzZXJ2YXRpb25TcGVjaWZpY2F0aW9uXG4vKipcbiAqIEEgY29tbWEtc2VwYXJhdGVkIHZhbHVlIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBoZWFsdGggY2hlY2sgdHlwZXMuXG4gKiAgVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBFQzJgYCwgYGBFQlNgYCwgYGBFTEJgYCwgYW5kIGBgVlBDX0xBVFRJQ0VgYC4gYGBFQzJgYCBpcyB0aGUgZGVmYXVsdCBoZWFsdGggY2hlY2sgYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSGVhbHRoIGNoZWNrcyBmb3IgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1oZWFsdGgtY2hlY2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgT25seSBzcGVjaWZ5IGBgRUMyYGAgaWYgeW91IG11c3QgY2xlYXIgYSB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IHNldC5cbiAqL1xuSGVhbHRoQ2hlY2tUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IGFuIGluc3RhbmNlIGNhbiBiZSBpbiBzZXJ2aWNlLiBUaGUgZGVmYXVsdCBpcyBudWxsLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIGVpdGhlciAwIG9yIGEgbnVtYmVyIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA4Niw0MDAgc2Vjb25kcyAoMSBkYXkpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXBsYWNlIEF1dG8gU2NhbGluZyBpbnN0YW5jZXMgYmFzZWQgb24gbWF4aW11bSBpbnN0YW5jZSBsaWZldGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXNnLW1heC1pbnN0YW5jZS1saWZldGltZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5NYXhJbnN0YW5jZUxpZmV0aW1lPzogbnVtYmVyXG59XG4vKipcbiAqIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25gYCBzcGVjaWZpZXMgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhlIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25MaXN0YGAgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS4gQSBsaWZlY3ljbGUgaG9vayBzcGVjaWZpZXMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgb3IgdGVybWluYXRlcyBpbnN0YW5jZXMuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxpZmVjeWNsZSBob29rc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFlvdSBjYW4gZmluZCBhIHNhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0IGluIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hcy1saWZlY3ljbGVob29rLmh0bWwjYXdzLXJlc291cmNlLWFzLWxpZmVjeWNsZWhvb2stLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkxpZmVjeWNsZUhvb2tgYCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsaWZlY3ljbGUgaG9vay5cbiAqL1xuTGlmZWN5Y2xlSG9va05hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZWN5Y2xlIHRyYW5zaXRpb24uIEZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzLCB0aGVyZSBhcmUgdHdvIG1ham9yIGxpZmVjeWNsZSB0cmFuc2l0aW9ucy5cbiAqICAgKyAgVG8gY3JlYXRlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHNjYWxlLW91dCBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNISU5HYGAuXG4gKiAgICsgIFRvIGNyZWF0ZSBhIGxpZmVjeWNsZSBob29rIGZvciBzY2FsZS1pbiBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRJTkdgYC5cbiAqL1xuTGlmZWN5Y2xlVHJhbnNpdGlvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgY2FuIGVsYXBzZSBiZWZvcmUgdGhlIGxpZmVjeWNsZSBob29rIHRpbWVzIG91dC4gVGhlIHJhbmdlIGlzIGZyb20gYGAzMGBgIHRvIGBgNzIwMGBgIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgMzYwMGBgIHNlY29uZHMgKDEgaG91cikuXG4gKi9cbkhlYXJ0YmVhdFRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgYW55IHRpbWUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBub3RpZmljYXRpb24gdGFyZ2V0LlxuICovXG5Ob3RpZmljYXRpb25NZXRhZGF0YT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYWN0aW9uIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdGFrZXMgd2hlbiB0aGUgbGlmZWN5Y2xlIGhvb2sgdGltZW91dCBlbGFwc2VzIG9yIGlmIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZSBvY2N1cnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgQUJBTkRPTmBgLlxuICogIFZhbGlkIHZhbHVlczogYGBDT05USU5VRWBgIHwgYGBBQkFORE9OYGBcbiAqL1xuRGVmYXVsdFJlc3VsdD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIG5vdGlmaWNhdGlvbiB0YXJnZXQgdGhhdCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZW5kcyBub3RpZmljYXRpb25zIHRvIHdoZW4gYW4gaW5zdGFuY2UgaXMgaW4gYSB3YWl0IHN0YXRlIGZvciB0aGUgbGlmZWN5Y2xlIGhvb2suIFlvdSBjYW4gc3BlY2lmeSBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cbk5vdGlmaWNhdGlvblRhcmdldEFSTj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIHB1Ymxpc2ggdG8gdGhlIHNwZWNpZmllZCBub3RpZmljYXRpb24gdGFyZ2V0LiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgdGhpcyByb2xlLCBzZWUgW1ByZXBhcmUgdG8gYWRkIGEgbGlmZWN5Y2xlIGhvb2sgdG8geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3ByZXBhcmUtZm9yLWxpZmVjeWNsZS1ub3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgb25seSBpZiB0aGUgbm90aWZpY2F0aW9uIHRhcmdldCBpcyBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cblJvbGVBUk4/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXZhaWxhYmlsaXR5Wm9uZUltcGFpcm1lbnRQb2xpY3kge1xuWm9uYWxTaGlmdEVuYWJsZWQ6IGJvb2xlYW5cbkltcGFpcmVkWm9uZUhlYWx0aENoZWNrQmVoYXZpb3I6IChcIklnbm9yZVVuaGVhbHRoeVwiIHwgXCJSZXBsYWNlVW5oZWFsdGh5XCIpXG59XG4vKipcbiAqIEEgc3RydWN0dXJlIHRoYXQgc3BlY2lmaWVzIGFuIEFtYXpvbiBTTlMgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBgYE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zYGAgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS5cbiAqICBGb3IgYW4gZXhhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0LCBzZWUgW0NvbmZpZ3VyZSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3F1aWNrcmVmLWVjMi1hdXRvLXNjYWxpbmcuaHRtbCkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbR2V0IEFtYXpvbiBTTlMgbm90aWZpY2F0aW9ucyB3aGVuIHlvdXIgQXV0byBTY2FsaW5nIGdyb3VwIHNjYWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvQVNHZXR0aW5nTm90aWZpY2F0aW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFtYXpvbiBTTlMgdG9waWMuXG4gKi9cblRvcGljQVJOOiAoc3RyaW5nIHwgc3RyaW5nW10pXG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCB0eXBlcyB0aGF0IHNlbmQgYSBub3RpZmljYXRpb24uIEV2ZW50IHR5cGVzIGNhbiBpbmNsdWRlIGFueSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzLiBcbiAqICAgKkFsbG93ZWQgdmFsdWVzKjpcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX0xBVU5DSGBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNIX0VSUk9SYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9URVJNSU5BVEVgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX1RFUk1JTkFURV9FUlJPUmBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpURVNUX05PVElGSUNBVElPTmBgXG4gKi9cbk5vdGlmaWNhdGlvblR5cGVzPzogc3RyaW5nW11cbn1cbi8qKlxuICogSW5mb3JtYXRpb24gdXNlZCB0byBzcGVjaWZ5IHRoZSBsYXVuY2ggdGVtcGxhdGUgYW5kIHZlcnNpb24gdG8gdXNlIHRvIGxhdW5jaCBpbnN0YW5jZXMuIFlvdSBjYW4gYWx0ZXJuYXRpdmVseSBhc3NvY2lhdGUgYSBsYXVuY2ggdGVtcGxhdGUgdG8gdGhlIEF1dG8gU2NhbGluZyBncm91cCBieSBzcGVjaWZ5aW5nIGEgYGBNaXhlZEluc3RhbmNlc1BvbGljeWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBsYXVuY2ggdGVtcGxhdGVzLCBzZWUgW0NyZWF0ZSBhIGxhdW5jaCB0ZW1wbGF0ZSBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9jcmVhdGUtbGF1bmNoLXRlbXBsYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgSWYgeW91IG9taXQgdGhpcyBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSBgYE1peGVkSW5zdGFuY2VzUG9saWN5YGAsIGBgTGF1bmNoQ29uZmlndXJhdGlvbk5hbWVgYCwgb3IgYGBJbnN0YW5jZUlkYGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgU3BlY2lmeWluZyBgYCRMYXRlc3RgYCBvciBgYCREZWZhdWx0YGAgZm9yIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIG51bWJlciBpcyBub3Qgc3VwcG9ydGVkLiBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYGBMYXRlc3RWZXJzaW9uTnVtYmVyYGAgb3IgYGBEZWZhdWx0VmVyc2lvbk51bWJlcmBgIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZuOjpHZXRBdHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtZ2V0YXR0Lmh0bWwpLlxuICogICBGb3IgYW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24sIHNlZSB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cblZlcnNpb246IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIGVtYmVkZGVkIG9iamVjdCB0aGF0IHNwZWNpZmllcyBhIG1peGVkIGluc3RhbmNlcyBwb2xpY3kuXG4gKiAgVGhlIHBvbGljeSBpbmNsdWRlcyBwcm9wZXJ0aWVzIHRoYXQgbm90IG9ubHkgZGVmaW5lIHRoZSBkaXN0cmlidXRpb24gb2YgT24tRGVtYW5kIEluc3RhbmNlcyBhbmQgU3BvdCBJbnN0YW5jZXMsIHRoZSBtYXhpbXVtIHByaWNlIHRvIHBheSBmb3IgU3BvdCBJbnN0YW5jZXMgKG9wdGlvbmFsKSwgYW5kIGhvdyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGFsbG9jYXRlcyBpbnN0YW5jZSB0eXBlcyB0byBmdWxmaWxsIE9uLURlbWFuZCBhbmQgU3BvdCBjYXBhY2l0aWVzLCBidXQgYWxzbyB0aGUgcHJvcGVydGllcyB0aGF0IHNwZWNpZnkgdGhlIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb27igJR0aGUgbGF1bmNoIHRlbXBsYXRlIGFuZCBpbnN0YW5jZSB0eXBlcy4gVGhlIHBvbGljeSBjYW4gYWxzbyBpbmNsdWRlIGEgd2VpZ2h0IGZvciBlYWNoIGluc3RhbmNlIHR5cGUgYW5kIGRpZmZlcmVudCBsYXVuY2ggdGVtcGxhdGVzIGZvciBpbmRpdmlkdWFsIGluc3RhbmNlIHR5cGVzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0F1dG8gU2NhbGluZyBncm91cHMgd2l0aCBtdWx0aXBsZSBpbnN0YW5jZSB0eXBlcyBhbmQgcHVyY2hhc2Ugb3B0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1taXhlZC1pbnN0YW5jZXMtZ3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWl4ZWRJbnN0YW5jZXNQb2xpY3kge1xuSW5zdGFuY2VzRGlzdHJpYnV0aW9uPzogSW5zdGFuY2VzRGlzdHJpYnV0aW9uXG5MYXVuY2hUZW1wbGF0ZTogTGF1bmNoVGVtcGxhdGVcbn1cbi8qKlxuICogVGhlIGluc3RhbmNlcyBkaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VzRGlzdHJpYnV0aW9uIHtcbi8qKlxuICogVGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gYXBwbHkgdG8geW91ciBPbi1EZW1hbmQgSW5zdGFuY2VzIHdoZW4gdGhleSBhcmUgbGF1bmNoZWQuIFBvc3NpYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgdmFsaWQgdmFsdWVzOlxuICogICArIGxvd2VzdC1wcmljZSBVc2VzIHByaWNlIHRvIGRldGVybWluZSB3aGljaCBpbnN0YW5jZSB0eXBlcyBhcmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHksIGxhdW5jaGluZyB0aGUgbG93ZXN0IHByaWNlZCBpbnN0YW5jZSB0eXBlcyB3aXRoaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUgZmlyc3QuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgdGhhdCBzcGVjaWZ5IEluc3RhbmNlUmVxdWlyZW1lbnRzLiArIHByaW9yaXRpemVkIFlvdSBzZXQgdGhlIG9yZGVyIG9mIGluc3RhbmNlIHR5cGVzIGZvciB0aGUgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHByaW9yaXR5IChmcm9tIGZpcnN0IHRvIGxhc3QgaW4gdGhlIGxpc3QpLiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyB5b3VyIGhpZ2hlc3QgcHJpb3JpdHkgaW5zdGFuY2UgdHlwZXMgZmlyc3QuIElmIGFsbCB5b3VyIE9uLURlbWFuZCBjYXBhY2l0eSBjYW5ub3QgYmUgZnVsZmlsbGVkIHVzaW5nIHlvdXIgaGlnaGVzdCBwcmlvcml0eSBpbnN0YW5jZSB0eXBlLCB0aGVuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxhdW5jaGVzIHRoZSByZW1haW5pbmcgY2FwYWNpdHkgdXNpbmcgdGhlIHNlY29uZCBwcmlvcml0eSBpbnN0YW5jZSB0eXBlLCBhbmQgc28gb24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgdGhhdCBkb24ndCBzcGVjaWZ5IEluc3RhbmNlUmVxdWlyZW1lbnRzIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgZ3JvdXBzIHRoYXQgZG8uXG4gKi9cbk9uRGVtYW5kQWxsb2NhdGlvblN0cmF0ZWd5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwJ3MgY2FwYWNpdHkgdGhhdCBtdXN0IGJlIGZ1bGZpbGxlZCBieSBPbi1EZW1hbmQgSW5zdGFuY2VzLiBUaGlzIGJhc2UgcG9ydGlvbiBpcyBsYXVuY2hlZCBmaXJzdCBhcyB5b3VyIGdyb3VwIHNjYWxlcy5cbiAqICBUaGlzIG51bWJlciBoYXMgdGhlIHNhbWUgdW5pdCBvZiBtZWFzdXJlbWVudCBhcyB0aGUgZ3JvdXAncyBkZXNpcmVkIGNhcGFjaXR5LiBJZiB5b3UgY2hhbmdlIHRoZSBkZWZhdWx0IHVuaXQgb2YgbWVhc3VyZW1lbnQgKG51bWJlciBvZiBpbnN0YW5jZXMpIGJ5IHNwZWNpZnlpbmcgd2VpZ2h0ZWQgY2FwYWNpdHkgdmFsdWVzIGluIHlvdXIgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyBsaXN0LCBvciBieSBjaGFuZ2luZyB0aGUgZGVmYXVsdCBkZXNpcmVkIGNhcGFjaXR5IHR5cGUgc2V0dGluZyBvZiB0aGUgZ3JvdXAsIHlvdSBtdXN0IHNwZWNpZnkgdGhpcyBudW1iZXIgdXNpbmcgdGhlIHNhbWUgdW5pdCBvZiBtZWFzdXJlbWVudC5cbiAqICBEZWZhdWx0OiAwXG4gKiAgIEFuIHVwZGF0ZSB0byB0aGlzIHNldHRpbmcgbWVhbnMgYSBncmFkdWFsIHJlcGxhY2VtZW50IG9mIGluc3RhbmNlcyB0byBhZGp1c3QgdGhlIGN1cnJlbnQgT24tRGVtYW5kIEluc3RhbmNlIGxldmVscy4gV2hlbiByZXBsYWNpbmcgaW5zdGFuY2VzLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyBuZXcgaW5zdGFuY2VzIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgcHJldmlvdXMgb25lcy5cbiAqL1xuT25EZW1hbmRCYXNlQ2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogQ29udHJvbHMgdGhlIHBlcmNlbnRhZ2VzIG9mIE9uLURlbWFuZCBJbnN0YW5jZXMgYW5kIFNwb3QgSW5zdGFuY2VzIGZvciB5b3VyIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmV5b25kIGBgT25EZW1hbmRCYXNlQ2FwYWNpdHlgYC4gRXhwcmVzc2VkIGFzIGEgbnVtYmVyIChmb3IgZXhhbXBsZSwgMjAgc3BlY2lmaWVzIDIwJSBPbi1EZW1hbmQgSW5zdGFuY2VzLCA4MCUgU3BvdCBJbnN0YW5jZXMpLiBJZiBzZXQgdG8gMTAwLCBvbmx5IE9uLURlbWFuZCBJbnN0YW5jZXMgYXJlIHVzZWQuXG4gKiAgRGVmYXVsdDogMTAwXG4gKiAgIEFuIHVwZGF0ZSB0byB0aGlzIHNldHRpbmcgbWVhbnMgYSBncmFkdWFsIHJlcGxhY2VtZW50IG9mIGluc3RhbmNlcyB0byBhZGp1c3QgdGhlIGN1cnJlbnQgT24tRGVtYW5kIGFuZCBTcG90IEluc3RhbmNlIGxldmVscyBmb3IgeW91ciBhZGRpdGlvbmFsIGNhcGFjaXR5IGhpZ2hlciB0aGFuIHRoZSBiYXNlIGNhcGFjaXR5LiBXaGVuIHJlcGxhY2luZyBpbnN0YW5jZXMsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxhdW5jaGVzIG5ldyBpbnN0YW5jZXMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBwcmV2aW91cyBvbmVzLlxuICovXG5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eT86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIFNwb3QgSW5zdGFuY2UgcG9vbHMgYWNyb3NzIHdoaWNoIHRvIGFsbG9jYXRlIHlvdXIgU3BvdCBJbnN0YW5jZXMuIFRoZSBTcG90IHBvb2xzIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlIGRpZmZlcmVudCBpbnN0YW5jZSB0eXBlcyBpbiB0aGUgb3ZlcnJpZGVzLiBWYWxpZCBvbmx5IHdoZW4gdGhlIGBgU3BvdEFsbG9jYXRpb25TdHJhdGVneWBgIGlzIGBgbG93ZXN0LXByaWNlYGAuIFZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDHigJMyMC5cbiAqICBEZWZhdWx0OiAyXG4gKi9cblNwb3RJbnN0YW5jZVBvb2xzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IHRvIGFwcGx5IHRvIHlvdXIgU3BvdCBJbnN0YW5jZXMgd2hlbiB0aGV5IGFyZSBsYXVuY2hlZC4gUG9zc2libGUgaW5zdGFuY2UgdHlwZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBvdmVycmlkZXMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSB2YWxpZCB2YWx1ZXM6XG4gKiAgICsgY2FwYWNpdHktb3B0aW1pemVkIFJlcXVlc3RzIFNwb3QgSW5zdGFuY2VzIHVzaW5nIHBvb2xzIHRoYXQgYXJlIG9wdGltYWxseSBjaG9zZW4gYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBTcG90IGNhcGFjaXR5LiBUaGlzIHN0cmF0ZWd5IGhhcyB0aGUgbG93ZXN0IHJpc2sgb2YgaW50ZXJydXB0aW9uLiBUbyBnaXZlIGNlcnRhaW4gaW5zdGFuY2UgdHlwZXMgYSBoaWdoZXIgY2hhbmNlIG9mIGxhdW5jaGluZyBmaXJzdCwgdXNlIGNhcGFjaXR5LW9wdGltaXplZC1wcmlvcml0aXplZC4gKyBjYXBhY2l0eS1vcHRpbWl6ZWQtcHJpb3JpdGl6ZWQgWW91IHNldCB0aGUgb3JkZXIgb2YgaW5zdGFuY2UgdHlwZXMgZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgcHJpb3JpdHkgKGZyb20gZmlyc3QgdG8gbGFzdCBpbiB0aGUgbGlzdCkuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGhvbm9ycyB0aGUgaW5zdGFuY2UgdHlwZSBwcmlvcml0aWVzIG9uIGEgYmVzdCBlZmZvcnQgYmFzaXMgYnV0IG9wdGltaXplcyBmb3IgY2FwYWNpdHkgZmlyc3QuIE5vdGUgdGhhdCBpZiB0aGUgT24tRGVtYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgc2V0IHRvIHByaW9yaXRpemVkLCB0aGUgc2FtZSBwcmlvcml0eSBpcyBhcHBsaWVkIHdoZW4gZnVsZmlsbGluZyBPbi1EZW1hbmQgY2FwYWNpdHkuIFRoaXMgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgdGhhdCBzcGVjaWZ5IEluc3RhbmNlUmVxdWlyZW1lbnRzLiArIGxvd2VzdC1wcmljZSBSZXF1ZXN0cyBTcG90IEluc3RhbmNlcyB1c2luZyB0aGUgbG93ZXN0IHByaWNlZCBwb29scyB3aXRoaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUsIGFjcm9zcyB0aGUgbnVtYmVyIG9mIFNwb3QgcG9vbHMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgdGhlIFNwb3RJbnN0YW5jZVBvb2xzIHByb3BlcnR5LiBUbyBlbnN1cmUgdGhhdCB5b3VyIGRlc2lyZWQgY2FwYWNpdHkgaXMgbWV0LCB5b3UgbWlnaHQgcmVjZWl2ZSBTcG90IEluc3RhbmNlcyBmcm9tIHNldmVyYWwgcG9vbHMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCBpdCBtaWdodCBsZWFkIHRvIGhpZ2ggaW50ZXJydXB0aW9uIHJhdGVzIGJlY2F1c2UgdGhpcyBzdHJhdGVneSBvbmx5IGNvbnNpZGVycyBpbnN0YW5jZSBwcmljZSBhbmQgbm90IGF2YWlsYWJsZSBjYXBhY2l0eS4gKyBwcmljZS1jYXBhY2l0eS1vcHRpbWl6ZWQgKHJlY29tbWVuZGVkKSBUaGUgcHJpY2UgYW5kIGNhcGFjaXR5IG9wdGltaXplZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGxvb2tzIGF0IGJvdGggcHJpY2UgYW5kIGNhcGFjaXR5IHRvIHNlbGVjdCB0aGUgU3BvdCBJbnN0YW5jZSBwb29scyB0aGF0IGFyZSB0aGUgbGVhc3QgbGlrZWx5IHRvIGJlIGludGVycnVwdGVkIGFuZCBoYXZlIHRoZSBsb3dlc3QgcG9zc2libGUgcHJpY2UuXG4gKi9cblNwb3RBbGxvY2F0aW9uU3RyYXRlZ3k/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1heGltdW0gcHJpY2UgcGVyIHVuaXQgaG91ciB0aGF0IHlvdSBhcmUgd2lsbGluZyB0byBwYXkgZm9yIGEgU3BvdCBJbnN0YW5jZS4gSWYgeW91ciBtYXhpbXVtIHByaWNlIGlzIGxvd2VyIHRoYW4gdGhlIFNwb3QgcHJpY2UgZm9yIHRoZSBpbnN0YW5jZSB0eXBlcyB0aGF0IHlvdSBzZWxlY3RlZCwgeW91ciBTcG90IEluc3RhbmNlcyBhcmUgbm90IGxhdW5jaGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHNwZWNpZnlpbmcgYSBtYXhpbXVtIHByaWNlIGJlY2F1c2UgaXQgY2FuIGxlYWQgdG8gaW5jcmVhc2VkIGludGVycnVwdGlvbnMuIFdoZW4gU3BvdCBJbnN0YW5jZXMgbGF1bmNoLCB5b3UgcGF5IHRoZSBjdXJyZW50IFNwb3QgcHJpY2UuIFRvIHJlbW92ZSBhIG1heGltdW0gcHJpY2UgdGhhdCB5b3UgcHJldmlvdXNseSBzZXQsIGluY2x1ZGUgdGhlIHByb3BlcnR5IGJ1dCBzcGVjaWZ5IGFuIGVtcHR5IHN0cmluZyAoXCJcIikgZm9yIHRoZSB2YWx1ZS5cbiAqICAgSWYgeW91IHNwZWNpZnkgYSBtYXhpbXVtIHByaWNlLCB5b3VyIGluc3RhbmNlcyB3aWxsIGJlIGludGVycnVwdGVkIG1vcmUgZnJlcXVlbnRseSB0aGFuIGlmIHlvdSBkbyBub3Qgc3BlY2lmeSBvbmUuXG4gKiAgIFZhbGlkIFJhbmdlOiBNaW5pbXVtIHZhbHVlIG9mIDAuMDAxXG4gKi9cblNwb3RNYXhQcmljZT86IHN0cmluZ1xufVxuLyoqXG4gKiBPbmUgb3IgbW9yZSBsYXVuY2ggdGVtcGxhdGVzIGFuZCB0aGUgaW5zdGFuY2UgdHlwZXMgKG92ZXJyaWRlcykgdGhhdCBhcmUgdXNlZCB0byBsYXVuY2ggRUMyIGluc3RhbmNlcyB0byBmdWxmaWxsIE9uLURlbWFuZCBhbmQgU3BvdCBjYXBhY2l0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlIHtcbkxhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjogTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uMVxuLyoqXG4gKiBBbnkgcHJvcGVydGllcyB0aGF0IHlvdSBzcGVjaWZ5IG92ZXJyaWRlIHRoZSBzYW1lIHByb3BlcnRpZXMgaW4gdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqL1xuT3ZlcnJpZGVzPzogTGF1bmNoVGVtcGxhdGVPdmVycmlkZXNbXVxufVxuLyoqXG4gKiBUaGUgbGF1bmNoIHRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjEge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBTcGVjaWZ5aW5nIGBgJExhdGVzdGBgIG9yIGBgJERlZmF1bHRgYCBmb3IgdGhlIHRlbXBsYXRlIHZlcnNpb24gbnVtYmVyIGlzIG5vdCBzdXBwb3J0ZWQuIEhvd2V2ZXIsIHlvdSBjYW4gc3BlY2lmeSBgYExhdGVzdFZlcnNpb25OdW1iZXJgYCBvciBgYERlZmF1bHRWZXJzaW9uTnVtYmVyYGAgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGludHJpbnNpYyBmdW5jdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRm46OkdldEF0dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS1nZXRhdHQuaHRtbCkuXG4gKiAgIEZvciBhbiBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBmdW5jdGlvbiwgc2VlIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwjYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZS5cbiAqL1xuVmVyc2lvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVXNlIHRoaXMgc3RydWN0dXJlIHRvIGxldCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBkbyB0aGUgZm9sbG93aW5nIHdoZW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCBoYXMgYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5OlxuICogICArICBPdmVycmlkZSB0aGUgaW5zdGFuY2UgdHlwZSB0aGF0IGlzIHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogICArICBVc2UgbXVsdGlwbGUgaW5zdGFuY2UgdHlwZXMuXG4gKiAgIFxuICogIFNwZWNpZnkgdGhlIGluc3RhbmNlIHR5cGVzIHRoYXQgeW91IHdhbnQsIG9yIGRlZmluZSB5b3VyIGluc3RhbmNlIHJlcXVpcmVtZW50cyBpbnN0ZWFkIGFuZCBsZXQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgcHJvdmlzaW9uIHRoZSBhdmFpbGFibGUgaW5zdGFuY2UgdHlwZXMgdGhhdCBtZWV0IHlvdXIgcmVxdWlyZW1lbnRzLiBUaGlzIGNhbiBwcm92aWRlIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpdGggYSBsYXJnZXIgc2VsZWN0aW9uIG9mIGluc3RhbmNlIHR5cGVzIHRvIGNob29zZSBmcm9tIHdoZW4gZnVsZmlsbGluZyBTcG90IGFuZCBPbi1EZW1hbmQgY2FwYWNpdGllcy4gWW91IGNhbiB2aWV3IHdoaWNoIGluc3RhbmNlIHR5cGVzIGFyZSBtYXRjaGVkIGJlZm9yZSB5b3UgYXBwbHkgdGhlIGluc3RhbmNlIHJlcXVpcmVtZW50cyB0byB5b3VyIEF1dG8gU2NhbGluZyBncm91cC5cbiAqICBBZnRlciB5b3UgZGVmaW5lIHlvdXIgaW5zdGFuY2UgcmVxdWlyZW1lbnRzLCB5b3UgZG9uJ3QgaGF2ZSB0byBrZWVwIHVwZGF0aW5nIHRoZXNlIHNldHRpbmdzIHRvIGdldCBuZXcgRUMyIGluc3RhbmNlIHR5cGVzIGF1dG9tYXRpY2FsbHkuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgdGhlIGluc3RhbmNlIHJlcXVpcmVtZW50cyBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbmV3IEVDMiBpbnN0YW5jZSB0eXBlIGNhbiBiZSB1c2VkLlxuICogICBgYExhdW5jaFRlbXBsYXRlT3ZlcnJpZGVzYGAgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXAgTGF1bmNoVGVtcGxhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtbGF1bmNodGVtcGxhdGUuaHRtbCkgcHJvcGVydHkgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZU92ZXJyaWRlcyB7XG5MYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24/OiBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24yXG4vKipcbiAqIElmIHlvdSBwcm92aWRlIGEgbGlzdCBvZiBpbnN0YW5jZSB0eXBlcyB0byB1c2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNhcGFjaXR5IHVuaXRzIHByb3ZpZGVkIGJ5IGVhY2ggaW5zdGFuY2UgdHlwZSBpbiB0ZXJtcyBvZiB2aXJ0dWFsIENQVXMsIG1lbW9yeSwgc3RvcmFnZSwgdGhyb3VnaHB1dCwgb3Igb3RoZXIgcmVsYXRpdmUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWMuIFdoZW4gYSBTcG90IG9yIE9uLURlbWFuZCBJbnN0YW5jZSBpcyBsYXVuY2hlZCwgdGhlIGNhcGFjaXR5IHVuaXRzIGNvdW50IHRvd2FyZCB0aGUgZGVzaXJlZCBjYXBhY2l0eS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgaW5zdGFuY2VzIHVudGlsIHRoZSBkZXNpcmVkIGNhcGFjaXR5IGlzIHRvdGFsbHkgZnVsZmlsbGVkLCBldmVuIGlmIHRoaXMgcmVzdWx0cyBpbiBhbiBvdmVyYWdlLiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYXJlIHR3byB1bml0cyByZW1haW5pbmcgdG8gZnVsZmlsbCBjYXBhY2l0eSwgYW5kIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGNhbiBvbmx5IGxhdW5jaCBhbiBpbnN0YW5jZSB3aXRoIGEgYGBXZWlnaHRlZENhcGFjaXR5YGAgb2YgZml2ZSB1bml0cywgdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkLCBhbmQgdGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgZXhjZWVkZWQgYnkgdGhyZWUgdW5pdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyZSBpbnN0YW5jZSB3ZWlnaHRpbmcgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1peGVkLWluc3RhbmNlcy1ncm91cHMtaW5zdGFuY2Utd2VpZ2h0aW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDEtOTk5LiBcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgYFdlaWdodGVkQ2FwYWNpdHlgYCBmb3Igb25lIGluc3RhbmNlIHR5cGUsIHlvdSBtdXN0IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBXZWlnaHRlZENhcGFjaXR5YGAgZm9yIGFsbCBvZiB0aGVtLlxuICogICBFdmVyeSBBdXRvIFNjYWxpbmcgZ3JvdXAgaGFzIHRocmVlIHNpemUgcGFyYW1ldGVycyAoYGBEZXNpcmVkQ2FwYWNpdHlgYCwgYGBNYXhTaXplYGAsIGFuZCBgYE1pblNpemVgYCkuIFVzdWFsbHksIHlvdSBzZXQgdGhlc2Ugc2l6ZXMgYmFzZWQgb24gYSBzcGVjaWZpYyBudW1iZXIgb2YgaW5zdGFuY2VzLiBIb3dldmVyLCBpZiB5b3UgY29uZmlndXJlIGEgbWl4ZWQgaW5zdGFuY2VzIHBvbGljeSB0aGF0IGRlZmluZXMgd2VpZ2h0cyBmb3IgdGhlIGluc3RhbmNlIHR5cGVzLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZXNlIHNpemVzIHdpdGggdGhlIHNhbWUgdW5pdHMgdGhhdCB5b3UgdXNlIGZvciB3ZWlnaHRpbmcgaW5zdGFuY2VzLlxuICovXG5XZWlnaHRlZENhcGFjaXR5Pzogc3RyaW5nXG5JbnN0YW5jZVJlcXVpcmVtZW50cz86IEluc3RhbmNlUmVxdWlyZW1lbnRzXG4vKipcbiAqIFRoZSBpbnN0YW5jZSB0eXBlLCBzdWNoIGFzIGBgbTMueGxhcmdlYGAuIFlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFuY2UgdHlwZSB0aGF0IGlzIHN1cHBvcnRlZCBpbiB5b3VyIHJlcXVlc3RlZCBSZWdpb24gYW5kIEF2YWlsYWJpbGl0eSBab25lcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5zdGFuY2UgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSBmb3IgTGludXggSW5zdGFuY2VzKi5cbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gNDAgaW5zdGFuY2UgdHlwZXMgcGVyIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuSW5zdGFuY2VUeXBlPzogc3RyaW5nXG59XG4vKipcbiAqIFByb3ZpZGVzIGEgbGF1bmNoIHRlbXBsYXRlIGZvciB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIHR5cGUgb3Igc2V0IG9mIGluc3RhbmNlIHJlcXVpcmVtZW50cy4gRm9yIGV4YW1wbGUsIHNvbWUgaW5zdGFuY2UgdHlwZXMgbWlnaHQgcmVxdWlyZSBhIGxhdW5jaCB0ZW1wbGF0ZSB3aXRoIGEgZGlmZmVyZW50IEFNSS4gSWYgbm90IHByb3ZpZGVkLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB1c2VzIHRoZSBsYXVuY2ggdGVtcGxhdGUgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgYGBMYXVuY2hUZW1wbGF0ZWBgIGRlZmluaXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgYSBkaWZmZXJlbnQgbGF1bmNoIHRlbXBsYXRlIGZvciBhbiBpbnN0YW5jZSB0eXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1peGVkLWluc3RhbmNlcy1ncm91cHMtbGF1bmNoLXRlbXBsYXRlLW92ZXJyaWRlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLiBcbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gMjAgbGF1bmNoIHRlbXBsYXRlcyBwZXIgQXV0byBTY2FsaW5nIGdyb3VwLiBUaGUgbGF1bmNoIHRlbXBsYXRlcyBzcGVjaWZpZWQgaW4gdGhlIG92ZXJyaWRlcyBhbmQgaW4gdGhlIGBgTGF1bmNoVGVtcGxhdGVgYCBkZWZpbml0aW9uIGNvdW50IHRvd2FyZHMgdGhpcyBsaW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24yIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgU3BlY2lmeWluZyBgYCRMYXRlc3RgYCBvciBgYCREZWZhdWx0YGAgZm9yIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIG51bWJlciBpcyBub3Qgc3VwcG9ydGVkLiBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYGBMYXRlc3RWZXJzaW9uTnVtYmVyYGAgb3IgYGBEZWZhdWx0VmVyc2lvbk51bWJlcmBgIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZuOjpHZXRBdHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtZ2V0YXR0Lmh0bWwpLlxuICogICBGb3IgYW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24sIHNlZSB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cblZlcnNpb246IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBpbnN0YW5jZSByZXF1aXJlbWVudHMuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgeW91ciBzcGVjaWZpZWQgcmVxdWlyZW1lbnRzIHRvIGlkZW50aWZ5IGluc3RhbmNlIHR5cGVzLiBUaGVuLCBpdCB1c2VzIHlvdXIgT24tRGVtYW5kIGFuZCBTcG90IGFsbG9jYXRpb24gc3RyYXRlZ2llcyB0byBsYXVuY2ggaW5zdGFuY2VzIGZyb20gdGhlc2UgaW5zdGFuY2UgdHlwZXMuXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHVwIHRvIGZvdXIgc2VwYXJhdGUgc2V0cyBvZiBpbnN0YW5jZSByZXF1aXJlbWVudHMgcGVyIEF1dG8gU2NhbGluZyBncm91cC4gVGhpcyBpcyB1c2VmdWwgZm9yIHByb3Zpc2lvbmluZyBpbnN0YW5jZXMgZnJvbSBkaWZmZXJlbnQgQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUlzKSBpbiB0aGUgc2FtZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgQU1JcyBhbmQgY3JlYXRlIGEgbmV3IGxhdW5jaCB0ZW1wbGF0ZSBmb3IgZWFjaCBBTUkuIFRoZW4sIGNyZWF0ZSBhIGNvbXBhdGlibGUgc2V0IG9mIGluc3RhbmNlIHJlcXVpcmVtZW50cyBmb3IgZWFjaCBsYXVuY2ggdGVtcGxhdGUuIFxuICogICBJZiB5b3Ugc3BlY2lmeSBgYEluc3RhbmNlUmVxdWlyZW1lbnRzYGAsIHlvdSBjYW4ndCBzcGVjaWZ5IGBgSW5zdGFuY2VUeXBlYGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VSZXF1aXJlbWVudHMge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBjdXJyZW50IG9yIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgYXJlIGluY2x1ZGVkLlxuICogICArICBGb3IgY3VycmVudCBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzLCBzcGVjaWZ5IGBgY3VycmVudGBgLiBUaGUgY3VycmVudCBnZW5lcmF0aW9uIGluY2x1ZGVzIEVDMiBpbnN0YW5jZSB0eXBlcyBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHVzZS4gVGhpcyB0eXBpY2FsbHkgaW5jbHVkZXMgdGhlIGxhdGVzdCB0d28gdG8gdGhyZWUgZ2VuZXJhdGlvbnMgaW4gZWFjaCBpbnN0YW5jZSBmYW1pbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0luc3RhbmNlIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2UtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUgZm9yIExpbnV4IEluc3RhbmNlcyouXG4gKiAgICsgIEZvciBwcmV2aW91cyBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzLCBzcGVjaWZ5IGBgcHJldmlvdXNgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IGN1cnJlbnQgb3IgcHJldmlvdXMgZ2VuZXJhdGlvblxuICovXG5JbnN0YW5jZUdlbmVyYXRpb25zPzogc3RyaW5nW11cbi8qKlxuICogTGlzdHMgdGhlIGFjY2VsZXJhdG9yIHR5cGVzIHRoYXQgbXVzdCBiZSBvbiBhbiBpbnN0YW5jZSB0eXBlLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBHUFUgYWNjZWxlcmF0b3JzLCBzcGVjaWZ5IGBgZ3B1YGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEZQR0EgYWNjZWxlcmF0b3JzLCBzcGVjaWZ5IGBgZnBnYWBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBpbmZlcmVuY2UgYWNjZWxlcmF0b3JzLCBzcGVjaWZ5IGBgaW5mZXJlbmNlYGAuXG4gKiAgIFxuICogIERlZmF1bHQ6IEFueSBhY2NlbGVyYXRvciB0eXBlXG4gKi9cbkFjY2VsZXJhdG9yVHlwZXM/OiBzdHJpbmdbXVxuTWVtb3J5R2lCUGVyVkNwdT86IE1lbW9yeUdpQlBlclZDcHVSZXF1ZXN0XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGluc3RhbmNlIHR5cGVzIG11c3QgaGF2ZSBhY2NlbGVyYXRvcnMgYnkgc3BlY2lmaWMgbWFudWZhY3R1cmVycy5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIGRldmljZXMsIHNwZWNpZnkgYGBudmlkaWFgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQU1EIGRldmljZXMsIHNwZWNpZnkgYGBhbWRgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQVdTIGRldmljZXMsIHNwZWNpZnkgYGBhbWF6b24td2ViLXNlcnZpY2VzYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIFhpbGlueCBkZXZpY2VzLCBzcGVjaWZ5IGBgeGlsaW54YGAuXG4gKiAgIFxuICogIERlZmF1bHQ6IEFueSBtYW51ZmFjdHVyZXJcbiAqL1xuQWNjZWxlcmF0b3JNYW51ZmFjdHVyZXJzPzogc3RyaW5nW11cblZDcHVDb3VudDogVkNwdUNvdW50UmVxdWVzdFxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBpbnN0YW5jZSB0eXBlcyB3aXRoIGluc3RhbmNlIHN0b3JlIHZvbHVtZXMgYXJlIGluY2x1ZGVkLCBleGNsdWRlZCwgb3IgcmVxdWlyZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQzIgaW5zdGFuY2Ugc3RvcmVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9JbnN0YW5jZVN0b3JhZ2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUgZm9yIExpbnV4IEluc3RhbmNlcyouXG4gKiAgRGVmYXVsdDogYGBpbmNsdWRlZGBgXG4gKi9cbkxvY2FsU3RvcmFnZT86IHN0cmluZ1xuLyoqXG4gKiBMaXN0cyB3aGljaCBzcGVjaWZpYyBDUFUgbWFudWZhY3R1cmVycyB0byBpbmNsdWRlLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBJbnRlbCBDUFVzLCBzcGVjaWZ5IGBgaW50ZWxgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQU1EIENQVXMsIHNwZWNpZnkgYGBhbWRgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQVdTIENQVXMsIHNwZWNpZnkgYGBhbWF6b24td2ViLXNlcnZpY2VzYGAuXG4gKiAgIFxuICogICBEb24ndCBjb25mdXNlIHRoZSBDUFUgaGFyZHdhcmUgbWFudWZhY3R1cmVyIHdpdGggdGhlIENQVSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUuIEluc3RhbmNlcyB3aWxsIGJlIGxhdW5jaGVkIHdpdGggYSBjb21wYXRpYmxlIENQVSBhcmNoaXRlY3R1cmUgYmFzZWQgb24gdGhlIEFtYXpvbiBNYWNoaW5lIEltYWdlIChBTUkpIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBsYXVuY2ggdGVtcGxhdGUuIFxuICogICBEZWZhdWx0OiBBbnkgbWFudWZhY3R1cmVyXG4gKi9cbkNwdU1hbnVmYWN0dXJlcnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBiYXJlIG1ldGFsIGluc3RhbmNlIHR5cGVzIGFyZSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHJlcXVpcmVkLlxuICogIERlZmF1bHQ6IGBgZXhjbHVkZWRgYFxuICovXG5CYXJlTWV0YWw/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2UgdHlwZXMgbXVzdCBwcm92aWRlIE9uLURlbWFuZCBJbnN0YW5jZSBoaWJlcm5hdGlvbiBzdXBwb3J0LlxuICogIERlZmF1bHQ6IGBgZmFsc2VgYFxuICovXG5SZXF1aXJlSGliZXJuYXRlU3VwcG9ydD86IGJvb2xlYW5cbi8qKlxuICogW1ByaWNlIHByb3RlY3Rpb25dIFRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgU3BvdCBJbnN0YW5jZXMsIGFzIGEgcGVyY2VudGFnZSBvZiBhbiBpZGVudGlmaWVkIE9uLURlbWFuZCBwcmljZS4gVGhlIGlkZW50aWZpZWQgT24tRGVtYW5kIHByaWNlIGlzIHRoZSBwcmljZSBvZiB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIHdpdGggeW91ciBzcGVjaWZpZWQgYXR0cmlidXRlcy4gSWYgbm8gY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSBtYXRjaGVzIHlvdXIgYXR0cmlidXRlcywgdGhlbiB0aGUgaWRlbnRpZmllZCBwcmljZSBpcyBmcm9tIGVpdGhlciB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgb3IsIGZhaWxpbmcgdGhhdCwgdGhlIGxvd2VzdCBwcmljZWQgcHJldmlvdXMgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcy4gV2hlbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZWxlY3RzIGluc3RhbmNlIHR5cGVzIHdpdGggeW91ciBhdHRyaWJ1dGVzLCB3ZSB3aWxsIGV4Y2x1ZGUgaW5zdGFuY2UgdHlwZXMgd2hvc2UgcHJpY2UgZXhjZWVkcyB5b3VyIHNwZWNpZmllZCB0aHJlc2hvbGQuXG4gKiAgVGhlIHBhcmFtZXRlciBhY2NlcHRzIGFuIGludGVnZXIsIHdoaWNoIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGludGVycHJldHMgYXMgYSBwZXJjZW50YWdlLlxuICogIElmIHlvdSBzZXQgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgdG8gYGB2Y3B1YGAgb3IgYGBtZW1vcnktbWliYGAsIHRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBpcyBiYXNlZCBvbiB0aGUgcGVyLXZDUFUgb3IgcGVyLW1lbW9yeSBwcmljZSBpbnN0ZWFkIG9mIHRoZSBwZXIgaW5zdGFuY2UgcHJpY2UuIFxuICogICBPbmx5IG9uZSBvZiBgYFNwb3RNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2VgYCBvciBgYE1heFNwb3RQcmljZUFzUGVyY2VudGFnZU9mT3B0aW1hbE9uRGVtYW5kUHJpY2VgYCBjYW4gYmUgc3BlY2lmaWVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBlaXRoZXIsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYXV0b21hdGljYWxseSBhcHBseSBvcHRpbWFsIHByaWNlIHByb3RlY3Rpb24gdG8gY29uc2lzdGVudGx5IHNlbGVjdCBmcm9tIGEgd2lkZSByYW5nZSBvZiBpbnN0YW5jZSB0eXBlcy4gVG8gaW5kaWNhdGUgbm8gcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIFNwb3QgSW5zdGFuY2VzLCBtZWFuaW5nIHlvdSB3YW50IHRvIGNvbnNpZGVyIGFsbCBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcywgaW5jbHVkZSBvbmUgb2YgdGhlc2UgcGFyYW1ldGVycyBhbmQgc3BlY2lmeSBhIGhpZ2ggdmFsdWUsIHN1Y2ggYXMgYGA5OTk5OTlgYC5cbiAqL1xuTWF4U3BvdFByaWNlQXNQZXJjZW50YWdlT2ZPcHRpbWFsT25EZW1hbmRQcmljZT86IG51bWJlclxuLyoqXG4gKiBbUHJpY2UgcHJvdGVjdGlvbl0gVGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGZvciBPbi1EZW1hbmQgSW5zdGFuY2VzLCBhcyBhIHBlcmNlbnRhZ2UgaGlnaGVyIHRoYW4gYW4gaWRlbnRpZmllZCBPbi1EZW1hbmQgcHJpY2UuIFRoZSBpZGVudGlmaWVkIE9uLURlbWFuZCBwcmljZSBpcyB0aGUgcHJpY2Ugb2YgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSB3aXRoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuIElmIG5vIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgbWF0Y2hlcyB5b3VyIGF0dHJpYnV0ZXMsIHRoZW4gdGhlIGlkZW50aWZpZWQgcHJpY2UgaXMgZnJvbSBlaXRoZXIgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIG9yLCBmYWlsaW5nIHRoYXQsIHRoZSBsb3dlc3QgcHJpY2VkIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIGF0dHJpYnV0ZXMuIFdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VsZWN0cyBpbnN0YW5jZSB0eXBlcyB3aXRoIHlvdXIgYXR0cmlidXRlcywgd2Ugd2lsbCBleGNsdWRlIGluc3RhbmNlIHR5cGVzIHdob3NlIHByaWNlIGV4Y2VlZHMgeW91ciBzcGVjaWZpZWQgdGhyZXNob2xkLiBcbiAqICBUaGUgcGFyYW1ldGVyIGFjY2VwdHMgYW4gaW50ZWdlciwgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgaW50ZXJwcmV0cyBhcyBhIHBlcmNlbnRhZ2UuXG4gKiAgVG8gdHVybiBvZmYgcHJpY2UgcHJvdGVjdGlvbiwgc3BlY2lmeSBhIGhpZ2ggdmFsdWUsIHN1Y2ggYXMgYGA5OTk5OTlgYC4gXG4gKiAgSWYgeW91IHNldCBgYERlc2lyZWRDYXBhY2l0eVR5cGVgYCB0byBgYHZjcHVgYCBvciBgYG1lbW9yeS1taWJgYCwgdGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGlzIGFwcGxpZWQgYmFzZWQgb24gdGhlIHBlci12Q1BVIG9yIHBlci1tZW1vcnkgcHJpY2UgaW5zdGVhZCBvZiB0aGUgcGVyIGluc3RhbmNlIHByaWNlLiBcbiAqICBEZWZhdWx0OiBgYDIwYGBcbiAqL1xuT25EZW1hbmRNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2U/OiBudW1iZXJcbk1lbW9yeU1pQjogTWVtb3J5TWlCUmVxdWVzdFxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgbG9jYWwgc3RvcmFnZSB0aGF0IGlzIHJlcXVpcmVkLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBoYXJkIGRpc2sgZHJpdmUgKEhERCkgc3RvcmFnZSwgc3BlY2lmeSBgYGhkZGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBzb2xpZCBzdGF0ZSBkcml2ZSAoU1NEKSBzdG9yYWdlLCBzcGVjaWZ5IGBgc3NkYGAuXG4gKiAgIFxuICogIERlZmF1bHQ6IEFueSBsb2NhbCBzdG9yYWdlIHR5cGVcbiAqL1xuTG9jYWxTdG9yYWdlVHlwZXM/OiBzdHJpbmdbXVxuTmV0d29ya0ludGVyZmFjZUNvdW50PzogTmV0d29ya0ludGVyZmFjZUNvdW50UmVxdWVzdFxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgdHlwZXMgdG8gZXhjbHVkZS4gWW91IGNhbiB1c2Ugc3RyaW5ncyB3aXRoIG9uZSBvciBtb3JlIHdpbGQgY2FyZHMsIHJlcHJlc2VudGVkIGJ5IGFuIGFzdGVyaXNrIChgYCpgYCksIHRvIGV4Y2x1ZGUgYW4gaW5zdGFuY2UgZmFtaWx5LCB0eXBlLCBzaXplLCBvciBnZW5lcmF0aW9uLiBUaGUgZm9sbG93aW5nIGFyZSBleGFtcGxlczogYGBtNS44eGxhcmdlYGAsIGBgYzUqLipgYCwgYGBtNWEuKmBgLCBgYHIqYGAsIGBgKjMqYGAuIFxuICogIEZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgYGM1KmBgLCB5b3UgYXJlIGV4Y2x1ZGluZyB0aGUgZW50aXJlIEM1IGluc3RhbmNlIGZhbWlseSwgd2hpY2ggaW5jbHVkZXMgYWxsIEM1YSBhbmQgQzVuIGluc3RhbmNlIHR5cGVzLiBJZiB5b3Ugc3BlY2lmeSBgYG01YS4qYGAsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgZXhjbHVkZSBhbGwgdGhlIE01YSBpbnN0YW5jZSB0eXBlcywgYnV0IG5vdCB0aGUgTTVuIGluc3RhbmNlIHR5cGVzLlxuICogICBJZiB5b3Ugc3BlY2lmeSBgYEV4Y2x1ZGVkSW5zdGFuY2VUeXBlc2BgLCB5b3UgY2FuJ3Qgc3BlY2lmeSBgYEFsbG93ZWRJbnN0YW5jZVR5cGVzYGAuXG4gKiAgIERlZmF1bHQ6IE5vIGV4Y2x1ZGVkIGluc3RhbmNlIHR5cGVzXG4gKi9cbkV4Y2x1ZGVkSW5zdGFuY2VUeXBlcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBpbnN0YW5jZSB0eXBlcyB0byBhcHBseSB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzIGFnYWluc3QuIEFsbCBvdGhlciBpbnN0YW5jZSB0eXBlcyBhcmUgaWdub3JlZCwgZXZlbiBpZiB0aGV5IG1hdGNoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuXG4gKiAgWW91IGNhbiB1c2Ugc3RyaW5ncyB3aXRoIG9uZSBvciBtb3JlIHdpbGQgY2FyZHMsIHJlcHJlc2VudGVkIGJ5IGFuIGFzdGVyaXNrIChgYCpgYCksIHRvIGFsbG93IGFuIGluc3RhbmNlIHR5cGUsIHNpemUsIG9yIGdlbmVyYXRpb24uIFRoZSBmb2xsb3dpbmcgYXJlIGV4YW1wbGVzOiBgYG01Ljh4bGFyZ2VgYCwgYGBjNSouKmBgLCBgYG01YS4qYGAsIGBgcipgYCwgYGAqMypgYC5cbiAqICBGb3IgZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgYGBjNSpgYCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2lsbCBhbGxvdyB0aGUgZW50aXJlIEM1IGluc3RhbmNlIGZhbWlseSwgd2hpY2ggaW5jbHVkZXMgYWxsIEM1YSBhbmQgQzVuIGluc3RhbmNlIHR5cGVzLiBJZiB5b3Ugc3BlY2lmeSBgYG01YS4qYGAsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYWxsb3cgYWxsIHRoZSBNNWEgaW5zdGFuY2UgdHlwZXMsIGJ1dCBub3QgdGhlIE01biBpbnN0YW5jZSB0eXBlcy5cbiAqICAgSWYgeW91IHNwZWNpZnkgYGBBbGxvd2VkSW5zdGFuY2VUeXBlc2BgLCB5b3UgY2FuJ3Qgc3BlY2lmeSBgYEV4Y2x1ZGVkSW5zdGFuY2VUeXBlc2BgLlxuICogICBEZWZhdWx0OiBBbGwgaW5zdGFuY2UgdHlwZXNcbiAqL1xuQWxsb3dlZEluc3RhbmNlVHlwZXM/OiBzdHJpbmdbXVxuQWNjZWxlcmF0b3JDb3VudD86IEFjY2VsZXJhdG9yQ291bnRSZXF1ZXN0XG5OZXR3b3JrQmFuZHdpZHRoR2Jwcz86IE5ldHdvcmtCYW5kd2lkdGhHYnBzUmVxdWVzdFxuQmFzZWxpbmVQZXJmb3JtYW5jZUZhY3RvcnM/OiBCYXNlbGluZVBlcmZvcm1hbmNlRmFjdG9yc1JlcXVlc3RcbkJhc2VsaW5lRWJzQmFuZHdpZHRoTWJwcz86IEJhc2VsaW5lRWJzQmFuZHdpZHRoTWJwc1JlcXVlc3Rcbi8qKlxuICogW1ByaWNlIHByb3RlY3Rpb25dIFRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgU3BvdCBJbnN0YW5jZXMsIGFzIGEgcGVyY2VudGFnZSBoaWdoZXIgdGhhbiBhbiBpZGVudGlmaWVkIFNwb3QgcHJpY2UuIFRoZSBpZGVudGlmaWVkIFNwb3QgcHJpY2UgaXMgdGhlIHByaWNlIG9mIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgd2l0aCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiBJZiBubyBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIG1hdGNoZXMgeW91ciBhdHRyaWJ1dGVzLCB0aGVuIHRoZSBpZGVudGlmaWVkIHByaWNlIGlzIGZyb20gZWl0aGVyIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyBvciwgZmFpbGluZyB0aGF0LCB0aGUgbG93ZXN0IHByaWNlZCBwcmV2aW91cyBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIHRoYXQgbWF0Y2ggeW91ciBhdHRyaWJ1dGVzLiBXaGVuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlbGVjdHMgaW5zdGFuY2UgdHlwZXMgd2l0aCB5b3VyIGF0dHJpYnV0ZXMsIHdlIHdpbGwgZXhjbHVkZSBpbnN0YW5jZSB0eXBlcyB3aG9zZSBwcmljZSBleGNlZWRzIHlvdXIgc3BlY2lmaWVkIHRocmVzaG9sZC5cbiAqICBUaGUgcGFyYW1ldGVyIGFjY2VwdHMgYW4gaW50ZWdlciwgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgaW50ZXJwcmV0cyBhcyBhIHBlcmNlbnRhZ2UuIFxuICogIElmIHlvdSBzZXQgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgdG8gYGB2Y3B1YGAgb3IgYGBtZW1vcnktbWliYGAsIHRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBpcyBiYXNlZCBvbiB0aGUgcGVyLXZDUFUgb3IgcGVyLW1lbW9yeSBwcmljZSBpbnN0ZWFkIG9mIHRoZSBwZXIgaW5zdGFuY2UgcHJpY2UuIFxuICogICBPbmx5IG9uZSBvZiBgYFNwb3RNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2VgYCBvciBgYE1heFNwb3RQcmljZUFzUGVyY2VudGFnZU9mT3B0aW1hbE9uRGVtYW5kUHJpY2VgYCBjYW4gYmUgc3BlY2lmaWVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBlaXRoZXIsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYXV0b21hdGljYWxseSBhcHBseSBvcHRpbWFsIHByaWNlIHByb3RlY3Rpb24gdG8gY29uc2lzdGVudGx5IHNlbGVjdCBmcm9tIGEgd2lkZSByYW5nZSBvZiBpbnN0YW5jZSB0eXBlcy4gVG8gaW5kaWNhdGUgbm8gcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIFNwb3QgSW5zdGFuY2VzLCBtZWFuaW5nIHlvdSB3YW50IHRvIGNvbnNpZGVyIGFsbCBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcywgaW5jbHVkZSBvbmUgb2YgdGhlc2UgcGFyYW1ldGVycyBhbmQgc3BlY2lmeSBhIGhpZ2ggdmFsdWUsIHN1Y2ggYXMgYGA5OTk5OTlgYC5cbiAqL1xuU3BvdE1heFByaWNlUGVyY2VudGFnZU92ZXJMb3dlc3RQcmljZT86IG51bWJlclxuLyoqXG4gKiBMaXN0cyB0aGUgYWNjZWxlcmF0b3JzIHRoYXQgbXVzdCBiZSBvbiBhbiBpbnN0YW5jZSB0eXBlLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgQTEwMCBHUFVzLCBzcGVjaWZ5IGBgYTEwMGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgVjEwMCBHUFVzLCBzcGVjaWZ5IGBgdjEwMGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgSzgwIEdQVXMsIHNwZWNpZnkgYGBrODBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIFQ0IEdQVXMsIHNwZWNpZnkgYGB0NGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgTTYwIEdQVXMsIHNwZWNpZnkgYGBtNjBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQU1EIFJhZGVvbiBQcm8gVjUyMCBHUFVzLCBzcGVjaWZ5IGBgcmFkZW9uLXByby12NTIwYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIFhpbGlueCBWVTlQIEZQR0FzLCBzcGVjaWZ5IGBgdnU5cGBgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgYWNjZWxlcmF0b3JcbiAqL1xuQWNjZWxlcmF0b3JOYW1lcz86IHN0cmluZ1tdXG5BY2NlbGVyYXRvclRvdGFsTWVtb3J5TWlCPzogQWNjZWxlcmF0b3JUb3RhbE1lbW9yeU1pQlJlcXVlc3Rcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgYnVyc3RhYmxlIHBlcmZvcm1hbmNlIGluc3RhbmNlIHR5cGVzIGFyZSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHJlcXVpcmVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCdXJzdGFibGUgcGVyZm9ybWFuY2UgaW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLXBlcmZvcm1hbmNlLWluc3RhbmNlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSBmb3IgTGludXggSW5zdGFuY2VzKi5cbiAqICBEZWZhdWx0OiBgYGV4Y2x1ZGVkYGBcbiAqL1xuQnVyc3RhYmxlUGVyZm9ybWFuY2U/OiBzdHJpbmdcblRvdGFsTG9jYWxTdG9yYWdlR0I/OiBUb3RhbExvY2FsU3RvcmFnZUdCUmVxdWVzdFxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBhbW91bnQgb2YgbWVtb3J5IHBlciB2Q1BVIGZvciBhbiBpbnN0YW5jZSB0eXBlLCBpbiBHaUIuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeUdpQlBlclZDcHVSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1lbW9yeSBtaW5pbXVtIGluIEdpQi5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtZW1vcnkgbWF4aW11bSBpbiBHaUIuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgdkNQVXMgZm9yIGFuIGluc3RhbmNlIHR5cGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVkNwdUNvdW50UmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiB2Q1BVcy5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcy5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGluc3RhbmNlIG1lbW9yeSBzaXplIGZvciBhbiBpbnN0YW5jZSB0eXBlLCBpbiBNaUIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5TWlCUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtZW1vcnkgbWluaW11bSBpbiBNaUIuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWVtb3J5IG1heGltdW0gaW4gTWlCLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIG5ldHdvcmsgaW50ZXJmYWNlcyBmb3IgYW4gaW5zdGFuY2UgdHlwZS5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0ludGVyZmFjZUNvdW50UmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIGFjY2VsZXJhdG9ycyAoR1BVcywgRlBHQXMsIG9yIEFXUyBJbmZlcmVudGlhIGNoaXBzKSBmb3IgYW4gaW5zdGFuY2UgdHlwZS5cbiAqICBUbyBleGNsdWRlIGFjY2VsZXJhdG9yLWVuYWJsZWQgaW5zdGFuY2UgdHlwZXMsIHNldCBgYE1heGBgIHRvIGBgMGBgLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2NlbGVyYXRvckNvdW50UmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIHZhbHVlLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gdmFsdWUuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBhbW91bnQgb2YgbmV0d29yayBiYW5kd2lkdGgsIGluIGdpZ2FiaXRzIHBlciBzZWNvbmQgKEdicHMpLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrQmFuZHdpZHRoR2Jwc1JlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWluaW11bSBhbW91bnQgb2YgbmV0d29yayBiYW5kd2lkdGgsIGluIGdpZ2FiaXRzIHBlciBzZWNvbmQgKEdicHMpLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gYW1vdW50IG9mIG5ldHdvcmsgYmFuZHdpZHRoLCBpbiBnaWdhYml0cyBwZXIgc2Vjb25kIChHYnBzKS5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIEJhc2VsaW5lUGVyZm9ybWFuY2VGYWN0b3JzUmVxdWVzdCB7XG5DcHU/OiBDcHVQZXJmb3JtYW5jZUZhY3RvclJlcXVlc3Rcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3B1UGVyZm9ybWFuY2VGYWN0b3JSZXF1ZXN0IHtcblJlZmVyZW5jZXM/OiBQZXJmb3JtYW5jZUZhY3RvclJlZmVyZW5jZVNldFJlcXVlc3Rcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VSZXF1ZXN0IHtcbkluc3RhbmNlRmFtaWx5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJhc2VsaW5lIGJhbmR3aWR0aCBwZXJmb3JtYW5jZSBmb3IgYW4gaW5zdGFuY2UgdHlwZSwgaW4gTWJwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVCU+KAk29wdGltaXplZCBpbnN0YW5jZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtb3B0aW1pemVkLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlIGZvciBMaW51eCBJbnN0YW5jZXMqLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlbGluZUVic0JhbmR3aWR0aE1icHNSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gdmFsdWUgaW4gTWJwcy5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIHZhbHVlIGluIE1icHMuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSB0b3RhbCBtZW1vcnkgc2l6ZSBmb3IgdGhlIGFjY2VsZXJhdG9ycyBvbiBhbiBpbnN0YW5jZSB0eXBlLCBpbiBNaUIuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VsZXJhdG9yVG90YWxNZW1vcnlNaUJSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1lbW9yeSBtaW5pbXVtIGluIE1pQi5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtZW1vcnkgbWF4aW11bSBpbiBNaUIuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSB0b3RhbCBsb2NhbCBzdG9yYWdlIHNpemUgZm9yIGFuIGluc3RhbmNlIHR5cGUsIGluIEdCLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbExvY2FsU3RvcmFnZUdCUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBzdG9yYWdlIG1pbmltdW0gaW4gR0IuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgc3RvcmFnZSBtYXhpbXVtIGluIEdCLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgYSB0YWcgZm9yIHRoZSBgYFRhZ3NgYCBwcm9wZXJ0eSBvZiBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCkgcmVzb3VyY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXV0b3NjYWxpbmctdGFnZ2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLiBZb3UgY2FuIGZpbmQgYSBzYW1wbGUgdGVtcGxhdGUgc25pcHBldCBpbiB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKiAgQ2xvdWRGb3JtYXRpb24gYWRkcyB0aGUgZm9sbG93aW5nIHRhZ3MgdG8gYWxsIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGFzc29jaWF0ZWQgaW5zdGFuY2VzOiBcbiAqICAgKyAgYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLW5hbWVcbiAqICAgKyAgYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLWlkXG4gKiAgICsgIGF3czpjbG91ZGZvcm1hdGlvbjpsb2dpY2FsLWlkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnUHJvcGVydHkge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWcga2V5LlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBTZXQgdG8gYGB0cnVlYGAgaWYgeW91IHdhbnQgQ2xvdWRGb3JtYXRpb24gdG8gY29weSB0aGUgdGFnIHRvIEVDMiBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgYXMgcGFydCBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBTZXQgdG8gYGBmYWxzZWBgIGlmIHlvdSB3YW50IHRoZSB0YWcgYXR0YWNoZWQgb25seSB0byB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGFuZCBub3QgY29waWVkIHRvIGFueSBpbnN0YW5jZXMgbGF1bmNoZWQgYXMgcGFydCBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5Qcm9wYWdhdGVBdExhdW5jaDogYm9vbGVhblxufVxuLyoqXG4gKiBBIHN0cnVjdHVyZSB0aGF0IHNwZWNpZmllcyBhbiBBbWF6b24gU05TIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgYGBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uc2BgIHByb3BlcnR5IG9mIHRoZSBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCkgcmVzb3VyY2UuXG4gKiAgRm9yIGFuIGV4YW1wbGUgdGVtcGxhdGUgc25pcHBldCwgc2VlIFtDb25maWd1cmUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9xdWlja3JlZi1lYzItYXV0by1zY2FsaW5nLmh0bWwpLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0dldCBBbWF6b24gU05TIG5vdGlmaWNhdGlvbnMgd2hlbiB5b3VyIEF1dG8gU2NhbGluZyBncm91cCBzY2FsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL0FTR2V0dGluZ05vdGlmaWNhdGlvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uMSB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFNOUyB0b3BpYy5cbiAqL1xuVG9waWNBUk46IChzdHJpbmcgfCBzdHJpbmdbXSlcbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgc2VuZCBhIG5vdGlmaWNhdGlvbi4gRXZlbnQgdHlwZXMgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFxuICogICAqQWxsb3dlZCB2YWx1ZXMqOlxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNIYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX1RFUk1JTkFURWBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFX0VSUk9SYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOlRFU1RfTk9USUZJQ0FUSU9OYGBcbiAqL1xuTm90aWZpY2F0aW9uVHlwZXM/OiBzdHJpbmdbXVxufVxuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFiaWxpdHlab25lRGlzdHJpYnV0aW9uIHtcbkNhcGFjaXR5RGlzdHJpYnV0aW9uU3RyYXRlZ3k/OiAoXCJiYWxhbmNlZC1iZXN0LWVmZm9ydFwiIHwgXCJiYWxhbmNlZC1vbmx5XCIpXG59XG4vKipcbiAqIGBgTWV0cmljc0NvbGxlY3Rpb25gYCBpcyBhIHByb3BlcnR5IG9mIHRoZSBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCkgcmVzb3VyY2UgdGhhdCBkZXNjcmliZXMgdGhlIGdyb3VwIG1ldHJpY3MgdGhhdCBhbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cCBzZW5kcyB0byBBbWF6b24gQ2xvdWRXYXRjaC4gVGhlc2UgbWV0cmljcyBkZXNjcmliZSB0aGUgZ3JvdXAgcmF0aGVyIHRoYW4gYW55IG9mIGl0cyBpbnN0YW5jZXMuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01vbml0b3IgQ2xvdWRXYXRjaCBtZXRyaWNzIGZvciB5b3VyIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXMtaW5zdGFuY2UtbW9uaXRvcmluZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLiBZb3UgY2FuIGZpbmQgYSBzYW1wbGUgdGVtcGxhdGUgc25pcHBldCBpbiB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljc0NvbGxlY3Rpb24ge1xuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBtZXRyaWNzIHRvIGVuYWJsZS5cbiAqICBZb3UgY2FuIHNwZWNpZnkgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBtZXRyaWNzOlxuICogICArICAgYGBHcm91cE1pblNpemVgYCBcbiAqICAgKyAgIGBgR3JvdXBNYXhTaXplYGAgXG4gKiAgICsgICBgYEdyb3VwRGVzaXJlZENhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwSW5TZXJ2aWNlSW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwUGVuZGluZ0luc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cFN0YW5kYnlJbnN0YW5jZXNgYCBcbiAqICAgKyAgIGBgR3JvdXBUZXJtaW5hdGluZ0luc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cFRvdGFsSW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwSW5TZXJ2aWNlQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBQZW5kaW5nQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBTdGFuZGJ5Q2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBUZXJtaW5hdGluZ0NhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwVG90YWxDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbERlc2lyZWRDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbFdhcm1lZENhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sUGVuZGluZ0NhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sVGVybWluYXRpbmdDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbFRvdGFsQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBBbmRXYXJtUG9vbERlc2lyZWRDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cEFuZFdhcm1Qb29sVG90YWxDYXBhY2l0eWBgIFxuICogICBcbiAqICBJZiB5b3Ugc3BlY2lmeSBgYEdyYW51bGFyaXR5YGAgYW5kIGRvbid0IHNwZWNpZnkgYW55IG1ldHJpY3MsIGFsbCBtZXRyaWNzIGFyZSBlbmFibGVkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBDbG91ZFdhdGNoIG1ldHJpY3MgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1ldHJpY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuTWV0cmljcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBmcmVxdWVuY3kgYXQgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VuZHMgYWdncmVnYXRlZCBkYXRhIHRvIENsb3VkV2F0Y2guIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGlzIGBgMU1pbnV0ZWBgLlxuICovXG5HcmFudWxhcml0eTogc3RyaW5nXG59XG4vKipcbiAqIEFuIGluc3RhbmNlIG1haW50ZW5hbmNlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2V0IGluc3RhbmNlIG1haW50ZW5hbmNlIHBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1pbnN0YW5jZS1tYWludGVuYW5jZS1wb2xpY3kuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZU1haW50ZW5hbmNlUG9saWN5IHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSB1cHBlciB0aHJlc2hvbGQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkIGNhcGFjaXR5IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIEl0IHJlcHJlc2VudHMgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgZ3JvdXAgdGhhdCBjYW4gYmUgaW4gc2VydmljZSBhbmQgaGVhbHRoeSwgb3IgcGVuZGluZywgdG8gc3VwcG9ydCB5b3VyIHdvcmtsb2FkIHdoZW4gcmVwbGFjaW5nIGluc3RhbmNlcy4gVmFsdWUgcmFuZ2UgaXMgMTAwIHRvIDIwMC4gVG8gY2xlYXIgYSBwcmV2aW91c2x5IHNldCB2YWx1ZSwgc3BlY2lmeSBhIHZhbHVlIG9mIGBgLTFgYC5cbiAqICBCb3RoIGBgTWluSGVhbHRoeVBlcmNlbnRhZ2VgYCBhbmQgYGBNYXhIZWFsdGh5UGVyY2VudGFnZWBgIG11c3QgYmUgc3BlY2lmaWVkLCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMTAwLiBBIGxhcmdlIHJhbmdlIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IGNhbiBiZSByZXBsYWNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuICovXG5NYXhIZWFsdGh5UGVyY2VudGFnZT86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxvd2VyIHRocmVzaG9sZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGRlc2lyZWQgY2FwYWNpdHkgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cC4gSXQgcmVwcmVzZW50cyB0aGUgbWluaW11bSBwZXJjZW50YWdlIG9mIHRoZSBncm91cCB0byBrZWVwIGluIHNlcnZpY2UsIGhlYWx0aHksIGFuZCByZWFkeSB0byB1c2UgdG8gc3VwcG9ydCB5b3VyIHdvcmtsb2FkIHdoZW4gcmVwbGFjaW5nIGluc3RhbmNlcy4gVmFsdWUgcmFuZ2UgaXMgMCB0byAxMDAuIFRvIGNsZWFyIGEgcHJldmlvdXNseSBzZXQgdmFsdWUsIHNwZWNpZnkgYSB2YWx1ZSBvZiBgYC0xYGAuXG4gKi9cbk1pbkhlYWx0aHlQZXJjZW50YWdlPzogbnVtYmVyXG59XG4vKipcbiAqIElkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGZvciBhIHRyYWZmaWMgc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTb3VyY2VJZGVudGlmaWVyIHtcbi8qKlxuICogUHJvdmlkZXMgYWRkaXRpb25hbCBjb250ZXh0IGZvciB0aGUgdmFsdWUgb2YgYGBJZGVudGlmaWVyYGAuXG4gKiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgdmFsaWQgdmFsdWVzOlxuICogICArICAgYGBlbGJgYCBpZiBgYElkZW50aWZpZXJgYCBpcyB0aGUgbmFtZSBvZiBhIENsYXNzaWMgTG9hZCBCYWxhbmNlci5cbiAqICAgKyAgIGBgZWxidjJgYCBpZiBgYElkZW50aWZpZXJgYCBpcyB0aGUgQVJOIG9mIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIsIEdhdGV3YXkgTG9hZCBCYWxhbmNlciwgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRhcmdldCBncm91cC5cbiAqICAgKyAgIGBgdnBjLWxhdHRpY2VgYCBpZiBgYElkZW50aWZpZXJgYCBpcyB0aGUgQVJOIG9mIGEgVlBDIExhdHRpY2UgdGFyZ2V0IGdyb3VwLlxuICogICBcbiAqICBSZXF1aXJlZCBpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIENsYXNzaWMgTG9hZCBCYWxhbmNlci5cbiAqL1xuVHlwZTogc3RyaW5nXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIHRyYWZmaWMgc291cmNlLlxuICogIEZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycywgR2F0ZXdheSBMb2FkIEJhbGFuY2VycywgTmV0d29yayBMb2FkIEJhbGFuY2VycywgYW5kIFZQQyBMYXR0aWNlLCB0aGlzIHdpbGwgYmUgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGZvciBhIHRhcmdldCBncm91cCBpbiB0aGlzIGFjY291bnQgYW5kIFJlZ2lvbi4gRm9yIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMsIHRoaXMgd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyIGluIHRoaXMgYWNjb3VudCBhbmQgUmVnaW9uLlxuICogIEZvciBleGFtcGxlOiBcbiAqICAgKyAgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBBUk46IGBgYXJuOmF3czplbGFzdGljbG9hZGJhbGFuY2luZzp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOnRhcmdldGdyb3VwL215LXRhcmdldHMvMTIzNDU2Nzg5MDEyMzQ1NmBgIFxuICogICArICBDbGFzc2ljIExvYWQgQmFsYW5jZXIgbmFtZTogYGBteS1jbGFzc2ljLWxvYWQtYmFsYW5jZXJgYCBcbiAqICAgKyAgVlBDIExhdHRpY2UgQVJOOiBgYGFybjphd3M6dnBjLWxhdHRpY2U6dXMtd2VzdC0yOjEyMzQ1Njc4OTAxMjp0YXJnZXRncm91cC90Zy0xMjM0NTY3ODkwMTIzNDU2YGAgXG4gKiAgIFxuICogIFRvIGdldCB0aGUgQVJOIG9mIGEgdGFyZ2V0IGdyb3VwIGZvciBhIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIsIEdhdGV3YXkgTG9hZCBCYWxhbmNlciwgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLCBvciB0aGUgbmFtZSBvZiBhIENsYXNzaWMgTG9hZCBCYWxhbmNlciwgdXNlIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIFtEZXNjcmliZVRhcmdldEdyb3Vwc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlVGFyZ2V0R3JvdXBzLmh0bWwpIGFuZCBbRGVzY3JpYmVMb2FkQmFsYW5jZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVMb2FkQmFsYW5jZXJzLmh0bWwpIEFQSSBvcGVyYXRpb25zLlxuICogIFRvIGdldCB0aGUgQVJOIG9mIGEgdGFyZ2V0IGdyb3VwIGZvciBWUEMgTGF0dGljZSwgdXNlIHRoZSBWUEMgTGF0dGljZSBbR2V0VGFyZ2V0R3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMtbGF0dGljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRUYXJnZXRHcm91cC5odG1sKSBBUEkgb3BlcmF0aW9uLlxuICovXG5JZGVudGlmaWVyOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlSZXNlcnZhdGlvblNwZWNpZmljYXRpb24ge1xuQ2FwYWNpdHlSZXNlcnZhdGlvblByZWZlcmVuY2U6IHN0cmluZ1xuQ2FwYWNpdHlSZXNlcnZhdGlvblRhcmdldD86IENhcGFjaXR5UmVzZXJ2YXRpb25UYXJnZXRcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlSZXNlcnZhdGlvblRhcmdldCB7XG5DYXBhY2l0eVJlc2VydmF0aW9uSWRzPzogQ2FwYWNpdHlSZXNlcnZhdGlvbklkc1xuQ2FwYWNpdHlSZXNlcnZhdGlvblJlc291cmNlR3JvdXBBcm5zPzogQ2FwYWNpdHlSZXNlcnZhdGlvblJlc291cmNlR3JvdXBBcm5zXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VTZXRSZXF1ZXN0ID0gUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VSZXF1ZXN0W11cbmV4cG9ydCB0eXBlIENhcGFjaXR5UmVzZXJ2YXRpb25JZHMgPSBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgQ2FwYWNpdHlSZXNlcnZhdGlvblJlc291cmNlR3JvdXBBcm5zID0gc3RyaW5nW11cblxuLyoqXG4gKiBUaGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UgZGVmaW5lcyBhbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cCwgd2hpY2ggaXMgYSBjb2xsZWN0aW9uIG9mIEFtYXpvbiBFQzIgaW5zdGFuY2VzIHRoYXQgYXJlIHRyZWF0ZWQgYXMgYSBsb2dpY2FsIGdyb3VwaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgYXV0b21hdGljIHNjYWxpbmcgYW5kIG1hbmFnZW1lbnQuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nLCBzZWUgdGhlIFtBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS93aGF0LWlzLWFtYXpvbi1lYzItYXV0by1zY2FsaW5nLmh0bWwpLiBcbiAqICAgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgY29uZmlndXJlcyBpbnN0YW5jZXMgbGF1bmNoZWQgYXMgcGFydCBvZiBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgZWl0aGVyIGEgW2xhdW5jaCB0ZW1wbGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1sYXVuY2h0ZW1wbGF0ZS5odG1sKSBvciBhIGxhdW5jaCBjb25maWd1cmF0aW9uLiBXZSBzdHJvbmdseSByZWNvbW1lbmQgdGhhdCB5b3UgZG8gbm90IHVzZSBsYXVuY2ggY29uZmlndXJhdGlvbnMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0xhdW5jaCBjb25maWd1cmF0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbGF1bmNoLWNvbmZpZ3VyYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgRm9yIGhlbHAgbWlncmF0aW5nIGZyb20gbGF1bmNoIGNvbmZpZ3VyYXRpb25zIHRvIGxhdW5jaCB0ZW1wbGF0ZXMsIHNlZSBbTWlncmF0ZSBDbG91ZEZvcm1hdGlvbiBzdGFja3MgZnJvbSBsYXVuY2ggY29uZmlndXJhdGlvbnMgdG8gbGF1bmNoIHRlbXBsYXRlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbWlncmF0ZS1sYXVuY2gtY29uZmlndXJhdGlvbnMtd2l0aC1jbG91ZGZvcm1hdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfQVVUT1NDQUxJTkdfQVVUT1NDQUxJTkdHUk9VUCB7XG4vKipcbiAqIE9uZSBvciBtb3JlIGxpZmVjeWNsZSBob29rcyB0byBhZGQgdG8gdGhlIEF1dG8gU2NhbGluZyBncm91cCBiZWZvcmUgaW5zdGFuY2VzIGFyZSBsYXVuY2hlZC5cbiAqL1xuTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25MaXN0PzogTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25bXVxuLyoqXG4gKiBBIGxpc3Qgb2YgQ2xhc3NpYyBMb2FkIEJhbGFuY2VycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBdXRvIFNjYWxpbmcgZ3JvdXAuIEZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycywgTmV0d29yayBMb2FkIEJhbGFuY2VycywgYW5kIEdhdGV3YXkgTG9hZCBCYWxhbmNlcnMsIHNwZWNpZnkgdGhlIGBgVGFyZ2V0R3JvdXBBUk5zYGAgcHJvcGVydHkgaW5zdGVhZC5cbiAqL1xuTG9hZEJhbGFuY2VyTmFtZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gdG8gdXNlIHRvIGxhdW5jaCBpbnN0YW5jZXMuXG4gKiAgUmVxdWlyZWQgb25seSBpZiB5b3UgZG9uJ3Qgc3BlY2lmeSBgYExhdW5jaFRlbXBsYXRlYGAsIGBgTWl4ZWRJbnN0YW5jZXNQb2xpY3lgYCwgb3IgYGBJbnN0YW5jZUlkYGAuXG4gKi9cbkxhdW5jaENvbmZpZ3VyYXRpb25OYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgc2VydmljZS1saW5rZWQgcm9sZSB0aGF0IHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNlcyB0byBjYWxsIG90aGVyIEFXUyBzZXJ2aWNlIG9uIHlvdXIgYmVoYWxmLiBCeSBkZWZhdWx0LCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB1c2VzIGEgc2VydmljZS1saW5rZWQgcm9sZSBuYW1lZCBgYEFXU1NlcnZpY2VSb2xlRm9yQXV0b1NjYWxpbmdgYCwgd2hpY2ggaXQgY3JlYXRlcyBpZiBpdCBkb2VzIG5vdCBleGlzdC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2VydmljZS1saW5rZWQgcm9sZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2F1dG9zY2FsaW5nLXNlcnZpY2UtbGlua2VkLXJvbGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuU2VydmljZUxpbmtlZFJvbGVBUk4/OiBzdHJpbmdcbkF2YWlsYWJpbGl0eVpvbmVJbXBhaXJtZW50UG9saWN5PzogQXZhaWxhYmlsaXR5Wm9uZUltcGFpcm1lbnRQb2xpY3lcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lcyAoQVJOKSBvZiB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0YXJnZXQgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIEluc3RhbmNlcyBhcmUgcmVnaXN0ZXJlZCBhcyB0YXJnZXRzIHdpdGggdGhlIHRhcmdldCBncm91cHMuIFRoZSB0YXJnZXQgZ3JvdXBzIHJlY2VpdmUgaW5jb21pbmcgdHJhZmZpYyBhbmQgcm91dGUgcmVxdWVzdHMgdG8gb25lIG9yIG1vcmUgcmVnaXN0ZXJlZCB0YXJnZXRzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2UgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byBkaXN0cmlidXRlIHRyYWZmaWMgYWNyb3NzIHRoZSBpbnN0YW5jZXMgaW4geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2F1dG9zY2FsaW5nLWxvYWQtYmFsYW5jZXIuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuVGFyZ2V0R3JvdXBBUk5zPzogc3RyaW5nW11cbi8qKlxuICogKk9ubHkgbmVlZGVkIGlmIHlvdSB1c2Ugc2ltcGxlIHNjYWxpbmcgcG9saWNpZXMuKiBcbiAqICBUaGUgYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIGJldHdlZW4gb25lIHNjYWxpbmcgYWN0aXZpdHkgZW5kaW5nIGFuZCBhbm90aGVyIG9uZSBzdGFydGluZyBkdWUgdG8gc2ltcGxlIHNjYWxpbmcgcG9saWNpZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NjYWxpbmcgY29vbGRvd25zIGZvciBBbWF6b24gRUMyIEF1dG8gU2NhbGluZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1zY2FsaW5nLWNvb2xkb3ducy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICogIERlZmF1bHQ6IGBgMzAwYGAgc2Vjb25kc1xuICovXG5Db29sZG93bj86IHN0cmluZ1xuLyoqXG4gKiBDb25maWd1cmVzIGFuIEF1dG8gU2NhbGluZyBncm91cCB0byBzZW5kIG5vdGlmaWNhdGlvbnMgd2hlbiBzcGVjaWZpZWQgZXZlbnRzIHRha2UgcGxhY2UuXG4gKi9cbk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zPzogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbltdXG4vKipcbiAqIFRoZSBkZXNpcmVkIGNhcGFjaXR5IGlzIHRoZSBpbml0aWFsIGNhcGFjaXR5IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgYXQgdGhlIHRpbWUgb2YgaXRzIGNyZWF0aW9uIGFuZCB0aGUgY2FwYWNpdHkgaXQgYXR0ZW1wdHMgdG8gbWFpbnRhaW4uIEl0IGNhbiBzY2FsZSBiZXlvbmQgdGhpcyBjYXBhY2l0eSBpZiB5b3UgY29uZmlndXJlIGF1dG9tYXRpYyBzY2FsaW5nLlxuICogIFRoZSBudW1iZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBncm91cC4gSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGEgZGVzaXJlZCBjYXBhY2l0eSB3aGVuIGNyZWF0aW5nIHRoZSBzdGFjaywgdGhlIGRlZmF1bHQgaXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAuXG4gKiAgQ2xvdWRGb3JtYXRpb24gbWFya3MgdGhlIEF1dG8gU2NhbGluZyBncm91cCBhcyBzdWNjZXNzZnVsIChieSBzZXR0aW5nIGl0cyBzdGF0dXMgdG8gQ1JFQVRFX0NPTVBMRVRFKSB3aGVuIHRoZSBkZXNpcmVkIGNhcGFjaXR5IGlzIHJlYWNoZWQuIEhvd2V2ZXIsIGlmIGEgbWF4aW11bSBTcG90IHByaWNlIGlzIHNldCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlIG9yIGxhdW5jaCBjb25maWd1cmF0aW9uIHRoYXQgeW91IHNwZWNpZmllZCwgdGhlbiBkZXNpcmVkIGNhcGFjaXR5IGlzIG5vdCB1c2VkIGFzIGEgY3JpdGVyaWEgZm9yIHN1Y2Nlc3MuIFdoZXRoZXIgeW91ciByZXF1ZXN0IGlzIGZ1bGZpbGxlZCBkZXBlbmRzIG9uIFNwb3QgSW5zdGFuY2UgY2FwYWNpdHkgYW5kIHlvdXIgbWF4aW11bSBwcmljZS5cbiAqL1xuRGVzaXJlZENhcGFjaXR5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3YWl0cyBiZWZvcmUgY2hlY2tpbmcgdGhlIGhlYWx0aCBzdGF0dXMgb2YgYW4gRUMyIGluc3RhbmNlIHRoYXQgaGFzIGNvbWUgaW50byBzZXJ2aWNlIGFuZCBtYXJraW5nIGl0IHVuaGVhbHRoeSBkdWUgdG8gYSBmYWlsZWQgaGVhbHRoIGNoZWNrLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGluc3RhbmNlcyBkbyBub3QgaW1tZWRpYXRlbHkgcGFzcyB0aGVpciBoZWFsdGggY2hlY2tzIGFmdGVyIHRoZXkgZW50ZXIgdGhlIGBgSW5TZXJ2aWNlYGAgc3RhdGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NldCB0aGUgaGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZCBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgRGVmYXVsdDogYGAwYGAgc2Vjb25kc1xuICovXG5IZWFsdGhDaGVja0dyYWNlUGVyaW9kPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgdW50aWwgYSBuZXcgaW5zdGFuY2UgaXMgY29uc2lkZXJlZCB0byBoYXZlIGZpbmlzaGVkIGluaXRpYWxpemluZyBhbmQgcmVzb3VyY2UgY29uc3VtcHRpb24gdG8gYmVjb21lIHN0YWJsZSBhZnRlciBpdCBlbnRlcnMgdGhlIGBgSW5TZXJ2aWNlYGAgc3RhdGUuIFxuICogIER1cmluZyBhbiBpbnN0YW5jZSByZWZyZXNoLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3YWl0cyBmb3IgdGhlIHdhcm0tdXAgcGVyaW9kIGFmdGVyIGl0IHJlcGxhY2VzIGFuIGluc3RhbmNlIGJlZm9yZSBpdCBtb3ZlcyBvbiB0byByZXBsYWNpbmcgdGhlIG5leHQgaW5zdGFuY2UuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGFsc28gd2FpdHMgZm9yIHRoZSB3YXJtLXVwIHBlcmlvZCBiZWZvcmUgYWdncmVnYXRpbmcgdGhlIG1ldHJpY3MgZm9yIG5ldyBpbnN0YW5jZXMgd2l0aCBleGlzdGluZyBpbnN0YW5jZXMgaW4gdGhlIEFtYXpvbiBDbG91ZFdhdGNoIG1ldHJpY3MgdGhhdCBhcmUgdXNlZCBmb3Igc2NhbGluZywgcmVzdWx0aW5nIGluIG1vcmUgcmVsaWFibGUgdXNhZ2UgZGF0YS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2V0IHRoZSBkZWZhdWx0IGluc3RhbmNlIHdhcm11cCBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWRlZmF1bHQtaW5zdGFuY2Utd2FybXVwLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgIFRvIG1hbmFnZSB2YXJpb3VzIHdhcm0tdXAgc2V0dGluZ3MgYXQgdGhlIGdyb3VwIGxldmVsLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3Ugc2V0IHRoZSBkZWZhdWx0IGluc3RhbmNlIHdhcm11cCwgKmV2ZW4gaWYgaXQgaXMgc2V0IHRvIDAgc2Vjb25kcyouIFRvIHJlbW92ZSBhIHZhbHVlIHRoYXQgeW91IHByZXZpb3VzbHkgc2V0LCBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBidXQgc3BlY2lmeSBgYC0xYGAgZm9yIHRoZSB2YWx1ZS4gSG93ZXZlciwgd2Ugc3Ryb25nbHkgcmVjb21tZW5kIGtlZXBpbmcgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2FybXVwIGVuYWJsZWQgYnkgc3BlY2lmeWluZyBhIHZhbHVlIG9mIGBgMGBgIG9yIG90aGVyIG5vbWluYWwgdmFsdWUuXG4gKiAgIERlZmF1bHQ6IE5vbmVcbiAqL1xuRGVmYXVsdEluc3RhbmNlV2FybXVwPzogbnVtYmVyXG5Ta2lwWm9uYWxTaGlmdFZhbGlkYXRpb24/OiBib29sZWFuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIG5ld2x5IGxhdW5jaGVkIGluc3RhbmNlcyBhcmUgcHJvdGVjdGVkIGZyb20gdGVybWluYXRpb24gYnkgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2hlbiBzY2FsaW5nIGluLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwcmV2ZW50aW5nIGluc3RhbmNlcyBmcm9tIHRlcm1pbmF0aW5nIG9uIHNjYWxlIGluLCBzZWUgW1VzZSBpbnN0YW5jZSBzY2FsZS1pbiBwcm90ZWN0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWluc3RhbmNlLXByb3RlY3Rpb24uaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuTmV3SW5zdGFuY2VzUHJvdGVjdGVkRnJvbVNjYWxlSW4/OiBib29sZWFuXG5MYXVuY2hUZW1wbGF0ZT86IExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvblxuTWl4ZWRJbnN0YW5jZXNQb2xpY3k/OiBNaXhlZEluc3RhbmNlc1BvbGljeVxuLyoqXG4gKiBBIGxpc3Qgb2Ygc3VibmV0IElEcyBmb3IgYSB2aXJ0dWFsIHByaXZhdGUgY2xvdWQgKFZQQykgd2hlcmUgaW5zdGFuY2VzIGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FuIGJlIGNyZWF0ZWQuXG4gKiAgSWYgdGhpcyByZXNvdXJjZSBzcGVjaWZpZXMgcHVibGljIHN1Ym5ldHMgYW5kIGlzIGFsc28gaW4gYSBWUEMgdGhhdCBpcyBkZWZpbmVkIGluIHRoZSBzYW1lIHN0YWNrIHRlbXBsYXRlLCB5b3UgbXVzdCB1c2UgdGhlIFtEZXBlbmRzT24gYXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLWRlcGVuZHNvbi5odG1sKSB0byBkZWNsYXJlIGEgZGVwZW5kZW5jeSBvbiB0aGUgW1ZQQy1nYXRld2F5IGF0dGFjaG1lbnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBjLWdhdGV3YXktYXR0YWNobWVudC5odG1sKS5cbiAqICAgV2hlbiB5b3UgdXBkYXRlIGBgVlBDWm9uZUlkZW50aWZpZXJgYCwgdGhpcyByZXRhaW5zIHRoZSBzYW1lIEF1dG8gU2NhbGluZyBncm91cCBhbmQgcmVwbGFjZXMgb2xkIGluc3RhbmNlcyB3aXRoIG5ldyBvbmVzLCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBzdWJuZXRzLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBob3cgQ2xvdWRGb3JtYXRpb24gaGFuZGxlcyB0aGVzZSB1cGRhdGVzIGJ5IHVzaW5nIGFuIFtVcGRhdGVQb2xpY3kgYXR0cmlidXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtYXR0cmlidXRlLXVwZGF0ZXBvbGljeS5odG1sKS5cbiAqICAgUmVxdWlyZWQgdG8gbGF1bmNoIGluc3RhbmNlcyBpbnRvIGEgbm9uZGVmYXVsdCBWUEMuIElmIHlvdSBzcGVjaWZ5IGBgVlBDWm9uZUlkZW50aWZpZXJgYCB3aXRoIGBgQXZhaWxhYmlsaXR5Wm9uZXNgYCwgdGhlIHN1Ym5ldHMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgdGhpcyBwcm9wZXJ0eSBtdXN0IHJlc2lkZSBpbiB0aG9zZSBBdmFpbGFiaWxpdHkgWm9uZXMuXG4gKi9cblZQQ1pvbmVJZGVudGlmaWVyPzogc3RyaW5nW11cbi8qKlxuICogT25lIG9yIG1vcmUgdGFncy4gWW91IGNhbiB0YWcgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgYW5kIHByb3BhZ2F0ZSB0aGUgdGFncyB0byB0aGUgQW1hem9uIEVDMiBpbnN0YW5jZXMgaXQgbGF1bmNoZXMuIFRhZ3MgYXJlIG5vdCBwcm9wYWdhdGVkIHRvIEFtYXpvbiBFQlMgdm9sdW1lcy4gVG8gYWRkIHRhZ3MgdG8gQW1hem9uIEVCUyB2b2x1bWVzLCBzcGVjaWZ5IHRoZSB0YWdzIGluIGEgbGF1bmNoIHRlbXBsYXRlIGJ1dCB1c2UgY2F1dGlvbi4gSWYgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBzcGVjaWZpZXMgYW4gaW5zdGFuY2UgdGFnIHdpdGggYSBrZXkgdGhhdCBpcyBhbHNvIHNwZWNpZmllZCBmb3IgdGhlIEF1dG8gU2NhbGluZyBncm91cCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgb3ZlcnJpZGVzIHRoZSB2YWx1ZSBvZiB0aGF0IGluc3RhbmNlIHRhZyB3aXRoIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgdGhlIEF1dG8gU2NhbGluZyBncm91cC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy10YWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cblRhZ3M/OiBUYWdQcm9wZXJ0eVtdXG4vKipcbiAqIFJlc2VydmVkLlxuICovXG5Db250ZXh0Pzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIENhcGFjaXR5IFJlYmFsYW5jaW5nIGlzIGVuYWJsZWQuIE90aGVyd2lzZSwgQ2FwYWNpdHkgUmViYWxhbmNpbmcgaXMgZGlzYWJsZWQuIFdoZW4geW91IHR1cm4gb24gQ2FwYWNpdHkgUmViYWxhbmNpbmcsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGF0dGVtcHRzIHRvIGxhdW5jaCBhIFNwb3QgSW5zdGFuY2Ugd2hlbmV2ZXIgQW1hem9uIEVDMiBub3RpZmllcyB0aGF0IGEgU3BvdCBJbnN0YW5jZSBpcyBhdCBhbiBlbGV2YXRlZCByaXNrIG9mIGludGVycnVwdGlvbi4gQWZ0ZXIgbGF1bmNoaW5nIGEgbmV3IGluc3RhbmNlLCBpdCB0aGVuIHRlcm1pbmF0ZXMgYW4gb2xkIGluc3RhbmNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtVc2UgQ2FwYWNpdHkgUmViYWxhbmNpbmcgdG8gaGFuZGxlIEFtYXpvbiBFQzIgU3BvdCBJbnRlcnJ1cHRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWNhcGFjaXR5LXJlYmFsYW5jaW5nLmh0bWwpIGluIHRoZSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5DYXBhY2l0eVJlYmFsYW5jZT86IGJvb2xlYW5cbi8qKlxuICogVGhlIElEIG9mIHRoZSBpbnN0YW5jZSB1c2VkIHRvIGJhc2UgdGhlIGxhdW5jaCBjb25maWd1cmF0aW9uIG9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGUgYW4gQXV0byBTY2FsaW5nIGdyb3VwIHVzaW5nIGFuIEVDMiBpbnN0YW5jZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvY3JlYXRlLWFzZy1mcm9tLWluc3RhbmNlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgSWYgeW91IHNwZWNpZnkgYGBMYXVuY2hUZW1wbGF0ZWBgLCBgYE1peGVkSW5zdGFuY2VzUG9saWN5YGAsIG9yIGBgTGF1bmNoQ29uZmlndXJhdGlvbk5hbWVgYCwgZG9uJ3Qgc3BlY2lmeSBgYEluc3RhbmNlSWRgYC5cbiAqL1xuSW5zdGFuY2VJZD86IHN0cmluZ1xuLyoqXG4gKiBBIGxpc3Qgb2YgQXZhaWxhYmlsaXR5IFpvbmVzIHdoZXJlIGluc3RhbmNlcyBpbiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGNhbiBiZSBjcmVhdGVkLiBVc2VkIGZvciBsYXVuY2hpbmcgaW50byB0aGUgZGVmYXVsdCBWUEMgc3VibmV0IGluIGVhY2ggQXZhaWxhYmlsaXR5IFpvbmUgd2hlbiBub3QgdXNpbmcgdGhlIGBgVlBDWm9uZUlkZW50aWZpZXJgYCBwcm9wZXJ0eSwgb3IgZm9yIGF0dGFjaGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlIHdoZW4gYW4gZXhpc3RpbmcgbmV0d29yayBpbnRlcmZhY2UgSUQgaXMgc3BlY2lmaWVkIGluIGEgbGF1bmNoIHRlbXBsYXRlLlxuICovXG5BdmFpbGFiaWxpdHlab25lcz86IHN0cmluZ1tdXG5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uPzogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbjFcbkF2YWlsYWJpbGl0eVpvbmVEaXN0cmlidXRpb24/OiBBdmFpbGFiaWxpdHlab25lRGlzdHJpYnV0aW9uXG4vKipcbiAqIEVuYWJsZXMgdGhlIG1vbml0b3Jpbmcgb2YgZ3JvdXAgbWV0cmljcyBvZiBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAuIEJ5IGRlZmF1bHQsIHRoZXNlIG1ldHJpY3MgYXJlIGRpc2FibGVkLlxuICovXG5NZXRyaWNzQ29sbGVjdGlvbj86IE1ldHJpY3NDb2xsZWN0aW9uW11cbkluc3RhbmNlTWFpbnRlbmFuY2VQb2xpY3k/OiBJbnN0YW5jZU1haW50ZW5hbmNlUG9saWN5XG4vKipcbiAqIFRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGdyb3VwLlxuICogICBXaXRoIGEgbWl4ZWQgaW5zdGFuY2VzIHBvbGljeSB0aGF0IHVzZXMgaW5zdGFuY2Ugd2VpZ2h0aW5nLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBtYXkgbmVlZCB0byBnbyBhYm92ZSBgYE1heFNpemVgYCB0byBtZWV0IHlvdXIgY2FwYWNpdHkgcmVxdWlyZW1lbnRzLiBJbiB0aGlzIGV2ZW50LCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIG5ldmVyIGdvIGFib3ZlIGBgTWF4U2l6ZWBgIGJ5IG1vcmUgdGhhbiB5b3VyIGxhcmdlc3QgaW5zdGFuY2Ugd2VpZ2h0ICh3ZWlnaHRzIHRoYXQgZGVmaW5lIGhvdyBtYW55IHVuaXRzIGVhY2ggaW5zdGFuY2UgY29udHJpYnV0ZXMgdG8gdGhlIGRlc2lyZWQgY2FwYWNpdHkgb2YgdGhlIGdyb3VwKS5cbiAqL1xuTWF4U2l6ZTogc3RyaW5nXG4vKipcbiAqIFRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIGdyb3VwLlxuICovXG5NaW5TaXplOiBzdHJpbmdcbi8qKlxuICogQSBwb2xpY3kgb3IgYSBsaXN0IG9mIHBvbGljaWVzIHRoYXQgYXJlIHVzZWQgdG8gc2VsZWN0IHRoZSBpbnN0YW5jZSB0byB0ZXJtaW5hdGUuIFRoZXNlIHBvbGljaWVzIGFyZSBleGVjdXRlZCBpbiB0aGUgb3JkZXIgdGhhdCB5b3UgbGlzdCB0aGVtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDb25maWd1cmUgdGVybWluYXRpb24gcG9saWNpZXMgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLXRlcm1pbmF0aW9uLXBvbGljaWVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgdmFsdWVzOiBgYERlZmF1bHRgYCB8IGBgQWxsb2NhdGlvblN0cmF0ZWd5YGAgfCBgYENsb3Nlc3RUb05leHRJbnN0YW5jZUhvdXJgYCB8IGBgTmV3ZXN0SW5zdGFuY2VgYCB8IGBgT2xkZXN0SW5zdGFuY2VgYCB8IGBgT2xkZXN0TGF1bmNoQ29uZmlndXJhdGlvbmBgIHwgYGBPbGRlc3RMYXVuY2hUZW1wbGF0ZWBgIHwgYGBhcm46YXdzOmxhbWJkYTpyZWdpb246YWNjb3VudC1pZDpmdW5jdGlvbjpteS1mdW5jdGlvbjpteS1hbGlhc2BgXG4gKi9cblRlcm1pbmF0aW9uUG9saWNpZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgcGVyIFJlZ2lvbiBwZXIgYWNjb3VudC5cbiAqICBUaGUgbmFtZSBjYW4gY29udGFpbiBhbnkgQVNDSUkgY2hhcmFjdGVyIDMzIHRvIDEyNiBpbmNsdWRpbmcgbW9zdCBwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLCBkaWdpdHMsIGFuZCB1cHBlciBhbmQgbG93ZXJjYXNlZCBsZXR0ZXJzLlxuICogICBZb3UgY2Fubm90IHVzZSBhIGNvbG9uICg6KSBpbiB0aGUgbmFtZS5cbiAqL1xuQXV0b1NjYWxpbmdHcm91cE5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHRyYWZmaWMgc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cblRyYWZmaWNTb3VyY2VzPzogVHJhZmZpY1NvdXJjZUlkZW50aWZpZXJbXVxuLyoqXG4gKiBUaGUgdW5pdCBvZiBtZWFzdXJlbWVudCBmb3IgdGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgZGVzaXJlZCBjYXBhY2l0eS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc3VwcG9ydHMgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgZm9yIGF0dHJpYnV0ZS1iYXNlZCBpbnN0YW5jZSB0eXBlIHNlbGVjdGlvbiBvbmx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtDcmVhdGUgYSBtaXhlZCBpbnN0YW5jZXMgZ3JvdXAgdXNpbmcgYXR0cmlidXRlLWJhc2VkIGluc3RhbmNlIHR5cGUgc2VsZWN0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9jcmVhdGUtbWl4ZWQtaW5zdGFuY2VzLWdyb3VwLWF0dHJpYnV0ZS1iYXNlZC1pbnN0YW5jZS10eXBlLXNlbGVjdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICogIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNwZWNpZmllcyBgYHVuaXRzYGAsIHdoaWNoIHRyYW5zbGF0ZXMgaW50byBudW1iZXIgb2YgaW5zdGFuY2VzLlxuICogIFZhbGlkIHZhbHVlczogYGB1bml0c2BgIHwgYGB2Y3B1YGAgfCBgYG1lbW9yeS1taWJgYFxuICovXG5EZXNpcmVkQ2FwYWNpdHlUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwbGFjZW1lbnQgZ3JvdXAgaW50byB3aGljaCB0byBsYXVuY2ggeW91ciBpbnN0YW5jZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1BsYWNlbWVudCBncm91cHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9wbGFjZW1lbnQtZ3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlIGZvciBMaW51eCBJbnN0YW5jZXMqLlxuICogICBBICpjbHVzdGVyKiBwbGFjZW1lbnQgZ3JvdXAgaXMgYSBsb2dpY2FsIGdyb3VwaW5nIG9mIGluc3RhbmNlcyB3aXRoaW4gYSBzaW5nbGUgQXZhaWxhYmlsaXR5IFpvbmUuIFlvdSBjYW5ub3Qgc3BlY2lmeSBtdWx0aXBsZSBBdmFpbGFiaWxpdHkgWm9uZXMgYW5kIGEgY2x1c3RlciBwbGFjZW1lbnQgZ3JvdXAuXG4gKi9cblBsYWNlbWVudEdyb3VwPzogc3RyaW5nXG5DYXBhY2l0eVJlc2VydmF0aW9uU3BlY2lmaWNhdGlvbj86IENhcGFjaXR5UmVzZXJ2YXRpb25TcGVjaWZpY2F0aW9uXG4vKipcbiAqIEEgY29tbWEtc2VwYXJhdGVkIHZhbHVlIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBoZWFsdGggY2hlY2sgdHlwZXMuXG4gKiAgVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBFQzJgYCwgYGBFQlNgYCwgYGBFTEJgYCwgYW5kIGBgVlBDX0xBVFRJQ0VgYC4gYGBFQzJgYCBpcyB0aGUgZGVmYXVsdCBoZWFsdGggY2hlY2sgYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSGVhbHRoIGNoZWNrcyBmb3IgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1oZWFsdGgtY2hlY2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgT25seSBzcGVjaWZ5IGBgRUMyYGAgaWYgeW91IG11c3QgY2xlYXIgYSB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IHNldC5cbiAqL1xuSGVhbHRoQ2hlY2tUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IGFuIGluc3RhbmNlIGNhbiBiZSBpbiBzZXJ2aWNlLiBUaGUgZGVmYXVsdCBpcyBudWxsLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIGVpdGhlciAwIG9yIGEgbnVtYmVyIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA4Niw0MDAgc2Vjb25kcyAoMSBkYXkpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXBsYWNlIEF1dG8gU2NhbGluZyBpbnN0YW5jZXMgYmFzZWQgb24gbWF4aW11bSBpbnN0YW5jZSBsaWZldGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXNnLW1heC1pbnN0YW5jZS1saWZldGltZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5NYXhJbnN0YW5jZUxpZmV0aW1lPzogbnVtYmVyXG59XG4vKipcbiAqIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25gYCBzcGVjaWZpZXMgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhlIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25MaXN0YGAgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS4gQSBsaWZlY3ljbGUgaG9vayBzcGVjaWZpZXMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgb3IgdGVybWluYXRlcyBpbnN0YW5jZXMuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxpZmVjeWNsZSBob29rc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFlvdSBjYW4gZmluZCBhIHNhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0IGluIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hcy1saWZlY3ljbGVob29rLmh0bWwjYXdzLXJlc291cmNlLWFzLWxpZmVjeWNsZWhvb2stLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkxpZmVjeWNsZUhvb2tgYCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsaWZlY3ljbGUgaG9vay5cbiAqL1xuTGlmZWN5Y2xlSG9va05hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZWN5Y2xlIHRyYW5zaXRpb24uIEZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzLCB0aGVyZSBhcmUgdHdvIG1ham9yIGxpZmVjeWNsZSB0cmFuc2l0aW9ucy5cbiAqICAgKyAgVG8gY3JlYXRlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHNjYWxlLW91dCBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNISU5HYGAuXG4gKiAgICsgIFRvIGNyZWF0ZSBhIGxpZmVjeWNsZSBob29rIGZvciBzY2FsZS1pbiBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRJTkdgYC5cbiAqL1xuTGlmZWN5Y2xlVHJhbnNpdGlvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgY2FuIGVsYXBzZSBiZWZvcmUgdGhlIGxpZmVjeWNsZSBob29rIHRpbWVzIG91dC4gVGhlIHJhbmdlIGlzIGZyb20gYGAzMGBgIHRvIGBgNzIwMGBgIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgMzYwMGBgIHNlY29uZHMgKDEgaG91cikuXG4gKi9cbkhlYXJ0YmVhdFRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgYW55IHRpbWUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBub3RpZmljYXRpb24gdGFyZ2V0LlxuICovXG5Ob3RpZmljYXRpb25NZXRhZGF0YT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYWN0aW9uIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdGFrZXMgd2hlbiB0aGUgbGlmZWN5Y2xlIGhvb2sgdGltZW91dCBlbGFwc2VzIG9yIGlmIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZSBvY2N1cnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgQUJBTkRPTmBgLlxuICogIFZhbGlkIHZhbHVlczogYGBDT05USU5VRWBgIHwgYGBBQkFORE9OYGBcbiAqL1xuRGVmYXVsdFJlc3VsdD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIG5vdGlmaWNhdGlvbiB0YXJnZXQgdGhhdCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZW5kcyBub3RpZmljYXRpb25zIHRvIHdoZW4gYW4gaW5zdGFuY2UgaXMgaW4gYSB3YWl0IHN0YXRlIGZvciB0aGUgbGlmZWN5Y2xlIGhvb2suIFlvdSBjYW4gc3BlY2lmeSBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cbk5vdGlmaWNhdGlvblRhcmdldEFSTj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIHB1Ymxpc2ggdG8gdGhlIHNwZWNpZmllZCBub3RpZmljYXRpb24gdGFyZ2V0LiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgdGhpcyByb2xlLCBzZWUgW1ByZXBhcmUgdG8gYWRkIGEgbGlmZWN5Y2xlIGhvb2sgdG8geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3ByZXBhcmUtZm9yLWxpZmVjeWNsZS1ub3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgb25seSBpZiB0aGUgbm90aWZpY2F0aW9uIHRhcmdldCBpcyBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cblJvbGVBUk4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIGltcGFpcm1lbnQgcG9saWN5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2YWlsYWJpbGl0eVpvbmVJbXBhaXJtZW50UG9saWN5IHtcbi8qKlxuICogSWYgYGB0cnVlYGAsIGVuYWJsZSB6b25hbCBzaGlmdCBmb3IgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cblpvbmFsU2hpZnRFbmFibGVkOiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaGVhbHRoIGNoZWNrIGJlaGF2aW9yIGZvciB0aGUgaW1wYWlyZWQgQXZhaWxhYmlsaXR5IFpvbmUgaW4gYW4gYWN0aXZlIHpvbmFsIHNoaWZ0LiBJZiB5b3Ugc2VsZWN0IGBgUmVwbGFjZSB1bmhlYWx0aHlgYCwgaW5zdGFuY2VzIHRoYXQgYXBwZWFyIHVuaGVhbHRoeSB3aWxsIGJlIHJlcGxhY2VkIGluIGFsbCBBdmFpbGFiaWxpdHkgWm9uZXMuIElmIHlvdSBzZWxlY3QgYGBJZ25vcmUgdW5oZWFsdGh5YGAsIGluc3RhbmNlcyB3aWxsIG5vdCBiZSByZXBsYWNlZCBpbiB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgd2l0aCB0aGUgYWN0aXZlIHpvbmFsIHNoaWZ0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBdXRvIFNjYWxpbmcgZ3JvdXAgem9uYWwgc2hpZnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctem9uYWwtc2hpZnQuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuSW1wYWlyZWRab25lSGVhbHRoQ2hlY2tCZWhhdmlvcjogKFwiSWdub3JlVW5oZWFsdGh5XCIgfCBcIlJlcGxhY2VVbmhlYWx0aHlcIilcbn1cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgYW4gQW1hem9uIFNOUyBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGBgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnNgYCBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwpIHJlc291cmNlLlxuICogIEZvciBhbiBleGFtcGxlIHRlbXBsYXRlIHNuaXBwZXQsIHNlZSBbQ29uZmlndXJlIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvcXVpY2tyZWYtZWMyLWF1dG8tc2NhbGluZy5odG1sKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHZXQgQW1hem9uIFNOUyBub3RpZmljYXRpb25zIHdoZW4geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgc2NhbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9BU0dldHRpbmdOb3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFNOUyB0b3BpYy5cbiAqL1xuVG9waWNBUk46IChzdHJpbmcgfCBzdHJpbmdbXSlcbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgc2VuZCBhIG5vdGlmaWNhdGlvbi4gRXZlbnQgdHlwZXMgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFxuICogICAqQWxsb3dlZCB2YWx1ZXMqOlxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNIYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX1RFUk1JTkFURWBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFX0VSUk9SYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOlRFU1RfTk9USUZJQ0FUSU9OYGBcbiAqL1xuTm90aWZpY2F0aW9uVHlwZXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBJbmZvcm1hdGlvbiB1c2VkIHRvIHNwZWNpZnkgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBhbmQgdmVyc2lvbiB0byB1c2UgdG8gbGF1bmNoIGluc3RhbmNlcy4gWW91IGNhbiBhbHRlcm5hdGl2ZWx5IGFzc29jaWF0ZSBhIGxhdW5jaCB0ZW1wbGF0ZSB0byB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGJ5IHNwZWNpZnlpbmcgYSBgYE1peGVkSW5zdGFuY2VzUG9saWN5YGAuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGxhdW5jaCB0ZW1wbGF0ZXMsIHNlZSBbQ3JlYXRlIGEgbGF1bmNoIHRlbXBsYXRlIGZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2NyZWF0ZS1sYXVuY2gtdGVtcGxhdGUuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3Ugb21pdCB0aGlzIHByb3BlcnR5LCB5b3UgbXVzdCBzcGVjaWZ5IGBgTWl4ZWRJbnN0YW5jZXNQb2xpY3lgYCwgYGBMYXVuY2hDb25maWd1cmF0aW9uTmFtZWBgLCBvciBgYEluc3RhbmNlSWRgYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBTcGVjaWZ5aW5nIGBgJExhdGVzdGBgIG9yIGBgJERlZmF1bHRgYCBmb3IgdGhlIHRlbXBsYXRlIHZlcnNpb24gbnVtYmVyIGlzIG5vdCBzdXBwb3J0ZWQuIEhvd2V2ZXIsIHlvdSBjYW4gc3BlY2lmeSBgYExhdGVzdFZlcnNpb25OdW1iZXJgYCBvciBgYERlZmF1bHRWZXJzaW9uTnVtYmVyYGAgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGludHJpbnNpYyBmdW5jdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRm46OkdldEF0dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS1nZXRhdHQuaHRtbCkuXG4gKiAgIEZvciBhbiBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBmdW5jdGlvbiwgc2VlIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwjYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZS5cbiAqL1xuVmVyc2lvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gZW1iZWRkZWQgb2JqZWN0IHRoYXQgc3BlY2lmaWVzIGEgbWl4ZWQgaW5zdGFuY2VzIHBvbGljeS5cbiAqICBUaGUgcG9saWN5IGluY2x1ZGVzIHByb3BlcnRpZXMgdGhhdCBub3Qgb25seSBkZWZpbmUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBPbi1EZW1hbmQgSW5zdGFuY2VzIGFuZCBTcG90IEluc3RhbmNlcywgdGhlIG1heGltdW0gcHJpY2UgdG8gcGF5IGZvciBTcG90IEluc3RhbmNlcyAob3B0aW9uYWwpLCBhbmQgaG93IHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgYWxsb2NhdGVzIGluc3RhbmNlIHR5cGVzIHRvIGZ1bGZpbGwgT24tRGVtYW5kIGFuZCBTcG90IGNhcGFjaXRpZXMsIGJ1dCBhbHNvIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc3BlY2lmeSB0aGUgaW5zdGFuY2UgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbuKAlHRoZSBsYXVuY2ggdGVtcGxhdGUgYW5kIGluc3RhbmNlIHR5cGVzLiBUaGUgcG9saWN5IGNhbiBhbHNvIGluY2x1ZGUgYSB3ZWlnaHQgZm9yIGVhY2ggaW5zdGFuY2UgdHlwZSBhbmQgZGlmZmVyZW50IGxhdW5jaCB0ZW1wbGF0ZXMgZm9yIGluZGl2aWR1YWwgaW5zdGFuY2UgdHlwZXMuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQXV0byBTY2FsaW5nIGdyb3VwcyB3aXRoIG11bHRpcGxlIGluc3RhbmNlIHR5cGVzIGFuZCBwdXJjaGFzZSBvcHRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1peGVkLWluc3RhbmNlcy1ncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaXhlZEluc3RhbmNlc1BvbGljeSB7XG5JbnN0YW5jZXNEaXN0cmlidXRpb24/OiBJbnN0YW5jZXNEaXN0cmlidXRpb25cbkxhdW5jaFRlbXBsYXRlOiBMYXVuY2hUZW1wbGF0ZVxufVxuLyoqXG4gKiBUaGUgaW5zdGFuY2VzIGRpc3RyaWJ1dGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZXNEaXN0cmlidXRpb24ge1xuLyoqXG4gKiBUaGUgYWxsb2NhdGlvbiBzdHJhdGVneSB0byBhcHBseSB0byB5b3VyIE9uLURlbWFuZCBJbnN0YW5jZXMgd2hlbiB0aGV5IGFyZSBsYXVuY2hlZC4gUG9zc2libGUgaW5zdGFuY2UgdHlwZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBvdmVycmlkZXMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSB2YWxpZCB2YWx1ZXM6XG4gKiAgICsgbG93ZXN0LXByaWNlIFVzZXMgcHJpY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGluc3RhbmNlIHR5cGVzIGFyZSB0aGUgaGlnaGVzdCBwcmlvcml0eSwgbGF1bmNoaW5nIHRoZSBsb3dlc3QgcHJpY2VkIGluc3RhbmNlIHR5cGVzIHdpdGhpbiBhbiBBdmFpbGFiaWxpdHkgWm9uZSBmaXJzdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgQXV0byBTY2FsaW5nIGdyb3VwcyB0aGF0IHNwZWNpZnkgSW5zdGFuY2VSZXF1aXJlbWVudHMuICsgcHJpb3JpdGl6ZWQgWW91IHNldCB0aGUgb3JkZXIgb2YgaW5zdGFuY2UgdHlwZXMgZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgcHJpb3JpdHkgKGZyb20gZmlyc3QgdG8gbGFzdCBpbiB0aGUgbGlzdCkuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxhdW5jaGVzIHlvdXIgaGlnaGVzdCBwcmlvcml0eSBpbnN0YW5jZSB0eXBlcyBmaXJzdC4gSWYgYWxsIHlvdXIgT24tRGVtYW5kIGNhcGFjaXR5IGNhbm5vdCBiZSBmdWxmaWxsZWQgdXNpbmcgeW91ciBoaWdoZXN0IHByaW9yaXR5IGluc3RhbmNlIHR5cGUsIHRoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgdGhlIHJlbWFpbmluZyBjYXBhY2l0eSB1c2luZyB0aGUgc2Vjb25kIHByaW9yaXR5IGluc3RhbmNlIHR5cGUsIGFuZCBzbyBvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgQXV0byBTY2FsaW5nIGdyb3VwcyB0aGF0IGRvbid0IHNwZWNpZnkgSW5zdGFuY2VSZXF1aXJlbWVudHMgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBncm91cHMgdGhhdCBkby5cbiAqL1xuT25EZW1hbmRBbGxvY2F0aW9uU3RyYXRlZ3k/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAncyBjYXBhY2l0eSB0aGF0IG11c3QgYmUgZnVsZmlsbGVkIGJ5IE9uLURlbWFuZCBJbnN0YW5jZXMuIFRoaXMgYmFzZSBwb3J0aW9uIGlzIGxhdW5jaGVkIGZpcnN0IGFzIHlvdXIgZ3JvdXAgc2NhbGVzLlxuICogIFRoaXMgbnVtYmVyIGhhcyB0aGUgc2FtZSB1bml0IG9mIG1lYXN1cmVtZW50IGFzIHRoZSBncm91cCdzIGRlc2lyZWQgY2FwYWNpdHkuIElmIHlvdSBjaGFuZ2UgdGhlIGRlZmF1bHQgdW5pdCBvZiBtZWFzdXJlbWVudCAobnVtYmVyIG9mIGluc3RhbmNlcykgYnkgc3BlY2lmeWluZyB3ZWlnaHRlZCBjYXBhY2l0eSB2YWx1ZXMgaW4geW91ciBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIGxpc3QsIG9yIGJ5IGNoYW5naW5nIHRoZSBkZWZhdWx0IGRlc2lyZWQgY2FwYWNpdHkgdHlwZSBzZXR0aW5nIG9mIHRoZSBncm91cCwgeW91IG11c3Qgc3BlY2lmeSB0aGlzIG51bWJlciB1c2luZyB0aGUgc2FtZSB1bml0IG9mIG1lYXN1cmVtZW50LlxuICogIERlZmF1bHQ6IDBcbiAqICAgQW4gdXBkYXRlIHRvIHRoaXMgc2V0dGluZyBtZWFucyBhIGdyYWR1YWwgcmVwbGFjZW1lbnQgb2YgaW5zdGFuY2VzIHRvIGFkanVzdCB0aGUgY3VycmVudCBPbi1EZW1hbmQgSW5zdGFuY2UgbGV2ZWxzLiBXaGVuIHJlcGxhY2luZyBpbnN0YW5jZXMsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxhdW5jaGVzIG5ldyBpbnN0YW5jZXMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBwcmV2aW91cyBvbmVzLlxuICovXG5PbkRlbWFuZEJhc2VDYXBhY2l0eT86IG51bWJlclxuLyoqXG4gKiBDb250cm9scyB0aGUgcGVyY2VudGFnZXMgb2YgT24tRGVtYW5kIEluc3RhbmNlcyBhbmQgU3BvdCBJbnN0YW5jZXMgZm9yIHlvdXIgYWRkaXRpb25hbCBjYXBhY2l0eSBiZXlvbmQgYGBPbkRlbWFuZEJhc2VDYXBhY2l0eWBgLiBFeHByZXNzZWQgYXMgYSBudW1iZXIgKGZvciBleGFtcGxlLCAyMCBzcGVjaWZpZXMgMjAlIE9uLURlbWFuZCBJbnN0YW5jZXMsIDgwJSBTcG90IEluc3RhbmNlcykuIElmIHNldCB0byAxMDAsIG9ubHkgT24tRGVtYW5kIEluc3RhbmNlcyBhcmUgdXNlZC5cbiAqICBEZWZhdWx0OiAxMDBcbiAqICAgQW4gdXBkYXRlIHRvIHRoaXMgc2V0dGluZyBtZWFucyBhIGdyYWR1YWwgcmVwbGFjZW1lbnQgb2YgaW5zdGFuY2VzIHRvIGFkanVzdCB0aGUgY3VycmVudCBPbi1EZW1hbmQgYW5kIFNwb3QgSW5zdGFuY2UgbGV2ZWxzIGZvciB5b3VyIGFkZGl0aW9uYWwgY2FwYWNpdHkgaGlnaGVyIHRoYW4gdGhlIGJhc2UgY2FwYWNpdHkuIFdoZW4gcmVwbGFjaW5nIGluc3RhbmNlcywgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgbmV3IGluc3RhbmNlcyBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHByZXZpb3VzIG9uZXMuXG4gKi9cbk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5PzogbnVtYmVyXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgU3BvdCBJbnN0YW5jZSBwb29scyBhY3Jvc3Mgd2hpY2ggdG8gYWxsb2NhdGUgeW91ciBTcG90IEluc3RhbmNlcy4gVGhlIFNwb3QgcG9vbHMgYXJlIGRldGVybWluZWQgZnJvbSB0aGUgZGlmZmVyZW50IGluc3RhbmNlIHR5cGVzIGluIHRoZSBvdmVycmlkZXMuIFZhbGlkIG9ubHkgd2hlbiB0aGUgYGBTcG90QWxsb2NhdGlvblN0cmF0ZWd5YGAgaXMgYGBsb3dlc3QtcHJpY2VgYC4gVmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMeKAkzIwLlxuICogIERlZmF1bHQ6IDJcbiAqL1xuU3BvdEluc3RhbmNlUG9vbHM/OiBudW1iZXJcbi8qKlxuICogVGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gYXBwbHkgdG8geW91ciBTcG90IEluc3RhbmNlcyB3aGVuIHRoZXkgYXJlIGxhdW5jaGVkLiBQb3NzaWJsZSBpbnN0YW5jZSB0eXBlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyB0aGF0IHlvdSBzcGVjaWZ5LlxuICogIFRoZSBmb2xsb3dpbmcgbGlzdHMgdGhlIHZhbGlkIHZhbHVlczpcbiAqICAgKyBjYXBhY2l0eS1vcHRpbWl6ZWQgUmVxdWVzdHMgU3BvdCBJbnN0YW5jZXMgdXNpbmcgcG9vbHMgdGhhdCBhcmUgb3B0aW1hbGx5IGNob3NlbiBiYXNlZCBvbiB0aGUgYXZhaWxhYmxlIFNwb3QgY2FwYWNpdHkuIFRoaXMgc3RyYXRlZ3kgaGFzIHRoZSBsb3dlc3QgcmlzayBvZiBpbnRlcnJ1cHRpb24uIFRvIGdpdmUgY2VydGFpbiBpbnN0YW5jZSB0eXBlcyBhIGhpZ2hlciBjaGFuY2Ugb2YgbGF1bmNoaW5nIGZpcnN0LCB1c2UgY2FwYWNpdHktb3B0aW1pemVkLXByaW9yaXRpemVkLiArIGNhcGFjaXR5LW9wdGltaXplZC1wcmlvcml0aXplZCBZb3Ugc2V0IHRoZSBvcmRlciBvZiBpbnN0YW5jZSB0eXBlcyBmb3IgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBvdmVycmlkZXMgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBwcmlvcml0eSAoZnJvbSBmaXJzdCB0byBsYXN0IGluIHRoZSBsaXN0KS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgaG9ub3JzIHRoZSBpbnN0YW5jZSB0eXBlIHByaW9yaXRpZXMgb24gYSBiZXN0IGVmZm9ydCBiYXNpcyBidXQgb3B0aW1pemVzIGZvciBjYXBhY2l0eSBmaXJzdC4gTm90ZSB0aGF0IGlmIHRoZSBPbi1EZW1hbmQgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBzZXQgdG8gcHJpb3JpdGl6ZWQsIHRoZSBzYW1lIHByaW9yaXR5IGlzIGFwcGxpZWQgd2hlbiBmdWxmaWxsaW5nIE9uLURlbWFuZCBjYXBhY2l0eS4gVGhpcyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgQXV0byBTY2FsaW5nIGdyb3VwcyB0aGF0IHNwZWNpZnkgSW5zdGFuY2VSZXF1aXJlbWVudHMuICsgbG93ZXN0LXByaWNlIFJlcXVlc3RzIFNwb3QgSW5zdGFuY2VzIHVzaW5nIHRoZSBsb3dlc3QgcHJpY2VkIHBvb2xzIHdpdGhpbiBhbiBBdmFpbGFiaWxpdHkgWm9uZSwgYWNyb3NzIHRoZSBudW1iZXIgb2YgU3BvdCBwb29scyB0aGF0IHlvdSBzcGVjaWZ5IGZvciB0aGUgU3BvdEluc3RhbmNlUG9vbHMgcHJvcGVydHkuIFRvIGVuc3VyZSB0aGF0IHlvdXIgZGVzaXJlZCBjYXBhY2l0eSBpcyBtZXQsIHlvdSBtaWdodCByZWNlaXZlIFNwb3QgSW5zdGFuY2VzIGZyb20gc2V2ZXJhbCBwb29scy4gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSwgYnV0IGl0IG1pZ2h0IGxlYWQgdG8gaGlnaCBpbnRlcnJ1cHRpb24gcmF0ZXMgYmVjYXVzZSB0aGlzIHN0cmF0ZWd5IG9ubHkgY29uc2lkZXJzIGluc3RhbmNlIHByaWNlIGFuZCBub3QgYXZhaWxhYmxlIGNhcGFjaXR5LiArIHByaWNlLWNhcGFjaXR5LW9wdGltaXplZCAocmVjb21tZW5kZWQpIFRoZSBwcmljZSBhbmQgY2FwYWNpdHkgb3B0aW1pemVkIGFsbG9jYXRpb24gc3RyYXRlZ3kgbG9va3MgYXQgYm90aCBwcmljZSBhbmQgY2FwYWNpdHkgdG8gc2VsZWN0IHRoZSBTcG90IEluc3RhbmNlIHBvb2xzIHRoYXQgYXJlIHRoZSBsZWFzdCBsaWtlbHkgdG8gYmUgaW50ZXJydXB0ZWQgYW5kIGhhdmUgdGhlIGxvd2VzdCBwb3NzaWJsZSBwcmljZS5cbiAqL1xuU3BvdEFsbG9jYXRpb25TdHJhdGVneT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWF4aW11bSBwcmljZSBwZXIgdW5pdCBob3VyIHRoYXQgeW91IGFyZSB3aWxsaW5nIHRvIHBheSBmb3IgYSBTcG90IEluc3RhbmNlLiBJZiB5b3VyIG1heGltdW0gcHJpY2UgaXMgbG93ZXIgdGhhbiB0aGUgU3BvdCBwcmljZSBmb3IgdGhlIGluc3RhbmNlIHR5cGVzIHRoYXQgeW91IHNlbGVjdGVkLCB5b3VyIFNwb3QgSW5zdGFuY2VzIGFyZSBub3QgbGF1bmNoZWQuIFdlIGRvIG5vdCByZWNvbW1lbmQgc3BlY2lmeWluZyBhIG1heGltdW0gcHJpY2UgYmVjYXVzZSBpdCBjYW4gbGVhZCB0byBpbmNyZWFzZWQgaW50ZXJydXB0aW9ucy4gV2hlbiBTcG90IEluc3RhbmNlcyBsYXVuY2gsIHlvdSBwYXkgdGhlIGN1cnJlbnQgU3BvdCBwcmljZS4gVG8gcmVtb3ZlIGEgbWF4aW11bSBwcmljZSB0aGF0IHlvdSBwcmV2aW91c2x5IHNldCwgaW5jbHVkZSB0aGUgcHJvcGVydHkgYnV0IHNwZWNpZnkgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBmb3IgdGhlIHZhbHVlLlxuICogICBJZiB5b3Ugc3BlY2lmeSBhIG1heGltdW0gcHJpY2UsIHlvdXIgaW5zdGFuY2VzIHdpbGwgYmUgaW50ZXJydXB0ZWQgbW9yZSBmcmVxdWVudGx5IHRoYW4gaWYgeW91IGRvIG5vdCBzcGVjaWZ5IG9uZS5cbiAqICAgVmFsaWQgUmFuZ2U6IE1pbmltdW0gdmFsdWUgb2YgMC4wMDFcbiAqL1xuU3BvdE1heFByaWNlPzogc3RyaW5nXG59XG4vKipcbiAqIE9uZSBvciBtb3JlIGxhdW5jaCB0ZW1wbGF0ZXMgYW5kIHRoZSBpbnN0YW5jZSB0eXBlcyAob3ZlcnJpZGVzKSB0aGF0IGFyZSB1c2VkIHRvIGxhdW5jaCBFQzIgaW5zdGFuY2VzIHRvIGZ1bGZpbGwgT24tRGVtYW5kIGFuZCBTcG90IGNhcGFjaXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGUge1xuTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uOiBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24xXG4vKipcbiAqIEFueSBwcm9wZXJ0aWVzIHRoYXQgeW91IHNwZWNpZnkgb3ZlcnJpZGUgdGhlIHNhbWUgcHJvcGVydGllcyBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICovXG5PdmVycmlkZXM/OiBMYXVuY2hUZW1wbGF0ZU92ZXJyaWRlc1tdXG59XG4vKipcbiAqIFRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uMSB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgWW91IG11c3Qgc3BlY2lmeSB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZUlEYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuTGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFNwZWNpZnlpbmcgYGAkTGF0ZXN0YGAgb3IgYGAkRGVmYXVsdGBgIGZvciB0aGUgdGVtcGxhdGUgdmVyc2lvbiBudW1iZXIgaXMgbm90IHN1cHBvcnRlZC4gSG93ZXZlciwgeW91IGNhbiBzcGVjaWZ5IGBgTGF0ZXN0VmVyc2lvbk51bWJlcmBgIG9yIGBgRGVmYXVsdFZlcnNpb25OdW1iZXJgYCB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGbjo6R2V0QXR0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLWdldGF0dC5odG1sKS5cbiAqICAgRm9yIGFuIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGZ1bmN0aW9uLCBzZWUgdGhlIFtFeGFtcGxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC0tZXhhbXBsZXMpIHNlY3Rpb24gb2YgdGhlIGBgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cGBgIHJlc291cmNlLlxuICovXG5WZXJzaW9uOiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgWW91IG11c3Qgc3BlY2lmeSB0aGUgYGBMYXVuY2hUZW1wbGF0ZUlEYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuTGF1bmNoVGVtcGxhdGVJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBVc2UgdGhpcyBzdHJ1Y3R1cmUgdG8gbGV0IEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGRvIHRoZSBmb2xsb3dpbmcgd2hlbiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGhhcyBhIG1peGVkIGluc3RhbmNlcyBwb2xpY3k6XG4gKiAgICsgIE92ZXJyaWRlIHRoZSBpbnN0YW5jZSB0eXBlIHRoYXQgaXMgc3BlY2lmaWVkIGluIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgICsgIFVzZSBtdWx0aXBsZSBpbnN0YW5jZSB0eXBlcy5cbiAqICAgXG4gKiAgU3BlY2lmeSB0aGUgaW5zdGFuY2UgdHlwZXMgdGhhdCB5b3Ugd2FudCwgb3IgZGVmaW5lIHlvdXIgaW5zdGFuY2UgcmVxdWlyZW1lbnRzIGluc3RlYWQgYW5kIGxldCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBwcm92aXNpb24gdGhlIGF2YWlsYWJsZSBpbnN0YW5jZSB0eXBlcyB0aGF0IG1lZXQgeW91ciByZXF1aXJlbWVudHMuIFRoaXMgY2FuIHByb3ZpZGUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2l0aCBhIGxhcmdlciBzZWxlY3Rpb24gb2YgaW5zdGFuY2UgdHlwZXMgdG8gY2hvb3NlIGZyb20gd2hlbiBmdWxmaWxsaW5nIFNwb3QgYW5kIE9uLURlbWFuZCBjYXBhY2l0aWVzLiBZb3UgY2FuIHZpZXcgd2hpY2ggaW5zdGFuY2UgdHlwZXMgYXJlIG1hdGNoZWQgYmVmb3JlIHlvdSBhcHBseSB0aGUgaW5zdGFuY2UgcmVxdWlyZW1lbnRzIHRvIHlvdXIgQXV0byBTY2FsaW5nIGdyb3VwLlxuICogIEFmdGVyIHlvdSBkZWZpbmUgeW91ciBpbnN0YW5jZSByZXF1aXJlbWVudHMsIHlvdSBkb24ndCBoYXZlIHRvIGtlZXAgdXBkYXRpbmcgdGhlc2Ugc2V0dGluZ3MgdG8gZ2V0IG5ldyBFQzIgaW5zdGFuY2UgdHlwZXMgYXV0b21hdGljYWxseS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgdXNlcyB0aGUgaW5zdGFuY2UgcmVxdWlyZW1lbnRzIG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBuZXcgRUMyIGluc3RhbmNlIHR5cGUgY2FuIGJlIHVzZWQuXG4gKiAgIGBgTGF1bmNoVGVtcGxhdGVPdmVycmlkZXNgYCBpcyBhIHByb3BlcnR5IG9mIHRoZSBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cCBMYXVuY2hUZW1wbGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1sYXVuY2h0ZW1wbGF0ZS5odG1sKSBwcm9wZXJ0eSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlT3ZlcnJpZGVzIHtcbkxhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbj86IExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjJcbi8qKlxuICogSWYgeW91IHByb3ZpZGUgYSBsaXN0IG9mIGluc3RhbmNlIHR5cGVzIHRvIHVzZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgcHJvdmlkZWQgYnkgZWFjaCBpbnN0YW5jZSB0eXBlIGluIHRlcm1zIG9mIHZpcnR1YWwgQ1BVcywgbWVtb3J5LCBzdG9yYWdlLCB0aHJvdWdocHV0LCBvciBvdGhlciByZWxhdGl2ZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpYy4gV2hlbiBhIFNwb3Qgb3IgT24tRGVtYW5kIEluc3RhbmNlIGlzIGxhdW5jaGVkLCB0aGUgY2FwYWNpdHkgdW5pdHMgY291bnQgdG93YXJkIHRoZSBkZXNpcmVkIGNhcGFjaXR5LiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyBpbnN0YW5jZXMgdW50aWwgdGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgdG90YWxseSBmdWxmaWxsZWQsIGV2ZW4gaWYgdGhpcyByZXN1bHRzIGluIGFuIG92ZXJhZ2UuIEZvciBleGFtcGxlLCBpZiB0aGVyZSBhcmUgdHdvIHVuaXRzIHJlbWFpbmluZyB0byBmdWxmaWxsIGNhcGFjaXR5LCBhbmQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgY2FuIG9ubHkgbGF1bmNoIGFuIGluc3RhbmNlIHdpdGggYSBgYFdlaWdodGVkQ2FwYWNpdHlgYCBvZiBmaXZlIHVuaXRzLCB0aGUgaW5zdGFuY2UgaXMgbGF1bmNoZWQsIGFuZCB0aGUgZGVzaXJlZCBjYXBhY2l0eSBpcyBleGNlZWRlZCBieSB0aHJlZSB1bml0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uZmlndXJlIGluc3RhbmNlIHdlaWdodGluZyBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctbWl4ZWQtaW5zdGFuY2VzLWdyb3Vwcy1pbnN0YW5jZS13ZWlnaHRpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi4gVmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMS05OTkuIFxuICogIElmIHlvdSBzcGVjaWZ5IGEgdmFsdWUgZm9yIGBgV2VpZ2h0ZWRDYXBhY2l0eWBgIGZvciBvbmUgaW5zdGFuY2UgdHlwZSwgeW91IG11c3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYFdlaWdodGVkQ2FwYWNpdHlgYCBmb3IgYWxsIG9mIHRoZW0uXG4gKiAgIEV2ZXJ5IEF1dG8gU2NhbGluZyBncm91cCBoYXMgdGhyZWUgc2l6ZSBwYXJhbWV0ZXJzIChgYERlc2lyZWRDYXBhY2l0eWBgLCBgYE1heFNpemVgYCwgYW5kIGBgTWluU2l6ZWBgKS4gVXN1YWxseSwgeW91IHNldCB0aGVzZSBzaXplcyBiYXNlZCBvbiBhIHNwZWNpZmljIG51bWJlciBvZiBpbnN0YW5jZXMuIEhvd2V2ZXIsIGlmIHlvdSBjb25maWd1cmUgYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5IHRoYXQgZGVmaW5lcyB3ZWlnaHRzIGZvciB0aGUgaW5zdGFuY2UgdHlwZXMsIHlvdSBtdXN0IHNwZWNpZnkgdGhlc2Ugc2l6ZXMgd2l0aCB0aGUgc2FtZSB1bml0cyB0aGF0IHlvdSB1c2UgZm9yIHdlaWdodGluZyBpbnN0YW5jZXMuXG4gKi9cbldlaWdodGVkQ2FwYWNpdHk/OiBzdHJpbmdcbkluc3RhbmNlUmVxdWlyZW1lbnRzPzogSW5zdGFuY2VSZXF1aXJlbWVudHNcbi8qKlxuICogVGhlIGluc3RhbmNlIHR5cGUsIHN1Y2ggYXMgYGBtMy54bGFyZ2VgYC4gWW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YW5jZSB0eXBlIHRoYXQgaXMgc3VwcG9ydGVkIGluIHlvdXIgcmVxdWVzdGVkIFJlZ2lvbiBhbmQgQXZhaWxhYmlsaXR5IFpvbmVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbnN0YW5jZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlIGZvciBMaW51eCBJbnN0YW5jZXMqLlxuICogIFlvdSBjYW4gc3BlY2lmeSB1cCB0byA0MCBpbnN0YW5jZSB0eXBlcyBwZXIgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5JbnN0YW5jZVR5cGU/OiBzdHJpbmdcbn1cbi8qKlxuICogUHJvdmlkZXMgYSBsYXVuY2ggdGVtcGxhdGUgZm9yIHRoZSBzcGVjaWZpZWQgaW5zdGFuY2UgdHlwZSBvciBzZXQgb2YgaW5zdGFuY2UgcmVxdWlyZW1lbnRzLiBGb3IgZXhhbXBsZSwgc29tZSBpbnN0YW5jZSB0eXBlcyBtaWdodCByZXF1aXJlIGEgbGF1bmNoIHRlbXBsYXRlIHdpdGggYSBkaWZmZXJlbnQgQU1JLiBJZiBub3QgcHJvdmlkZWQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB0aGF0J3Mgc3BlY2lmaWVkIGluIHRoZSBgYExhdW5jaFRlbXBsYXRlYGAgZGVmaW5pdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU3BlY2lmeWluZyBhIGRpZmZlcmVudCBsYXVuY2ggdGVtcGxhdGUgZm9yIGFuIGluc3RhbmNlIHR5cGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctbWl4ZWQtaW5zdGFuY2VzLWdyb3Vwcy1sYXVuY2gtdGVtcGxhdGUtb3ZlcnJpZGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFxuICogIFlvdSBjYW4gc3BlY2lmeSB1cCB0byAyMCBsYXVuY2ggdGVtcGxhdGVzIHBlciBBdXRvIFNjYWxpbmcgZ3JvdXAuIFRoZSBsYXVuY2ggdGVtcGxhdGVzIHNwZWNpZmllZCBpbiB0aGUgb3ZlcnJpZGVzIGFuZCBpbiB0aGUgYGBMYXVuY2hUZW1wbGF0ZWBgIGRlZmluaXRpb24gY291bnQgdG93YXJkcyB0aGlzIGxpbWl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjIge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBTcGVjaWZ5aW5nIGBgJExhdGVzdGBgIG9yIGBgJERlZmF1bHRgYCBmb3IgdGhlIHRlbXBsYXRlIHZlcnNpb24gbnVtYmVyIGlzIG5vdCBzdXBwb3J0ZWQuIEhvd2V2ZXIsIHlvdSBjYW4gc3BlY2lmeSBgYExhdGVzdFZlcnNpb25OdW1iZXJgYCBvciBgYERlZmF1bHRWZXJzaW9uTnVtYmVyYGAgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGludHJpbnNpYyBmdW5jdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRm46OkdldEF0dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS1nZXRhdHQuaHRtbCkuXG4gKiAgIEZvciBhbiBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBmdW5jdGlvbiwgc2VlIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwjYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZS5cbiAqL1xuVmVyc2lvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGluc3RhbmNlIHJlcXVpcmVtZW50cy4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgdXNlcyB5b3VyIHNwZWNpZmllZCByZXF1aXJlbWVudHMgdG8gaWRlbnRpZnkgaW5zdGFuY2UgdHlwZXMuIFRoZW4sIGl0IHVzZXMgeW91ciBPbi1EZW1hbmQgYW5kIFNwb3QgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIHRvIGxhdW5jaCBpbnN0YW5jZXMgZnJvbSB0aGVzZSBpbnN0YW5jZSB0eXBlcy5cbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gZm91ciBzZXBhcmF0ZSBzZXRzIG9mIGluc3RhbmNlIHJlcXVpcmVtZW50cyBwZXIgQXV0byBTY2FsaW5nIGdyb3VwLiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvdmlzaW9uaW5nIGluc3RhbmNlcyBmcm9tIGRpZmZlcmVudCBBbWF6b24gTWFjaGluZSBJbWFnZXMgKEFNSXMpIGluIHRoZSBzYW1lIEF1dG8gU2NhbGluZyBncm91cC4gVG8gZG8gdGhpcywgY3JlYXRlIHRoZSBBTUlzIGFuZCBjcmVhdGUgYSBuZXcgbGF1bmNoIHRlbXBsYXRlIGZvciBlYWNoIEFNSS4gVGhlbiwgY3JlYXRlIGEgY29tcGF0aWJsZSBzZXQgb2YgaW5zdGFuY2UgcmVxdWlyZW1lbnRzIGZvciBlYWNoIGxhdW5jaCB0ZW1wbGF0ZS4gXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGBgSW5zdGFuY2VSZXF1aXJlbWVudHNgYCwgeW91IGNhbid0IHNwZWNpZnkgYGBJbnN0YW5jZVR5cGVgYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVJlcXVpcmVtZW50cyB7XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGN1cnJlbnQgb3IgcHJldmlvdXMgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyBhcmUgaW5jbHVkZWQuXG4gKiAgICsgIEZvciBjdXJyZW50IGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMsIHNwZWNpZnkgYGBjdXJyZW50YGAuIFRoZSBjdXJyZW50IGdlbmVyYXRpb24gaW5jbHVkZXMgRUMyIGluc3RhbmNlIHR5cGVzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgdXNlLiBUaGlzIHR5cGljYWxseSBpbmNsdWRlcyB0aGUgbGF0ZXN0IHR3byB0byB0aHJlZSBnZW5lcmF0aW9ucyBpbiBlYWNoIGluc3RhbmNlIGZhbWlseS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5zdGFuY2UgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSBmb3IgTGludXggSW5zdGFuY2VzKi5cbiAqICAgKyAgRm9yIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMsIHNwZWNpZnkgYGBwcmV2aW91c2BgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgY3VycmVudCBvciBwcmV2aW91cyBnZW5lcmF0aW9uXG4gKi9cbkluc3RhbmNlR2VuZXJhdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBMaXN0cyB0aGUgYWNjZWxlcmF0b3IgdHlwZXMgdGhhdCBtdXN0IGJlIG9uIGFuIGluc3RhbmNlIHR5cGUuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEdQVSBhY2NlbGVyYXRvcnMsIHNwZWNpZnkgYGBncHVgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggRlBHQSBhY2NlbGVyYXRvcnMsIHNwZWNpZnkgYGBmcGdhYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIGluZmVyZW5jZSBhY2NlbGVyYXRvcnMsIHNwZWNpZnkgYGBpbmZlcmVuY2VgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IGFjY2VsZXJhdG9yIHR5cGVcbiAqL1xuQWNjZWxlcmF0b3JUeXBlcz86IHN0cmluZ1tdXG5NZW1vcnlHaUJQZXJWQ3B1PzogTWVtb3J5R2lCUGVyVkNwdVJlcXVlc3Rcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2UgdHlwZXMgbXVzdCBoYXZlIGFjY2VsZXJhdG9ycyBieSBzcGVjaWZpYyBtYW51ZmFjdHVyZXJzLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgZGV2aWNlcywgc3BlY2lmeSBgYG52aWRpYWBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBTUQgZGV2aWNlcywgc3BlY2lmeSBgYGFtZGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBV1MgZGV2aWNlcywgc3BlY2lmeSBgYGFtYXpvbi13ZWItc2VydmljZXNgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggWGlsaW54IGRldmljZXMsIHNwZWNpZnkgYGB4aWxpbnhgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IG1hbnVmYWN0dXJlclxuICovXG5BY2NlbGVyYXRvck1hbnVmYWN0dXJlcnM/OiBzdHJpbmdbXVxuVkNwdUNvdW50OiBWQ3B1Q291bnRSZXF1ZXN0XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGluc3RhbmNlIHR5cGVzIHdpdGggaW5zdGFuY2Ugc3RvcmUgdm9sdW1lcyBhcmUgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciByZXF1aXJlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDMiBpbnN0YW5jZSBzdG9yZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0luc3RhbmNlU3RvcmFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSBmb3IgTGludXggSW5zdGFuY2VzKi5cbiAqICBEZWZhdWx0OiBgYGluY2x1ZGVkYGBcbiAqL1xuTG9jYWxTdG9yYWdlPzogc3RyaW5nXG4vKipcbiAqIExpc3RzIHdoaWNoIHNwZWNpZmljIENQVSBtYW51ZmFjdHVyZXJzIHRvIGluY2x1ZGUuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEludGVsIENQVXMsIHNwZWNpZnkgYGBpbnRlbGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBTUQgQ1BVcywgc3BlY2lmeSBgYGFtZGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBV1MgQ1BVcywgc3BlY2lmeSBgYGFtYXpvbi13ZWItc2VydmljZXNgYC5cbiAqICAgXG4gKiAgIERvbid0IGNvbmZ1c2UgdGhlIENQVSBoYXJkd2FyZSBtYW51ZmFjdHVyZXIgd2l0aCB0aGUgQ1BVIGhhcmR3YXJlIGFyY2hpdGVjdHVyZS4gSW5zdGFuY2VzIHdpbGwgYmUgbGF1bmNoZWQgd2l0aCBhIGNvbXBhdGlibGUgQ1BVIGFyY2hpdGVjdHVyZSBiYXNlZCBvbiB0aGUgQW1hem9uIE1hY2hpbmUgSW1hZ2UgKEFNSSkgdGhhdCB5b3Ugc3BlY2lmeSBpbiB5b3VyIGxhdW5jaCB0ZW1wbGF0ZS4gXG4gKiAgIERlZmF1bHQ6IEFueSBtYW51ZmFjdHVyZXJcbiAqL1xuQ3B1TWFudWZhY3R1cmVycz86IHN0cmluZ1tdXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGJhcmUgbWV0YWwgaW5zdGFuY2UgdHlwZXMgYXJlIGluY2x1ZGVkLCBleGNsdWRlZCwgb3IgcmVxdWlyZWQuXG4gKiAgRGVmYXVsdDogYGBleGNsdWRlZGBgXG4gKi9cbkJhcmVNZXRhbD86IHN0cmluZ1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBpbnN0YW5jZSB0eXBlcyBtdXN0IHByb3ZpZGUgT24tRGVtYW5kIEluc3RhbmNlIGhpYmVybmF0aW9uIHN1cHBvcnQuXG4gKiAgRGVmYXVsdDogYGBmYWxzZWBgXG4gKi9cblJlcXVpcmVIaWJlcm5hdGVTdXBwb3J0PzogYm9vbGVhblxuLyoqXG4gKiBbUHJpY2UgcHJvdGVjdGlvbl0gVGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGZvciBTcG90IEluc3RhbmNlcywgYXMgYSBwZXJjZW50YWdlIG9mIGFuIGlkZW50aWZpZWQgT24tRGVtYW5kIHByaWNlLiBUaGUgaWRlbnRpZmllZCBPbi1EZW1hbmQgcHJpY2UgaXMgdGhlIHByaWNlIG9mIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgd2l0aCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiBJZiBubyBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIG1hdGNoZXMgeW91ciBhdHRyaWJ1dGVzLCB0aGVuIHRoZSBpZGVudGlmaWVkIHByaWNlIGlzIGZyb20gZWl0aGVyIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyBvciwgZmFpbGluZyB0aGF0LCB0aGUgbG93ZXN0IHByaWNlZCBwcmV2aW91cyBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIHRoYXQgbWF0Y2ggeW91ciBhdHRyaWJ1dGVzLiBXaGVuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlbGVjdHMgaW5zdGFuY2UgdHlwZXMgd2l0aCB5b3VyIGF0dHJpYnV0ZXMsIHdlIHdpbGwgZXhjbHVkZSBpbnN0YW5jZSB0eXBlcyB3aG9zZSBwcmljZSBleGNlZWRzIHlvdXIgc3BlY2lmaWVkIHRocmVzaG9sZC5cbiAqICBUaGUgcGFyYW1ldGVyIGFjY2VwdHMgYW4gaW50ZWdlciwgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgaW50ZXJwcmV0cyBhcyBhIHBlcmNlbnRhZ2UuXG4gKiAgSWYgeW91IHNldCBgYERlc2lyZWRDYXBhY2l0eVR5cGVgYCB0byBgYHZjcHVgYCBvciBgYG1lbW9yeS1taWJgYCwgdGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGlzIGJhc2VkIG9uIHRoZSBwZXItdkNQVSBvciBwZXItbWVtb3J5IHByaWNlIGluc3RlYWQgb2YgdGhlIHBlciBpbnN0YW5jZSBwcmljZS4gXG4gKiAgIE9ubHkgb25lIG9mIGBgU3BvdE1heFByaWNlUGVyY2VudGFnZU92ZXJMb3dlc3RQcmljZWBgIG9yIGBgTWF4U3BvdFByaWNlQXNQZXJjZW50YWdlT2ZPcHRpbWFsT25EZW1hbmRQcmljZWBgIGNhbiBiZSBzcGVjaWZpZWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGVpdGhlciwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2lsbCBhdXRvbWF0aWNhbGx5IGFwcGx5IG9wdGltYWwgcHJpY2UgcHJvdGVjdGlvbiB0byBjb25zaXN0ZW50bHkgc2VsZWN0IGZyb20gYSB3aWRlIHJhbmdlIG9mIGluc3RhbmNlIHR5cGVzLiBUbyBpbmRpY2F0ZSBubyBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgU3BvdCBJbnN0YW5jZXMsIG1lYW5pbmcgeW91IHdhbnQgdG8gY29uc2lkZXIgYWxsIGluc3RhbmNlIHR5cGVzIHRoYXQgbWF0Y2ggeW91ciBhdHRyaWJ1dGVzLCBpbmNsdWRlIG9uZSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGFuZCBzcGVjaWZ5IGEgaGlnaCB2YWx1ZSwgc3VjaCBhcyBgYDk5OTk5OWBgLlxuICovXG5NYXhTcG90UHJpY2VBc1BlcmNlbnRhZ2VPZk9wdGltYWxPbkRlbWFuZFByaWNlPzogbnVtYmVyXG4vKipcbiAqIFtQcmljZSBwcm90ZWN0aW9uXSBUaGUgcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIE9uLURlbWFuZCBJbnN0YW5jZXMsIGFzIGEgcGVyY2VudGFnZSBoaWdoZXIgdGhhbiBhbiBpZGVudGlmaWVkIE9uLURlbWFuZCBwcmljZS4gVGhlIGlkZW50aWZpZWQgT24tRGVtYW5kIHByaWNlIGlzIHRoZSBwcmljZSBvZiB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIHdpdGggeW91ciBzcGVjaWZpZWQgYXR0cmlidXRlcy4gSWYgbm8gY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSBtYXRjaGVzIHlvdXIgYXR0cmlidXRlcywgdGhlbiB0aGUgaWRlbnRpZmllZCBwcmljZSBpcyBmcm9tIGVpdGhlciB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgb3IsIGZhaWxpbmcgdGhhdCwgdGhlIGxvd2VzdCBwcmljZWQgcHJldmlvdXMgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcy4gV2hlbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZWxlY3RzIGluc3RhbmNlIHR5cGVzIHdpdGggeW91ciBhdHRyaWJ1dGVzLCB3ZSB3aWxsIGV4Y2x1ZGUgaW5zdGFuY2UgdHlwZXMgd2hvc2UgcHJpY2UgZXhjZWVkcyB5b3VyIHNwZWNpZmllZCB0aHJlc2hvbGQuIFxuICogIFRoZSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBpbnRlZ2VyLCB3aGljaCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBpbnRlcnByZXRzIGFzIGEgcGVyY2VudGFnZS5cbiAqICBUbyB0dXJuIG9mZiBwcmljZSBwcm90ZWN0aW9uLCBzcGVjaWZ5IGEgaGlnaCB2YWx1ZSwgc3VjaCBhcyBgYDk5OTk5OWBgLiBcbiAqICBJZiB5b3Ugc2V0IGBgRGVzaXJlZENhcGFjaXR5VHlwZWBgIHRvIGBgdmNwdWBgIG9yIGBgbWVtb3J5LW1pYmBgLCB0aGUgcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgaXMgYXBwbGllZCBiYXNlZCBvbiB0aGUgcGVyLXZDUFUgb3IgcGVyLW1lbW9yeSBwcmljZSBpbnN0ZWFkIG9mIHRoZSBwZXIgaW5zdGFuY2UgcHJpY2UuIFxuICogIERlZmF1bHQ6IGBgMjBgYFxuICovXG5PbkRlbWFuZE1heFByaWNlUGVyY2VudGFnZU92ZXJMb3dlc3RQcmljZT86IG51bWJlclxuTWVtb3J5TWlCOiBNZW1vcnlNaUJSZXF1ZXN0XG4vKipcbiAqIEluZGljYXRlcyB0aGUgdHlwZSBvZiBsb2NhbCBzdG9yYWdlIHRoYXQgaXMgcmVxdWlyZWQuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIGhhcmQgZGlzayBkcml2ZSAoSEREKSBzdG9yYWdlLCBzcGVjaWZ5IGBgaGRkYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIHNvbGlkIHN0YXRlIGRyaXZlIChTU0QpIHN0b3JhZ2UsIHNwZWNpZnkgYGBzc2RgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IGxvY2FsIHN0b3JhZ2UgdHlwZVxuICovXG5Mb2NhbFN0b3JhZ2VUeXBlcz86IHN0cmluZ1tdXG5OZXR3b3JrSW50ZXJmYWNlQ291bnQ/OiBOZXR3b3JrSW50ZXJmYWNlQ291bnRSZXF1ZXN0XG4vKipcbiAqIFRoZSBpbnN0YW5jZSB0eXBlcyB0byBleGNsdWRlLiBZb3UgY2FuIHVzZSBzdHJpbmdzIHdpdGggb25lIG9yIG1vcmUgd2lsZCBjYXJkcywgcmVwcmVzZW50ZWQgYnkgYW4gYXN0ZXJpc2sgKGBgKmBgKSwgdG8gZXhjbHVkZSBhbiBpbnN0YW5jZSBmYW1pbHksIHR5cGUsIHNpemUsIG9yIGdlbmVyYXRpb24uIFRoZSBmb2xsb3dpbmcgYXJlIGV4YW1wbGVzOiBgYG01Ljh4bGFyZ2VgYCwgYGBjNSouKmBgLCBgYG01YS4qYGAsIGBgcipgYCwgYGAqMypgYC4gXG4gKiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5IGBgYzUqYGAsIHlvdSBhcmUgZXhjbHVkaW5nIHRoZSBlbnRpcmUgQzUgaW5zdGFuY2UgZmFtaWx5LCB3aGljaCBpbmNsdWRlcyBhbGwgQzVhIGFuZCBDNW4gaW5zdGFuY2UgdHlwZXMuIElmIHlvdSBzcGVjaWZ5IGBgbTVhLipgYCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2lsbCBleGNsdWRlIGFsbCB0aGUgTTVhIGluc3RhbmNlIHR5cGVzLCBidXQgbm90IHRoZSBNNW4gaW5zdGFuY2UgdHlwZXMuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGBgRXhjbHVkZWRJbnN0YW5jZVR5cGVzYGAsIHlvdSBjYW4ndCBzcGVjaWZ5IGBgQWxsb3dlZEluc3RhbmNlVHlwZXNgYC5cbiAqICAgRGVmYXVsdDogTm8gZXhjbHVkZWQgaW5zdGFuY2UgdHlwZXNcbiAqL1xuRXhjbHVkZWRJbnN0YW5jZVR5cGVzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIGluc3RhbmNlIHR5cGVzIHRvIGFwcGx5IHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMgYWdhaW5zdC4gQWxsIG90aGVyIGluc3RhbmNlIHR5cGVzIGFyZSBpZ25vcmVkLCBldmVuIGlmIHRoZXkgbWF0Y2ggeW91ciBzcGVjaWZpZWQgYXR0cmlidXRlcy5cbiAqICBZb3UgY2FuIHVzZSBzdHJpbmdzIHdpdGggb25lIG9yIG1vcmUgd2lsZCBjYXJkcywgcmVwcmVzZW50ZWQgYnkgYW4gYXN0ZXJpc2sgKGBgKmBgKSwgdG8gYWxsb3cgYW4gaW5zdGFuY2UgdHlwZSwgc2l6ZSwgb3IgZ2VuZXJhdGlvbi4gVGhlIGZvbGxvd2luZyBhcmUgZXhhbXBsZXM6IGBgbTUuOHhsYXJnZWBgLCBgYGM1Ki4qYGAsIGBgbTVhLipgYCwgYGByKmBgLCBgYCozKmBgLlxuICogIEZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgYGM1KmBgLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIGFsbG93IHRoZSBlbnRpcmUgQzUgaW5zdGFuY2UgZmFtaWx5LCB3aGljaCBpbmNsdWRlcyBhbGwgQzVhIGFuZCBDNW4gaW5zdGFuY2UgdHlwZXMuIElmIHlvdSBzcGVjaWZ5IGBgbTVhLipgYCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2lsbCBhbGxvdyBhbGwgdGhlIE01YSBpbnN0YW5jZSB0eXBlcywgYnV0IG5vdCB0aGUgTTVuIGluc3RhbmNlIHR5cGVzLlxuICogICBJZiB5b3Ugc3BlY2lmeSBgYEFsbG93ZWRJbnN0YW5jZVR5cGVzYGAsIHlvdSBjYW4ndCBzcGVjaWZ5IGBgRXhjbHVkZWRJbnN0YW5jZVR5cGVzYGAuXG4gKiAgIERlZmF1bHQ6IEFsbCBpbnN0YW5jZSB0eXBlc1xuICovXG5BbGxvd2VkSW5zdGFuY2VUeXBlcz86IHN0cmluZ1tdXG5BY2NlbGVyYXRvckNvdW50PzogQWNjZWxlcmF0b3JDb3VudFJlcXVlc3Rcbk5ldHdvcmtCYW5kd2lkdGhHYnBzPzogTmV0d29ya0JhbmR3aWR0aEdicHNSZXF1ZXN0XG5CYXNlbGluZVBlcmZvcm1hbmNlRmFjdG9ycz86IEJhc2VsaW5lUGVyZm9ybWFuY2VGYWN0b3JzUmVxdWVzdFxuQmFzZWxpbmVFYnNCYW5kd2lkdGhNYnBzPzogQmFzZWxpbmVFYnNCYW5kd2lkdGhNYnBzUmVxdWVzdFxuLyoqXG4gKiBbUHJpY2UgcHJvdGVjdGlvbl0gVGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGZvciBTcG90IEluc3RhbmNlcywgYXMgYSBwZXJjZW50YWdlIGhpZ2hlciB0aGFuIGFuIGlkZW50aWZpZWQgU3BvdCBwcmljZS4gVGhlIGlkZW50aWZpZWQgU3BvdCBwcmljZSBpcyB0aGUgcHJpY2Ugb2YgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSB3aXRoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuIElmIG5vIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgbWF0Y2hlcyB5b3VyIGF0dHJpYnV0ZXMsIHRoZW4gdGhlIGlkZW50aWZpZWQgcHJpY2UgaXMgZnJvbSBlaXRoZXIgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIG9yLCBmYWlsaW5nIHRoYXQsIHRoZSBsb3dlc3QgcHJpY2VkIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIGF0dHJpYnV0ZXMuIFdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VsZWN0cyBpbnN0YW5jZSB0eXBlcyB3aXRoIHlvdXIgYXR0cmlidXRlcywgd2Ugd2lsbCBleGNsdWRlIGluc3RhbmNlIHR5cGVzIHdob3NlIHByaWNlIGV4Y2VlZHMgeW91ciBzcGVjaWZpZWQgdGhyZXNob2xkLlxuICogIFRoZSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBpbnRlZ2VyLCB3aGljaCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBpbnRlcnByZXRzIGFzIGEgcGVyY2VudGFnZS4gXG4gKiAgSWYgeW91IHNldCBgYERlc2lyZWRDYXBhY2l0eVR5cGVgYCB0byBgYHZjcHVgYCBvciBgYG1lbW9yeS1taWJgYCwgdGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGlzIGJhc2VkIG9uIHRoZSBwZXItdkNQVSBvciBwZXItbWVtb3J5IHByaWNlIGluc3RlYWQgb2YgdGhlIHBlciBpbnN0YW5jZSBwcmljZS4gXG4gKiAgIE9ubHkgb25lIG9mIGBgU3BvdE1heFByaWNlUGVyY2VudGFnZU92ZXJMb3dlc3RQcmljZWBgIG9yIGBgTWF4U3BvdFByaWNlQXNQZXJjZW50YWdlT2ZPcHRpbWFsT25EZW1hbmRQcmljZWBgIGNhbiBiZSBzcGVjaWZpZWQuIElmIHlvdSBkb24ndCBzcGVjaWZ5IGVpdGhlciwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2lsbCBhdXRvbWF0aWNhbGx5IGFwcGx5IG9wdGltYWwgcHJpY2UgcHJvdGVjdGlvbiB0byBjb25zaXN0ZW50bHkgc2VsZWN0IGZyb20gYSB3aWRlIHJhbmdlIG9mIGluc3RhbmNlIHR5cGVzLiBUbyBpbmRpY2F0ZSBubyBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgU3BvdCBJbnN0YW5jZXMsIG1lYW5pbmcgeW91IHdhbnQgdG8gY29uc2lkZXIgYWxsIGluc3RhbmNlIHR5cGVzIHRoYXQgbWF0Y2ggeW91ciBhdHRyaWJ1dGVzLCBpbmNsdWRlIG9uZSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGFuZCBzcGVjaWZ5IGEgaGlnaCB2YWx1ZSwgc3VjaCBhcyBgYDk5OTk5OWBgLlxuICovXG5TcG90TWF4UHJpY2VQZXJjZW50YWdlT3Zlckxvd2VzdFByaWNlPzogbnVtYmVyXG4vKipcbiAqIExpc3RzIHRoZSBhY2NlbGVyYXRvcnMgdGhhdCBtdXN0IGJlIG9uIGFuIGluc3RhbmNlIHR5cGUuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIE5WSURJQSBBMTAwIEdQVXMsIHNwZWNpZnkgYGBhMTAwYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIE5WSURJQSBWMTAwIEdQVXMsIHNwZWNpZnkgYGB2MTAwYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIE5WSURJQSBLODAgR1BVcywgc3BlY2lmeSBgYGs4MGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgVDQgR1BVcywgc3BlY2lmeSBgYHQ0YGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIE5WSURJQSBNNjAgR1BVcywgc3BlY2lmeSBgYG02MGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBTUQgUmFkZW9uIFBybyBWNTIwIEdQVXMsIHNwZWNpZnkgYGByYWRlb24tcHJvLXY1MjBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggWGlsaW54IFZVOVAgRlBHQXMsIHNwZWNpZnkgYGB2dTlwYGAuXG4gKiAgIFxuICogIERlZmF1bHQ6IEFueSBhY2NlbGVyYXRvclxuICovXG5BY2NlbGVyYXRvck5hbWVzPzogc3RyaW5nW11cbkFjY2VsZXJhdG9yVG90YWxNZW1vcnlNaUI/OiBBY2NlbGVyYXRvclRvdGFsTWVtb3J5TWlCUmVxdWVzdFxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBidXJzdGFibGUgcGVyZm9ybWFuY2UgaW5zdGFuY2UgdHlwZXMgYXJlIGluY2x1ZGVkLCBleGNsdWRlZCwgb3IgcmVxdWlyZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0J1cnN0YWJsZSBwZXJmb3JtYW5jZSBpbnN0YW5jZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9idXJzdGFibGUtcGVyZm9ybWFuY2UtaW5zdGFuY2VzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlIGZvciBMaW51eCBJbnN0YW5jZXMqLlxuICogIERlZmF1bHQ6IGBgZXhjbHVkZWRgYFxuICovXG5CdXJzdGFibGVQZXJmb3JtYW5jZT86IHN0cmluZ1xuVG90YWxMb2NhbFN0b3JhZ2VHQj86IFRvdGFsTG9jYWxTdG9yYWdlR0JSZXF1ZXN0XG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgcGVyIHZDUFUgZm9yIGFuIGluc3RhbmNlIHR5cGUsIGluIEdpQi5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5R2lCUGVyVkNwdVJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWVtb3J5IG1pbmltdW0gaW4gR2lCLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1lbW9yeSBtYXhpbXVtIGluIEdpQi5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBmb3IgYW4gaW5zdGFuY2UgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWQ3B1Q291bnRSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHZDUFVzLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHZDUFVzLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gaW5zdGFuY2UgbWVtb3J5IHNpemUgZm9yIGFuIGluc3RhbmNlIHR5cGUsIGluIE1pQi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlNaUJSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1lbW9yeSBtaW5pbXVtIGluIE1pQi5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtZW1vcnkgbWF4aW11bSBpbiBNaUIuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzIGZvciBhbiBpbnN0YW5jZSB0eXBlLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrSW50ZXJmYWNlQ291bnRSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIG5ldHdvcmsgaW50ZXJmYWNlcy5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgYWNjZWxlcmF0b3JzIChHUFVzLCBGUEdBcywgb3IgQVdTIEluZmVyZW50aWEgY2hpcHMpIGZvciBhbiBpbnN0YW5jZSB0eXBlLlxuICogIFRvIGV4Y2x1ZGUgYWNjZWxlcmF0b3ItZW5hYmxlZCBpbnN0YW5jZSB0eXBlcywgc2V0IGBgTWF4YGAgdG8gYGAwYGAuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VsZXJhdG9yQ291bnRSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gdmFsdWUuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSB2YWx1ZS5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudCBvZiBuZXR3b3JrIGJhbmR3aWR0aCwgaW4gZ2lnYWJpdHMgcGVyIHNlY29uZCAoR2JwcykuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtCYW5kd2lkdGhHYnBzUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBuZXR3b3JrIGJhbmR3aWR0aCwgaW4gZ2lnYWJpdHMgcGVyIHNlY29uZCAoR2JwcykuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgbmV0d29yayBiYW5kd2lkdGgsIGluIGdpZ2FiaXRzIHBlciBzZWNvbmQgKEdicHMpLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZWxpbmVQZXJmb3JtYW5jZUZhY3RvcnNSZXF1ZXN0IHtcbkNwdT86IENwdVBlcmZvcm1hbmNlRmFjdG9yUmVxdWVzdFxufVxuZXhwb3J0IGludGVyZmFjZSBDcHVQZXJmb3JtYW5jZUZhY3RvclJlcXVlc3Qge1xuUmVmZXJlbmNlcz86IFBlcmZvcm1hbmNlRmFjdG9yUmVmZXJlbmNlU2V0UmVxdWVzdFxufVxuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZUZhY3RvclJlZmVyZW5jZVJlcXVlc3Qge1xuSW5zdGFuY2VGYW1pbHk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gYmFzZWxpbmUgYmFuZHdpZHRoIHBlcmZvcm1hbmNlIGZvciBhbiBpbnN0YW5jZSB0eXBlLCBpbiBNYnBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJT4oCTb3B0aW1pemVkIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy1vcHRpbWl6ZWQuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUgZm9yIExpbnV4IEluc3RhbmNlcyouXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VsaW5lRWJzQmFuZHdpZHRoTWJwc1JlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWluaW11bSB2YWx1ZSBpbiBNYnBzLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gdmFsdWUgaW4gTWJwcy5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHRvdGFsIG1lbW9yeSBzaXplIGZvciB0aGUgYWNjZWxlcmF0b3JzIG9uIGFuIGluc3RhbmNlIHR5cGUsIGluIE1pQi5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZWxlcmF0b3JUb3RhbE1lbW9yeU1pQlJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWVtb3J5IG1pbmltdW0gaW4gTWlCLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1lbW9yeSBtYXhpbXVtIGluIE1pQi5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHRvdGFsIGxvY2FsIHN0b3JhZ2Ugc2l6ZSBmb3IgYW4gaW5zdGFuY2UgdHlwZSwgaW4gR0IuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvdGFsTG9jYWxTdG9yYWdlR0JSZXF1ZXN0IHtcbi8qKlxuICogVGhlIHN0b3JhZ2UgbWluaW11bSBpbiBHQi5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBzdG9yYWdlIG1heGltdW0gaW4gR0IuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBBIHN0cnVjdHVyZSB0aGF0IHNwZWNpZmllcyBhIHRhZyBmb3IgdGhlIGBgVGFnc2BgIHByb3BlcnR5IG9mIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWcgQXV0byBTY2FsaW5nIGdyb3VwcyBhbmQgaW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9hdXRvc2NhbGluZy10YWdnaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFlvdSBjYW4gZmluZCBhIHNhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0IGluIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwjYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZS5cbiAqICBDbG91ZEZvcm1hdGlvbiBhZGRzIHRoZSBmb2xsb3dpbmcgdGFncyB0byBhbGwgQXV0byBTY2FsaW5nIGdyb3VwcyBhbmQgYXNzb2NpYXRlZCBpbnN0YW5jZXM6IFxuICogICArICBhd3M6Y2xvdWRmb3JtYXRpb246c3RhY2stbmFtZVxuICogICArICBhd3M6Y2xvdWRmb3JtYXRpb246c3RhY2staWRcbiAqICAgKyAgYXdzOmNsb3VkZm9ybWF0aW9uOmxvZ2ljYWwtaWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWdQcm9wZXJ0eSB7XG4vKipcbiAqIFRoZSB0YWcgdmFsdWUuXG4gKi9cblZhbHVlOiBzdHJpbmdcbi8qKlxuICogVGhlIHRhZyBrZXkuXG4gKi9cbktleTogc3RyaW5nXG4vKipcbiAqIFNldCB0byBgYHRydWVgYCBpZiB5b3Ugd2FudCBDbG91ZEZvcm1hdGlvbiB0byBjb3B5IHRoZSB0YWcgdG8gRUMyIGluc3RhbmNlcyB0aGF0IGFyZSBsYXVuY2hlZCBhcyBwYXJ0IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIFNldCB0byBgYGZhbHNlYGAgaWYgeW91IHdhbnQgdGhlIHRhZyBhdHRhY2hlZCBvbmx5IHRvIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgYW5kIG5vdCBjb3BpZWQgdG8gYW55IGluc3RhbmNlcyBsYXVuY2hlZCBhcyBwYXJ0IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cblByb3BhZ2F0ZUF0TGF1bmNoOiBib29sZWFuXG59XG4vKipcbiAqIEEgc3RydWN0dXJlIHRoYXQgc3BlY2lmaWVzIGFuIEFtYXpvbiBTTlMgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBgYE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25zYGAgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS5cbiAqICBGb3IgYW4gZXhhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0LCBzZWUgW0NvbmZpZ3VyZSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyByZXNvdXJjZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3F1aWNrcmVmLWVjMi1hdXRvLXNjYWxpbmcuaHRtbCkuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbR2V0IEFtYXpvbiBTTlMgbm90aWZpY2F0aW9ucyB3aGVuIHlvdXIgQXV0byBTY2FsaW5nIGdyb3VwIHNjYWxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvQVNHZXR0aW5nTm90aWZpY2F0aW9ucy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24xIHtcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBBbWF6b24gU05TIHRvcGljLlxuICovXG5Ub3BpY0FSTjogKHN0cmluZyB8IHN0cmluZ1tdKVxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgdHlwZXMgdGhhdCBzZW5kIGEgbm90aWZpY2F0aW9uLiBFdmVudCB0eXBlcyBjYW4gaW5jbHVkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB0eXBlcy4gXG4gKiAgICpBbGxvd2VkIHZhbHVlcyo6XG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX0xBVU5DSF9FUlJPUmBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9URVJNSU5BVEVfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6VEVTVF9OT1RJRklDQVRJT05gYFxuICovXG5Ob3RpZmljYXRpb25UeXBlcz86IHN0cmluZ1tdXG59XG4vKipcbiAqIFRoZSBpbnN0YW5jZSBjYXBhY2l0eSBkaXN0cmlidXRpb24gYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFiaWxpdHlab25lRGlzdHJpYnV0aW9uIHtcbi8qKlxuICogSWYgbGF1bmNoZXMgZmFpbCBpbiBhbiBBdmFpbGFiaWxpdHkgWm9uZSwgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBhdmFpbGFibGUuIFRoZSBkZWZhdWx0IGlzIGBgYmFsYW5jZWQtYmVzdC1lZmZvcnRgYC4gXG4gKiAgICsgICBgYGJhbGFuY2VkLW9ubHlgYCAtIElmIGxhdW5jaGVzIGZhaWwgaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUsIEF1dG8gU2NhbGluZyB3aWxsIGNvbnRpbnVlIHRvIGF0dGVtcHQgdG8gbGF1bmNoIGluIHRoZSB1bmhlYWx0aHkgem9uZSB0byBwcmVzZXJ2ZSBhIGJhbGFuY2VkIGRpc3RyaWJ1dGlvbi5cbiAqICAgKyAgIGBgYmFsYW5jZWQtYmVzdC1lZmZvcnRgYCAtIElmIGxhdW5jaGVzIGZhaWwgaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUsIEF1dG8gU2NhbGluZyB3aWxsIGF0dGVtcHQgdG8gbGF1bmNoIGluIGFub3RoZXIgaGVhbHRoeSBBdmFpbGFiaWxpdHkgWm9uZSBpbnN0ZWFkLlxuICovXG5DYXBhY2l0eURpc3RyaWJ1dGlvblN0cmF0ZWd5PzogKFwiYmFsYW5jZWQtYmVzdC1lZmZvcnRcIiB8IFwiYmFsYW5jZWQtb25seVwiKVxufVxuLyoqXG4gKiBgYE1ldHJpY3NDb2xsZWN0aW9uYGAgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwpIHJlc291cmNlIHRoYXQgZGVzY3JpYmVzIHRoZSBncm91cCBtZXRyaWNzIHRoYXQgYW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZ3JvdXAgc2VuZHMgdG8gQW1hem9uIENsb3VkV2F0Y2guIFRoZXNlIG1ldHJpY3MgZGVzY3JpYmUgdGhlIGdyb3VwIHJhdGhlciB0aGFuIGFueSBvZiBpdHMgaW5zdGFuY2VzLiBcbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtNb25pdG9yIENsb3VkV2F0Y2ggbWV0cmljcyBmb3IgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBzIGFuZCBpbnN0YW5jZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2FzLWluc3RhbmNlLW1vbml0b3JpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi4gWW91IGNhbiBmaW5kIGEgc2FtcGxlIHRlbXBsYXRlIHNuaXBwZXQgaW4gdGhlIFtFeGFtcGxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC0tZXhhbXBsZXMpIHNlY3Rpb24gb2YgdGhlIGBgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cGBgIHJlc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldHJpY3NDb2xsZWN0aW9uIHtcbi8qKlxuICogSWRlbnRpZmllcyB0aGUgbWV0cmljcyB0byBlbmFibGUuXG4gKiAgWW91IGNhbiBzcGVjaWZ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgbWV0cmljczpcbiAqICAgKyAgIGBgR3JvdXBNaW5TaXplYGAgXG4gKiAgICsgICBgYEdyb3VwTWF4U2l6ZWBgIFxuICogICArICAgYGBHcm91cERlc2lyZWRDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cEluU2VydmljZUluc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cFBlbmRpbmdJbnN0YW5jZXNgYCBcbiAqICAgKyAgIGBgR3JvdXBTdGFuZGJ5SW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwVGVybWluYXRpbmdJbnN0YW5jZXNgYCBcbiAqICAgKyAgIGBgR3JvdXBUb3RhbEluc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cEluU2VydmljZUNhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwUGVuZGluZ0NhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwU3RhbmRieUNhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwVGVybWluYXRpbmdDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cFRvdGFsQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgV2FybVBvb2xEZXNpcmVkQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgV2FybVBvb2xXYXJtZWRDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbFBlbmRpbmdDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbFRlcm1pbmF0aW5nQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgV2FybVBvb2xUb3RhbENhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwQW5kV2FybVBvb2xEZXNpcmVkQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBBbmRXYXJtUG9vbFRvdGFsQ2FwYWNpdHlgYCBcbiAqICAgXG4gKiAgSWYgeW91IHNwZWNpZnkgYGBHcmFudWxhcml0eWBgIGFuZCBkb24ndCBzcGVjaWZ5IGFueSBtZXRyaWNzLCBhbGwgbWV0cmljcyBhcmUgZW5hYmxlZC5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gQ2xvdWRXYXRjaCBtZXRyaWNzIGZvciBBbWF6b24gRUMyIEF1dG8gU2NhbGluZ10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1tZXRyaWNzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbk1ldHJpY3M/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgZnJlcXVlbmN5IGF0IHdoaWNoIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlbmRzIGFnZ3JlZ2F0ZWQgZGF0YSB0byBDbG91ZFdhdGNoLiBUaGUgb25seSB2YWxpZCB2YWx1ZSBpcyBgYDFNaW51dGVgYC5cbiAqL1xuR3JhbnVsYXJpdHk6IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBpbnN0YW5jZSBtYWludGVuYW5jZSBwb2xpY3kuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NldCBpbnN0YW5jZSBtYWludGVuYW5jZSBwb2xpY3ldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctaW5zdGFuY2UtbWFpbnRlbmFuY2UtcG9saWN5Lmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VNYWludGVuYW5jZVBvbGljeSB7XG4vKipcbiAqIFNwZWNpZmllcyB0aGUgdXBwZXIgdGhyZXNob2xkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGVzaXJlZCBjYXBhY2l0eSBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBJdCByZXByZXNlbnRzIHRoZSBtYXhpbXVtIHBlcmNlbnRhZ2Ugb2YgdGhlIGdyb3VwIHRoYXQgY2FuIGJlIGluIHNlcnZpY2UgYW5kIGhlYWx0aHksIG9yIHBlbmRpbmcsIHRvIHN1cHBvcnQgeW91ciB3b3JrbG9hZCB3aGVuIHJlcGxhY2luZyBpbnN0YW5jZXMuIFZhbHVlIHJhbmdlIGlzIDEwMCB0byAyMDAuIFRvIGNsZWFyIGEgcHJldmlvdXNseSBzZXQgdmFsdWUsIHNwZWNpZnkgYSB2YWx1ZSBvZiBgYC0xYGAuXG4gKiAgQm90aCBgYE1pbkhlYWx0aHlQZXJjZW50YWdlYGAgYW5kIGBgTWF4SGVhbHRoeVBlcmNlbnRhZ2VgYCBtdXN0IGJlIHNwZWNpZmllZCwgYW5kIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDEwMC4gQSBsYXJnZSByYW5nZSBpbmNyZWFzZXMgdGhlIG51bWJlciBvZiBpbnN0YW5jZXMgdGhhdCBjYW4gYmUgcmVwbGFjZWQgYXQgdGhlIHNhbWUgdGltZS5cbiAqL1xuTWF4SGVhbHRoeVBlcmNlbnRhZ2U/OiBudW1iZXJcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBsb3dlciB0aHJlc2hvbGQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkIGNhcGFjaXR5IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIEl0IHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcGVyY2VudGFnZSBvZiB0aGUgZ3JvdXAgdG8ga2VlcCBpbiBzZXJ2aWNlLCBoZWFsdGh5LCBhbmQgcmVhZHkgdG8gdXNlIHRvIHN1cHBvcnQgeW91ciB3b3JrbG9hZCB3aGVuIHJlcGxhY2luZyBpbnN0YW5jZXMuIFZhbHVlIHJhbmdlIGlzIDAgdG8gMTAwLiBUbyBjbGVhciBhIHByZXZpb3VzbHkgc2V0IHZhbHVlLCBzcGVjaWZ5IGEgdmFsdWUgb2YgYGAtMWBgLlxuICovXG5NaW5IZWFsdGh5UGVyY2VudGFnZT86IG51bWJlclxufVxuLyoqXG4gKiBJZGVudGlmeWluZyBpbmZvcm1hdGlvbiBmb3IgYSB0cmFmZmljIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFmZmljU291cmNlSWRlbnRpZmllciB7XG4vKipcbiAqIFByb3ZpZGVzIGFkZGl0aW9uYWwgY29udGV4dCBmb3IgdGhlIHZhbHVlIG9mIGBgSWRlbnRpZmllcmBgLlxuICogIFRoZSBmb2xsb3dpbmcgbGlzdHMgdGhlIHZhbGlkIHZhbHVlczpcbiAqICAgKyAgIGBgZWxiYGAgaWYgYGBJZGVudGlmaWVyYGAgaXMgdGhlIG5hbWUgb2YgYSBDbGFzc2ljIExvYWQgQmFsYW5jZXIuXG4gKiAgICsgICBgYGVsYnYyYGAgaWYgYGBJZGVudGlmaWVyYGAgaXMgdGhlIEFSTiBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLCBHYXRld2F5IExvYWQgQmFsYW5jZXIsIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0YXJnZXQgZ3JvdXAuXG4gKiAgICsgICBgYHZwYy1sYXR0aWNlYGAgaWYgYGBJZGVudGlmaWVyYGAgaXMgdGhlIEFSTiBvZiBhIFZQQyBMYXR0aWNlIHRhcmdldCBncm91cC5cbiAqICAgXG4gKiAgUmVxdWlyZWQgaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIG5hbWUgb2YgYSBDbGFzc2ljIExvYWQgQmFsYW5jZXIuXG4gKi9cblR5cGU6IHN0cmluZ1xuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSB0cmFmZmljIHNvdXJjZS5cbiAqICBGb3IgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMsIEdhdGV3YXkgTG9hZCBCYWxhbmNlcnMsIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnMsIGFuZCBWUEMgTGF0dGljZSwgdGhpcyB3aWxsIGJlIHRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBmb3IgYSB0YXJnZXQgZ3JvdXAgaW4gdGhpcyBhY2NvdW50IGFuZCBSZWdpb24uIEZvciBDbGFzc2ljIExvYWQgQmFsYW5jZXJzLCB0aGlzIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIENsYXNzaWMgTG9hZCBCYWxhbmNlciBpbiB0aGlzIGFjY291bnQgYW5kIFJlZ2lvbi5cbiAqICBGb3IgZXhhbXBsZTogXG4gKiAgICsgIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgQVJOOiBgYGFybjphd3M6ZWxhc3RpY2xvYWRiYWxhbmNpbmc6dXMtd2VzdC0yOjEyMzQ1Njc4OTAxMjp0YXJnZXRncm91cC9teS10YXJnZXRzLzEyMzQ1Njc4OTAxMjM0NTZgYCBcbiAqICAgKyAgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyIG5hbWU6IGBgbXktY2xhc3NpYy1sb2FkLWJhbGFuY2VyYGAgXG4gKiAgICsgIFZQQyBMYXR0aWNlIEFSTjogYGBhcm46YXdzOnZwYy1sYXR0aWNlOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6dGFyZ2V0Z3JvdXAvdGctMTIzNDU2Nzg5MDEyMzQ1NmBgIFxuICogICBcbiAqICBUbyBnZXQgdGhlIEFSTiBvZiBhIHRhcmdldCBncm91cCBmb3IgYSBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLCBHYXRld2F5IExvYWQgQmFsYW5jZXIsIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlciwgb3IgdGhlIG5hbWUgb2YgYSBDbGFzc2ljIExvYWQgQmFsYW5jZXIsIHVzZSB0aGUgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyBbRGVzY3JpYmVUYXJnZXRHcm91cHNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZVRhcmdldEdyb3Vwcy5odG1sKSBhbmQgW0Rlc2NyaWJlTG9hZEJhbGFuY2Vyc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlTG9hZEJhbGFuY2Vycy5odG1sKSBBUEkgb3BlcmF0aW9ucy5cbiAqICBUbyBnZXQgdGhlIEFSTiBvZiBhIHRhcmdldCBncm91cCBmb3IgVlBDIExhdHRpY2UsIHVzZSB0aGUgVlBDIExhdHRpY2UgW0dldFRhcmdldEdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjLWxhdHRpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0VGFyZ2V0R3JvdXAuaHRtbCkgQVBJIG9wZXJhdGlvbi5cbiAqL1xuSWRlbnRpZmllcjogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UmVzZXJ2YXRpb25TcGVjaWZpY2F0aW9uIHtcbkNhcGFjaXR5UmVzZXJ2YXRpb25QcmVmZXJlbmNlOiBzdHJpbmdcbkNhcGFjaXR5UmVzZXJ2YXRpb25UYXJnZXQ/OiBDYXBhY2l0eVJlc2VydmF0aW9uVGFyZ2V0XG59XG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UmVzZXJ2YXRpb25UYXJnZXQge1xuQ2FwYWNpdHlSZXNlcnZhdGlvbklkcz86IENhcGFjaXR5UmVzZXJ2YXRpb25JZHNcbkNhcGFjaXR5UmVzZXJ2YXRpb25SZXNvdXJjZUdyb3VwQXJucz86IENhcGFjaXR5UmVzZXJ2YXRpb25SZXNvdXJjZUdyb3VwQXJuc1xufVxuIl19