@horietakehiro/aws-cdk-utul 0.41.56 → 0.41.57

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 (121) hide show
  1. package/lib/types/cfn-resource-types/aws-apigatewayv2-integration.d.ts +1 -1
  2. package/lib/types/cfn-resource-types/aws-apigatewayv2-integration.js +1 -1
  3. package/lib/types/cfn-resource-types/aws-arcregionswitch-plan.d.ts +35 -2
  4. package/lib/types/cfn-resource-types/aws-arcregionswitch-plan.js +1 -1
  5. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.d.ts +8 -0
  6. package/lib/types/cfn-resource-types/aws-autoscaling-autoscalinggroup.js +1 -1
  7. package/lib/types/cfn-resource-types/aws-bedrockagentcore-gateway.d.ts +26 -1
  8. package/lib/types/cfn-resource-types/aws-bedrockagentcore-gateway.js +1 -1
  9. package/lib/types/cfn-resource-types/aws-bedrockagentcore-gatewaytarget.d.ts +7 -1
  10. package/lib/types/cfn-resource-types/aws-bedrockagentcore-gatewaytarget.js +1 -1
  11. package/lib/types/cfn-resource-types/aws-bedrockagentcore-memory.d.ts +53 -4
  12. package/lib/types/cfn-resource-types/aws-bedrockagentcore-memory.js +1 -1
  13. package/lib/types/cfn-resource-types/aws-bedrockagentcore-runtime.d.ts +4 -0
  14. package/lib/types/cfn-resource-types/aws-bedrockagentcore-runtime.js +1 -1
  15. package/lib/types/cfn-resource-types/aws-billing-billingview.d.ts +8 -0
  16. package/lib/types/cfn-resource-types/aws-billing-billingview.js +1 -1
  17. package/lib/types/cfn-resource-types/aws-cases-caserule.d.ts +149 -0
  18. package/lib/types/cfn-resource-types/aws-cases-caserule.js +3 -0
  19. package/lib/types/cfn-resource-types/aws-cases-domain.d.ts +40 -0
  20. package/lib/types/cfn-resource-types/aws-cases-domain.js +3 -0
  21. package/lib/types/cfn-resource-types/aws-cases-field.d.ts +57 -0
  22. package/lib/types/cfn-resource-types/aws-cases-field.js +3 -0
  23. package/lib/types/cfn-resource-types/aws-cases-layout.d.ts +101 -0
  24. package/lib/types/cfn-resource-types/aws-cases-layout.js +3 -0
  25. package/lib/types/cfn-resource-types/aws-cases-template.d.ts +96 -0
  26. package/lib/types/cfn-resource-types/aws-cases-template.js +3 -0
  27. package/lib/types/cfn-resource-types/aws-cloudfront-distribution.d.ts +4 -0
  28. package/lib/types/cfn-resource-types/aws-cloudfront-distribution.js +1 -1
  29. package/lib/types/cfn-resource-types/aws-connect-contactflowmodule.d.ts +14 -0
  30. package/lib/types/cfn-resource-types/aws-connect-contactflowmodule.js +1 -1
  31. package/lib/types/cfn-resource-types/aws-connect-evaluationform.d.ts +27 -15
  32. package/lib/types/cfn-resource-types/aws-connect-evaluationform.js +1 -1
  33. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.d.ts +59 -0
  34. package/lib/types/cfn-resource-types/aws-connect-hoursofoperation.js +1 -1
  35. package/lib/types/cfn-resource-types/aws-customerprofiles-domain.d.ts +0 -2
  36. package/lib/types/cfn-resource-types/aws-customerprofiles-domain.js +1 -1
  37. package/lib/types/cfn-resource-types/aws-datasync-locationnfs.d.ts +1 -1
  38. package/lib/types/cfn-resource-types/aws-datasync-locationnfs.js +1 -1
  39. package/lib/types/cfn-resource-types/aws-datasync-locationsmb.d.ts +1 -1
  40. package/lib/types/cfn-resource-types/aws-datasync-locationsmb.js +1 -1
  41. package/lib/types/cfn-resource-types/aws-dms-dataprovider.d.ts +1 -1
  42. package/lib/types/cfn-resource-types/aws-dms-dataprovider.js +1 -1
  43. package/lib/types/cfn-resource-types/aws-ec2-clientvpnendpoint.d.ts +2 -0
  44. package/lib/types/cfn-resource-types/aws-ec2-clientvpnendpoint.js +1 -1
  45. package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.d.ts +59 -58
  46. package/lib/types/cfn-resource-types/aws-ec2-ec2fleet.js +1 -1
  47. package/lib/types/cfn-resource-types/aws-ec2-networkinterfaceattachment.d.ts +13 -7
  48. package/lib/types/cfn-resource-types/aws-ec2-networkinterfaceattachment.js +1 -1
  49. package/lib/types/cfn-resource-types/aws-ec2-spotfleet.d.ts +138 -136
  50. package/lib/types/cfn-resource-types/aws-ec2-spotfleet.js +1 -1
  51. package/lib/types/cfn-resource-types/aws-ec2-volume.d.ts +29 -13
  52. package/lib/types/cfn-resource-types/aws-ec2-volume.js +1 -1
  53. package/lib/types/cfn-resource-types/aws-ec2-vpnconcentrator.d.ts +14 -9
  54. package/lib/types/cfn-resource-types/aws-ec2-vpnconcentrator.js +1 -1
  55. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.d.ts +17 -0
  56. package/lib/types/cfn-resource-types/aws-ec2-vpnconnection.js +1 -1
  57. package/lib/types/cfn-resource-types/aws-ecr-pulltimeupdateexclusion.d.ts +5 -6
  58. package/lib/types/cfn-resource-types/aws-ecr-pulltimeupdateexclusion.js +1 -1
  59. package/lib/types/cfn-resource-types/aws-ecr-repositorycreationtemplate.d.ts +1 -1
  60. package/lib/types/cfn-resource-types/aws-ecr-repositorycreationtemplate.js +1 -1
  61. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.d.ts +1 -0
  62. package/lib/types/cfn-resource-types/aws-ecs-capacityprovider.js +1 -1
  63. package/lib/types/cfn-resource-types/aws-ecs-service.d.ts +2 -0
  64. package/lib/types/cfn-resource-types/aws-ecs-service.js +1 -1
  65. package/lib/types/cfn-resource-types/aws-emr-step.d.ts +8 -0
  66. package/lib/types/cfn-resource-types/aws-emr-step.js +1 -1
  67. package/lib/types/cfn-resource-types/aws-groundstation-dataflowendpointgroupv2.d.ts +167 -0
  68. package/lib/types/cfn-resource-types/aws-groundstation-dataflowendpointgroupv2.js +3 -0
  69. package/lib/types/cfn-resource-types/aws-iot-topicrule.d.ts +7 -0
  70. package/lib/types/cfn-resource-types/aws-iot-topicrule.js +1 -1
  71. package/lib/types/cfn-resource-types/aws-kafkaconnect-connector.d.ts +4 -0
  72. package/lib/types/cfn-resource-types/aws-kafkaconnect-connector.js +1 -1
  73. package/lib/types/cfn-resource-types/aws-lex-bot.d.ts +39 -13
  74. package/lib/types/cfn-resource-types/aws-lex-bot.js +1 -1
  75. package/lib/types/cfn-resource-types/aws-lex-botalias.d.ts +4 -1
  76. package/lib/types/cfn-resource-types/aws-lex-botalias.js +1 -1
  77. package/lib/types/cfn-resource-types/aws-logs-loggroup.d.ts +1 -0
  78. package/lib/types/cfn-resource-types/aws-logs-loggroup.js +1 -1
  79. package/lib/types/cfn-resource-types/aws-logs-transformer.d.ts +3 -1
  80. package/lib/types/cfn-resource-types/aws-logs-transformer.js +1 -1
  81. package/lib/types/cfn-resource-types/aws-mediatailor-playbackconfiguration.d.ts +35 -0
  82. package/lib/types/cfn-resource-types/aws-mediatailor-playbackconfiguration.js +1 -1
  83. package/lib/types/cfn-resource-types/aws-odb-odbpeeringconnection.d.ts +8 -0
  84. package/lib/types/cfn-resource-types/aws-odb-odbpeeringconnection.js +1 -1
  85. package/lib/types/cfn-resource-types/aws-paymentcryptography-key.d.ts +1 -1
  86. package/lib/types/cfn-resource-types/aws-paymentcryptography-key.js +1 -1
  87. package/lib/types/cfn-resource-types/aws-pcs-cluster.d.ts +2 -2
  88. package/lib/types/cfn-resource-types/aws-pcs-cluster.js +1 -1
  89. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.d.ts +38 -14
  90. package/lib/types/cfn-resource-types/aws-quicksight-dashboard.js +1 -1
  91. package/lib/types/cfn-resource-types/aws-route53-hostedzone.d.ts +3 -3
  92. package/lib/types/cfn-resource-types/aws-route53-hostedzone.js +1 -1
  93. package/lib/types/cfn-resource-types/aws-route53resolver-resolverendpoint.d.ts +8 -0
  94. package/lib/types/cfn-resource-types/aws-route53resolver-resolverendpoint.js +1 -1
  95. package/lib/types/cfn-resource-types/aws-route53resolver-resolverruleassociation.d.ts +1 -0
  96. package/lib/types/cfn-resource-types/aws-route53resolver-resolverruleassociation.js +1 -1
  97. package/lib/types/cfn-resource-types/aws-s3-bucket.d.ts +10 -2
  98. package/lib/types/cfn-resource-types/aws-s3-bucket.js +1 -1
  99. package/lib/types/cfn-resource-types/aws-sagemaker-cluster.d.ts +4 -0
  100. package/lib/types/cfn-resource-types/aws-sagemaker-cluster.js +1 -1
  101. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.d.ts +3 -0
  102. package/lib/types/cfn-resource-types/aws-secretsmanager-secret.js +1 -1
  103. package/lib/types/cfn-resource-types/aws-securityhub-connectorv2.d.ts +25 -23
  104. package/lib/types/cfn-resource-types/aws-securityhub-connectorv2.js +1 -1
  105. package/lib/types/cfn-resource-types/aws-ses-tenant.d.ts +48 -0
  106. package/lib/types/cfn-resource-types/aws-ses-tenant.js +3 -0
  107. package/lib/types/cfn-resource-types/aws-ssm-document.d.ts +37 -37
  108. package/lib/types/cfn-resource-types/aws-ssm-document.js +1 -1
  109. package/lib/types/cfn-resource-types/aws-ssm-maintenancewindowtarget.d.ts +29 -2
  110. package/lib/types/cfn-resource-types/aws-ssm-maintenancewindowtarget.js +1 -1
  111. package/lib/types/cfn-resource-types/aws-ssm-maintenancewindowtask.d.ts +52 -1
  112. package/lib/types/cfn-resource-types/aws-ssm-maintenancewindowtask.js +1 -1
  113. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.d.ts +1 -1
  114. package/lib/types/cfn-resource-types/aws-wisdom-aiprompt.js +1 -1
  115. package/lib/types/cfn-resource-types/aws-wisdom-assistantassociation.d.ts +9 -3
  116. package/lib/types/cfn-resource-types/aws-wisdom-assistantassociation.js +1 -1
  117. package/lib/types/cfn-resource-types/aws-workspacesweb-usersettings.d.ts +1 -0
  118. package/lib/types/cfn-resource-types/aws-workspacesweb-usersettings.js +1 -1
  119. package/lib/types/cfn-resource-types.d.ts +14 -0
  120. package/lib/types/cfn-resource-types.js +43 -28
  121. package/package.json +1 -1
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export type ResponseParameterList = ResponseParameter[];
5
5
  /**
6
- * An example resource schema demonstrating some basic constructs and validation rules.
6
+ * Resource Type definition for AWS::ApiGatewayV2::Integration
7
7
  */
8
8
  export interface _AWS_APIGATEWAYV2_INTEGRATION {
9
9
  /**
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hcGlnYXRld2F5djItaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbGlzdCBvZiByZXNwb25zZSBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlUGFyYW1ldGVyTGlzdCA9IFJlc3BvbnNlUGFyYW1ldGVyW11cblxuLyoqXG4gKiBBbiBleGFtcGxlIHJlc291cmNlIHNjaGVtYSBkZW1vbnN0cmF0aW5nIHNvbWUgYmFzaWMgY29uc3RydWN0cyBhbmQgdmFsaWRhdGlvbiBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBfQVdTX0FQSUdBVEVXQVlWMl9JTlRFR1JBVElPTiB7XG4vKipcbiAqIFRoZSBBUEkgaWRlbnRpZmllci5cbiAqL1xuQXBpSWQ6IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIFZQQyBsaW5rIGZvciBhIHByaXZhdGUgaW50ZWdyYXRpb24uIFN1cHBvcnRlZCBvbmx5IGZvciBIVFRQIEFQSXMuXG4gKi9cbkNvbm5lY3Rpb25JZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHlwZSBvZiB0aGUgbmV0d29yayBjb25uZWN0aW9uIHRvIHRoZSBpbnRlZ3JhdGlvbiBlbmRwb2ludC4gU3BlY2lmeSBJTlRFUk5FVCBmb3IgY29ubmVjdGlvbnMgdGhyb3VnaCB0aGUgcHVibGljIHJvdXRhYmxlIGludGVybmV0IG9yIFZQQ19MSU5LIGZvciBwcml2YXRlIGNvbm5lY3Rpb25zIGJldHdlZW4gQVBJIEdhdGV3YXkgYW5kIHJlc291cmNlcyBpbiBhIFZQQy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgSU5URVJORVQuXG4gKi9cbkNvbm5lY3Rpb25UeXBlPzogc3RyaW5nXG4vKipcbiAqIFN1cHBvcnRlZCBvbmx5IGZvciBXZWJTb2NrZXQgQVBJcy4gU3BlY2lmaWVzIGhvdyB0byBoYW5kbGUgcmVzcG9uc2UgcGF5bG9hZCBjb250ZW50IHR5cGUgY29udmVyc2lvbnMuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIENPTlZFUlRfVE9fQklOQVJZIGFuZCBDT05WRVJUX1RPX1RFWFQuXG4gKi9cbkNvbnRlbnRIYW5kbGluZ1N0cmF0ZWd5Pzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgY3JlZGVudGlhbHMgcmVxdWlyZWQgZm9yIHRoZSBpbnRlZ3JhdGlvbiwgaWYgYW55LiBGb3IgQVdTIGludGVncmF0aW9ucywgdGhyZWUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUbyBzcGVjaWZ5IGFuIElBTSBSb2xlIGZvciBBUEkgR2F0ZXdheSB0byBhc3N1bWUsIHVzZSB0aGUgcm9sZSdzIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pLiBUbyByZXF1aXJlIHRoYXQgdGhlIGNhbGxlcidzIGlkZW50aXR5IGJlIHBhc3NlZCB0aHJvdWdoIGZyb20gdGhlIHJlcXVlc3QsIHNwZWNpZnkgdGhlIHN0cmluZyBhcm46YXdzOmlhbTo6Kjp1c2VyLyouIFRvIHVzZSByZXNvdXJjZS1iYXNlZCBwZXJtaXNzaW9ucyBvbiBzdXBwb3J0ZWQgQVdTIHNlcnZpY2VzLCBkb24ndCBzcGVjaWZ5IHRoaXMgcGFyYW1ldGVyLlxuICovXG5DcmVkZW50aWFsc0Fybj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGludGVncmF0aW9uLlxuICovXG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGludGVncmF0aW9uJ3MgSFRUUCBtZXRob2QgdHlwZS5cbiAqL1xuSW50ZWdyYXRpb25NZXRob2Q/OiBzdHJpbmdcbi8qKlxuICogU3VwcG9ydGVkIG9ubHkgZm9yIEhUVFAgQVBJIEFXU19QUk9YWSBpbnRlZ3JhdGlvbnMuIFNwZWNpZmllcyB0aGUgQVdTIHNlcnZpY2UgYWN0aW9uIHRvIGludm9rZS5cbiAqL1xuSW50ZWdyYXRpb25TdWJ0eXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpbnRlZ3JhdGlvbiBJRC5cbiAqL1xuSW50ZWdyYXRpb25JZD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgaW50ZWdyYXRpb24gdHlwZSBvZiBhbiBpbnRlZ3JhdGlvbi5cbiAqL1xuSW50ZWdyYXRpb25UeXBlOiBzdHJpbmdcbi8qKlxuICogRm9yIGEgTGFtYmRhIGludGVncmF0aW9uLCBzcGVjaWZ5IHRoZSBVUkkgb2YgYSBMYW1iZGEgZnVuY3Rpb24uIEZvciBhbiBIVFRQIGludGVncmF0aW9uLCBzcGVjaWZ5IGEgZnVsbHktcXVhbGlmaWVkIFVSTC4gRm9yIGFuIEhUVFAgQVBJIHByaXZhdGUgaW50ZWdyYXRpb24sIHNwZWNpZnkgdGhlIEFSTiBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIGxpc3RlbmVyLCBOZXR3b3JrIExvYWQgQmFsYW5jZXIgbGlzdGVuZXIsIG9yIEFXUyBDbG91ZCBNYXAgc2VydmljZS5cbiAqL1xuSW50ZWdyYXRpb25Vcmk/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBwYXNzLXRocm91Z2ggYmVoYXZpb3IgZm9yIGluY29taW5nIHJlcXVlc3RzIGJhc2VkIG9uIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIGluIHRoZSByZXF1ZXN0LCBhbmQgdGhlIGF2YWlsYWJsZSBtYXBwaW5nIHRlbXBsYXRlcyBzcGVjaWZpZWQgYXMgdGhlIHJlcXVlc3RUZW1wbGF0ZXMgcHJvcGVydHkgb24gdGhlIEludGVncmF0aW9uIHJlc291cmNlLiBUaGVyZSBhcmUgdGhyZWUgdmFsaWQgdmFsdWVzOiBXSEVOX05PX01BVENILCBXSEVOX05PX1RFTVBMQVRFUywgYW5kIE5FVkVSLiBTdXBwb3J0ZWQgb25seSBmb3IgV2ViU29ja2V0IEFQSXMuXG4gKi9cblBhc3N0aHJvdWdoQmVoYXZpb3I/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHBheWxvYWQgc2VudCB0byBhbiBpbnRlZ3JhdGlvbi4gUmVxdWlyZWQgZm9yIEhUVFAgQVBJcy4gRm9yIEhUVFAgQVBJcywgc3VwcG9ydGVkIHZhbHVlcyBmb3IgTGFtYmRhIHByb3h5IGludGVncmF0aW9ucyBhcmUgMS4wIGFuZCAyLjAgRm9yIGFsbCBvdGhlciBpbnRlZ3JhdGlvbnMsIDEuMCBpcyB0aGUgb25seSBzdXBwb3J0ZWQgdmFsdWUuXG4gKi9cblBheWxvYWRGb3JtYXRWZXJzaW9uPzogc3RyaW5nXG4vKipcbiAqIEEga2V5LXZhbHVlIG1hcCBzcGVjaWZ5aW5nIHBhcmFtZXRlcnMuXG4gKi9cblJlcXVlc3RQYXJhbWV0ZXJzPzoge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCJbYS16QS1aMC05XStcIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuLyoqXG4gKiBBIG1hcCBvZiBWZWxvY2l0eSB0ZW1wbGF0ZXMgdGhhdCBhcmUgYXBwbGllZCBvbiB0aGUgcmVxdWVzdCBwYXlsb2FkIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgQ29udGVudC1UeXBlIGhlYWRlciBzZW50IGJ5IHRoZSBjbGllbnQuXG4gKi9cblJlcXVlc3RUZW1wbGF0ZXM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIlthLXpBLVowLTldK1wiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIFBhcmFtZXRlcnMgdGhhdCB0cmFuc2Zvcm0gdGhlIEhUVFAgcmVzcG9uc2UgZnJvbSBhIGJhY2tlbmQgaW50ZWdyYXRpb24gYmVmb3JlIHJldHVybmluZyB0aGUgcmVzcG9uc2UgdG8gY2xpZW50cy4gU3VwcG9ydGVkIG9ubHkgZm9yIEhUVFAgQVBJcy5cbiAqL1xuUmVzcG9uc2VQYXJhbWV0ZXJzPzoge1xuW2s6IHN0cmluZ106IFJlc3BvbnNlUGFyYW1ldGVyTWFwXG59XG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSBzZWxlY3Rpb24gZXhwcmVzc2lvbiBmb3IgdGhlIGludGVncmF0aW9uLiBTdXBwb3J0ZWQgb25seSBmb3IgV2ViU29ja2V0IEFQSXMuXG4gKi9cblRlbXBsYXRlU2VsZWN0aW9uRXhwcmVzc2lvbj86IHN0cmluZ1xuLyoqXG4gKiBDdXN0b20gdGltZW91dCBiZXR3ZWVuIDUwIGFuZCAyOTAwMCBtaWxsaXNlY29uZHMgZm9yIFdlYlNvY2tldCBBUElzIGFuZCBiZXR3ZWVuIDUwIGFuZCAzMDAwMCBtaWxsaXNlY29uZHMgZm9yIEhUVFAgQVBJcy4gVGhlIGRlZmF1bHQgdGltZW91dCBpcyAyOSBzZWNvbmRzIGZvciBXZWJTb2NrZXQgQVBJcyBhbmQgMzAgc2Vjb25kcyBmb3IgSFRUUCBBUElzLlxuICovXG5UaW1lb3V0SW5NaWxsaXM/OiBudW1iZXJcblRsc0NvbmZpZz86IFRsc0NvbmZpZ1xufVxuLyoqXG4gKiBtYXAgb2YgcmVzcG9uc2UgcGFyYW1ldGVyIGxpc3RzXG4gKiBcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIlthLXpBLVowLTldK1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlUGFyYW1ldGVyTWFwIHtcblJlc3BvbnNlUGFyYW1ldGVycz86IFJlc3BvbnNlUGFyYW1ldGVyTGlzdFxufVxuLyoqXG4gKiByZXNwb25zZSBwYXJhbWV0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVBhcmFtZXRlciB7XG5EZXN0aW5hdGlvbj86IHN0cmluZ1xuU291cmNlPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBUTFMgY29uZmlndXJhdGlvbiBmb3IgYSBwcml2YXRlIGludGVncmF0aW9uLiBJZiB5b3Ugc3BlY2lmeSBhIFRMUyBjb25maWd1cmF0aW9uLCBwcml2YXRlIGludGVncmF0aW9uIHRyYWZmaWMgdXNlcyB0aGUgSFRUUFMgcHJvdG9jb2wuIFN1cHBvcnRlZCBvbmx5IGZvciBIVFRQIEFQSXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGxzQ29uZmlnIHtcblNlcnZlck5hbWVUb1ZlcmlmeT86IHN0cmluZ1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1hcGlnYXRld2F5djItaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbGlzdCBvZiByZXNwb25zZSBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3BvbnNlUGFyYW1ldGVyTGlzdCA9IFJlc3BvbnNlUGFyYW1ldGVyW11cblxuLyoqXG4gKiBSZXNvdXJjZSBUeXBlIGRlZmluaXRpb24gZm9yIEFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfQVBJR0FURVdBWVYyX0lOVEVHUkFUSU9OIHtcbi8qKlxuICogVGhlIEFQSSBpZGVudGlmaWVyLlxuICovXG5BcGlJZDogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgVlBDIGxpbmsgZm9yIGEgcHJpdmF0ZSBpbnRlZ3JhdGlvbi4gU3VwcG9ydGVkIG9ubHkgZm9yIEhUVFAgQVBJcy5cbiAqL1xuQ29ubmVjdGlvbklkPzogc3RyaW5nXG4vKipcbiAqIFRoZSB0eXBlIG9mIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24gdG8gdGhlIGludGVncmF0aW9uIGVuZHBvaW50LiBTcGVjaWZ5IElOVEVSTkVUIGZvciBjb25uZWN0aW9ucyB0aHJvdWdoIHRoZSBwdWJsaWMgcm91dGFibGUgaW50ZXJuZXQgb3IgVlBDX0xJTksgZm9yIHByaXZhdGUgY29ubmVjdGlvbnMgYmV0d2VlbiBBUEkgR2F0ZXdheSBhbmQgcmVzb3VyY2VzIGluIGEgVlBDLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBJTlRFUk5FVC5cbiAqL1xuQ29ubmVjdGlvblR5cGU/OiBzdHJpbmdcbi8qKlxuICogU3VwcG9ydGVkIG9ubHkgZm9yIFdlYlNvY2tldCBBUElzLiBTcGVjaWZpZXMgaG93IHRvIGhhbmRsZSByZXNwb25zZSBwYXlsb2FkIGNvbnRlbnQgdHlwZSBjb252ZXJzaW9ucy4gU3VwcG9ydGVkIHZhbHVlcyBhcmUgQ09OVkVSVF9UT19CSU5BUlkgYW5kIENPTlZFUlRfVE9fVEVYVC5cbiAqL1xuQ29udGVudEhhbmRsaW5nU3RyYXRlZ3k/OiBzdHJpbmdcbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjcmVkZW50aWFscyByZXF1aXJlZCBmb3IgdGhlIGludGVncmF0aW9uLCBpZiBhbnkuIEZvciBBV1MgaW50ZWdyYXRpb25zLCB0aHJlZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuIFRvIHNwZWNpZnkgYW4gSUFNIFJvbGUgZm9yIEFQSSBHYXRld2F5IHRvIGFzc3VtZSwgdXNlIHRoZSByb2xlJ3MgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikuIFRvIHJlcXVpcmUgdGhhdCB0aGUgY2FsbGVyJ3MgaWRlbnRpdHkgYmUgcGFzc2VkIHRocm91Z2ggZnJvbSB0aGUgcmVxdWVzdCwgc3BlY2lmeSB0aGUgc3RyaW5nIGFybjphd3M6aWFtOjoqOnVzZXIvKi4gVG8gdXNlIHJlc291cmNlLWJhc2VkIHBlcm1pc3Npb25zIG9uIHN1cHBvcnRlZCBBV1Mgc2VydmljZXMsIGRvbid0IHNwZWNpZnkgdGhpcyBwYXJhbWV0ZXIuXG4gKi9cbkNyZWRlbnRpYWxzQXJuPzogc3RyaW5nXG4vKipcbiAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgaW50ZWdyYXRpb24uXG4gKi9cbkRlc2NyaXB0aW9uPzogc3RyaW5nXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaW50ZWdyYXRpb24ncyBIVFRQIG1ldGhvZCB0eXBlLlxuICovXG5JbnRlZ3JhdGlvbk1ldGhvZD86IHN0cmluZ1xuLyoqXG4gKiBTdXBwb3J0ZWQgb25seSBmb3IgSFRUUCBBUEkgQVdTX1BST1hZIGludGVncmF0aW9ucy4gU3BlY2lmaWVzIHRoZSBBV1Mgc2VydmljZSBhY3Rpb24gdG8gaW52b2tlLlxuICovXG5JbnRlZ3JhdGlvblN1YnR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIGludGVncmF0aW9uIElELlxuICovXG5JbnRlZ3JhdGlvbklkPzogc3RyaW5nXG4vKipcbiAqIFRoZSBpbnRlZ3JhdGlvbiB0eXBlIG9mIGFuIGludGVncmF0aW9uLlxuICovXG5JbnRlZ3JhdGlvblR5cGU6IHN0cmluZ1xuLyoqXG4gKiBGb3IgYSBMYW1iZGEgaW50ZWdyYXRpb24sIHNwZWNpZnkgdGhlIFVSSSBvZiBhIExhbWJkYSBmdW5jdGlvbi4gRm9yIGFuIEhUVFAgaW50ZWdyYXRpb24sIHNwZWNpZnkgYSBmdWxseS1xdWFsaWZpZWQgVVJMLiBGb3IgYW4gSFRUUCBBUEkgcHJpdmF0ZSBpbnRlZ3JhdGlvbiwgc3BlY2lmeSB0aGUgQVJOIG9mIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgbGlzdGVuZXIsIE5ldHdvcmsgTG9hZCBCYWxhbmNlciBsaXN0ZW5lciwgb3IgQVdTIENsb3VkIE1hcCBzZXJ2aWNlLlxuICovXG5JbnRlZ3JhdGlvblVyaT86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHBhc3MtdGhyb3VnaCBiZWhhdmlvciBmb3IgaW5jb21pbmcgcmVxdWVzdHMgYmFzZWQgb24gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgaW4gdGhlIHJlcXVlc3QsIGFuZCB0aGUgYXZhaWxhYmxlIG1hcHBpbmcgdGVtcGxhdGVzIHNwZWNpZmllZCBhcyB0aGUgcmVxdWVzdFRlbXBsYXRlcyBwcm9wZXJ0eSBvbiB0aGUgSW50ZWdyYXRpb24gcmVzb3VyY2UuIFRoZXJlIGFyZSB0aHJlZSB2YWxpZCB2YWx1ZXM6IFdIRU5fTk9fTUFUQ0gsIFdIRU5fTk9fVEVNUExBVEVTLCBhbmQgTkVWRVIuIFN1cHBvcnRlZCBvbmx5IGZvciBXZWJTb2NrZXQgQVBJcy5cbiAqL1xuUGFzc3Rocm91Z2hCZWhhdmlvcj86IHN0cmluZ1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgcGF5bG9hZCBzZW50IHRvIGFuIGludGVncmF0aW9uLiBSZXF1aXJlZCBmb3IgSFRUUCBBUElzLiBGb3IgSFRUUCBBUElzLCBzdXBwb3J0ZWQgdmFsdWVzIGZvciBMYW1iZGEgcHJveHkgaW50ZWdyYXRpb25zIGFyZSAxLjAgYW5kIDIuMCBGb3IgYWxsIG90aGVyIGludGVncmF0aW9ucywgMS4wIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCB2YWx1ZS5cbiAqL1xuUGF5bG9hZEZvcm1hdFZlcnNpb24/OiBzdHJpbmdcbi8qKlxuICogQSBrZXktdmFsdWUgbWFwIHNwZWNpZnlpbmcgcGFyYW1ldGVycy5cbiAqL1xuUmVxdWVzdFBhcmFtZXRlcnM/OiB7XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIlthLXpBLVowLTldK1wiLlxuICovXG5bazogc3RyaW5nXTogc3RyaW5nXG59XG4vKipcbiAqIEEgbWFwIG9mIFZlbG9jaXR5IHRlbXBsYXRlcyB0aGF0IGFyZSBhcHBsaWVkIG9uIHRoZSByZXF1ZXN0IHBheWxvYWQgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyIHNlbnQgYnkgdGhlIGNsaWVudC5cbiAqL1xuUmVxdWVzdFRlbXBsYXRlcz86IHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiW2EtekEtWjAtOV0rXCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbi8qKlxuICogUGFyYW1ldGVycyB0aGF0IHRyYW5zZm9ybSB0aGUgSFRUUCByZXNwb25zZSBmcm9tIGEgYmFja2VuZCBpbnRlZ3JhdGlvbiBiZWZvcmUgcmV0dXJuaW5nIHRoZSByZXNwb25zZSB0byBjbGllbnRzLiBTdXBwb3J0ZWQgb25seSBmb3IgSFRUUCBBUElzLlxuICovXG5SZXNwb25zZVBhcmFtZXRlcnM/OiB7XG5bazogc3RyaW5nXTogUmVzcG9uc2VQYXJhbWV0ZXJNYXBcbn1cbi8qKlxuICogVGhlIHRlbXBsYXRlIHNlbGVjdGlvbiBleHByZXNzaW9uIGZvciB0aGUgaW50ZWdyYXRpb24uIFN1cHBvcnRlZCBvbmx5IGZvciBXZWJTb2NrZXQgQVBJcy5cbiAqL1xuVGVtcGxhdGVTZWxlY3Rpb25FeHByZXNzaW9uPzogc3RyaW5nXG4vKipcbiAqIEN1c3RvbSB0aW1lb3V0IGJldHdlZW4gNTAgYW5kIDI5MDAwIG1pbGxpc2Vjb25kcyBmb3IgV2ViU29ja2V0IEFQSXMgYW5kIGJldHdlZW4gNTAgYW5kIDMwMDAwIG1pbGxpc2Vjb25kcyBmb3IgSFRUUCBBUElzLiBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDI5IHNlY29uZHMgZm9yIFdlYlNvY2tldCBBUElzIGFuZCAzMCBzZWNvbmRzIGZvciBIVFRQIEFQSXMuXG4gKi9cblRpbWVvdXRJbk1pbGxpcz86IG51bWJlclxuVGxzQ29uZmlnPzogVGxzQ29uZmlnXG59XG4vKipcbiAqIG1hcCBvZiByZXNwb25zZSBwYXJhbWV0ZXIgbGlzdHNcbiAqIFxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYHVuZGVmaW5lZGAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiW2EtekEtWjAtOV0rXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VQYXJhbWV0ZXJNYXAge1xuUmVzcG9uc2VQYXJhbWV0ZXJzPzogUmVzcG9uc2VQYXJhbWV0ZXJMaXN0XG59XG4vKipcbiAqIHJlc3BvbnNlIHBhcmFtZXRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlUGFyYW1ldGVyIHtcbkRlc3RpbmF0aW9uPzogc3RyaW5nXG5Tb3VyY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIFRMUyBjb25maWd1cmF0aW9uIGZvciBhIHByaXZhdGUgaW50ZWdyYXRpb24uIElmIHlvdSBzcGVjaWZ5IGEgVExTIGNvbmZpZ3VyYXRpb24sIHByaXZhdGUgaW50ZWdyYXRpb24gdHJhZmZpYyB1c2VzIHRoZSBIVFRQUyBwcm90b2NvbC4gU3VwcG9ydGVkIG9ubHkgZm9yIEhUVFAgQVBJcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUbHNDb25maWcge1xuU2VydmVyTmFtZVRvVmVyaWZ5Pzogc3RyaW5nXG59XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  export type AlarmType = ("applicationHealth" | "trigger");
2
2
  export type RecoveryApproach = ("activeActive" | "activePassive");
3
+ export type ReportOutputConfiguration = S3Configuration;
3
4
  export type WorkflowTargetAction = ("activate" | "deactivate");
4
5
  export type AlarmCondition = ("red" | "green");
5
- export type ExecutionBlockConfiguration = (CustomActionLambdaConfig | Ec2AsgCapacityIncreaseConfig | ExecutionApprovalConfig | ArcRoutingControlConfig | GlobalAuroraConfig | ParallelConfig | RegionSwitchPlanConfig | EcsCapacityIncreaseConfig | EksResourceScalingConfig | Route53HealthCheckConfig);
6
+ export type ExecutionBlockConfiguration = (CustomActionLambdaConfig | Ec2AsgCapacityIncreaseConfig | ExecutionApprovalConfig | ArcRoutingControlConfig | GlobalAuroraConfig | ParallelConfig | RegionSwitchPlanConfig | EcsCapacityIncreaseConfig | EksResourceScalingConfig | Route53HealthCheckConfig | DocumentDbConfig);
6
7
  export type RegionToRunIn = ("activatingRegion" | "deactivatingRegion");
7
8
  export type LambdaUngracefulBehavior = "skip";
8
9
  export type Ec2AsgCapacityMonitoringApproach = ("sampledMaxInLast24Hours" | "autoscalingMaxInLast24Hours");
@@ -11,7 +12,9 @@ export type GlobalAuroraDefaultBehavior = ("switchoverOnly" | "failover");
11
12
  export type GlobalAuroraUngracefulBehavior = "failover";
12
13
  export type EcsCapacityMonitoringApproach = ("sampledMaxInLast24Hours" | "containerInsightsMaxInLast24Hours");
13
14
  export type EksCapacityMonitoringApproach = "sampledMaxInLast24Hours";
14
- export type ExecutionBlockType = ("CustomActionLambda" | "ManualApproval" | "AuroraGlobalDatabase" | "EC2AutoScaling" | "ARCRoutingControl" | "ARCRegionSwitchPlan" | "Parallel" | "ECSServiceScaling" | "EKSResourceScaling" | "Route53HealthCheck");
15
+ export type DocumentDbDefaultBehavior = ("switchoverOnly" | "failover");
16
+ export type DocumentDbUngracefulBehavior = "failover";
17
+ export type ExecutionBlockType = ("CustomActionLambda" | "ManualApproval" | "AuroraGlobalDatabase" | "EC2AutoScaling" | "ARCRoutingControl" | "ARCRegionSwitchPlan" | "Parallel" | "ECSServiceScaling" | "EKSResourceScaling" | "Route53HealthCheck" | "DocumentDb");
15
18
  /**
16
19
  * @minItems 2
17
20
  * @maxItems 2
@@ -42,6 +45,7 @@ export interface _AWS_ARCREGIONSWITCH_PLAN {
42
45
  * @maxItems 2
43
46
  */
44
47
  Regions: string[];
48
+ ReportConfiguration?: ReportConfiguration;
45
49
  Tags?: Tags;
46
50
  Triggers?: Trigger[];
47
51
  Version?: string;
@@ -70,6 +74,20 @@ export interface AssociatedAlarm {
70
74
  ResourceIdentifier: string;
71
75
  AlarmType: AlarmType;
72
76
  }
77
+ export interface ReportConfiguration {
78
+ /**
79
+ * @minItems 1
80
+ * @maxItems 1
81
+ */
82
+ ReportOutput?: ReportOutputConfiguration[];
83
+ }
84
+ export interface S3Configuration {
85
+ S3Configuration: S3ReportOutputConfiguration;
86
+ }
87
+ export interface S3ReportOutputConfiguration {
88
+ BucketPath?: string;
89
+ BucketOwner?: string;
90
+ }
73
91
  export interface Tags {
74
92
  /**
75
93
  * This interface was referenced by `Tags`'s JSON-Schema definition
@@ -291,6 +309,21 @@ export interface Route53ResourceRecordSet {
291
309
  RecordSetIdentifier?: string;
292
310
  Region?: string;
293
311
  }
312
+ export interface DocumentDbConfig {
313
+ DocumentDbConfig: DocumentDbConfiguration;
314
+ }
315
+ export interface DocumentDbConfiguration {
316
+ TimeoutMinutes?: number;
317
+ CrossAccountRole?: string;
318
+ ExternalId?: string;
319
+ Behavior: (DocumentDbDefaultBehavior & string);
320
+ Ungraceful?: DocumentDbUngraceful;
321
+ GlobalClusterIdentifier: string;
322
+ DatabaseClusterArns: string[];
323
+ }
324
+ export interface DocumentDbUngraceful {
325
+ Ungraceful?: DocumentDbUngracefulBehavior;
326
+ }
294
327
  export interface HealthCheckState {
295
328
  HealthCheckId?: string;
296
329
  Region?: string;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFyY3JlZ2lvbnN3aXRjaC1wbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWFyY3JlZ2lvbnN3aXRjaC1wbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBbGFybVR5cGUgPSAoXCJhcHBsaWNhdGlvbkhlYWx0aFwiIHwgXCJ0cmlnZ2VyXCIpXG5leHBvcnQgdHlwZSBSZWNvdmVyeUFwcHJvYWNoID0gKFwiYWN0aXZlQWN0aXZlXCIgfCBcImFjdGl2ZVBhc3NpdmVcIilcbmV4cG9ydCB0eXBlIFdvcmtmbG93VGFyZ2V0QWN0aW9uID0gKFwiYWN0aXZhdGVcIiB8IFwiZGVhY3RpdmF0ZVwiKVxuZXhwb3J0IHR5cGUgQWxhcm1Db25kaXRpb24gPSAoXCJyZWRcIiB8IFwiZ3JlZW5cIilcbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkJsb2NrQ29uZmlndXJhdGlvbiA9IChDdXN0b21BY3Rpb25MYW1iZGFDb25maWcgfCBFYzJBc2dDYXBhY2l0eUluY3JlYXNlQ29uZmlnIHwgRXhlY3V0aW9uQXBwcm92YWxDb25maWcgfCBBcmNSb3V0aW5nQ29udHJvbENvbmZpZyB8IEdsb2JhbEF1cm9yYUNvbmZpZyB8IFBhcmFsbGVsQ29uZmlnIHwgUmVnaW9uU3dpdGNoUGxhbkNvbmZpZyB8IEVjc0NhcGFjaXR5SW5jcmVhc2VDb25maWcgfCBFa3NSZXNvdXJjZVNjYWxpbmdDb25maWcgfCBSb3V0ZTUzSGVhbHRoQ2hlY2tDb25maWcpXG5leHBvcnQgdHlwZSBSZWdpb25Ub1J1bkluID0gKFwiYWN0aXZhdGluZ1JlZ2lvblwiIHwgXCJkZWFjdGl2YXRpbmdSZWdpb25cIilcbmV4cG9ydCB0eXBlIExhbWJkYVVuZ3JhY2VmdWxCZWhhdmlvciA9IFwic2tpcFwiXG5leHBvcnQgdHlwZSBFYzJBc2dDYXBhY2l0eU1vbml0b3JpbmdBcHByb2FjaCA9IChcInNhbXBsZWRNYXhJbkxhc3QyNEhvdXJzXCIgfCBcImF1dG9zY2FsaW5nTWF4SW5MYXN0MjRIb3Vyc1wiKVxuZXhwb3J0IHR5cGUgUm91dGluZ0NvbnRyb2xTdGF0ZUNoYW5nZSA9IChcIk9uXCIgfCBcIk9mZlwiKVxuZXhwb3J0IHR5cGUgR2xvYmFsQXVyb3JhRGVmYXVsdEJlaGF2aW9yID0gKFwic3dpdGNob3Zlck9ubHlcIiB8IFwiZmFpbG92ZXJcIilcbmV4cG9ydCB0eXBlIEdsb2JhbEF1cm9yYVVuZ3JhY2VmdWxCZWhhdmlvciA9IFwiZmFpbG92ZXJcIlxuZXhwb3J0IHR5cGUgRWNzQ2FwYWNpdHlNb25pdG9yaW5nQXBwcm9hY2ggPSAoXCJzYW1wbGVkTWF4SW5MYXN0MjRIb3Vyc1wiIHwgXCJjb250YWluZXJJbnNpZ2h0c01heEluTGFzdDI0SG91cnNcIilcbmV4cG9ydCB0eXBlIEVrc0NhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoID0gXCJzYW1wbGVkTWF4SW5MYXN0MjRIb3Vyc1wiXG5leHBvcnQgdHlwZSBFeGVjdXRpb25CbG9ja1R5cGUgPSAoXCJDdXN0b21BY3Rpb25MYW1iZGFcIiB8IFwiTWFudWFsQXBwcm92YWxcIiB8IFwiQXVyb3JhR2xvYmFsRGF0YWJhc2VcIiB8IFwiRUMyQXV0b1NjYWxpbmdcIiB8IFwiQVJDUm91dGluZ0NvbnRyb2xcIiB8IFwiQVJDUmVnaW9uU3dpdGNoUGxhblwiIHwgXCJQYXJhbGxlbFwiIHwgXCJFQ1NTZXJ2aWNlU2NhbGluZ1wiIHwgXCJFS1NSZXNvdXJjZVNjYWxpbmdcIiB8IFwiUm91dGU1M0hlYWx0aENoZWNrXCIpXG4vKipcbiAqIEBtaW5JdGVtcyAyXG4gKiBAbWF4SXRlbXMgMlxuICogXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgdW5kZWZpbmVkYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuK1wiLlxuICovXG5leHBvcnQgdHlwZSBIZWFsdGhDaGVja3MgPSBIZWFsdGhDaGVja1N0YXRlW11cbmV4cG9ydCB0eXBlIEhlYWx0aENoZWNrSWRzID0gc3RyaW5nW11cbmV4cG9ydCB0eXBlIEhlYWx0aENoZWNrUmVjb3JkTmFtZXMgPSBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgSGVhbHRoQ2hlY2tSZWdpb25zID0gc3RyaW5nW11cbmV4cG9ydCB0eXBlIEhvc3RlZFpvbmVJZHMgPSBzdHJpbmdbXVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwbGFuIHRoYXQgc3BlY2lmaWVzIFJlZ2lvbnMsIElBTSByb2xlcywgYW5kIHdvcmtmbG93cyBvZiBsb2dpYyByZXF1aXJlZCB0byBwZXJmb3JtIHRoZSBkZXNpcmVkIGNoYW5nZSB0byB5b3VyIG11bHRpLVJlZ2lvbiBhcHBsaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIF9BV1NfQVJDUkVHSU9OU1dJVENIX1BMQU4ge1xuQXJuPzogc3RyaW5nXG5Bc3NvY2lhdGVkQWxhcm1zPzogQXNzb2NpYXRlZEFsYXJtTWFwXG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuRXhlY3V0aW9uUm9sZTogc3RyaW5nXG5OYW1lOiBzdHJpbmdcbk93bmVyPzogc3RyaW5nXG5QcmltYXJ5UmVnaW9uPzogc3RyaW5nXG5SZWNvdmVyeUFwcHJvYWNoOiBSZWNvdmVyeUFwcHJvYWNoXG5SZWNvdmVyeVRpbWVPYmplY3RpdmVNaW51dGVzPzogbnVtYmVyXG4vKipcbiAqIEBtaW5JdGVtcyAyXG4gKiBAbWF4SXRlbXMgMlxuICovXG5SZWdpb25zOiBzdHJpbmdbXVxuVGFncz86IFRhZ3NcblRyaWdnZXJzPzogVHJpZ2dlcltdXG5WZXJzaW9uPzogc3RyaW5nXG5Xb3JrZmxvd3M6IFdvcmtmbG93W11cbkhlYWx0aENoZWNrc0ZvclBsYW4/OiB7XG5bazogc3RyaW5nXTogSGVhbHRoQ2hlY2tzXG59XG5Sb3V0ZTUzSGVhbHRoQ2hlY2tzPzoge1xuSGVhbHRoQ2hlY2tJZHM/OiBIZWFsdGhDaGVja0lkc1xuUmVjb3JkTmFtZXM/OiBIZWFsdGhDaGVja1JlY29yZE5hbWVzXG5SZWdpb25zPzogSGVhbHRoQ2hlY2tSZWdpb25zXG5Ib3N0ZWRab25lSWRzPzogSG9zdGVkWm9uZUlkc1xufVxuUGxhbkhlYWx0aENoZWNrcz86IHN0cmluZ1tdXG59XG5leHBvcnQgaW50ZXJmYWNlIEFzc29jaWF0ZWRBbGFybU1hcCB7XG5bazogc3RyaW5nXTogQXNzb2NpYXRlZEFsYXJtXG59XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGBBc3NvY2lhdGVkQWxhcm1NYXBgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi4rXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzb2NpYXRlZEFsYXJtIHtcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcblJlc291cmNlSWRlbnRpZmllcjogc3RyaW5nXG5BbGFybVR5cGU6IEFsYXJtVHlwZVxufVxuZXhwb3J0IGludGVyZmFjZSBUYWdzIHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYFRhZ3NgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi4rXCIuXG4gKi9cbltrOiBzdHJpbmddOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlciB7XG5EZXNjcmlwdGlvbj86IHN0cmluZ1xuVGFyZ2V0UmVnaW9uOiBzdHJpbmdcbkFjdGlvbjogV29ya2Zsb3dUYXJnZXRBY3Rpb25cbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqIEBtYXhJdGVtcyAxMFxuICovXG5Db25kaXRpb25zOiBUcmlnZ2VyQ29uZGl0aW9uW11cbk1pbkRlbGF5TWludXRlc0JldHdlZW5FeGVjdXRpb25zOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVHJpZ2dlckNvbmRpdGlvbiB7XG5Bc3NvY2lhdGVkQWxhcm1OYW1lOiBzdHJpbmdcbkNvbmRpdGlvbjogQWxhcm1Db25kaXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3cge1xuU3RlcHM/OiBTdGVwW11cbldvcmtmbG93VGFyZ2V0QWN0aW9uOiBXb3JrZmxvd1RhcmdldEFjdGlvblxuV29ya2Zsb3dUYXJnZXRSZWdpb24/OiBzdHJpbmdcbldvcmtmbG93RGVzY3JpcHRpb24/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcCB7XG5OYW1lOiBzdHJpbmdcbkRlc2NyaXB0aW9uPzogc3RyaW5nXG5FeGVjdXRpb25CbG9ja0NvbmZpZ3VyYXRpb246IEV4ZWN1dGlvbkJsb2NrQ29uZmlndXJhdGlvblxuRXhlY3V0aW9uQmxvY2tUeXBlOiBFeGVjdXRpb25CbG9ja1R5cGVcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tQWN0aW9uTGFtYmRhQ29uZmlnIHtcbkN1c3RvbUFjdGlvbkxhbWJkYUNvbmZpZzogQ3VzdG9tQWN0aW9uTGFtYmRhQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21BY3Rpb25MYW1iZGFDb25maWd1cmF0aW9uIHtcblRpbWVvdXRNaW51dGVzPzogbnVtYmVyXG4vKipcbiAqIEBtaW5JdGVtcyAxXG4gKiBAbWF4SXRlbXMgMlxuICovXG5MYW1iZGFzOiBMYW1iZGFzW11cblJldHJ5SW50ZXJ2YWxNaW51dGVzOiBudW1iZXJcblJlZ2lvblRvUnVuOiBSZWdpb25Ub1J1bkluXG5VbmdyYWNlZnVsPzogTGFtYmRhVW5ncmFjZWZ1bFxufVxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFzIHtcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcbkFybj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFVbmdyYWNlZnVsIHtcbkJlaGF2aW9yPzogKExhbWJkYVVuZ3JhY2VmdWxCZWhhdmlvciAmIHN0cmluZylcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRWMyQXNnQ2FwYWNpdHlJbmNyZWFzZUNvbmZpZyB7XG5FYzJBc2dDYXBhY2l0eUluY3JlYXNlQ29uZmlnOiBFYzJBc2dDYXBhY2l0eUluY3JlYXNlQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBFYzJBc2dDYXBhY2l0eUluY3JlYXNlQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuLyoqXG4gKiBAbWluSXRlbXMgMlxuICogQG1heEl0ZW1zIDJcbiAqL1xuQXNnczogQXNnW11cblVuZ3JhY2VmdWw/OiBFYzJVbmdyYWNlZnVsXG5UYXJnZXRQZXJjZW50PzogbnVtYmVyXG5DYXBhY2l0eU1vbml0b3JpbmdBcHByb2FjaD86IChFYzJBc2dDYXBhY2l0eU1vbml0b3JpbmdBcHByb2FjaCAmIHN0cmluZylcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXNnIHtcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcbkFybj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFYzJVbmdyYWNlZnVsIHtcbk1pbmltdW1TdWNjZXNzUGVyY2VudGFnZTogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkFwcHJvdmFsQ29uZmlnIHtcbkV4ZWN1dGlvbkFwcHJvdmFsQ29uZmlnOiBFeGVjdXRpb25BcHByb3ZhbENvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uQXBwcm92YWxDb25maWd1cmF0aW9uIHtcblRpbWVvdXRNaW51dGVzPzogbnVtYmVyXG5BcHByb3ZhbFJvbGU6IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBBcmNSb3V0aW5nQ29udHJvbENvbmZpZyB7XG5BcmNSb3V0aW5nQ29udHJvbENvbmZpZzogQXJjUm91dGluZ0NvbnRyb2xDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIEFyY1JvdXRpbmdDb250cm9sQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuUmVnaW9uQW5kUm91dGluZ0NvbnRyb2xzOiBSZWdpb25BbmRSb3V0aW5nQ29udHJvbHNcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uQW5kUm91dGluZ0NvbnRyb2xzIHtcbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYFJlZ2lvbkFuZFJvdXRpbmdDb250cm9sc2AncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLitcIi5cbiAqL1xuW2s6IHN0cmluZ106IEFyY1JvdXRpbmdDb250cm9sU3RhdGVbXVxufVxuZXhwb3J0IGludGVyZmFjZSBBcmNSb3V0aW5nQ29udHJvbFN0YXRlIHtcblJvdXRpbmdDb250cm9sQXJuOiBzdHJpbmdcblN0YXRlOiBSb3V0aW5nQ29udHJvbFN0YXRlQ2hhbmdlXG59XG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbEF1cm9yYUNvbmZpZyB7XG5HbG9iYWxBdXJvcmFDb25maWc6IEdsb2JhbEF1cm9yYUNvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsQXVyb3JhQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuQmVoYXZpb3I6IChHbG9iYWxBdXJvcmFEZWZhdWx0QmVoYXZpb3IgJiBzdHJpbmcpXG5VbmdyYWNlZnVsPzogR2xvYmFsQXVyb3JhVW5ncmFjZWZ1bFxuR2xvYmFsQ2x1c3RlcklkZW50aWZpZXI6IHN0cmluZ1xuRGF0YWJhc2VDbHVzdGVyQXJuczogc3RyaW5nW11cbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsQXVyb3JhVW5ncmFjZWZ1bCB7XG5VbmdyYWNlZnVsPzogR2xvYmFsQXVyb3JhVW5ncmFjZWZ1bEJlaGF2aW9yXG59XG5leHBvcnQgaW50ZXJmYWNlIFBhcmFsbGVsQ29uZmlnIHtcblBhcmFsbGVsQ29uZmlnOiBQYXJhbGxlbEV4ZWN1dGlvbkJsb2NrQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEV4ZWN1dGlvbkJsb2NrQ29uZmlndXJhdGlvbiB7XG5TdGVwczogU3RlcFtdXG59XG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvblN3aXRjaFBsYW5Db25maWcge1xuUmVnaW9uU3dpdGNoUGxhbkNvbmZpZzogUmVnaW9uU3dpdGNoUGxhbkNvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uU3dpdGNoUGxhbkNvbmZpZ3VyYXRpb24ge1xuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuQXJuOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRWNzQ2FwYWNpdHlJbmNyZWFzZUNvbmZpZyB7XG5FY3NDYXBhY2l0eUluY3JlYXNlQ29uZmlnOiBFY3NDYXBhY2l0eUluY3JlYXNlQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBFY3NDYXBhY2l0eUluY3JlYXNlQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuLyoqXG4gKiBAbWluSXRlbXMgMlxuICogQG1heEl0ZW1zIDJcbiAqL1xuU2VydmljZXM6IFNlcnZpY2VbXVxuVW5ncmFjZWZ1bD86IEVjc1VuZ3JhY2VmdWxcblRhcmdldFBlcmNlbnQ/OiBudW1iZXJcbkNhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoPzogKEVjc0NhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoICYgc3RyaW5nKVxufVxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlIHtcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcbkNsdXN0ZXJBcm4/OiBzdHJpbmdcblNlcnZpY2VBcm4/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRWNzVW5ncmFjZWZ1bCB7XG5NaW5pbXVtU3VjY2Vzc1BlcmNlbnRhZ2U6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBFa3NSZXNvdXJjZVNjYWxpbmdDb25maWcge1xuRWtzUmVzb3VyY2VTY2FsaW5nQ29uZmlnOiBFa3NSZXNvdXJjZVNjYWxpbmdDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIEVrc1Jlc291cmNlU2NhbGluZ0NvbmZpZ3VyYXRpb24ge1xuVGltZW91dE1pbnV0ZXM/OiBudW1iZXJcbkt1YmVybmV0ZXNSZXNvdXJjZVR5cGU6IEt1YmVybmV0ZXNSZXNvdXJjZVR5cGVcbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqL1xuU2NhbGluZ1Jlc291cmNlcz86IEt1YmVybmV0ZXNTY2FsaW5nQXBwbGljYXRpb25bXVxuLyoqXG4gKiBAbWluSXRlbXMgMlxuICovXG5Fa3NDbHVzdGVycz86IEVrc0NsdXN0ZXJbXVxuVW5ncmFjZWZ1bD86IEVrc1Jlc291cmNlU2NhbGluZ1VuZ3JhY2VmdWxcblRhcmdldFBlcmNlbnQ/OiBudW1iZXJcbkNhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoPzogKEVrc0NhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoICYgc3RyaW5nKVxufVxuZXhwb3J0IGludGVyZmFjZSBLdWJlcm5ldGVzUmVzb3VyY2VUeXBlIHtcbkFwaVZlcnNpb246IHN0cmluZ1xuS2luZDogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNTY2FsaW5nQXBwbGljYXRpb24ge1xuW2s6IHN0cmluZ106IFJlZ2lvbmFsU2NhbGluZ1Jlc291cmNlXG59XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGBLdWJlcm5ldGVzU2NhbGluZ0FwcGxpY2F0aW9uYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuK1wiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lvbmFsU2NhbGluZ1Jlc291cmNlIHtcbltrOiBzdHJpbmddOiBLdWJlcm5ldGVzU2NhbGluZ1Jlc291cmNlXG59XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGBSZWdpb25hbFNjYWxpbmdSZXNvdXJjZWAncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiXlthLXpdezJ9LVthLXotXSstXFxkKyRcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLdWJlcm5ldGVzU2NhbGluZ1Jlc291cmNlIHtcbk5hbWVzcGFjZTogc3RyaW5nXG5OYW1lOiBzdHJpbmdcbkhwYU5hbWU/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRWtzQ2x1c3RlciB7XG5Dcm9zc0FjY291bnRSb2xlPzogc3RyaW5nXG5FeHRlcm5hbElkPzogc3RyaW5nXG5DbHVzdGVyQXJuOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRWtzUmVzb3VyY2VTY2FsaW5nVW5ncmFjZWZ1bCB7XG5NaW5pbXVtU3VjY2Vzc1BlcmNlbnRhZ2U6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZTUzSGVhbHRoQ2hlY2tDb25maWcge1xuUm91dGU1M0hlYWx0aENoZWNrQ29uZmlnOiBSb3V0ZTUzSGVhbHRoQ2hlY2tDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlNTNIZWFsdGhDaGVja0NvbmZpZ3VyYXRpb24ge1xuVGltZW91dE1pbnV0ZXM/OiBudW1iZXJcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcbkhvc3RlZFpvbmVJZDogc3RyaW5nXG5SZWNvcmROYW1lOiBzdHJpbmdcblJlY29yZFNldHM/OiBSb3V0ZTUzUmVzb3VyY2VSZWNvcmRTZXRbXVxufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZTUzUmVzb3VyY2VSZWNvcmRTZXQge1xuUmVjb3JkU2V0SWRlbnRpZmllcj86IHN0cmluZ1xuUmVnaW9uPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aENoZWNrU3RhdGUge1xuSGVhbHRoQ2hlY2tJZD86IHN0cmluZ1xuUmVnaW9uPzogc3RyaW5nXG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFyY3JlZ2lvbnN3aXRjaC1wbGFuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLWFyY3JlZ2lvbnN3aXRjaC1wbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBbGFybVR5cGUgPSAoXCJhcHBsaWNhdGlvbkhlYWx0aFwiIHwgXCJ0cmlnZ2VyXCIpXG5leHBvcnQgdHlwZSBSZWNvdmVyeUFwcHJvYWNoID0gKFwiYWN0aXZlQWN0aXZlXCIgfCBcImFjdGl2ZVBhc3NpdmVcIilcbmV4cG9ydCB0eXBlIFJlcG9ydE91dHB1dENvbmZpZ3VyYXRpb24gPSBTM0NvbmZpZ3VyYXRpb25cbmV4cG9ydCB0eXBlIFdvcmtmbG93VGFyZ2V0QWN0aW9uID0gKFwiYWN0aXZhdGVcIiB8IFwiZGVhY3RpdmF0ZVwiKVxuZXhwb3J0IHR5cGUgQWxhcm1Db25kaXRpb24gPSAoXCJyZWRcIiB8IFwiZ3JlZW5cIilcbmV4cG9ydCB0eXBlIEV4ZWN1dGlvbkJsb2NrQ29uZmlndXJhdGlvbiA9IChDdXN0b21BY3Rpb25MYW1iZGFDb25maWcgfCBFYzJBc2dDYXBhY2l0eUluY3JlYXNlQ29uZmlnIHwgRXhlY3V0aW9uQXBwcm92YWxDb25maWcgfCBBcmNSb3V0aW5nQ29udHJvbENvbmZpZyB8IEdsb2JhbEF1cm9yYUNvbmZpZyB8IFBhcmFsbGVsQ29uZmlnIHwgUmVnaW9uU3dpdGNoUGxhbkNvbmZpZyB8IEVjc0NhcGFjaXR5SW5jcmVhc2VDb25maWcgfCBFa3NSZXNvdXJjZVNjYWxpbmdDb25maWcgfCBSb3V0ZTUzSGVhbHRoQ2hlY2tDb25maWcgfCBEb2N1bWVudERiQ29uZmlnKVxuZXhwb3J0IHR5cGUgUmVnaW9uVG9SdW5JbiA9IChcImFjdGl2YXRpbmdSZWdpb25cIiB8IFwiZGVhY3RpdmF0aW5nUmVnaW9uXCIpXG5leHBvcnQgdHlwZSBMYW1iZGFVbmdyYWNlZnVsQmVoYXZpb3IgPSBcInNraXBcIlxuZXhwb3J0IHR5cGUgRWMyQXNnQ2FwYWNpdHlNb25pdG9yaW5nQXBwcm9hY2ggPSAoXCJzYW1wbGVkTWF4SW5MYXN0MjRIb3Vyc1wiIHwgXCJhdXRvc2NhbGluZ01heEluTGFzdDI0SG91cnNcIilcbmV4cG9ydCB0eXBlIFJvdXRpbmdDb250cm9sU3RhdGVDaGFuZ2UgPSAoXCJPblwiIHwgXCJPZmZcIilcbmV4cG9ydCB0eXBlIEdsb2JhbEF1cm9yYURlZmF1bHRCZWhhdmlvciA9IChcInN3aXRjaG92ZXJPbmx5XCIgfCBcImZhaWxvdmVyXCIpXG5leHBvcnQgdHlwZSBHbG9iYWxBdXJvcmFVbmdyYWNlZnVsQmVoYXZpb3IgPSBcImZhaWxvdmVyXCJcbmV4cG9ydCB0eXBlIEVjc0NhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoID0gKFwic2FtcGxlZE1heEluTGFzdDI0SG91cnNcIiB8IFwiY29udGFpbmVySW5zaWdodHNNYXhJbkxhc3QyNEhvdXJzXCIpXG5leHBvcnQgdHlwZSBFa3NDYXBhY2l0eU1vbml0b3JpbmdBcHByb2FjaCA9IFwic2FtcGxlZE1heEluTGFzdDI0SG91cnNcIlxuZXhwb3J0IHR5cGUgRG9jdW1lbnREYkRlZmF1bHRCZWhhdmlvciA9IChcInN3aXRjaG92ZXJPbmx5XCIgfCBcImZhaWxvdmVyXCIpXG5leHBvcnQgdHlwZSBEb2N1bWVudERiVW5ncmFjZWZ1bEJlaGF2aW9yID0gXCJmYWlsb3ZlclwiXG5leHBvcnQgdHlwZSBFeGVjdXRpb25CbG9ja1R5cGUgPSAoXCJDdXN0b21BY3Rpb25MYW1iZGFcIiB8IFwiTWFudWFsQXBwcm92YWxcIiB8IFwiQXVyb3JhR2xvYmFsRGF0YWJhc2VcIiB8IFwiRUMyQXV0b1NjYWxpbmdcIiB8IFwiQVJDUm91dGluZ0NvbnRyb2xcIiB8IFwiQVJDUmVnaW9uU3dpdGNoUGxhblwiIHwgXCJQYXJhbGxlbFwiIHwgXCJFQ1NTZXJ2aWNlU2NhbGluZ1wiIHwgXCJFS1NSZXNvdXJjZVNjYWxpbmdcIiB8IFwiUm91dGU1M0hlYWx0aENoZWNrXCIgfCBcIkRvY3VtZW50RGJcIilcbi8qKlxuICogQG1pbkl0ZW1zIDJcbiAqIEBtYXhJdGVtcyAyXG4gKiBcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGB1bmRlZmluZWRgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi4rXCIuXG4gKi9cbmV4cG9ydCB0eXBlIEhlYWx0aENoZWNrcyA9IEhlYWx0aENoZWNrU3RhdGVbXVxuZXhwb3J0IHR5cGUgSGVhbHRoQ2hlY2tJZHMgPSBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgSGVhbHRoQ2hlY2tSZWNvcmROYW1lcyA9IHN0cmluZ1tdXG5leHBvcnQgdHlwZSBIZWFsdGhDaGVja1JlZ2lvbnMgPSBzdHJpbmdbXVxuZXhwb3J0IHR5cGUgSG9zdGVkWm9uZUlkcyA9IHN0cmluZ1tdXG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHBsYW4gdGhhdCBzcGVjaWZpZXMgUmVnaW9ucywgSUFNIHJvbGVzLCBhbmQgd29ya2Zsb3dzIG9mIGxvZ2ljIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlIGRlc2lyZWQgY2hhbmdlIHRvIHlvdXIgbXVsdGktUmVnaW9uIGFwcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19BUkNSRUdJT05TV0lUQ0hfUExBTiB7XG5Bcm4/OiBzdHJpbmdcbkFzc29jaWF0ZWRBbGFybXM/OiBBc3NvY2lhdGVkQWxhcm1NYXBcbkRlc2NyaXB0aW9uPzogc3RyaW5nXG5FeGVjdXRpb25Sb2xlOiBzdHJpbmdcbk5hbWU6IHN0cmluZ1xuT3duZXI/OiBzdHJpbmdcblByaW1hcnlSZWdpb24/OiBzdHJpbmdcblJlY292ZXJ5QXBwcm9hY2g6IFJlY292ZXJ5QXBwcm9hY2hcblJlY292ZXJ5VGltZU9iamVjdGl2ZU1pbnV0ZXM/OiBudW1iZXJcbi8qKlxuICogQG1pbkl0ZW1zIDJcbiAqIEBtYXhJdGVtcyAyXG4gKi9cblJlZ2lvbnM6IHN0cmluZ1tdXG5SZXBvcnRDb25maWd1cmF0aW9uPzogUmVwb3J0Q29uZmlndXJhdGlvblxuVGFncz86IFRhZ3NcblRyaWdnZXJzPzogVHJpZ2dlcltdXG5WZXJzaW9uPzogc3RyaW5nXG5Xb3JrZmxvd3M6IFdvcmtmbG93W11cbkhlYWx0aENoZWNrc0ZvclBsYW4/OiB7XG5bazogc3RyaW5nXTogSGVhbHRoQ2hlY2tzXG59XG5Sb3V0ZTUzSGVhbHRoQ2hlY2tzPzoge1xuSGVhbHRoQ2hlY2tJZHM/OiBIZWFsdGhDaGVja0lkc1xuUmVjb3JkTmFtZXM/OiBIZWFsdGhDaGVja1JlY29yZE5hbWVzXG5SZWdpb25zPzogSGVhbHRoQ2hlY2tSZWdpb25zXG5Ib3N0ZWRab25lSWRzPzogSG9zdGVkWm9uZUlkc1xufVxuUGxhbkhlYWx0aENoZWNrcz86IHN0cmluZ1tdXG59XG5leHBvcnQgaW50ZXJmYWNlIEFzc29jaWF0ZWRBbGFybU1hcCB7XG5bazogc3RyaW5nXTogQXNzb2NpYXRlZEFsYXJtXG59XG4vKipcbiAqIFRoaXMgaW50ZXJmYWNlIHdhcyByZWZlcmVuY2VkIGJ5IGBBc3NvY2lhdGVkQWxhcm1NYXBgJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi4rXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXNzb2NpYXRlZEFsYXJtIHtcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcblJlc291cmNlSWRlbnRpZmllcjogc3RyaW5nXG5BbGFybVR5cGU6IEFsYXJtVHlwZVxufVxuZXhwb3J0IGludGVyZmFjZSBSZXBvcnRDb25maWd1cmF0aW9uIHtcbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqIEBtYXhJdGVtcyAxXG4gKi9cblJlcG9ydE91dHB1dD86IFJlcG9ydE91dHB1dENvbmZpZ3VyYXRpb25bXVxufVxuZXhwb3J0IGludGVyZmFjZSBTM0NvbmZpZ3VyYXRpb24ge1xuUzNDb25maWd1cmF0aW9uOiBTM1JlcG9ydE91dHB1dENvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUzNSZXBvcnRPdXRwdXRDb25maWd1cmF0aW9uIHtcbkJ1Y2tldFBhdGg/OiBzdHJpbmdcbkJ1Y2tldE93bmVyPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFRhZ3Mge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgVGFnc2AncyBKU09OLVNjaGVtYSBkZWZpbml0aW9uXG4gKiB2aWEgdGhlIGBwYXR0ZXJuUHJvcGVydHlgIFwiLitcIi5cbiAqL1xuW2s6IHN0cmluZ106IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VyIHtcbkRlc2NyaXB0aW9uPzogc3RyaW5nXG5UYXJnZXRSZWdpb246IHN0cmluZ1xuQWN0aW9uOiBXb3JrZmxvd1RhcmdldEFjdGlvblxuLyoqXG4gKiBAbWluSXRlbXMgMVxuICogQG1heEl0ZW1zIDEwXG4gKi9cbkNvbmRpdGlvbnM6IFRyaWdnZXJDb25kaXRpb25bXVxuTWluRGVsYXlNaW51dGVzQmV0d2VlbkV4ZWN1dGlvbnM6IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBUcmlnZ2VyQ29uZGl0aW9uIHtcbkFzc29jaWF0ZWRBbGFybU5hbWU6IHN0cmluZ1xuQ29uZGl0aW9uOiBBbGFybUNvbmRpdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBXb3JrZmxvdyB7XG5TdGVwcz86IFN0ZXBbXVxuV29ya2Zsb3dUYXJnZXRBY3Rpb246IFdvcmtmbG93VGFyZ2V0QWN0aW9uXG5Xb3JrZmxvd1RhcmdldFJlZ2lvbj86IHN0cmluZ1xuV29ya2Zsb3dEZXNjcmlwdGlvbj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBTdGVwIHtcbk5hbWU6IHN0cmluZ1xuRGVzY3JpcHRpb24/OiBzdHJpbmdcbkV4ZWN1dGlvbkJsb2NrQ29uZmlndXJhdGlvbjogRXhlY3V0aW9uQmxvY2tDb25maWd1cmF0aW9uXG5FeGVjdXRpb25CbG9ja1R5cGU6IEV4ZWN1dGlvbkJsb2NrVHlwZVxufVxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21BY3Rpb25MYW1iZGFDb25maWcge1xuQ3VzdG9tQWN0aW9uTGFtYmRhQ29uZmlnOiBDdXN0b21BY3Rpb25MYW1iZGFDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUFjdGlvbkxhbWJkYUNvbmZpZ3VyYXRpb24ge1xuVGltZW91dE1pbnV0ZXM/OiBudW1iZXJcbi8qKlxuICogQG1pbkl0ZW1zIDFcbiAqIEBtYXhJdGVtcyAyXG4gKi9cbkxhbWJkYXM6IExhbWJkYXNbXVxuUmV0cnlJbnRlcnZhbE1pbnV0ZXM6IG51bWJlclxuUmVnaW9uVG9SdW46IFJlZ2lvblRvUnVuSW5cblVuZ3JhY2VmdWw/OiBMYW1iZGFVbmdyYWNlZnVsXG59XG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYXMge1xuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuQXJuPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVVuZ3JhY2VmdWwge1xuQmVoYXZpb3I/OiAoTGFtYmRhVW5ncmFjZWZ1bEJlaGF2aW9yICYgc3RyaW5nKVxufVxuZXhwb3J0IGludGVyZmFjZSBFYzJBc2dDYXBhY2l0eUluY3JlYXNlQ29uZmlnIHtcbkVjMkFzZ0NhcGFjaXR5SW5jcmVhc2VDb25maWc6IEVjMkFzZ0NhcGFjaXR5SW5jcmVhc2VDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIEVjMkFzZ0NhcGFjaXR5SW5jcmVhc2VDb25maWd1cmF0aW9uIHtcblRpbWVvdXRNaW51dGVzPzogbnVtYmVyXG4vKipcbiAqIEBtaW5JdGVtcyAyXG4gKiBAbWF4SXRlbXMgMlxuICovXG5Bc2dzOiBBc2dbXVxuVW5ncmFjZWZ1bD86IEVjMlVuZ3JhY2VmdWxcblRhcmdldFBlcmNlbnQ/OiBudW1iZXJcbkNhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoPzogKEVjMkFzZ0NhcGFjaXR5TW9uaXRvcmluZ0FwcHJvYWNoICYgc3RyaW5nKVxufVxuZXhwb3J0IGludGVyZmFjZSBBc2cge1xuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuQXJuPzogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEVjMlVuZ3JhY2VmdWwge1xuTWluaW11bVN1Y2Nlc3NQZXJjZW50YWdlOiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uQXBwcm92YWxDb25maWcge1xuRXhlY3V0aW9uQXBwcm92YWxDb25maWc6IEV4ZWN1dGlvbkFwcHJvdmFsQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25BcHByb3ZhbENvbmZpZ3VyYXRpb24ge1xuVGltZW91dE1pbnV0ZXM/OiBudW1iZXJcbkFwcHJvdmFsUm9sZTogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIEFyY1JvdXRpbmdDb250cm9sQ29uZmlnIHtcbkFyY1JvdXRpbmdDb250cm9sQ29uZmlnOiBBcmNSb3V0aW5nQ29udHJvbENvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgQXJjUm91dGluZ0NvbnRyb2xDb25maWd1cmF0aW9uIHtcblRpbWVvdXRNaW51dGVzPzogbnVtYmVyXG5Dcm9zc0FjY291bnRSb2xlPzogc3RyaW5nXG5FeHRlcm5hbElkPzogc3RyaW5nXG5SZWdpb25BbmRSb3V0aW5nQ29udHJvbHM6IFJlZ2lvbkFuZFJvdXRpbmdDb250cm9sc1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25BbmRSb3V0aW5nQ29udHJvbHMge1xuLyoqXG4gKiBUaGlzIGludGVyZmFjZSB3YXMgcmVmZXJlbmNlZCBieSBgUmVnaW9uQW5kUm91dGluZ0NvbnRyb2xzYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCIuK1wiLlxuICovXG5bazogc3RyaW5nXTogQXJjUm91dGluZ0NvbnRyb2xTdGF0ZVtdXG59XG5leHBvcnQgaW50ZXJmYWNlIEFyY1JvdXRpbmdDb250cm9sU3RhdGUge1xuUm91dGluZ0NvbnRyb2xBcm46IHN0cmluZ1xuU3RhdGU6IFJvdXRpbmdDb250cm9sU3RhdGVDaGFuZ2Vcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2xvYmFsQXVyb3JhQ29uZmlnIHtcbkdsb2JhbEF1cm9yYUNvbmZpZzogR2xvYmFsQXVyb3JhQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxBdXJvcmFDb25maWd1cmF0aW9uIHtcblRpbWVvdXRNaW51dGVzPzogbnVtYmVyXG5Dcm9zc0FjY291bnRSb2xlPzogc3RyaW5nXG5FeHRlcm5hbElkPzogc3RyaW5nXG5CZWhhdmlvcjogKEdsb2JhbEF1cm9yYURlZmF1bHRCZWhhdmlvciAmIHN0cmluZylcblVuZ3JhY2VmdWw/OiBHbG9iYWxBdXJvcmFVbmdyYWNlZnVsXG5HbG9iYWxDbHVzdGVySWRlbnRpZmllcjogc3RyaW5nXG5EYXRhYmFzZUNsdXN0ZXJBcm5zOiBzdHJpbmdbXVxufVxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxBdXJvcmFVbmdyYWNlZnVsIHtcblVuZ3JhY2VmdWw/OiBHbG9iYWxBdXJvcmFVbmdyYWNlZnVsQmVoYXZpb3Jcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYWxsZWxDb25maWcge1xuUGFyYWxsZWxDb25maWc6IFBhcmFsbGVsRXhlY3V0aW9uQmxvY2tDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIFBhcmFsbGVsRXhlY3V0aW9uQmxvY2tDb25maWd1cmF0aW9uIHtcblN0ZXBzOiBTdGVwW11cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uU3dpdGNoUGxhbkNvbmZpZyB7XG5SZWdpb25Td2l0Y2hQbGFuQ29uZmlnOiBSZWdpb25Td2l0Y2hQbGFuQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25Td2l0Y2hQbGFuQ29uZmlndXJhdGlvbiB7XG5Dcm9zc0FjY291bnRSb2xlPzogc3RyaW5nXG5FeHRlcm5hbElkPzogc3RyaW5nXG5Bcm46IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFY3NDYXBhY2l0eUluY3JlYXNlQ29uZmlnIHtcbkVjc0NhcGFjaXR5SW5jcmVhc2VDb25maWc6IEVjc0NhcGFjaXR5SW5jcmVhc2VDb25maWd1cmF0aW9uXG59XG5leHBvcnQgaW50ZXJmYWNlIEVjc0NhcGFjaXR5SW5jcmVhc2VDb25maWd1cmF0aW9uIHtcblRpbWVvdXRNaW51dGVzPzogbnVtYmVyXG4vKipcbiAqIEBtaW5JdGVtcyAyXG4gKiBAbWF4SXRlbXMgMlxuICovXG5TZXJ2aWNlczogU2VydmljZVtdXG5VbmdyYWNlZnVsPzogRWNzVW5ncmFjZWZ1bFxuVGFyZ2V0UGVyY2VudD86IG51bWJlclxuQ2FwYWNpdHlNb25pdG9yaW5nQXBwcm9hY2g/OiAoRWNzQ2FwYWNpdHlNb25pdG9yaW5nQXBwcm9hY2ggJiBzdHJpbmcpXG59XG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2Uge1xuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuQ2x1c3RlckFybj86IHN0cmluZ1xuU2VydmljZUFybj86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFY3NVbmdyYWNlZnVsIHtcbk1pbmltdW1TdWNjZXNzUGVyY2VudGFnZTogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIEVrc1Jlc291cmNlU2NhbGluZ0NvbmZpZyB7XG5Fa3NSZXNvdXJjZVNjYWxpbmdDb25maWc6IEVrc1Jlc291cmNlU2NhbGluZ0NvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRWtzUmVzb3VyY2VTY2FsaW5nQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuS3ViZXJuZXRlc1Jlc291cmNlVHlwZTogS3ViZXJuZXRlc1Jlc291cmNlVHlwZVxuLyoqXG4gKiBAbWluSXRlbXMgMVxuICovXG5TY2FsaW5nUmVzb3VyY2VzPzogS3ViZXJuZXRlc1NjYWxpbmdBcHBsaWNhdGlvbltdXG4vKipcbiAqIEBtaW5JdGVtcyAyXG4gKi9cbkVrc0NsdXN0ZXJzPzogRWtzQ2x1c3RlcltdXG5VbmdyYWNlZnVsPzogRWtzUmVzb3VyY2VTY2FsaW5nVW5ncmFjZWZ1bFxuVGFyZ2V0UGVyY2VudD86IG51bWJlclxuQ2FwYWNpdHlNb25pdG9yaW5nQXBwcm9hY2g/OiAoRWtzQ2FwYWNpdHlNb25pdG9yaW5nQXBwcm9hY2ggJiBzdHJpbmcpXG59XG5leHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNSZXNvdXJjZVR5cGUge1xuQXBpVmVyc2lvbjogc3RyaW5nXG5LaW5kOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgS3ViZXJuZXRlc1NjYWxpbmdBcHBsaWNhdGlvbiB7XG5bazogc3RyaW5nXTogUmVnaW9uYWxTY2FsaW5nUmVzb3VyY2Vcbn1cbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYEt1YmVybmV0ZXNTY2FsaW5nQXBwbGljYXRpb25gJ3MgSlNPTi1TY2hlbWEgZGVmaW5pdGlvblxuICogdmlhIHRoZSBgcGF0dGVyblByb3BlcnR5YCBcIi4rXCIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uYWxTY2FsaW5nUmVzb3VyY2Uge1xuW2s6IHN0cmluZ106IEt1YmVybmV0ZXNTY2FsaW5nUmVzb3VyY2Vcbn1cbi8qKlxuICogVGhpcyBpbnRlcmZhY2Ugd2FzIHJlZmVyZW5jZWQgYnkgYFJlZ2lvbmFsU2NhbGluZ1Jlc291cmNlYCdzIEpTT04tU2NoZW1hIGRlZmluaXRpb25cbiAqIHZpYSB0aGUgYHBhdHRlcm5Qcm9wZXJ0eWAgXCJeW2Etel17Mn0tW2Etei1dKy1cXGQrJFwiLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEt1YmVybmV0ZXNTY2FsaW5nUmVzb3VyY2Uge1xuTmFtZXNwYWNlOiBzdHJpbmdcbk5hbWU6IHN0cmluZ1xuSHBhTmFtZT86IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFa3NDbHVzdGVyIHtcbkNyb3NzQWNjb3VudFJvbGU/OiBzdHJpbmdcbkV4dGVybmFsSWQ/OiBzdHJpbmdcbkNsdXN0ZXJBcm46IHN0cmluZ1xufVxuZXhwb3J0IGludGVyZmFjZSBFa3NSZXNvdXJjZVNjYWxpbmdVbmdyYWNlZnVsIHtcbk1pbmltdW1TdWNjZXNzUGVyY2VudGFnZTogbnVtYmVyXG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlNTNIZWFsdGhDaGVja0NvbmZpZyB7XG5Sb3V0ZTUzSGVhbHRoQ2hlY2tDb25maWc6IFJvdXRlNTNIZWFsdGhDaGVja0NvbmZpZ3VyYXRpb25cbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGU1M0hlYWx0aENoZWNrQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuSG9zdGVkWm9uZUlkOiBzdHJpbmdcblJlY29yZE5hbWU6IHN0cmluZ1xuUmVjb3JkU2V0cz86IFJvdXRlNTNSZXNvdXJjZVJlY29yZFNldFtdXG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlNTNSZXNvdXJjZVJlY29yZFNldCB7XG5SZWNvcmRTZXRJZGVudGlmaWVyPzogc3RyaW5nXG5SZWdpb24/OiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnREYkNvbmZpZyB7XG5Eb2N1bWVudERiQ29uZmlnOiBEb2N1bWVudERiQ29uZmlndXJhdGlvblxufVxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudERiQ29uZmlndXJhdGlvbiB7XG5UaW1lb3V0TWludXRlcz86IG51bWJlclxuQ3Jvc3NBY2NvdW50Um9sZT86IHN0cmluZ1xuRXh0ZXJuYWxJZD86IHN0cmluZ1xuQmVoYXZpb3I6IChEb2N1bWVudERiRGVmYXVsdEJlaGF2aW9yICYgc3RyaW5nKVxuVW5ncmFjZWZ1bD86IERvY3VtZW50RGJVbmdyYWNlZnVsXG5HbG9iYWxDbHVzdGVySWRlbnRpZmllcjogc3RyaW5nXG5EYXRhYmFzZUNsdXN0ZXJBcm5zOiBzdHJpbmdbXVxufVxuZXhwb3J0IGludGVyZmFjZSBEb2N1bWVudERiVW5ncmFjZWZ1bCB7XG5VbmdyYWNlZnVsPzogRG9jdW1lbnREYlVuZ3JhY2VmdWxCZWhhdmlvclxufVxuZXhwb3J0IGludGVyZmFjZSBIZWFsdGhDaGVja1N0YXRlIHtcbkhlYWx0aENoZWNrSWQ/OiBzdHJpbmdcblJlZ2lvbj86IHN0cmluZ1xufVxuIl19
@@ -61,6 +61,7 @@ export interface _AWS_AUTOSCALING_AUTOSCALINGGROUP {
61
61
  * Default: ``0`` seconds
62
62
  */
63
63
  HealthCheckGracePeriod?: number;
64
+ InstanceLifecyclePolicy?: InstanceLifecyclePolicy;
64
65
  /**
65
66
  * The amount of time, in seconds, until a new instance is considered to have finished initializing and resource consumption to become stable after it enters the ``InService`` state.
66
67
  * During an instance refresh, Amazon EC2 Auto Scaling waits for the warm-up period after it replaces an instance before it moves on to replacing the next instance. Amazon EC2 Auto Scaling also waits for the warm-up period before aggregating the metrics for new instances with existing instances in the Amazon CloudWatch metrics that are used for scaling, resulting in more reliable usage data. For more information, see [Set the default instance warmup for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html) in the *Amazon EC2 Auto Scaling User Guide*.
@@ -230,6 +231,12 @@ export interface NotificationConfiguration {
230
231
  */
231
232
  NotificationTypes?: string[];
232
233
  }
234
+ export interface InstanceLifecyclePolicy {
235
+ RetentionTriggers?: RetentionTriggers;
236
+ }
237
+ export interface RetentionTriggers {
238
+ TerminateHookAbandon?: string;
239
+ }
233
240
  /**
234
241
  * Information used to specify the launch template and version to use to launch instances. You can alternatively associate a launch template to the Auto Scaling group by specifying a ``MixedInstancesPolicy``. For more information about creating launch templates, see [Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html) in the *Amazon EC2 Auto Scaling User Guide*.
235
242
  * If you omit this property, you must specify ``MixedInstancesPolicy``, ``LaunchConfigurationName``, or ``InstanceId``.
@@ -350,6 +357,7 @@ export interface LaunchTemplateOverrides {
350
357
  * Every Auto Scaling group has three size parameters (``DesiredCapacity``, ``MaxSize``, and ``MinSize``). Usually, you set these sizes based on a specific number of instances. However, if you configure a mixed instances policy that defines weights for the instance types, you must specify these sizes with the same units that you use for weighting instances.
351
358
  */
352
359
  WeightedCapacity?: string;
360
+ ImageId?: string;
353
361
  InstanceRequirements?: InstanceRequirements;
354
362
  /**
355
363
  * The instance type, such as ``m3.xlarge``. You must specify an instance type that is supported in your requested Region and Availability Zones. For more information, see [Instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) in the *Amazon EC2 User Guide*.
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTcGVjaWZ5IGFuIGluc3RhbmNlIGZhbWlseSB0byB1c2UgYXMgdGhlIGJhc2VsaW5lIHJlZmVyZW5jZSBmb3IgQ1BVIHBlcmZvcm1hbmNlLiBBbGwgaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzIHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUgQ1BVIHBlcmZvcm1hbmNlIG9mIHRoZSByZWZlcmVuY2VkIGluc3RhbmNlIGZhbWlseSwgcmVnYXJkbGVzcyBvZiBDUFUgbWFudWZhY3R1cmVyIG9yIGFyY2hpdGVjdHVyZSBkaWZmZXJlbmNlcy4gXG4gKiAgIEN1cnJlbnRseSBvbmx5IG9uZSBpbnN0YW5jZSBmYW1pbHkgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VTZXRSZXF1ZXN0ID0gUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VSZXF1ZXN0W11cbi8qKlxuICogVGhlIENhcGFjaXR5IFJlc2VydmF0aW9uIElEcyB0byBsYXVuY2ggaW5zdGFuY2VzIGludG8uXG4gKi9cbmV4cG9ydCB0eXBlIENhcGFjaXR5UmVzZXJ2YXRpb25JZHMgPSBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgZ3JvdXAgQVJOcyBvZiB0aGUgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gdG8gbGF1bmNoIGluc3RhbmNlcyBpbnRvLlxuICovXG5leHBvcnQgdHlwZSBDYXBhY2l0eVJlc2VydmF0aW9uUmVzb3VyY2VHcm91cEFybnMgPSBzdHJpbmdbXVxuXG4vKipcbiAqIFRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZSBkZWZpbmVzIGFuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGdyb3VwLCB3aGljaCBpcyBhIGNvbGxlY3Rpb24gb2YgQW1hem9uIEVDMiBpbnN0YW5jZXMgdGhhdCBhcmUgdHJlYXRlZCBhcyBhIGxvZ2ljYWwgZ3JvdXBpbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiBhdXRvbWF0aWMgc2NhbGluZyBhbmQgbWFuYWdlbWVudC4gXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcsIHNlZSB0aGUgW0FtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3doYXQtaXMtYW1hem9uLWVjMi1hdXRvLXNjYWxpbmcuaHRtbCkuIFxuICogICBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBjb25maWd1cmVzIGluc3RhbmNlcyBsYXVuY2hlZCBhcyBwYXJ0IG9mIGFuIEF1dG8gU2NhbGluZyBncm91cCB1c2luZyBlaXRoZXIgYSBbbGF1bmNoIHRlbXBsYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWxhdW5jaHRlbXBsYXRlLmh0bWwpIG9yIGEgbGF1bmNoIGNvbmZpZ3VyYXRpb24uIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBkbyBub3QgdXNlIGxhdW5jaCBjb25maWd1cmF0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTGF1bmNoIGNvbmZpZ3VyYXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9sYXVuY2gtY29uZmlndXJhdGlvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBGb3IgaGVscCBtaWdyYXRpbmcgZnJvbSBsYXVuY2ggY29uZmlndXJhdGlvbnMgdG8gbGF1bmNoIHRlbXBsYXRlcywgc2VlIFtNaWdyYXRlIENsb3VkRm9ybWF0aW9uIHN0YWNrcyBmcm9tIGxhdW5jaCBjb25maWd1cmF0aW9ucyB0byBsYXVuY2ggdGVtcGxhdGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9taWdyYXRlLWxhdW5jaC1jb25maWd1cmF0aW9ucy13aXRoLWNsb3VkZm9ybWF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19BVVRPU0NBTElOR19BVVRPU0NBTElOR0dST1VQIHtcbi8qKlxuICogT25lIG9yIG1vcmUgbGlmZWN5Y2xlIGhvb2tzIHRvIGFkZCB0byB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGJlZm9yZSBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkLlxuICovXG5MaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbkxpc3Q/OiBMaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIEEgbGlzdCBvZiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEF1dG8gU2NhbGluZyBncm91cC4gRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLCBhbmQgR2F0ZXdheSBMb2FkIEJhbGFuY2Vycywgc3BlY2lmeSB0aGUgYGBUYXJnZXRHcm91cEFSTnNgYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsYXVuY2ggY29uZmlndXJhdGlvbiB0byB1c2UgdG8gbGF1bmNoIGluc3RhbmNlcy5cbiAqICBSZXF1aXJlZCBvbmx5IGlmIHlvdSBkb24ndCBzcGVjaWZ5IGBgTGF1bmNoVGVtcGxhdGVgYCwgYGBNaXhlZEluc3RhbmNlc1BvbGljeWBgLCBvciBgYEluc3RhbmNlSWRgYC5cbiAqL1xuTGF1bmNoQ29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIHRoYXQgdGhlIEF1dG8gU2NhbGluZyBncm91cCB1c2VzIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2Ugb24geW91ciBiZWhhbGYuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIGBgQVdTU2VydmljZVJvbGVGb3JBdXRvU2NhbGluZ2BgLCB3aGljaCBpdCBjcmVhdGVzIGlmIGl0IGRvZXMgbm90IGV4aXN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlLWxpbmtlZCByb2xlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXV0b3NjYWxpbmctc2VydmljZS1saW5rZWQtcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5TZXJ2aWNlTGlua2VkUm9sZUFSTj86IHN0cmluZ1xuQXZhaWxhYmlsaXR5Wm9uZUltcGFpcm1lbnRQb2xpY3k/OiBBdmFpbGFiaWxpdHlab25lSW1wYWlybWVudFBvbGljeVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWVzIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cHMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIEF1dG8gU2NhbGluZyBncm91cC4gSW5zdGFuY2VzIGFyZSByZWdpc3RlcmVkIGFzIHRhcmdldHMgd2l0aCB0aGUgdGFyZ2V0IGdyb3Vwcy4gVGhlIHRhcmdldCBncm91cHMgcmVjZWl2ZSBpbmNvbWluZyB0cmFmZmljIGFuZCByb3V0ZSByZXF1ZXN0cyB0byBvbmUgb3IgbW9yZSByZWdpc3RlcmVkIHRhcmdldHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRvIGRpc3RyaWJ1dGUgdHJhZmZpYyBhY3Jvc3MgdGhlIGluc3RhbmNlcyBpbiB5b3VyIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXV0b3NjYWxpbmctbG9hZC1iYWxhbmNlci5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5UYXJnZXRHcm91cEFSTnM/OiBzdHJpbmdbXVxuLyoqXG4gKiAqT25seSBuZWVkZWQgaWYgeW91IHVzZSBzaW1wbGUgc2NhbGluZyBwb2xpY2llcy4qIFxuICogIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgYmV0d2VlbiBvbmUgc2NhbGluZyBhY3Rpdml0eSBlbmRpbmcgYW5kIGFub3RoZXIgb25lIHN0YXJ0aW5nIGR1ZSB0byBzaW1wbGUgc2NhbGluZyBwb2xpY2llcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2NhbGluZyBjb29sZG93bnMgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLXNjYWxpbmctY29vbGRvd25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgRGVmYXVsdDogYGAzMDBgYCBzZWNvbmRzXG4gKi9cbkNvb2xkb3duPzogc3RyaW5nXG4vKipcbiAqIENvbmZpZ3VyZXMgYW4gQXV0byBTY2FsaW5nIGdyb3VwIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB3aGVuIHNwZWNpZmllZCBldmVudHMgdGFrZSBwbGFjZS5cbiAqL1xuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnM/OiBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uW11cbi8qKlxuICogVGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgdGhlIGluaXRpYWwgY2FwYWNpdHkgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cCBhdCB0aGUgdGltZSBvZiBpdHMgY3JlYXRpb24gYW5kIHRoZSBjYXBhY2l0eSBpdCBhdHRlbXB0cyB0byBtYWludGFpbi4gSXQgY2FuIHNjYWxlIGJleW9uZCB0aGlzIGNhcGFjaXR5IGlmIHlvdSBjb25maWd1cmUgYXV0b21hdGljIHNjYWxpbmcuXG4gKiAgVGhlIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBncm91cCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGdyb3VwLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBkZXNpcmVkIGNhcGFjaXR5IHdoZW4gY3JlYXRpbmcgdGhlIHN0YWNrLCB0aGUgZGVmYXVsdCBpcyB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBncm91cC5cbiAqICBDbG91ZEZvcm1hdGlvbiBtYXJrcyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGFzIHN1Y2Nlc3NmdWwgKGJ5IHNldHRpbmcgaXRzIHN0YXR1cyB0byBDUkVBVEVfQ09NUExFVEUpIHdoZW4gdGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgcmVhY2hlZC4gSG93ZXZlciwgaWYgYSBtYXhpbXVtIFNwb3QgcHJpY2UgaXMgc2V0IGluIHRoZSBsYXVuY2ggdGVtcGxhdGUgb3IgbGF1bmNoIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3Ugc3BlY2lmaWVkLCB0aGVuIGRlc2lyZWQgY2FwYWNpdHkgaXMgbm90IHVzZWQgYXMgYSBjcml0ZXJpYSBmb3Igc3VjY2Vzcy4gV2hldGhlciB5b3VyIHJlcXVlc3QgaXMgZnVsZmlsbGVkIGRlcGVuZHMgb24gU3BvdCBJbnN0YW5jZSBjYXBhY2l0eSBhbmQgeW91ciBtYXhpbXVtIHByaWNlLlxuICovXG5EZXNpcmVkQ2FwYWNpdHk/OiBzdHJpbmdcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdhaXRzIGJlZm9yZSBjaGVja2luZyB0aGUgaGVhbHRoIHN0YXR1cyBvZiBhbiBFQzIgaW5zdGFuY2UgdGhhdCBoYXMgY29tZSBpbnRvIHNlcnZpY2UgYW5kIG1hcmtpbmcgaXQgdW5oZWFsdGh5IGR1ZSB0byBhIGZhaWxlZCBoZWFsdGggY2hlY2suIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgaW5zdGFuY2VzIGRvIG5vdCBpbW1lZGlhdGVseSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MgYWZ0ZXIgdGhleSBlbnRlciB0aGUgYGBJblNlcnZpY2VgYCBzdGF0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2V0IHRoZSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIGZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2hlYWx0aC1jaGVjay1ncmFjZS1wZXJpb2QuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBEZWZhdWx0OiBgYDBgYCBzZWNvbmRzXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2Q/OiBudW1iZXJcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB1bnRpbCBhIG5ldyBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIHRvIGhhdmUgZmluaXNoZWQgaW5pdGlhbGl6aW5nIGFuZCByZXNvdXJjZSBjb25zdW1wdGlvbiB0byBiZWNvbWUgc3RhYmxlIGFmdGVyIGl0IGVudGVycyB0aGUgYGBJblNlcnZpY2VgYCBzdGF0ZS4gXG4gKiAgRHVyaW5nIGFuIGluc3RhbmNlIHJlZnJlc2gsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdhaXRzIGZvciB0aGUgd2FybS11cCBwZXJpb2QgYWZ0ZXIgaXQgcmVwbGFjZXMgYW4gaW5zdGFuY2UgYmVmb3JlIGl0IG1vdmVzIG9uIHRvIHJlcGxhY2luZyB0aGUgbmV4dCBpbnN0YW5jZS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgYWxzbyB3YWl0cyBmb3IgdGhlIHdhcm0tdXAgcGVyaW9kIGJlZm9yZSBhZ2dyZWdhdGluZyB0aGUgbWV0cmljcyBmb3IgbmV3IGluc3RhbmNlcyB3aXRoIGV4aXN0aW5nIGluc3RhbmNlcyBpbiB0aGUgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcyB0aGF0IGFyZSB1c2VkIGZvciBzY2FsaW5nLCByZXN1bHRpbmcgaW4gbW9yZSByZWxpYWJsZSB1c2FnZSBkYXRhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXQgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2FybXVwIGZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctZGVmYXVsdC1pbnN0YW5jZS13YXJtdXAuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICAgVG8gbWFuYWdlIHZhcmlvdXMgd2FybS11cCBzZXR0aW5ncyBhdCB0aGUgZ3JvdXAgbGV2ZWwsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzZXQgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2FybXVwLCAqZXZlbiBpZiBpdCBpcyBzZXQgdG8gMCBzZWNvbmRzKi4gVG8gcmVtb3ZlIGEgdmFsdWUgdGhhdCB5b3UgcHJldmlvdXNseSBzZXQsIGluY2x1ZGUgdGhlIHByb3BlcnR5IGJ1dCBzcGVjaWZ5IGBgLTFgYCBmb3IgdGhlIHZhbHVlLiBIb3dldmVyLCB3ZSBzdHJvbmdseSByZWNvbW1lbmQga2VlcGluZyB0aGUgZGVmYXVsdCBpbnN0YW5jZSB3YXJtdXAgZW5hYmxlZCBieSBzcGVjaWZ5aW5nIGEgdmFsdWUgb2YgYGAwYGAgb3Igb3RoZXIgbm9taW5hbCB2YWx1ZS5cbiAqICAgRGVmYXVsdDogTm9uZVxuICovXG5EZWZhdWx0SW5zdGFuY2VXYXJtdXA/OiBudW1iZXJcblNraXBab25hbFNoaWZ0VmFsaWRhdGlvbj86IGJvb2xlYW5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgbmV3bHkgbGF1bmNoZWQgaW5zdGFuY2VzIGFyZSBwcm90ZWN0ZWQgZnJvbSB0ZXJtaW5hdGlvbiBieSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aGVuIHNjYWxpbmcgaW4uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHByZXZlbnRpbmcgaW5zdGFuY2VzIGZyb20gdGVybWluYXRpbmcgb24gc2NhbGUgaW4sIHNlZSBbVXNlIGluc3RhbmNlIHNjYWxlLWluIHByb3RlY3Rpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctaW5zdGFuY2UtcHJvdGVjdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5OZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbj86IGJvb2xlYW5cbkxhdW5jaFRlbXBsYXRlPzogTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uXG5NaXhlZEluc3RhbmNlc1BvbGljeT86IE1peGVkSW5zdGFuY2VzUG9saWN5XG4vKipcbiAqIEEgbGlzdCBvZiBzdWJuZXQgSURzIGZvciBhIHZpcnR1YWwgcHJpdmF0ZSBjbG91ZCAoVlBDKSB3aGVyZSBpbnN0YW5jZXMgaW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYW4gYmUgY3JlYXRlZC5cbiAqICBJZiB0aGlzIHJlc291cmNlIHNwZWNpZmllcyBwdWJsaWMgc3VibmV0cyBhbmQgaXMgYWxzbyBpbiBhIFZQQyB0aGF0IGlzIGRlZmluZWQgaW4gdGhlIHNhbWUgc3RhY2sgdGVtcGxhdGUsIHlvdSBtdXN0IHVzZSB0aGUgW0RlcGVuZHNPbiBhdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtZGVwZW5kc29uLmh0bWwpIHRvIGRlY2xhcmUgYSBkZXBlbmRlbmN5IG9uIHRoZSBbVlBDLWdhdGV3YXkgYXR0YWNobWVudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cGMtZ2F0ZXdheS1hdHRhY2htZW50Lmh0bWwpLlxuICogICBXaGVuIHlvdSB1cGRhdGUgYGBWUENab25lSWRlbnRpZmllcmBgLCB0aGlzIHJldGFpbnMgdGhlIHNhbWUgQXV0byBTY2FsaW5nIGdyb3VwIGFuZCByZXBsYWNlcyBvbGQgaW5zdGFuY2VzIHdpdGggbmV3IG9uZXMsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHN1Ym5ldHMuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGhvdyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHRoZXNlIHVwZGF0ZXMgYnkgdXNpbmcgYW4gW1VwZGF0ZVBvbGljeSBhdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtdXBkYXRlcG9saWN5Lmh0bWwpLlxuICogICBSZXF1aXJlZCB0byBsYXVuY2ggaW5zdGFuY2VzIGludG8gYSBub25kZWZhdWx0IFZQQy4gSWYgeW91IHNwZWNpZnkgYGBWUENab25lSWRlbnRpZmllcmBgIHdpdGggYGBBdmFpbGFiaWxpdHlab25lc2BgLCB0aGUgc3VibmV0cyB0aGF0IHlvdSBzcGVjaWZ5IGZvciB0aGlzIHByb3BlcnR5IG11c3QgcmVzaWRlIGluIHRob3NlIEF2YWlsYWJpbGl0eSBab25lcy5cbiAqL1xuVlBDWm9uZUlkZW50aWZpZXI/OiBzdHJpbmdbXVxuLyoqXG4gKiBPbmUgb3IgbW9yZSB0YWdzLiBZb3UgY2FuIHRhZyB5b3VyIEF1dG8gU2NhbGluZyBncm91cCBhbmQgcHJvcGFnYXRlIHRoZSB0YWdzIHRvIHRoZSBBbWF6b24gRUMyIGluc3RhbmNlcyBpdCBsYXVuY2hlcy4gVGFncyBhcmUgbm90IHByb3BhZ2F0ZWQgdG8gQW1hem9uIEVCUyB2b2x1bWVzLiBUbyBhZGQgdGFncyB0byBBbWF6b24gRUJTIHZvbHVtZXMsIHNwZWNpZnkgdGhlIHRhZ3MgaW4gYSBsYXVuY2ggdGVtcGxhdGUgYnV0IHVzZSBjYXV0aW9uLiBJZiB0aGUgbGF1bmNoIHRlbXBsYXRlIHNwZWNpZmllcyBhbiBpbnN0YW5jZSB0YWcgd2l0aCBhIGtleSB0aGF0IGlzIGFsc28gc3BlY2lmaWVkIGZvciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBvdmVycmlkZXMgdGhlIHZhbHVlIG9mIHRoYXQgaW5zdGFuY2UgdGFnIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWcgQXV0byBTY2FsaW5nIGdyb3VwcyBhbmQgaW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLXRhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuVGFncz86IFRhZ1Byb3BlcnR5W11cbi8qKlxuICogUmVzZXJ2ZWQuXG4gKi9cbkNvbnRleHQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgQ2FwYWNpdHkgUmViYWxhbmNpbmcgaXMgZW5hYmxlZC4gT3RoZXJ3aXNlLCBDYXBhY2l0eSBSZWJhbGFuY2luZyBpcyBkaXNhYmxlZC4gV2hlbiB5b3UgdHVybiBvbiBDYXBhY2l0eSBSZWJhbGFuY2luZywgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgYXR0ZW1wdHMgdG8gbGF1bmNoIGEgU3BvdCBJbnN0YW5jZSB3aGVuZXZlciBBbWF6b24gRUMyIG5vdGlmaWVzIHRoYXQgYSBTcG90IEluc3RhbmNlIGlzIGF0IGFuIGVsZXZhdGVkIHJpc2sgb2YgaW50ZXJydXB0aW9uLiBBZnRlciBsYXVuY2hpbmcgYSBuZXcgaW5zdGFuY2UsIGl0IHRoZW4gdGVybWluYXRlcyBhbiBvbGQgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzZSBDYXBhY2l0eSBSZWJhbGFuY2luZyB0byBoYW5kbGUgQW1hem9uIEVDMiBTcG90IEludGVycnVwdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctY2FwYWNpdHktcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbkNhcGFjaXR5UmViYWxhbmNlPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGluc3RhbmNlIHVzZWQgdG8gYmFzZSB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZSBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgYW4gRUMyIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9jcmVhdGUtYXNnLWZyb20taW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYExhdW5jaFRlbXBsYXRlYGAsIGBgTWl4ZWRJbnN0YW5jZXNQb2xpY3lgYCwgb3IgYGBMYXVuY2hDb25maWd1cmF0aW9uTmFtZWBgLCBkb24ndCBzcGVjaWZ5IGBgSW5zdGFuY2VJZGBgLlxuICovXG5JbnN0YW5jZUlkPzogc3RyaW5nXG5BdXRvU2NhbGluZ0dyb3VwQVJOPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBBdmFpbGFiaWxpdHkgWm9uZXMgd2hlcmUgaW5zdGFuY2VzIGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FuIGJlIGNyZWF0ZWQuIFVzZWQgZm9yIGxhdW5jaGluZyBpbnRvIHRoZSBkZWZhdWx0IFZQQyBzdWJuZXQgaW4gZWFjaCBBdmFpbGFiaWxpdHkgWm9uZSB3aGVuIG5vdCB1c2luZyB0aGUgYGBWUENab25lSWRlbnRpZmllcmBgIHByb3BlcnR5LCBvciBmb3IgYXR0YWNoaW5nIGEgbmV0d29yayBpbnRlcmZhY2Ugd2hlbiBhbiBleGlzdGluZyBuZXR3b3JrIGludGVyZmFjZSBJRCBpcyBzcGVjaWZpZWQgaW4gYSBsYXVuY2ggdGVtcGxhdGUuXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmVzPzogc3RyaW5nW11cbk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uMVxuQXZhaWxhYmlsaXR5Wm9uZURpc3RyaWJ1dGlvbj86IEF2YWlsYWJpbGl0eVpvbmVEaXN0cmlidXRpb25cbi8qKlxuICogRW5hYmxlcyB0aGUgbW9uaXRvcmluZyBvZiBncm91cCBtZXRyaWNzIG9mIGFuIEF1dG8gU2NhbGluZyBncm91cC4gQnkgZGVmYXVsdCwgdGhlc2UgbWV0cmljcyBhcmUgZGlzYWJsZWQuXG4gKi9cbk1ldHJpY3NDb2xsZWN0aW9uPzogTWV0cmljc0NvbGxlY3Rpb25bXVxuSW5zdGFuY2VNYWludGVuYW5jZVBvbGljeT86IEluc3RhbmNlTWFpbnRlbmFuY2VQb2xpY3lcbi8qKlxuICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAuXG4gKiAgIFdpdGggYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5IHRoYXQgdXNlcyBpbnN0YW5jZSB3ZWlnaHRpbmcsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIG1heSBuZWVkIHRvIGdvIGFib3ZlIGBgTWF4U2l6ZWBgIHRvIG1lZXQgeW91ciBjYXBhY2l0eSByZXF1aXJlbWVudHMuIEluIHRoaXMgZXZlbnQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgbmV2ZXIgZ28gYWJvdmUgYGBNYXhTaXplYGAgYnkgbW9yZSB0aGFuIHlvdXIgbGFyZ2VzdCBpbnN0YW5jZSB3ZWlnaHQgKHdlaWdodHMgdGhhdCBkZWZpbmUgaG93IG1hbnkgdW5pdHMgZWFjaCBpbnN0YW5jZSBjb250cmlidXRlcyB0byB0aGUgZGVzaXJlZCBjYXBhY2l0eSBvZiB0aGUgZ3JvdXApLlxuICovXG5NYXhTaXplOiBzdHJpbmdcbi8qKlxuICogVGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAuXG4gKi9cbk1pblNpemU6IHN0cmluZ1xuLyoqXG4gKiBBIHBvbGljeSBvciBhIGxpc3Qgb2YgcG9saWNpZXMgdGhhdCBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIGluc3RhbmNlIHRvIHRlcm1pbmF0ZS4gVGhlc2UgcG9saWNpZXMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGF0IHlvdSBsaXN0IHRoZW0uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyZSB0ZXJtaW5hdGlvbiBwb2xpY2llcyBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctdGVybWluYXRpb24tcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgRGVmYXVsdGBgIHwgYGBBbGxvY2F0aW9uU3RyYXRlZ3lgYCB8IGBgQ2xvc2VzdFRvTmV4dEluc3RhbmNlSG91cmBgIHwgYGBOZXdlc3RJbnN0YW5jZWBgIHwgYGBPbGRlc3RJbnN0YW5jZWBgIHwgYGBPbGRlc3RMYXVuY2hDb25maWd1cmF0aW9uYGAgfCBgYE9sZGVzdExhdW5jaFRlbXBsYXRlYGAgfCBgYGFybjphd3M6bGFtYmRhOnJlZ2lvbjphY2NvdW50LWlkOmZ1bmN0aW9uOm15LWZ1bmN0aW9uOm15LWFsaWFzYGBcbiAqL1xuVGVybWluYXRpb25Qb2xpY2llcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIFRoaXMgbmFtZSBtdXN0IGJlIHVuaXF1ZSBwZXIgUmVnaW9uIHBlciBhY2NvdW50LlxuICogIFRoZSBuYW1lIGNhbiBjb250YWluIGFueSBBU0NJSSBjaGFyYWN0ZXIgMzMgdG8gMTI2IGluY2x1ZGluZyBtb3N0IHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMsIGRpZ2l0cywgYW5kIHVwcGVyIGFuZCBsb3dlcmNhc2VkIGxldHRlcnMuXG4gKiAgIFlvdSBjYW5ub3QgdXNlIGEgY29sb24gKDopIGluIHRoZSBuYW1lLlxuICovXG5BdXRvU2NhbGluZ0dyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHJhZmZpYyBzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuVHJhZmZpY1NvdXJjZXM/OiBUcmFmZmljU291cmNlSWRlbnRpZmllcltdXG4vKipcbiAqIFRoZSB1bml0IG9mIG1lYXN1cmVtZW50IGZvciB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciBkZXNpcmVkIGNhcGFjaXR5LiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzdXBwb3J0cyBgYERlc2lyZWRDYXBhY2l0eVR5cGVgYCBmb3IgYXR0cmlidXRlLWJhc2VkIGluc3RhbmNlIHR5cGUgc2VsZWN0aW9uIG9ubHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZSBhIG1peGVkIGluc3RhbmNlcyBncm91cCB1c2luZyBhdHRyaWJ1dGUtYmFzZWQgaW5zdGFuY2UgdHlwZSBzZWxlY3Rpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2NyZWF0ZS1taXhlZC1pbnN0YW5jZXMtZ3JvdXAtYXR0cmlidXRlLWJhc2VkLWluc3RhbmNlLXR5cGUtc2VsZWN0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgQnkgZGVmYXVsdCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc3BlY2lmaWVzIGBgdW5pdHNgYCwgd2hpY2ggdHJhbnNsYXRlcyBpbnRvIG51bWJlciBvZiBpbnN0YW5jZXMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYHVuaXRzYGAgfCBgYHZjcHVgYCB8IGBgbWVtb3J5LW1pYmBgXG4gKi9cbkRlc2lyZWRDYXBhY2l0eVR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBsYWNlbWVudCBncm91cCBpbnRvIHdoaWNoIHRvIGxhdW5jaCB5b3VyIGluc3RhbmNlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGxhY2VtZW50IGdyb3Vwc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogICBBICpjbHVzdGVyKiBwbGFjZW1lbnQgZ3JvdXAgaXMgYSBsb2dpY2FsIGdyb3VwaW5nIG9mIGluc3RhbmNlcyB3aXRoaW4gYSBzaW5nbGUgQXZhaWxhYmlsaXR5IFpvbmUuIFlvdSBjYW5ub3Qgc3BlY2lmeSBtdWx0aXBsZSBBdmFpbGFiaWxpdHkgWm9uZXMgYW5kIGEgY2x1c3RlciBwbGFjZW1lbnQgZ3JvdXAuXG4gKi9cblBsYWNlbWVudEdyb3VwPzogc3RyaW5nXG5DYXBhY2l0eVJlc2VydmF0aW9uU3BlY2lmaWNhdGlvbj86IENhcGFjaXR5UmVzZXJ2YXRpb25TcGVjaWZpY2F0aW9uXG4vKipcbiAqIEEgY29tbWEtc2VwYXJhdGVkIHZhbHVlIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBoZWFsdGggY2hlY2sgdHlwZXMuXG4gKiAgVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBFQzJgYCwgYGBFQlNgYCwgYGBFTEJgYCwgYW5kIGBgVlBDX0xBVFRJQ0VgYC4gYGBFQzJgYCBpcyB0aGUgZGVmYXVsdCBoZWFsdGggY2hlY2sgYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSGVhbHRoIGNoZWNrcyBmb3IgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1oZWFsdGgtY2hlY2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgT25seSBzcGVjaWZ5IGBgRUMyYGAgaWYgeW91IG11c3QgY2xlYXIgYSB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IHNldC5cbiAqL1xuSGVhbHRoQ2hlY2tUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IGFuIGluc3RhbmNlIGNhbiBiZSBpbiBzZXJ2aWNlLiBUaGUgZGVmYXVsdCBpcyBudWxsLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIGVpdGhlciAwIG9yIGEgbnVtYmVyIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA4Niw0MDAgc2Vjb25kcyAoMSBkYXkpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXBsYWNlIEF1dG8gU2NhbGluZyBpbnN0YW5jZXMgYmFzZWQgb24gbWF4aW11bSBpbnN0YW5jZSBsaWZldGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXNnLW1heC1pbnN0YW5jZS1saWZldGltZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5NYXhJbnN0YW5jZUxpZmV0aW1lPzogbnVtYmVyXG59XG4vKipcbiAqIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25gYCBzcGVjaWZpZXMgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhlIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25MaXN0YGAgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS4gQSBsaWZlY3ljbGUgaG9vayBzcGVjaWZpZXMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgb3IgdGVybWluYXRlcyBpbnN0YW5jZXMuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxpZmVjeWNsZSBob29rc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFlvdSBjYW4gZmluZCBhIHNhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0IGluIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hcy1saWZlY3ljbGVob29rLmh0bWwjYXdzLXJlc291cmNlLWFzLWxpZmVjeWNsZWhvb2stLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkxpZmVjeWNsZUhvb2tgYCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsaWZlY3ljbGUgaG9vay5cbiAqL1xuTGlmZWN5Y2xlSG9va05hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZWN5Y2xlIHRyYW5zaXRpb24uIEZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzLCB0aGVyZSBhcmUgdHdvIG1ham9yIGxpZmVjeWNsZSB0cmFuc2l0aW9ucy5cbiAqICAgKyAgVG8gY3JlYXRlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHNjYWxlLW91dCBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNISU5HYGAuXG4gKiAgICsgIFRvIGNyZWF0ZSBhIGxpZmVjeWNsZSBob29rIGZvciBzY2FsZS1pbiBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRJTkdgYC5cbiAqL1xuTGlmZWN5Y2xlVHJhbnNpdGlvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgY2FuIGVsYXBzZSBiZWZvcmUgdGhlIGxpZmVjeWNsZSBob29rIHRpbWVzIG91dC4gVGhlIHJhbmdlIGlzIGZyb20gYGAzMGBgIHRvIGBgNzIwMGBgIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgMzYwMGBgIHNlY29uZHMgKDEgaG91cikuXG4gKi9cbkhlYXJ0YmVhdFRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgYW55IHRpbWUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBub3RpZmljYXRpb24gdGFyZ2V0LlxuICovXG5Ob3RpZmljYXRpb25NZXRhZGF0YT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYWN0aW9uIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdGFrZXMgd2hlbiB0aGUgbGlmZWN5Y2xlIGhvb2sgdGltZW91dCBlbGFwc2VzIG9yIGlmIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZSBvY2N1cnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgQUJBTkRPTmBgLlxuICogIFZhbGlkIHZhbHVlczogYGBDT05USU5VRWBgIHwgYGBBQkFORE9OYGBcbiAqL1xuRGVmYXVsdFJlc3VsdD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIG5vdGlmaWNhdGlvbiB0YXJnZXQgdGhhdCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZW5kcyBub3RpZmljYXRpb25zIHRvIHdoZW4gYW4gaW5zdGFuY2UgaXMgaW4gYSB3YWl0IHN0YXRlIGZvciB0aGUgbGlmZWN5Y2xlIGhvb2suIFlvdSBjYW4gc3BlY2lmeSBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cbk5vdGlmaWNhdGlvblRhcmdldEFSTj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIHB1Ymxpc2ggdG8gdGhlIHNwZWNpZmllZCBub3RpZmljYXRpb24gdGFyZ2V0LiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgdGhpcyByb2xlLCBzZWUgW1ByZXBhcmUgdG8gYWRkIGEgbGlmZWN5Y2xlIGhvb2sgdG8geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3ByZXBhcmUtZm9yLWxpZmVjeWNsZS1ub3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgb25seSBpZiB0aGUgbm90aWZpY2F0aW9uIHRhcmdldCBpcyBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cblJvbGVBUk4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIGltcGFpcm1lbnQgcG9saWN5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2YWlsYWJpbGl0eVpvbmVJbXBhaXJtZW50UG9saWN5IHtcbi8qKlxuICogSWYgYGB0cnVlYGAsIGVuYWJsZSB6b25hbCBzaGlmdCBmb3IgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cblpvbmFsU2hpZnRFbmFibGVkOiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaGVhbHRoIGNoZWNrIGJlaGF2aW9yIGZvciB0aGUgaW1wYWlyZWQgQXZhaWxhYmlsaXR5IFpvbmUgaW4gYW4gYWN0aXZlIHpvbmFsIHNoaWZ0LiBJZiB5b3Ugc2VsZWN0IGBgUmVwbGFjZSB1bmhlYWx0aHlgYCwgaW5zdGFuY2VzIHRoYXQgYXBwZWFyIHVuaGVhbHRoeSB3aWxsIGJlIHJlcGxhY2VkIGluIGFsbCBBdmFpbGFiaWxpdHkgWm9uZXMuIElmIHlvdSBzZWxlY3QgYGBJZ25vcmUgdW5oZWFsdGh5YGAsIGluc3RhbmNlcyB3aWxsIG5vdCBiZSByZXBsYWNlZCBpbiB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgd2l0aCB0aGUgYWN0aXZlIHpvbmFsIHNoaWZ0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBdXRvIFNjYWxpbmcgZ3JvdXAgem9uYWwgc2hpZnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctem9uYWwtc2hpZnQuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuSW1wYWlyZWRab25lSGVhbHRoQ2hlY2tCZWhhdmlvcjogKFwiSWdub3JlVW5oZWFsdGh5XCIgfCBcIlJlcGxhY2VVbmhlYWx0aHlcIilcbn1cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgYW4gQW1hem9uIFNOUyBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGBgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnNgYCBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwpIHJlc291cmNlLlxuICogIEZvciBhbiBleGFtcGxlIHRlbXBsYXRlIHNuaXBwZXQsIHNlZSBbQ29uZmlndXJlIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvcXVpY2tyZWYtZWMyLWF1dG8tc2NhbGluZy5odG1sKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHZXQgQW1hem9uIFNOUyBub3RpZmljYXRpb25zIHdoZW4geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgc2NhbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9BU0dldHRpbmdOb3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFNOUyB0b3BpYy5cbiAqL1xuVG9waWNBUk46IChzdHJpbmcgfCBzdHJpbmdbXSlcbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgc2VuZCBhIG5vdGlmaWNhdGlvbi4gRXZlbnQgdHlwZXMgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFxuICogICpBbGxvd2VkIHZhbHVlcyo6XG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX0xBVU5DSF9FUlJPUmBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9URVJNSU5BVEVfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6VEVTVF9OT1RJRklDQVRJT05gYFxuICovXG5Ob3RpZmljYXRpb25UeXBlcz86IHN0cmluZ1tdXG59XG4vKipcbiAqIEluZm9ybWF0aW9uIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGF1bmNoIHRlbXBsYXRlIGFuZCB2ZXJzaW9uIHRvIHVzZSB0byBsYXVuY2ggaW5zdGFuY2VzLiBZb3UgY2FuIGFsdGVybmF0aXZlbHkgYXNzb2NpYXRlIGEgbGF1bmNoIHRlbXBsYXRlIHRvIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgYnkgc3BlY2lmeWluZyBhIGBgTWl4ZWRJbnN0YW5jZXNQb2xpY3lgYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgbGF1bmNoIHRlbXBsYXRlcywgc2VlIFtDcmVhdGUgYSBsYXVuY2ggdGVtcGxhdGUgZm9yIGFuIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvY3JlYXRlLWxhdW5jaC10ZW1wbGF0ZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICogIElmIHlvdSBvbWl0IHRoaXMgcHJvcGVydHksIHlvdSBtdXN0IHNwZWNpZnkgYGBNaXhlZEluc3RhbmNlc1BvbGljeWBgLCBgYExhdW5jaENvbmZpZ3VyYXRpb25OYW1lYGAsIG9yIGBgSW5zdGFuY2VJZGBgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgWW91IG11c3Qgc3BlY2lmeSB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZUlEYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuTGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFNwZWNpZnlpbmcgYGAkTGF0ZXN0YGAgb3IgYGAkRGVmYXVsdGBgIGZvciB0aGUgdGVtcGxhdGUgdmVyc2lvbiBudW1iZXIgaXMgbm90IHN1cHBvcnRlZC4gSG93ZXZlciwgeW91IGNhbiBzcGVjaWZ5IGBgTGF0ZXN0VmVyc2lvbk51bWJlcmBgIG9yIGBgRGVmYXVsdFZlcnNpb25OdW1iZXJgYCB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGbjo6R2V0QXR0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLWdldGF0dC5odG1sKS5cbiAqICAgRm9yIGFuIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGZ1bmN0aW9uLCBzZWUgdGhlIFtFeGFtcGxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC0tZXhhbXBsZXMpIHNlY3Rpb24gb2YgdGhlIGBgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cGBgIHJlc291cmNlLlxuICovXG5WZXJzaW9uOiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgWW91IG11c3Qgc3BlY2lmeSB0aGUgYGBMYXVuY2hUZW1wbGF0ZUlEYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuTGF1bmNoVGVtcGxhdGVJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBBbiBlbWJlZGRlZCBvYmplY3QgdGhhdCBzcGVjaWZpZXMgYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5LlxuICogIFRoZSBwb2xpY3kgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IG5vdCBvbmx5IGRlZmluZSB0aGUgZGlzdHJpYnV0aW9uIG9mIE9uLURlbWFuZCBJbnN0YW5jZXMgYW5kIFNwb3QgSW5zdGFuY2VzLCB0aGUgbWF4aW11bSBwcmljZSB0byBwYXkgZm9yIFNwb3QgSW5zdGFuY2VzIChvcHRpb25hbCksIGFuZCBob3cgdGhlIEF1dG8gU2NhbGluZyBncm91cCBhbGxvY2F0ZXMgaW5zdGFuY2UgdHlwZXMgdG8gZnVsZmlsbCBPbi1EZW1hbmQgYW5kIFNwb3QgY2FwYWNpdGllcywgYnV0IGFsc28gdGhlIHByb3BlcnRpZXMgdGhhdCBzcGVjaWZ5IHRoZSBpbnN0YW5jZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9u4oCUdGhlIGxhdW5jaCB0ZW1wbGF0ZSBhbmQgaW5zdGFuY2UgdHlwZXMuIFRoZSBwb2xpY3kgY2FuIGFsc28gaW5jbHVkZSBhIHdlaWdodCBmb3IgZWFjaCBpbnN0YW5jZSB0eXBlIGFuZCBkaWZmZXJlbnQgbGF1bmNoIHRlbXBsYXRlcyBmb3IgaW5kaXZpZHVhbCBpbnN0YW5jZSB0eXBlcy5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBdXRvIFNjYWxpbmcgZ3JvdXBzIHdpdGggbXVsdGlwbGUgaW5zdGFuY2UgdHlwZXMgYW5kIHB1cmNoYXNlIG9wdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctbWl4ZWQtaW5zdGFuY2VzLWdyb3Vwcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1peGVkSW5zdGFuY2VzUG9saWN5IHtcbkluc3RhbmNlc0Rpc3RyaWJ1dGlvbj86IEluc3RhbmNlc0Rpc3RyaWJ1dGlvblxuTGF1bmNoVGVtcGxhdGU6IExhdW5jaFRlbXBsYXRlXG59XG4vKipcbiAqIFRoZSBpbnN0YW5jZXMgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlc0Rpc3RyaWJ1dGlvbiB7XG4vKipcbiAqIFRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IHRvIGFwcGx5IHRvIHlvdXIgT24tRGVtYW5kIEluc3RhbmNlcyB3aGVuIHRoZXkgYXJlIGxhdW5jaGVkLiBQb3NzaWJsZSBpbnN0YW5jZSB0eXBlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyB0aGF0IHlvdSBzcGVjaWZ5LlxuICogIFRoZSBmb2xsb3dpbmcgbGlzdHMgdGhlIHZhbGlkIHZhbHVlczpcbiAqICAgKyBsb3dlc3QtcHJpY2UgVXNlcyBwcmljZSB0byBkZXRlcm1pbmUgd2hpY2ggaW5zdGFuY2UgdHlwZXMgYXJlIHRoZSBoaWdoZXN0IHByaW9yaXR5LCBsYXVuY2hpbmcgdGhlIGxvd2VzdCBwcmljZWQgaW5zdGFuY2UgdHlwZXMgd2l0aGluIGFuIEF2YWlsYWJpbGl0eSBab25lIGZpcnN0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzIHRoYXQgc3BlY2lmeSBJbnN0YW5jZVJlcXVpcmVtZW50cy4gKyBwcmlvcml0aXplZCBZb3Ugc2V0IHRoZSBvcmRlciBvZiBpbnN0YW5jZSB0eXBlcyBmb3IgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBvdmVycmlkZXMgZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCBwcmlvcml0eSAoZnJvbSBmaXJzdCB0byBsYXN0IGluIHRoZSBsaXN0KS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgeW91ciBoaWdoZXN0IHByaW9yaXR5IGluc3RhbmNlIHR5cGVzIGZpcnN0LiBJZiBhbGwgeW91ciBPbi1EZW1hbmQgY2FwYWNpdHkgY2Fubm90IGJlIGZ1bGZpbGxlZCB1c2luZyB5b3VyIGhpZ2hlc3QgcHJpb3JpdHkgaW5zdGFuY2UgdHlwZSwgdGhlbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyB0aGUgcmVtYWluaW5nIGNhcGFjaXR5IHVzaW5nIHRoZSBzZWNvbmQgcHJpb3JpdHkgaW5zdGFuY2UgdHlwZSwgYW5kIHNvIG9uLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBJbnN0YW5jZVJlcXVpcmVtZW50cyBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIGdyb3VwcyB0aGF0IGRvLlxuICovXG5PbkRlbWFuZEFsbG9jYXRpb25TdHJhdGVneT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgbWluaW11bSBhbW91bnQgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cCdzIGNhcGFjaXR5IHRoYXQgbXVzdCBiZSBmdWxmaWxsZWQgYnkgT24tRGVtYW5kIEluc3RhbmNlcy4gVGhpcyBiYXNlIHBvcnRpb24gaXMgbGF1bmNoZWQgZmlyc3QgYXMgeW91ciBncm91cCBzY2FsZXMuXG4gKiAgVGhpcyBudW1iZXIgaGFzIHRoZSBzYW1lIHVuaXQgb2YgbWVhc3VyZW1lbnQgYXMgdGhlIGdyb3VwJ3MgZGVzaXJlZCBjYXBhY2l0eS4gSWYgeW91IGNoYW5nZSB0aGUgZGVmYXVsdCB1bml0IG9mIG1lYXN1cmVtZW50IChudW1iZXIgb2YgaW5zdGFuY2VzKSBieSBzcGVjaWZ5aW5nIHdlaWdodGVkIGNhcGFjaXR5IHZhbHVlcyBpbiB5b3VyIGxhdW5jaCB0ZW1wbGF0ZSBvdmVycmlkZXMgbGlzdCwgb3IgYnkgY2hhbmdpbmcgdGhlIGRlZmF1bHQgZGVzaXJlZCBjYXBhY2l0eSB0eXBlIHNldHRpbmcgb2YgdGhlIGdyb3VwLCB5b3UgbXVzdCBzcGVjaWZ5IHRoaXMgbnVtYmVyIHVzaW5nIHRoZSBzYW1lIHVuaXQgb2YgbWVhc3VyZW1lbnQuXG4gKiAgRGVmYXVsdDogMFxuICogICBBbiB1cGRhdGUgdG8gdGhpcyBzZXR0aW5nIG1lYW5zIGEgZ3JhZHVhbCByZXBsYWNlbWVudCBvZiBpbnN0YW5jZXMgdG8gYWRqdXN0IHRoZSBjdXJyZW50IE9uLURlbWFuZCBJbnN0YW5jZSBsZXZlbHMuIFdoZW4gcmVwbGFjaW5nIGluc3RhbmNlcywgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgbmV3IGluc3RhbmNlcyBiZWZvcmUgdGVybWluYXRpbmcgdGhlIHByZXZpb3VzIG9uZXMuXG4gKi9cbk9uRGVtYW5kQmFzZUNhcGFjaXR5PzogbnVtYmVyXG4vKipcbiAqIENvbnRyb2xzIHRoZSBwZXJjZW50YWdlcyBvZiBPbi1EZW1hbmQgSW5zdGFuY2VzIGFuZCBTcG90IEluc3RhbmNlcyBmb3IgeW91ciBhZGRpdGlvbmFsIGNhcGFjaXR5IGJleW9uZCBgYE9uRGVtYW5kQmFzZUNhcGFjaXR5YGAuIEV4cHJlc3NlZCBhcyBhIG51bWJlciAoZm9yIGV4YW1wbGUsIDIwIHNwZWNpZmllcyAyMCUgT24tRGVtYW5kIEluc3RhbmNlcywgODAlIFNwb3QgSW5zdGFuY2VzKS4gSWYgc2V0IHRvIDEwMCwgb25seSBPbi1EZW1hbmQgSW5zdGFuY2VzIGFyZSB1c2VkLlxuICogIERlZmF1bHQ6IDEwMFxuICogICBBbiB1cGRhdGUgdG8gdGhpcyBzZXR0aW5nIG1lYW5zIGEgZ3JhZHVhbCByZXBsYWNlbWVudCBvZiBpbnN0YW5jZXMgdG8gYWRqdXN0IHRoZSBjdXJyZW50IE9uLURlbWFuZCBhbmQgU3BvdCBJbnN0YW5jZSBsZXZlbHMgZm9yIHlvdXIgYWRkaXRpb25hbCBjYXBhY2l0eSBoaWdoZXIgdGhhbiB0aGUgYmFzZSBjYXBhY2l0eS4gV2hlbiByZXBsYWNpbmcgaW5zdGFuY2VzLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyBuZXcgaW5zdGFuY2VzIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgcHJldmlvdXMgb25lcy5cbiAqL1xuT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogVGhlIG51bWJlciBvZiBTcG90IEluc3RhbmNlIHBvb2xzIGFjcm9zcyB3aGljaCB0byBhbGxvY2F0ZSB5b3VyIFNwb3QgSW5zdGFuY2VzLiBUaGUgU3BvdCBwb29scyBhcmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBkaWZmZXJlbnQgaW5zdGFuY2UgdHlwZXMgaW4gdGhlIG92ZXJyaWRlcy4gVmFsaWQgb25seSB3aGVuIHRoZSBgYFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3lgYCBpcyBgYGxvd2VzdC1wcmljZWBgLiBWYWx1ZSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAx4oCTMjAuXG4gKiAgRGVmYXVsdDogMlxuICovXG5TcG90SW5zdGFuY2VQb29scz86IG51bWJlclxuLyoqXG4gKiBUaGUgYWxsb2NhdGlvbiBzdHJhdGVneSB0byBhcHBseSB0byB5b3VyIFNwb3QgSW5zdGFuY2VzIHdoZW4gdGhleSBhcmUgbGF1bmNoZWQuIFBvc3NpYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgdmFsaWQgdmFsdWVzOlxuICogICArIGNhcGFjaXR5LW9wdGltaXplZCBSZXF1ZXN0cyBTcG90IEluc3RhbmNlcyB1c2luZyBwb29scyB0aGF0IGFyZSBvcHRpbWFsbHkgY2hvc2VuIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgU3BvdCBjYXBhY2l0eS4gVGhpcyBzdHJhdGVneSBoYXMgdGhlIGxvd2VzdCByaXNrIG9mIGludGVycnVwdGlvbi4gVG8gZ2l2ZSBjZXJ0YWluIGluc3RhbmNlIHR5cGVzIGEgaGlnaGVyIGNoYW5jZSBvZiBsYXVuY2hpbmcgZmlyc3QsIHVzZSBjYXBhY2l0eS1vcHRpbWl6ZWQtcHJpb3JpdGl6ZWQuICsgY2FwYWNpdHktb3B0aW1pemVkLXByaW9yaXRpemVkIFlvdSBzZXQgdGhlIG9yZGVyIG9mIGluc3RhbmNlIHR5cGVzIGZvciB0aGUgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHByaW9yaXR5IChmcm9tIGZpcnN0IHRvIGxhc3QgaW4gdGhlIGxpc3QpLiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBob25vcnMgdGhlIGluc3RhbmNlIHR5cGUgcHJpb3JpdGllcyBvbiBhIGJlc3QgZWZmb3J0IGJhc2lzIGJ1dCBvcHRpbWl6ZXMgZm9yIGNhcGFjaXR5IGZpcnN0LiBOb3RlIHRoYXQgaWYgdGhlIE9uLURlbWFuZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIHNldCB0byBwcmlvcml0aXplZCwgdGhlIHNhbWUgcHJpb3JpdHkgaXMgYXBwbGllZCB3aGVuIGZ1bGZpbGxpbmcgT24tRGVtYW5kIGNhcGFjaXR5LiBUaGlzIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzIHRoYXQgc3BlY2lmeSBJbnN0YW5jZVJlcXVpcmVtZW50cy4gKyBsb3dlc3QtcHJpY2UgUmVxdWVzdHMgU3BvdCBJbnN0YW5jZXMgdXNpbmcgdGhlIGxvd2VzdCBwcmljZWQgcG9vbHMgd2l0aGluIGFuIEF2YWlsYWJpbGl0eSBab25lLCBhY3Jvc3MgdGhlIG51bWJlciBvZiBTcG90IHBvb2xzIHRoYXQgeW91IHNwZWNpZnkgZm9yIHRoZSBTcG90SW5zdGFuY2VQb29scyBwcm9wZXJ0eS4gVG8gZW5zdXJlIHRoYXQgeW91ciBkZXNpcmVkIGNhcGFjaXR5IGlzIG1ldCwgeW91IG1pZ2h0IHJlY2VpdmUgU3BvdCBJbnN0YW5jZXMgZnJvbSBzZXZlcmFsIHBvb2xzLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLCBidXQgaXQgbWlnaHQgbGVhZCB0byBoaWdoIGludGVycnVwdGlvbiByYXRlcyBiZWNhdXNlIHRoaXMgc3RyYXRlZ3kgb25seSBjb25zaWRlcnMgaW5zdGFuY2UgcHJpY2UgYW5kIG5vdCBhdmFpbGFibGUgY2FwYWNpdHkuICsgcHJpY2UtY2FwYWNpdHktb3B0aW1pemVkIChyZWNvbW1lbmRlZCkgVGhlIHByaWNlIGFuZCBjYXBhY2l0eSBvcHRpbWl6ZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBsb29rcyBhdCBib3RoIHByaWNlIGFuZCBjYXBhY2l0eSB0byBzZWxlY3QgdGhlIFNwb3QgSW5zdGFuY2UgcG9vbHMgdGhhdCBhcmUgdGhlIGxlYXN0IGxpa2VseSB0byBiZSBpbnRlcnJ1cHRlZCBhbmQgaGF2ZSB0aGUgbG93ZXN0IHBvc3NpYmxlIHByaWNlLlxuICovXG5TcG90QWxsb2NhdGlvblN0cmF0ZWd5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIHByaWNlIHBlciB1bml0IGhvdXIgdGhhdCB5b3UgYXJlIHdpbGxpbmcgdG8gcGF5IGZvciBhIFNwb3QgSW5zdGFuY2UuIElmIHlvdXIgbWF4aW11bSBwcmljZSBpcyBsb3dlciB0aGFuIHRoZSBTcG90IHByaWNlIGZvciB0aGUgaW5zdGFuY2UgdHlwZXMgdGhhdCB5b3Ugc2VsZWN0ZWQsIHlvdXIgU3BvdCBJbnN0YW5jZXMgYXJlIG5vdCBsYXVuY2hlZC4gV2UgZG8gbm90IHJlY29tbWVuZCBzcGVjaWZ5aW5nIGEgbWF4aW11bSBwcmljZSBiZWNhdXNlIGl0IGNhbiBsZWFkIHRvIGluY3JlYXNlZCBpbnRlcnJ1cHRpb25zLiBXaGVuIFNwb3QgSW5zdGFuY2VzIGxhdW5jaCwgeW91IHBheSB0aGUgY3VycmVudCBTcG90IHByaWNlLiBUbyByZW1vdmUgYSBtYXhpbXVtIHByaWNlIHRoYXQgeW91IHByZXZpb3VzbHkgc2V0LCBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBidXQgc3BlY2lmeSBhbiBlbXB0eSBzdHJpbmcgKFwiXCIpIGZvciB0aGUgdmFsdWUuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGEgbWF4aW11bSBwcmljZSwgeW91ciBpbnN0YW5jZXMgd2lsbCBiZSBpbnRlcnJ1cHRlZCBtb3JlIGZyZXF1ZW50bHkgdGhhbiBpZiB5b3UgZG8gbm90IHNwZWNpZnkgb25lLlxuICogICBWYWxpZCBSYW5nZTogTWluaW11bSB2YWx1ZSBvZiAwLjAwMVxuICovXG5TcG90TWF4UHJpY2U/OiBzdHJpbmdcbn1cbi8qKlxuICogT25lIG9yIG1vcmUgbGF1bmNoIHRlbXBsYXRlcyBhbmQgdGhlIGluc3RhbmNlIHR5cGVzIChvdmVycmlkZXMpIHRoYXQgYXJlIHVzZWQgdG8gbGF1bmNoIEVDMiBpbnN0YW5jZXMgdG8gZnVsZmlsbCBPbi1EZW1hbmQgYW5kIFNwb3QgY2FwYWNpdGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZSB7XG5MYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb246IExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjFcbi8qKlxuICogQW55IHByb3BlcnRpZXMgdGhhdCB5b3Ugc3BlY2lmeSBvdmVycmlkZSB0aGUgc2FtZSBwcm9wZXJ0aWVzIGluIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKi9cbk92ZXJyaWRlcz86IExhdW5jaFRlbXBsYXRlT3ZlcnJpZGVzW11cbn1cbi8qKlxuICogVGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24xIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgU3BlY2lmeWluZyBgYCRMYXRlc3RgYCBvciBgYCREZWZhdWx0YGAgZm9yIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIG51bWJlciBpcyBub3Qgc3VwcG9ydGVkLiBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYGBMYXRlc3RWZXJzaW9uTnVtYmVyYGAgb3IgYGBEZWZhdWx0VmVyc2lvbk51bWJlcmBgIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZuOjpHZXRBdHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtZ2V0YXR0Lmh0bWwpLlxuICogICBGb3IgYW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24sIHNlZSB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cblZlcnNpb246IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIFVzZSB0aGlzIHN0cnVjdHVyZSB0byBsZXQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgZG8gdGhlIGZvbGxvd2luZyB3aGVuIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgaGFzIGEgbWl4ZWQgaW5zdGFuY2VzIHBvbGljeTpcbiAqICAgKyAgT3ZlcnJpZGUgdGhlIGluc3RhbmNlIHR5cGUgdGhhdCBpcyBzcGVjaWZpZWQgaW4gdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICAgKyAgVXNlIG11bHRpcGxlIGluc3RhbmNlIHR5cGVzLlxuICogICBcbiAqICBTcGVjaWZ5IHRoZSBpbnN0YW5jZSB0eXBlcyB0aGF0IHlvdSB3YW50LCBvciBkZWZpbmUgeW91ciBpbnN0YW5jZSByZXF1aXJlbWVudHMgaW5zdGVhZCBhbmQgbGV0IEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHByb3Zpc2lvbiB0aGUgYXZhaWxhYmxlIGluc3RhbmNlIHR5cGVzIHRoYXQgbWVldCB5b3VyIHJlcXVpcmVtZW50cy4gVGhpcyBjYW4gcHJvdmlkZSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aXRoIGEgbGFyZ2VyIHNlbGVjdGlvbiBvZiBpbnN0YW5jZSB0eXBlcyB0byBjaG9vc2UgZnJvbSB3aGVuIGZ1bGZpbGxpbmcgU3BvdCBhbmQgT24tRGVtYW5kIGNhcGFjaXRpZXMuIFlvdSBjYW4gdmlldyB3aGljaCBpbnN0YW5jZSB0eXBlcyBhcmUgbWF0Y2hlZCBiZWZvcmUgeW91IGFwcGx5IHRoZSBpbnN0YW5jZSByZXF1aXJlbWVudHMgdG8geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKiAgQWZ0ZXIgeW91IGRlZmluZSB5b3VyIGluc3RhbmNlIHJlcXVpcmVtZW50cywgeW91IGRvbid0IGhhdmUgdG8ga2VlcCB1cGRhdGluZyB0aGVzZSBzZXR0aW5ncyB0byBnZXQgbmV3IEVDMiBpbnN0YW5jZSB0eXBlcyBhdXRvbWF0aWNhbGx5LiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB1c2VzIHRoZSBpbnN0YW5jZSByZXF1aXJlbWVudHMgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cCB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5ldyBFQzIgaW5zdGFuY2UgdHlwZSBjYW4gYmUgdXNlZC5cbiAqICBgYExhdW5jaFRlbXBsYXRlT3ZlcnJpZGVzYGAgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXAgTGF1bmNoVGVtcGxhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtbGF1bmNodGVtcGxhdGUuaHRtbCkgcHJvcGVydHkgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZU92ZXJyaWRlcyB7XG5MYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24/OiBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24yXG4vKipcbiAqIElmIHlvdSBwcm92aWRlIGEgbGlzdCBvZiBpbnN0YW5jZSB0eXBlcyB0byB1c2UsIHlvdSBjYW4gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNhcGFjaXR5IHVuaXRzIHByb3ZpZGVkIGJ5IGVhY2ggaW5zdGFuY2UgdHlwZSBpbiB0ZXJtcyBvZiB2aXJ0dWFsIENQVXMsIG1lbW9yeSwgc3RvcmFnZSwgdGhyb3VnaHB1dCwgb3Igb3RoZXIgcmVsYXRpdmUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWMuIFdoZW4gYSBTcG90IG9yIE9uLURlbWFuZCBJbnN0YW5jZSBpcyBsYXVuY2hlZCwgdGhlIGNhcGFjaXR5IHVuaXRzIGNvdW50IHRvd2FyZCB0aGUgZGVzaXJlZCBjYXBhY2l0eS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgaW5zdGFuY2VzIHVudGlsIHRoZSBkZXNpcmVkIGNhcGFjaXR5IGlzIHRvdGFsbHkgZnVsZmlsbGVkLCBldmVuIGlmIHRoaXMgcmVzdWx0cyBpbiBhbiBvdmVyYWdlLiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgYXJlIHR3byB1bml0cyByZW1haW5pbmcgdG8gZnVsZmlsbCBjYXBhY2l0eSwgYW5kIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGNhbiBvbmx5IGxhdW5jaCBhbiBpbnN0YW5jZSB3aXRoIGEgYGBXZWlnaHRlZENhcGFjaXR5YGAgb2YgZml2ZSB1bml0cywgdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkLCBhbmQgdGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgZXhjZWVkZWQgYnkgdGhyZWUgdW5pdHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyZSBpbnN0YW5jZSB3ZWlnaHRpbmcgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1peGVkLWluc3RhbmNlcy1ncm91cHMtaW5zdGFuY2Utd2VpZ2h0aW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDEtOTk5LiBcbiAqICBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgYFdlaWdodGVkQ2FwYWNpdHlgYCBmb3Igb25lIGluc3RhbmNlIHR5cGUsIHlvdSBtdXN0IHNwZWNpZnkgYSB2YWx1ZSBmb3IgYGBXZWlnaHRlZENhcGFjaXR5YGAgZm9yIGFsbCBvZiB0aGVtLlxuICogICBFdmVyeSBBdXRvIFNjYWxpbmcgZ3JvdXAgaGFzIHRocmVlIHNpemUgcGFyYW1ldGVycyAoYGBEZXNpcmVkQ2FwYWNpdHlgYCwgYGBNYXhTaXplYGAsIGFuZCBgYE1pblNpemVgYCkuIFVzdWFsbHksIHlvdSBzZXQgdGhlc2Ugc2l6ZXMgYmFzZWQgb24gYSBzcGVjaWZpYyBudW1iZXIgb2YgaW5zdGFuY2VzLiBIb3dldmVyLCBpZiB5b3UgY29uZmlndXJlIGEgbWl4ZWQgaW5zdGFuY2VzIHBvbGljeSB0aGF0IGRlZmluZXMgd2VpZ2h0cyBmb3IgdGhlIGluc3RhbmNlIHR5cGVzLCB5b3UgbXVzdCBzcGVjaWZ5IHRoZXNlIHNpemVzIHdpdGggdGhlIHNhbWUgdW5pdHMgdGhhdCB5b3UgdXNlIGZvciB3ZWlnaHRpbmcgaW5zdGFuY2VzLlxuICovXG5XZWlnaHRlZENhcGFjaXR5Pzogc3RyaW5nXG5JbnN0YW5jZVJlcXVpcmVtZW50cz86IEluc3RhbmNlUmVxdWlyZW1lbnRzXG4vKipcbiAqIFRoZSBpbnN0YW5jZSB0eXBlLCBzdWNoIGFzIGBgbTMueGxhcmdlYGAuIFlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFuY2UgdHlwZSB0aGF0IGlzIHN1cHBvcnRlZCBpbiB5b3VyIHJlcXVlc3RlZCBSZWdpb24gYW5kIEF2YWlsYWJpbGl0eSBab25lcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSW5zdGFuY2UgdHlwZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZS10eXBlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHVwIHRvIDQwIGluc3RhbmNlIHR5cGVzIHBlciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cbkluc3RhbmNlVHlwZT86IHN0cmluZ1xufVxuLyoqXG4gKiBQcm92aWRlcyBhIGxhdW5jaCB0ZW1wbGF0ZSBmb3IgdGhlIHNwZWNpZmllZCBpbnN0YW5jZSB0eXBlIG9yIHNldCBvZiBpbnN0YW5jZSByZXF1aXJlbWVudHMuIEZvciBleGFtcGxlLCBzb21lIGluc3RhbmNlIHR5cGVzIG1pZ2h0IHJlcXVpcmUgYSBsYXVuY2ggdGVtcGxhdGUgd2l0aCBhIGRpZmZlcmVudCBBTUkuIElmIG5vdCBwcm92aWRlZCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgdXNlcyB0aGUgbGF1bmNoIHRlbXBsYXRlIHRoYXQncyBzcGVjaWZpZWQgaW4gdGhlIGBgTGF1bmNoVGVtcGxhdGVgYCBkZWZpbml0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTcGVjaWZ5aW5nIGEgZGlmZmVyZW50IGxhdW5jaCB0ZW1wbGF0ZSBmb3IgYW4gaW5zdGFuY2UgdHlwZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1taXhlZC1pbnN0YW5jZXMtZ3JvdXBzLWxhdW5jaC10ZW1wbGF0ZS1vdmVycmlkZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi4gXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHVwIHRvIDIwIGxhdW5jaCB0ZW1wbGF0ZXMgcGVyIEF1dG8gU2NhbGluZyBncm91cC4gVGhlIGxhdW5jaCB0ZW1wbGF0ZXMgc3BlY2lmaWVkIGluIHRoZSBvdmVycmlkZXMgYW5kIGluIHRoZSBgYExhdW5jaFRlbXBsYXRlYGAgZGVmaW5pdGlvbiBjb3VudCB0b3dhcmRzIHRoaXMgbGltaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uMiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgWW91IG11c3Qgc3BlY2lmeSB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZUlEYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuTGF1bmNoVGVtcGxhdGVOYW1lPzogc3RyaW5nXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFNwZWNpZnlpbmcgYGAkTGF0ZXN0YGAgb3IgYGAkRGVmYXVsdGBgIGZvciB0aGUgdGVtcGxhdGUgdmVyc2lvbiBudW1iZXIgaXMgbm90IHN1cHBvcnRlZC4gSG93ZXZlciwgeW91IGNhbiBzcGVjaWZ5IGBgTGF0ZXN0VmVyc2lvbk51bWJlcmBgIG9yIGBgRGVmYXVsdFZlcnNpb25OdW1iZXJgYCB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgaW50cmluc2ljIGZ1bmN0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtGbjo6R2V0QXR0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9pbnRyaW5zaWMtZnVuY3Rpb24tcmVmZXJlbmNlLWdldGF0dC5odG1sKS5cbiAqICAgRm9yIGFuIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGZ1bmN0aW9uLCBzZWUgdGhlIFtFeGFtcGxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC0tZXhhbXBsZXMpIHNlY3Rpb24gb2YgdGhlIGBgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cGBgIHJlc291cmNlLlxuICovXG5WZXJzaW9uOiBzdHJpbmdcbi8qKlxuICogVGhlIElEIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgWW91IG11c3Qgc3BlY2lmeSB0aGUgYGBMYXVuY2hUZW1wbGF0ZUlEYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAsIGJ1dCBub3QgYm90aC5cbiAqL1xuTGF1bmNoVGVtcGxhdGVJZD86IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgcmVxdWlyZW1lbnRzLiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB1c2VzIHlvdXIgc3BlY2lmaWVkIHJlcXVpcmVtZW50cyB0byBpZGVudGlmeSBpbnN0YW5jZSB0eXBlcy4gVGhlbiwgaXQgdXNlcyB5b3VyIE9uLURlbWFuZCBhbmQgU3BvdCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgdG8gbGF1bmNoIGluc3RhbmNlcyBmcm9tIHRoZXNlIGluc3RhbmNlIHR5cGVzLlxuICogIFlvdSBjYW4gc3BlY2lmeSB1cCB0byBmb3VyIHNlcGFyYXRlIHNldHMgb2YgaW5zdGFuY2UgcmVxdWlyZW1lbnRzIHBlciBBdXRvIFNjYWxpbmcgZ3JvdXAuIFRoaXMgaXMgdXNlZnVsIGZvciBwcm92aXNpb25pbmcgaW5zdGFuY2VzIGZyb20gZGlmZmVyZW50IEFtYXpvbiBNYWNoaW5lIEltYWdlcyAoQU1JcykgaW4gdGhlIHNhbWUgQXV0byBTY2FsaW5nIGdyb3VwLiBUbyBkbyB0aGlzLCBjcmVhdGUgdGhlIEFNSXMgYW5kIGNyZWF0ZSBhIG5ldyBsYXVuY2ggdGVtcGxhdGUgZm9yIGVhY2ggQU1JLiBUaGVuLCBjcmVhdGUgYSBjb21wYXRpYmxlIHNldCBvZiBpbnN0YW5jZSByZXF1aXJlbWVudHMgZm9yIGVhY2ggbGF1bmNoIHRlbXBsYXRlLiBcbiAqICAgSWYgeW91IHNwZWNpZnkgYGBJbnN0YW5jZVJlcXVpcmVtZW50c2BgLCB5b3UgY2FuJ3Qgc3BlY2lmeSBgYEluc3RhbmNlVHlwZWBgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlUmVxdWlyZW1lbnRzIHtcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgY3VycmVudCBvciBwcmV2aW91cyBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIGFyZSBpbmNsdWRlZC5cbiAqICAgKyAgRm9yIGN1cnJlbnQgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcywgc3BlY2lmeSBgYGN1cnJlbnRgYC4gVGhlIGN1cnJlbnQgZ2VuZXJhdGlvbiBpbmNsdWRlcyBFQzIgaW5zdGFuY2UgdHlwZXMgY3VycmVudGx5IHJlY29tbWVuZGVkIGZvciB1c2UuIFRoaXMgdHlwaWNhbGx5IGluY2x1ZGVzIHRoZSBsYXRlc3QgdHdvIHRvIHRocmVlIGdlbmVyYXRpb25zIGluIGVhY2ggaW5zdGFuY2UgZmFtaWx5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbnN0YW5jZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICAgKyAgRm9yIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMsIHNwZWNpZnkgYGBwcmV2aW91c2BgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgY3VycmVudCBvciBwcmV2aW91cyBnZW5lcmF0aW9uXG4gKi9cbkluc3RhbmNlR2VuZXJhdGlvbnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBMaXN0cyB0aGUgYWNjZWxlcmF0b3IgdHlwZXMgdGhhdCBtdXN0IGJlIG9uIGFuIGluc3RhbmNlIHR5cGUuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEdQVSBhY2NlbGVyYXRvcnMsIHNwZWNpZnkgYGBncHVgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggRlBHQSBhY2NlbGVyYXRvcnMsIHNwZWNpZnkgYGBmcGdhYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIGluZmVyZW5jZSBhY2NlbGVyYXRvcnMsIHNwZWNpZnkgYGBpbmZlcmVuY2VgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IGFjY2VsZXJhdG9yIHR5cGVcbiAqL1xuQWNjZWxlcmF0b3JUeXBlcz86IHN0cmluZ1tdXG5NZW1vcnlHaUJQZXJWQ3B1PzogTWVtb3J5R2lCUGVyVkNwdVJlcXVlc3Rcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2UgdHlwZXMgbXVzdCBoYXZlIGFjY2VsZXJhdG9ycyBieSBzcGVjaWZpYyBtYW51ZmFjdHVyZXJzLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgZGV2aWNlcywgc3BlY2lmeSBgYG52aWRpYWBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBTUQgZGV2aWNlcywgc3BlY2lmeSBgYGFtZGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBV1MgZGV2aWNlcywgc3BlY2lmeSBgYGFtYXpvbi13ZWItc2VydmljZXNgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggWGlsaW54IGRldmljZXMsIHNwZWNpZnkgYGB4aWxpbnhgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IG1hbnVmYWN0dXJlclxuICovXG5BY2NlbGVyYXRvck1hbnVmYWN0dXJlcnM/OiBzdHJpbmdbXVxuVkNwdUNvdW50OiBWQ3B1Q291bnRSZXF1ZXN0XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGluc3RhbmNlIHR5cGVzIHdpdGggaW5zdGFuY2Ugc3RvcmUgdm9sdW1lcyBhcmUgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciByZXF1aXJlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVDMiBpbnN0YW5jZSBzdG9yZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0luc3RhbmNlU3RvcmFnZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgRGVmYXVsdDogYGBpbmNsdWRlZGBgXG4gKi9cbkxvY2FsU3RvcmFnZT86IHN0cmluZ1xuLyoqXG4gKiBMaXN0cyB3aGljaCBzcGVjaWZpYyBDUFUgbWFudWZhY3R1cmVycyB0byBpbmNsdWRlLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBJbnRlbCBDUFVzLCBzcGVjaWZ5IGBgaW50ZWxgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQU1EIENQVXMsIHNwZWNpZnkgYGBhbWRgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQVdTIENQVXMsIHNwZWNpZnkgYGBhbWF6b24td2ViLXNlcnZpY2VzYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEFwcGxlIENQVXMsIHNwZWNpZnkgYGBhcHBsZWBgLlxuICogICBcbiAqICAgRG9uJ3QgY29uZnVzZSB0aGUgQ1BVIGhhcmR3YXJlIG1hbnVmYWN0dXJlciB3aXRoIHRoZSBDUFUgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlLiBJbnN0YW5jZXMgd2lsbCBiZSBsYXVuY2hlZCB3aXRoIGEgY29tcGF0aWJsZSBDUFUgYXJjaGl0ZWN0dXJlIGJhc2VkIG9uIHRoZSBBbWF6b24gTWFjaGluZSBJbWFnZSAoQU1JKSB0aGF0IHlvdSBzcGVjaWZ5IGluIHlvdXIgbGF1bmNoIHRlbXBsYXRlLiBcbiAqICAgRGVmYXVsdDogQW55IG1hbnVmYWN0dXJlclxuICovXG5DcHVNYW51ZmFjdHVyZXJzPzogc3RyaW5nW11cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgYmFyZSBtZXRhbCBpbnN0YW5jZSB0eXBlcyBhcmUgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciByZXF1aXJlZC5cbiAqICBEZWZhdWx0OiBgYGV4Y2x1ZGVkYGBcbiAqL1xuQmFyZU1ldGFsPzogc3RyaW5nXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGluc3RhbmNlIHR5cGVzIG11c3QgcHJvdmlkZSBPbi1EZW1hbmQgSW5zdGFuY2UgaGliZXJuYXRpb24gc3VwcG9ydC5cbiAqICBEZWZhdWx0OiBgYGZhbHNlYGBcbiAqL1xuUmVxdWlyZUhpYmVybmF0ZVN1cHBvcnQ/OiBib29sZWFuXG4vKipcbiAqIFtQcmljZSBwcm90ZWN0aW9uXSBUaGUgcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIFNwb3QgSW5zdGFuY2VzLCBhcyBhIHBlcmNlbnRhZ2Ugb2YgYW4gaWRlbnRpZmllZCBPbi1EZW1hbmQgcHJpY2UuIFRoZSBpZGVudGlmaWVkIE9uLURlbWFuZCBwcmljZSBpcyB0aGUgcHJpY2Ugb2YgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSB3aXRoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuIElmIG5vIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgbWF0Y2hlcyB5b3VyIGF0dHJpYnV0ZXMsIHRoZW4gdGhlIGlkZW50aWZpZWQgcHJpY2UgaXMgZnJvbSBlaXRoZXIgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIG9yLCBmYWlsaW5nIHRoYXQsIHRoZSBsb3dlc3QgcHJpY2VkIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIGF0dHJpYnV0ZXMuIFdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VsZWN0cyBpbnN0YW5jZSB0eXBlcyB3aXRoIHlvdXIgYXR0cmlidXRlcywgd2Ugd2lsbCBleGNsdWRlIGluc3RhbmNlIHR5cGVzIHdob3NlIHByaWNlIGV4Y2VlZHMgeW91ciBzcGVjaWZpZWQgdGhyZXNob2xkLlxuICogIFRoZSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBpbnRlZ2VyLCB3aGljaCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBpbnRlcnByZXRzIGFzIGEgcGVyY2VudGFnZS5cbiAqICBJZiB5b3Ugc2V0IGBgRGVzaXJlZENhcGFjaXR5VHlwZWBgIHRvIGBgdmNwdWBgIG9yIGBgbWVtb3J5LW1pYmBgLCB0aGUgcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgaXMgYmFzZWQgb24gdGhlIHBlci12Q1BVIG9yIHBlci1tZW1vcnkgcHJpY2UgaW5zdGVhZCBvZiB0aGUgcGVyIGluc3RhbmNlIHByaWNlLiBcbiAqICAgT25seSBvbmUgb2YgYGBTcG90TWF4UHJpY2VQZXJjZW50YWdlT3Zlckxvd2VzdFByaWNlYGAgb3IgYGBNYXhTcG90UHJpY2VBc1BlcmNlbnRhZ2VPZk9wdGltYWxPbkRlbWFuZFByaWNlYGAgY2FuIGJlIHNwZWNpZmllZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgZWl0aGVyLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwbHkgb3B0aW1hbCBwcmljZSBwcm90ZWN0aW9uIHRvIGNvbnNpc3RlbnRseSBzZWxlY3QgZnJvbSBhIHdpZGUgcmFuZ2Ugb2YgaW5zdGFuY2UgdHlwZXMuIFRvIGluZGljYXRlIG5vIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGZvciBTcG90IEluc3RhbmNlcywgbWVhbmluZyB5b3Ugd2FudCB0byBjb25zaWRlciBhbGwgaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIGF0dHJpYnV0ZXMsIGluY2x1ZGUgb25lIG9mIHRoZXNlIHBhcmFtZXRlcnMgYW5kIHNwZWNpZnkgYSBoaWdoIHZhbHVlLCBzdWNoIGFzIGBgOTk5OTk5YGAuXG4gKi9cbk1heFNwb3RQcmljZUFzUGVyY2VudGFnZU9mT3B0aW1hbE9uRGVtYW5kUHJpY2U/OiBudW1iZXJcbi8qKlxuICogW1ByaWNlIHByb3RlY3Rpb25dIFRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgT24tRGVtYW5kIEluc3RhbmNlcywgYXMgYSBwZXJjZW50YWdlIGhpZ2hlciB0aGFuIGFuIGlkZW50aWZpZWQgT24tRGVtYW5kIHByaWNlLiBUaGUgaWRlbnRpZmllZCBPbi1EZW1hbmQgcHJpY2UgaXMgdGhlIHByaWNlIG9mIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgd2l0aCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiBJZiBubyBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIG1hdGNoZXMgeW91ciBhdHRyaWJ1dGVzLCB0aGVuIHRoZSBpZGVudGlmaWVkIHByaWNlIGlzIGZyb20gZWl0aGVyIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyBvciwgZmFpbGluZyB0aGF0LCB0aGUgbG93ZXN0IHByaWNlZCBwcmV2aW91cyBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIHRoYXQgbWF0Y2ggeW91ciBhdHRyaWJ1dGVzLiBXaGVuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlbGVjdHMgaW5zdGFuY2UgdHlwZXMgd2l0aCB5b3VyIGF0dHJpYnV0ZXMsIHdlIHdpbGwgZXhjbHVkZSBpbnN0YW5jZSB0eXBlcyB3aG9zZSBwcmljZSBleGNlZWRzIHlvdXIgc3BlY2lmaWVkIHRocmVzaG9sZC4gXG4gKiAgVGhlIHBhcmFtZXRlciBhY2NlcHRzIGFuIGludGVnZXIsIHdoaWNoIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGludGVycHJldHMgYXMgYSBwZXJjZW50YWdlLlxuICogIFRvIHR1cm4gb2ZmIHByaWNlIHByb3RlY3Rpb24sIHNwZWNpZnkgYSBoaWdoIHZhbHVlLCBzdWNoIGFzIGBgOTk5OTk5YGAuIFxuICogIElmIHlvdSBzZXQgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgdG8gYGB2Y3B1YGAgb3IgYGBtZW1vcnktbWliYGAsIHRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBpcyBhcHBsaWVkIGJhc2VkIG9uIHRoZSBwZXItdkNQVSBvciBwZXItbWVtb3J5IHByaWNlIGluc3RlYWQgb2YgdGhlIHBlciBpbnN0YW5jZSBwcmljZS4gXG4gKiAgRGVmYXVsdDogYGAyMGBgXG4gKi9cbk9uRGVtYW5kTWF4UHJpY2VQZXJjZW50YWdlT3Zlckxvd2VzdFByaWNlPzogbnVtYmVyXG5NZW1vcnlNaUI6IE1lbW9yeU1pQlJlcXVlc3Rcbi8qKlxuICogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIGxvY2FsIHN0b3JhZ2UgdGhhdCBpcyByZXF1aXJlZC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggaGFyZCBkaXNrIGRyaXZlIChIREQpIHN0b3JhZ2UsIHNwZWNpZnkgYGBoZGRgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggc29saWQgc3RhdGUgZHJpdmUgKFNTRCkgc3RvcmFnZSwgc3BlY2lmeSBgYHNzZGBgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgbG9jYWwgc3RvcmFnZSB0eXBlXG4gKi9cbkxvY2FsU3RvcmFnZVR5cGVzPzogc3RyaW5nW11cbk5ldHdvcmtJbnRlcmZhY2VDb3VudD86IE5ldHdvcmtJbnRlcmZhY2VDb3VudFJlcXVlc3Rcbi8qKlxuICogVGhlIGluc3RhbmNlIHR5cGVzIHRvIGV4Y2x1ZGUuIFlvdSBjYW4gdXNlIHN0cmluZ3Mgd2l0aCBvbmUgb3IgbW9yZSB3aWxkIGNhcmRzLCByZXByZXNlbnRlZCBieSBhbiBhc3RlcmlzayAoYGAqYGApLCB0byBleGNsdWRlIGFuIGluc3RhbmNlIGZhbWlseSwgdHlwZSwgc2l6ZSwgb3IgZ2VuZXJhdGlvbi4gVGhlIGZvbGxvd2luZyBhcmUgZXhhbXBsZXM6IGBgbTUuOHhsYXJnZWBgLCBgYGM1Ki4qYGAsIGBgbTVhLipgYCwgYGByKmBgLCBgYCozKmBgLiBcbiAqICBGb3IgZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgYGBjNSpgYCwgeW91IGFyZSBleGNsdWRpbmcgdGhlIGVudGlyZSBDNSBpbnN0YW5jZSBmYW1pbHksIHdoaWNoIGluY2x1ZGVzIGFsbCBDNWEgYW5kIEM1biBpbnN0YW5jZSB0eXBlcy4gSWYgeW91IHNwZWNpZnkgYGBtNWEuKmBgLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIGV4Y2x1ZGUgYWxsIHRoZSBNNWEgaW5zdGFuY2UgdHlwZXMsIGJ1dCBub3QgdGhlIE01biBpbnN0YW5jZSB0eXBlcy5cbiAqICAgSWYgeW91IHNwZWNpZnkgYGBFeGNsdWRlZEluc3RhbmNlVHlwZXNgYCwgeW91IGNhbid0IHNwZWNpZnkgYGBBbGxvd2VkSW5zdGFuY2VUeXBlc2BgLlxuICogICBEZWZhdWx0OiBObyBleGNsdWRlZCBpbnN0YW5jZSB0eXBlc1xuICovXG5FeGNsdWRlZEluc3RhbmNlVHlwZXM/OiBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgdHlwZXMgdG8gYXBwbHkgeW91ciBzcGVjaWZpZWQgYXR0cmlidXRlcyBhZ2FpbnN0LiBBbGwgb3RoZXIgaW5zdGFuY2UgdHlwZXMgYXJlIGlnbm9yZWQsIGV2ZW4gaWYgdGhleSBtYXRjaCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzLlxuICogIFlvdSBjYW4gdXNlIHN0cmluZ3Mgd2l0aCBvbmUgb3IgbW9yZSB3aWxkIGNhcmRzLCByZXByZXNlbnRlZCBieSBhbiBhc3RlcmlzayAoYGAqYGApLCB0byBhbGxvdyBhbiBpbnN0YW5jZSB0eXBlLCBzaXplLCBvciBnZW5lcmF0aW9uLiBUaGUgZm9sbG93aW5nIGFyZSBleGFtcGxlczogYGBtNS44eGxhcmdlYGAsIGBgYzUqLipgYCwgYGBtNWEuKmBgLCBgYHIqYGAsIGBgKjMqYGAuXG4gKiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBzcGVjaWZ5IGBgYzUqYGAsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYWxsb3cgdGhlIGVudGlyZSBDNSBpbnN0YW5jZSBmYW1pbHksIHdoaWNoIGluY2x1ZGVzIGFsbCBDNWEgYW5kIEM1biBpbnN0YW5jZSB0eXBlcy4gSWYgeW91IHNwZWNpZnkgYGBtNWEuKmBgLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIGFsbG93IGFsbCB0aGUgTTVhIGluc3RhbmNlIHR5cGVzLCBidXQgbm90IHRoZSBNNW4gaW5zdGFuY2UgdHlwZXMuXG4gKiAgIElmIHlvdSBzcGVjaWZ5IGBgQWxsb3dlZEluc3RhbmNlVHlwZXNgYCwgeW91IGNhbid0IHNwZWNpZnkgYGBFeGNsdWRlZEluc3RhbmNlVHlwZXNgYC5cbiAqICAgRGVmYXVsdDogQWxsIGluc3RhbmNlIHR5cGVzXG4gKi9cbkFsbG93ZWRJbnN0YW5jZVR5cGVzPzogc3RyaW5nW11cbkFjY2VsZXJhdG9yQ291bnQ/OiBBY2NlbGVyYXRvckNvdW50UmVxdWVzdFxuTmV0d29ya0JhbmR3aWR0aEdicHM/OiBOZXR3b3JrQmFuZHdpZHRoR2Jwc1JlcXVlc3RcbkJhc2VsaW5lUGVyZm9ybWFuY2VGYWN0b3JzPzogQmFzZWxpbmVQZXJmb3JtYW5jZUZhY3RvcnNSZXF1ZXN0XG5CYXNlbGluZUVic0JhbmR3aWR0aE1icHM/OiBCYXNlbGluZUVic0JhbmR3aWR0aE1icHNSZXF1ZXN0XG4vKipcbiAqIFtQcmljZSBwcm90ZWN0aW9uXSBUaGUgcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIFNwb3QgSW5zdGFuY2VzLCBhcyBhIHBlcmNlbnRhZ2UgaGlnaGVyIHRoYW4gYW4gaWRlbnRpZmllZCBTcG90IHByaWNlLiBUaGUgaWRlbnRpZmllZCBTcG90IHByaWNlIGlzIHRoZSBwcmljZSBvZiB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIHdpdGggeW91ciBzcGVjaWZpZWQgYXR0cmlidXRlcy4gSWYgbm8gY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSBtYXRjaGVzIHlvdXIgYXR0cmlidXRlcywgdGhlbiB0aGUgaWRlbnRpZmllZCBwcmljZSBpcyBmcm9tIGVpdGhlciB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgb3IsIGZhaWxpbmcgdGhhdCwgdGhlIGxvd2VzdCBwcmljZWQgcHJldmlvdXMgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcy4gV2hlbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZWxlY3RzIGluc3RhbmNlIHR5cGVzIHdpdGggeW91ciBhdHRyaWJ1dGVzLCB3ZSB3aWxsIGV4Y2x1ZGUgaW5zdGFuY2UgdHlwZXMgd2hvc2UgcHJpY2UgZXhjZWVkcyB5b3VyIHNwZWNpZmllZCB0aHJlc2hvbGQuXG4gKiAgVGhlIHBhcmFtZXRlciBhY2NlcHRzIGFuIGludGVnZXIsIHdoaWNoIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGludGVycHJldHMgYXMgYSBwZXJjZW50YWdlLiBcbiAqICBJZiB5b3Ugc2V0IGBgRGVzaXJlZENhcGFjaXR5VHlwZWBgIHRvIGBgdmNwdWBgIG9yIGBgbWVtb3J5LW1pYmBgLCB0aGUgcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgaXMgYmFzZWQgb24gdGhlIHBlci12Q1BVIG9yIHBlci1tZW1vcnkgcHJpY2UgaW5zdGVhZCBvZiB0aGUgcGVyIGluc3RhbmNlIHByaWNlLiBcbiAqICAgT25seSBvbmUgb2YgYGBTcG90TWF4UHJpY2VQZXJjZW50YWdlT3Zlckxvd2VzdFByaWNlYGAgb3IgYGBNYXhTcG90UHJpY2VBc1BlcmNlbnRhZ2VPZk9wdGltYWxPbkRlbWFuZFByaWNlYGAgY2FuIGJlIHNwZWNpZmllZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgZWl0aGVyLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aWxsIGF1dG9tYXRpY2FsbHkgYXBwbHkgb3B0aW1hbCBwcmljZSBwcm90ZWN0aW9uIHRvIGNvbnNpc3RlbnRseSBzZWxlY3QgZnJvbSBhIHdpZGUgcmFuZ2Ugb2YgaW5zdGFuY2UgdHlwZXMuIFRvIGluZGljYXRlIG5vIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGZvciBTcG90IEluc3RhbmNlcywgbWVhbmluZyB5b3Ugd2FudCB0byBjb25zaWRlciBhbGwgaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIGF0dHJpYnV0ZXMsIGluY2x1ZGUgb25lIG9mIHRoZXNlIHBhcmFtZXRlcnMgYW5kIHNwZWNpZnkgYSBoaWdoIHZhbHVlLCBzdWNoIGFzIGBgOTk5OTk5YGAuXG4gKi9cblNwb3RNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2U/OiBudW1iZXJcbi8qKlxuICogTGlzdHMgdGhlIGFjY2VsZXJhdG9ycyB0aGF0IG11c3QgYmUgb24gYW4gaW5zdGFuY2UgdHlwZS5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIEExMDAgR1BVcywgc3BlY2lmeSBgYGExMDBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIFYxMDAgR1BVcywgc3BlY2lmeSBgYHYxMDBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIEs4MCBHUFVzLCBzcGVjaWZ5IGBgazgwYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIE5WSURJQSBUNCBHUFVzLCBzcGVjaWZ5IGBgdDRgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIE02MCBHUFVzLCBzcGVjaWZ5IGBgbTYwYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEFNRCBSYWRlb24gUHJvIFY1MjAgR1BVcywgc3BlY2lmeSBgYHJhZGVvbi1wcm8tdjUyMGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBYaWxpbnggVlU5UCBGUEdBcywgc3BlY2lmeSBgYHZ1OXBgYC5cbiAqICAgXG4gKiAgRGVmYXVsdDogQW55IGFjY2VsZXJhdG9yXG4gKi9cbkFjY2VsZXJhdG9yTmFtZXM/OiBzdHJpbmdbXVxuQWNjZWxlcmF0b3JUb3RhbE1lbW9yeU1pQj86IEFjY2VsZXJhdG9yVG90YWxNZW1vcnlNaUJSZXF1ZXN0XG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIGJ1cnN0YWJsZSBwZXJmb3JtYW5jZSBpbnN0YW5jZSB0eXBlcyBhcmUgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciByZXF1aXJlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQnVyc3RhYmxlIHBlcmZvcm1hbmNlIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1wZXJmb3JtYW5jZS1pbnN0YW5jZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIERlZmF1bHQ6IGBgZXhjbHVkZWRgYFxuICovXG5CdXJzdGFibGVQZXJmb3JtYW5jZT86IHN0cmluZ1xuVG90YWxMb2NhbFN0b3JhZ2VHQj86IFRvdGFsTG9jYWxTdG9yYWdlR0JSZXF1ZXN0XG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudCBvZiBtZW1vcnkgcGVyIHZDUFUgZm9yIGFuIGluc3RhbmNlIHR5cGUsIGluIEdpQi5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVtb3J5R2lCUGVyVkNwdVJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWVtb3J5IG1pbmltdW0gaW4gR2lCLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1lbW9yeSBtYXhpbXVtIGluIEdpQi5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBmb3IgYW4gaW5zdGFuY2UgdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWQ3B1Q291bnRSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHZDUFVzLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHZDUFVzLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gaW5zdGFuY2UgbWVtb3J5IHNpemUgZm9yIGFuIGluc3RhbmNlIHR5cGUsIGluIE1pQi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlNaUJSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1lbW9yeSBtaW5pbXVtIGluIE1pQi5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtZW1vcnkgbWF4aW11bSBpbiBNaUIuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzIGZvciBhbiBpbnN0YW5jZSB0eXBlLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXR3b3JrSW50ZXJmYWNlQ291bnRSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIG5ldHdvcmsgaW50ZXJmYWNlcy5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YgYWNjZWxlcmF0b3JzIChHUFVzLCBGUEdBcywgb3IgQVdTIEluZmVyZW50aWEgY2hpcHMpIGZvciBhbiBpbnN0YW5jZSB0eXBlLlxuICogIFRvIGV4Y2x1ZGUgYWNjZWxlcmF0b3ItZW5hYmxlZCBpbnN0YW5jZSB0eXBlcywgc2V0IGBgTWF4YGAgdG8gYGAwYGAuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VsZXJhdG9yQ291bnRSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gdmFsdWUuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSB2YWx1ZS5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFtb3VudCBvZiBuZXR3b3JrIGJhbmR3aWR0aCwgaW4gZ2lnYWJpdHMgcGVyIHNlY29uZCAoR2JwcykuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtCYW5kd2lkdGhHYnBzUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBuZXR3b3JrIGJhbmR3aWR0aCwgaW4gZ2lnYWJpdHMgcGVyIHNlY29uZCAoR2JwcykuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgbmV0d29yayBiYW5kd2lkdGgsIGluIGdpZ2FiaXRzIHBlciBzZWNvbmQgKEdicHMpLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIGZhY3RvcnMgZm9yIHRoZSBpbnN0YW5jZSByZXF1aXJlbWVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZWxpbmVQZXJmb3JtYW5jZUZhY3RvcnNSZXF1ZXN0IHtcbkNwdT86IENwdVBlcmZvcm1hbmNlRmFjdG9yUmVxdWVzdFxufVxuLyoqXG4gKiBUaGUgQ1BVIHBlcmZvcm1hbmNlIHRvIGNvbnNpZGVyLCB1c2luZyBhbiBpbnN0YW5jZSBmYW1pbHkgYXMgdGhlIGJhc2VsaW5lIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcHVQZXJmb3JtYW5jZUZhY3RvclJlcXVlc3Qge1xuUmVmZXJlbmNlcz86IFBlcmZvcm1hbmNlRmFjdG9yUmVmZXJlbmNlU2V0UmVxdWVzdFxufVxuLyoqXG4gKiBTcGVjaWZ5IGFuIGluc3RhbmNlIGZhbWlseSB0byB1c2UgYXMgdGhlIGJhc2VsaW5lIHJlZmVyZW5jZSBmb3IgQ1BVIHBlcmZvcm1hbmNlLiBBbGwgaW5zdGFuY2UgdHlwZXMgdGhhdCBBbGwgaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzIHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUgQ1BVIHBlcmZvcm1hbmNlIG9mIHRoZSByZWZlcmVuY2VkIGluc3RhbmNlIGZhbWlseSwgcmVnYXJkbGVzcyBvZiBDUFUgbWFudWZhY3R1cmVyIG9yIGFyY2hpdGVjdHVyZSBkaWZmZXJlbmNlcy4gXG4gKiAgIEN1cnJlbnRseSBvbmx5IG9uZSBpbnN0YW5jZSBmYW1pbHkgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJmb3JtYW5jZUZhY3RvclJlZmVyZW5jZVJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgaW5zdGFuY2UgZmFtaWx5IHRvIHVzZSBhcyBhIGJhc2VsaW5lIHJlZmVyZW5jZS4gXG4gKiAgIE1ha2Ugc3VyZSB0aGF0IHlvdSBzcGVjaWZ5IHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGUgaW5zdGFuY2UgZmFtaWx5LiBUaGUgaW5zdGFuY2UgZmFtaWx5IGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBwZXJpb2QgKC4pIGluIHRoZSBpbnN0YW5jZSB0eXBlIG5hbWUuIEZvciBleGFtcGxlLCBpbiB0aGUgaW5zdGFuY2UgYGBjNmkubGFyZ2VgYCwgdGhlIGluc3RhbmNlIGZhbWlseSBpcyBgYGM2aWBgLCBub3QgYGBjNmBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUMyIGluc3RhbmNlIHR5cGUgbmFtaW5nIGNvbnZlbnRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWMyL2xhdGVzdC9pbnN0YW5jZXR5cGVzL2luc3RhbmNlLXR5cGUtbmFtZXMuaHRtbCkgaW4gKkFtYXpvbiBFQzIgSW5zdGFuY2UgVHlwZXMqLlxuICogICBUaGUgZm9sbG93aW5nIGluc3RhbmNlIHR5cGVzIGFyZSAqbm90IHN1cHBvcnRlZCogZm9yIHBlcmZvcm1hbmNlIHByb3RlY3Rpb24uXG4gKiAgICsgICBgYGMxYGAgXG4gKiAgICsgICBgYGczfCBnM3NgYCBcbiAqICAgKyAgIGBgaHBjN2dgYCBcbiAqICAgKyAgIGBgbTF8IG0yYGAgXG4gKiAgICsgICBgYG1hYzEgfCBtYWMyIHwgbWFjMi1tMXVsdHJhIHwgbWFjMi1tMiB8IG1hYzItbTJwcm9gYCBcbiAqICAgKyAgIGBgcDNkbiB8IHA0ZCB8IHA1YGAgXG4gKiAgICsgICBgYHQxYGAgXG4gKiAgICsgICBgYHUtMTJ0YjEgfCB1LTE4dGIxIHwgdS0yNHRiMSB8IHUtM3RiMSB8IHUtNnRiMSB8IHUtOXRiMSB8IHU3aS0xMnRiIHwgdTdpbi0xNnRiIHwgdTdpbi0yNHRiIHwgdTdpbi0zMnRiYGAgXG4gKiAgIFxuICogIElmIHlvdSBwZXJmb3JtYW5jZSBwcm90ZWN0aW9uIGJ5IHNwZWNpZnlpbmcgYSBzdXBwb3J0ZWQgaW5zdGFuY2UgZmFtaWx5LCB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgdHlwZXMgd2lsbCBleGNsdWRlIHRoZSBwcmVjZWRpbmcgdW5zdXBwb3J0ZWQgaW5zdGFuY2UgZmFtaWxpZXMuXG4gKiAgSWYgeW91IHNwZWNpZnkgYW4gdW5zdXBwb3J0ZWQgaW5zdGFuY2UgZmFtaWx5IGFzIGEgdmFsdWUgZm9yIGJhc2VsaW5lIHBlcmZvcm1hbmNlLCB0aGUgQVBJIHJldHVybnMgYW4gZW1wdHkgcmVzcG9uc2UuXG4gKi9cbkluc3RhbmNlRmFtaWx5Pzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGJhc2VsaW5lIGJhbmR3aWR0aCBwZXJmb3JtYW5jZSBmb3IgYW4gaW5zdGFuY2UgdHlwZSwgaW4gTWJwcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIEVCU+KAk29wdGltaXplZCBpbnN0YW5jZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtb3B0aW1pemVkLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZWxpbmVFYnNCYW5kd2lkdGhNYnBzUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtaW5pbXVtIHZhbHVlIGluIE1icHMuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSB2YWx1ZSBpbiBNYnBzLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gdG90YWwgbWVtb3J5IHNpemUgZm9yIHRoZSBhY2NlbGVyYXRvcnMgb24gYW4gaW5zdGFuY2UgdHlwZSwgaW4gTWlCLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2NlbGVyYXRvclRvdGFsTWVtb3J5TWlCUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtZW1vcnkgbWluaW11bSBpbiBNaUIuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWVtb3J5IG1heGltdW0gaW4gTWlCLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gdG90YWwgbG9jYWwgc3RvcmFnZSBzaXplIGZvciBhbiBpbnN0YW5jZSB0eXBlLCBpbiBHQi5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG90YWxMb2NhbFN0b3JhZ2VHQlJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgc3RvcmFnZSBtaW5pbXVtIGluIEdCLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIHN0b3JhZ2UgbWF4aW11bSBpbiBHQi5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIEEgc3RydWN0dXJlIHRoYXQgc3BlY2lmaWVzIGEgdGFnIGZvciB0aGUgYGBUYWdzYGAgcHJvcGVydHkgb2YgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwpIHJlc291cmNlLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1RhZyBBdXRvIFNjYWxpbmcgZ3JvdXBzIGFuZCBpbnN0YW5jZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2F1dG9zY2FsaW5nLXRhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi4gWW91IGNhbiBmaW5kIGEgc2FtcGxlIHRlbXBsYXRlIHNuaXBwZXQgaW4gdGhlIFtFeGFtcGxlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCNhd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC0tZXhhbXBsZXMpIHNlY3Rpb24gb2YgdGhlIGBgQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cGBgIHJlc291cmNlLlxuICogIENsb3VkRm9ybWF0aW9uIGFkZHMgdGhlIGZvbGxvd2luZyB0YWdzIHRvIGFsbCBBdXRvIFNjYWxpbmcgZ3JvdXBzIGFuZCBhc3NvY2lhdGVkIGluc3RhbmNlczogXG4gKiAgICsgIGF3czpjbG91ZGZvcm1hdGlvbjpzdGFjay1uYW1lXG4gKiAgICsgIGF3czpjbG91ZGZvcm1hdGlvbjpzdGFjay1pZFxuICogICArICBhd3M6Y2xvdWRmb3JtYXRpb246bG9naWNhbC1pZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZ1Byb3BlcnR5IHtcbi8qKlxuICogVGhlIHRhZyB2YWx1ZS5cbiAqL1xuVmFsdWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgdGFnIGtleS5cbiAqL1xuS2V5OiBzdHJpbmdcbi8qKlxuICogU2V0IHRvIGBgdHJ1ZWBgIGlmIHlvdSB3YW50IENsb3VkRm9ybWF0aW9uIHRvIGNvcHkgdGhlIHRhZyB0byBFQzIgaW5zdGFuY2VzIHRoYXQgYXJlIGxhdW5jaGVkIGFzIHBhcnQgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cC4gU2V0IHRvIGBgZmFsc2VgYCBpZiB5b3Ugd2FudCB0aGUgdGFnIGF0dGFjaGVkIG9ubHkgdG8gdGhlIEF1dG8gU2NhbGluZyBncm91cCBhbmQgbm90IGNvcGllZCB0byBhbnkgaW5zdGFuY2VzIGxhdW5jaGVkIGFzIHBhcnQgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuUHJvcGFnYXRlQXRMYXVuY2g6IGJvb2xlYW5cbn1cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgYW4gQW1hem9uIFNOUyBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGBgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnNgYCBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwpIHJlc291cmNlLlxuICogIEZvciBhbiBleGFtcGxlIHRlbXBsYXRlIHNuaXBwZXQsIHNlZSBbQ29uZmlndXJlIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvcXVpY2tyZWYtZWMyLWF1dG8tc2NhbGluZy5odG1sKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHZXQgQW1hem9uIFNOUyBub3RpZmljYXRpb25zIHdoZW4geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgc2NhbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9BU0dldHRpbmdOb3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbjEge1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIEFtYXpvbiBTTlMgdG9waWMuXG4gKi9cblRvcGljQVJOOiAoc3RyaW5nIHwgc3RyaW5nW10pXG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCB0eXBlcyB0aGF0IHNlbmQgYSBub3RpZmljYXRpb24uIEV2ZW50IHR5cGVzIGNhbiBpbmNsdWRlIGFueSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzLiBcbiAqICAqQWxsb3dlZCB2YWx1ZXMqOlxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNIYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX1RFUk1JTkFURWBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFX0VSUk9SYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOlRFU1RfTk9USUZJQ0FUSU9OYGBcbiAqL1xuTm90aWZpY2F0aW9uVHlwZXM/OiBzdHJpbmdbXVxufVxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgY2FwYWNpdHkgZGlzdHJpYnV0aW9uIGFjcm9zcyBBdmFpbGFiaWxpdHkgWm9uZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXZhaWxhYmlsaXR5Wm9uZURpc3RyaWJ1dGlvbiB7XG4vKipcbiAqIElmIGxhdW5jaGVzIGZhaWwgaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUsIHRoZSBmb2xsb3dpbmcgc3RyYXRlZ2llcyBhcmUgYXZhaWxhYmxlLiBUaGUgZGVmYXVsdCBpcyBgYGJhbGFuY2VkLWJlc3QtZWZmb3J0YGAuIFxuICogICArICBgYGJhbGFuY2VkLW9ubHlgYCAtIElmIGxhdW5jaGVzIGZhaWwgaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUsIEF1dG8gU2NhbGluZyB3aWxsIGNvbnRpbnVlIHRvIGF0dGVtcHQgdG8gbGF1bmNoIGluIHRoZSB1bmhlYWx0aHkgem9uZSB0byBwcmVzZXJ2ZSBhIGJhbGFuY2VkIGRpc3RyaWJ1dGlvbi5cbiAqICAgKyAgYGBiYWxhbmNlZC1iZXN0LWVmZm9ydGBgIC0gSWYgbGF1bmNoZXMgZmFpbCBpbiBhbiBBdmFpbGFiaWxpdHkgWm9uZSwgQXV0byBTY2FsaW5nIHdpbGwgYXR0ZW1wdCB0byBsYXVuY2ggaW4gYW5vdGhlciBoZWFsdGh5IEF2YWlsYWJpbGl0eSBab25lIGluc3RlYWQuXG4gKi9cbkNhcGFjaXR5RGlzdHJpYnV0aW9uU3RyYXRlZ3k/OiAoXCJiYWxhbmNlZC1iZXN0LWVmZm9ydFwiIHwgXCJiYWxhbmNlZC1vbmx5XCIpXG59XG4vKipcbiAqIGBgTWV0cmljc0NvbGxlY3Rpb25gYCBpcyBhIHByb3BlcnR5IG9mIHRoZSBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCkgcmVzb3VyY2UgdGhhdCBkZXNjcmliZXMgdGhlIGdyb3VwIG1ldHJpY3MgdGhhdCBhbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBncm91cCBzZW5kcyB0byBBbWF6b24gQ2xvdWRXYXRjaC4gVGhlc2UgbWV0cmljcyBkZXNjcmliZSB0aGUgZ3JvdXAgcmF0aGVyIHRoYW4gYW55IG9mIGl0cyBpbnN0YW5jZXMuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW01vbml0b3IgQ2xvdWRXYXRjaCBtZXRyaWNzIGZvciB5b3VyIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXMtaW5zdGFuY2UtbW9uaXRvcmluZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLiBZb3UgY2FuIGZpbmQgYSBzYW1wbGUgdGVtcGxhdGUgc25pcHBldCBpbiB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljc0NvbGxlY3Rpb24ge1xuLyoqXG4gKiBJZGVudGlmaWVzIHRoZSBtZXRyaWNzIHRvIGVuYWJsZS5cbiAqICBZb3UgY2FuIHNwZWNpZnkgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBtZXRyaWNzOlxuICogICArICAgYGBHcm91cE1pblNpemVgYCBcbiAqICAgKyAgIGBgR3JvdXBNYXhTaXplYGAgXG4gKiAgICsgICBgYEdyb3VwRGVzaXJlZENhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwSW5TZXJ2aWNlSW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwUGVuZGluZ0luc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cFN0YW5kYnlJbnN0YW5jZXNgYCBcbiAqICAgKyAgIGBgR3JvdXBUZXJtaW5hdGluZ0luc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cFRvdGFsSW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwSW5TZXJ2aWNlQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBQZW5kaW5nQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBTdGFuZGJ5Q2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBUZXJtaW5hdGluZ0NhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwVG90YWxDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbERlc2lyZWRDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbFdhcm1lZENhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sUGVuZGluZ0NhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sVGVybWluYXRpbmdDYXBhY2l0eWBgIFxuICogICArICAgYGBXYXJtUG9vbFRvdGFsQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBBbmRXYXJtUG9vbERlc2lyZWRDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cEFuZFdhcm1Qb29sVG90YWxDYXBhY2l0eWBgIFxuICogICBcbiAqICBJZiB5b3Ugc3BlY2lmeSBgYEdyYW51bGFyaXR5YGAgYW5kIGRvbid0IHNwZWNpZnkgYW55IG1ldHJpY3MsIGFsbCBtZXRyaWNzIGFyZSBlbmFibGVkLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBDbG91ZFdhdGNoIG1ldHJpY3MgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1ldHJpY3MuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuTWV0cmljcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBmcmVxdWVuY3kgYXQgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VuZHMgYWdncmVnYXRlZCBkYXRhIHRvIENsb3VkV2F0Y2guIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGlzIGBgMU1pbnV0ZWBgLlxuICovXG5HcmFudWxhcml0eTogc3RyaW5nXG59XG4vKipcbiAqIEFuIGluc3RhbmNlIG1haW50ZW5hbmNlIHBvbGljeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2V0IGluc3RhbmNlIG1haW50ZW5hbmNlIHBvbGljeV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1pbnN0YW5jZS1tYWludGVuYW5jZS1wb2xpY3kuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZU1haW50ZW5hbmNlUG9saWN5IHtcbi8qKlxuICogU3BlY2lmaWVzIHRoZSB1cHBlciB0aHJlc2hvbGQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSBkZXNpcmVkIGNhcGFjaXR5IG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIEl0IHJlcHJlc2VudHMgdGhlIG1heGltdW0gcGVyY2VudGFnZSBvZiB0aGUgZ3JvdXAgdGhhdCBjYW4gYmUgaW4gc2VydmljZSBhbmQgaGVhbHRoeSwgb3IgcGVuZGluZywgdG8gc3VwcG9ydCB5b3VyIHdvcmtsb2FkIHdoZW4gcmVwbGFjaW5nIGluc3RhbmNlcy4gVmFsdWUgcmFuZ2UgaXMgMTAwIHRvIDIwMC4gVG8gY2xlYXIgYSBwcmV2aW91c2x5IHNldCB2YWx1ZSwgc3BlY2lmeSBhIHZhbHVlIG9mIGBgLTFgYC5cbiAqICBCb3RoIGBgTWluSGVhbHRoeVBlcmNlbnRhZ2VgYCBhbmQgYGBNYXhIZWFsdGh5UGVyY2VudGFnZWBgIG11c3QgYmUgc3BlY2lmaWVkLCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMTAwLiBBIGxhcmdlIHJhbmdlIGluY3JlYXNlcyB0aGUgbnVtYmVyIG9mIGluc3RhbmNlcyB0aGF0IGNhbiBiZSByZXBsYWNlZCBhdCB0aGUgc2FtZSB0aW1lLlxuICovXG5NYXhIZWFsdGh5UGVyY2VudGFnZT86IG51bWJlclxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGxvd2VyIHRocmVzaG9sZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGRlc2lyZWQgY2FwYWNpdHkgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cC4gSXQgcmVwcmVzZW50cyB0aGUgbWluaW11bSBwZXJjZW50YWdlIG9mIHRoZSBncm91cCB0byBrZWVwIGluIHNlcnZpY2UsIGhlYWx0aHksIGFuZCByZWFkeSB0byB1c2UgdG8gc3VwcG9ydCB5b3VyIHdvcmtsb2FkIHdoZW4gcmVwbGFjaW5nIGluc3RhbmNlcy4gVmFsdWUgcmFuZ2UgaXMgMCB0byAxMDAuIFRvIGNsZWFyIGEgcHJldmlvdXNseSBzZXQgdmFsdWUsIHNwZWNpZnkgYSB2YWx1ZSBvZiBgYC0xYGAuXG4gKi9cbk1pbkhlYWx0aHlQZXJjZW50YWdlPzogbnVtYmVyXG59XG4vKipcbiAqIElkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGZvciBhIHRyYWZmaWMgc291cmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYWZmaWNTb3VyY2VJZGVudGlmaWVyIHtcbi8qKlxuICogUHJvdmlkZXMgYWRkaXRpb25hbCBjb250ZXh0IGZvciB0aGUgdmFsdWUgb2YgYGBJZGVudGlmaWVyYGAuXG4gKiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgdmFsaWQgdmFsdWVzOlxuICogICArICBgYGVsYmBgIGlmIGBgSWRlbnRpZmllcmBgIGlzIHRoZSBuYW1lIG9mIGEgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyLlxuICogICArICBgYGVsYnYyYGAgaWYgYGBJZGVudGlmaWVyYGAgaXMgdGhlIEFSTiBvZiBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLCBHYXRld2F5IExvYWQgQmFsYW5jZXIsIG9yIE5ldHdvcmsgTG9hZCBCYWxhbmNlciB0YXJnZXQgZ3JvdXAuXG4gKiAgICsgIGBgdnBjLWxhdHRpY2VgYCBpZiBgYElkZW50aWZpZXJgYCBpcyB0aGUgQVJOIG9mIGEgVlBDIExhdHRpY2UgdGFyZ2V0IGdyb3VwLlxuICogICBcbiAqICBSZXF1aXJlZCBpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiBhIENsYXNzaWMgTG9hZCBCYWxhbmNlci5cbiAqL1xuVHlwZTogc3RyaW5nXG4vKipcbiAqIElkZW50aWZpZXMgdGhlIHRyYWZmaWMgc291cmNlLlxuICogIEZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycywgR2F0ZXdheSBMb2FkIEJhbGFuY2VycywgTmV0d29yayBMb2FkIEJhbGFuY2VycywgYW5kIFZQQyBMYXR0aWNlLCB0aGlzIHdpbGwgYmUgdGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIGZvciBhIHRhcmdldCBncm91cCBpbiB0aGlzIGFjY291bnQgYW5kIFJlZ2lvbi4gRm9yIENsYXNzaWMgTG9hZCBCYWxhbmNlcnMsIHRoaXMgd2lsbCBiZSB0aGUgbmFtZSBvZiB0aGUgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyIGluIHRoaXMgYWNjb3VudCBhbmQgUmVnaW9uLlxuICogIEZvciBleGFtcGxlOiBcbiAqICAgKyAgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBBUk46IGBgYXJuOmF3czplbGFzdGljbG9hZGJhbGFuY2luZzp1cy13ZXN0LTI6MTIzNDU2Nzg5MDEyOnRhcmdldGdyb3VwL215LXRhcmdldHMvMTIzNDU2Nzg5MDEyMzQ1NmBgXG4gKiAgICsgIENsYXNzaWMgTG9hZCBCYWxhbmNlciBuYW1lOiBgYG15LWNsYXNzaWMtbG9hZC1iYWxhbmNlcmBgXG4gKiAgICsgIFZQQyBMYXR0aWNlIEFSTjogYGBhcm46YXdzOnZwYy1sYXR0aWNlOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6dGFyZ2V0Z3JvdXAvdGctMTIzNDU2Nzg5MDEyMzQ1NmBgXG4gKiAgIFxuICogIFRvIGdldCB0aGUgQVJOIG9mIGEgdGFyZ2V0IGdyb3VwIGZvciBhIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIsIEdhdGV3YXkgTG9hZCBCYWxhbmNlciwgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyLCBvciB0aGUgbmFtZSBvZiBhIENsYXNzaWMgTG9hZCBCYWxhbmNlciwgdXNlIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIFtEZXNjcmliZVRhcmdldEdyb3Vwc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlVGFyZ2V0R3JvdXBzLmh0bWwpIGFuZCBbRGVzY3JpYmVMb2FkQmFsYW5jZXJzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVMb2FkQmFsYW5jZXJzLmh0bWwpIEFQSSBvcGVyYXRpb25zLlxuICogIFRvIGdldCB0aGUgQVJOIG9mIGEgdGFyZ2V0IGdyb3VwIGZvciBWUEMgTGF0dGljZSwgdXNlIHRoZSBWUEMgTGF0dGljZSBbR2V0VGFyZ2V0R3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMtbGF0dGljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRUYXJnZXRHcm91cC5odG1sKSBBUEkgb3BlcmF0aW9uLlxuICovXG5JZGVudGlmaWVyOiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIGNhcGFjaXR5IHJlc2VydmF0aW9uIHNwZWNpZmljYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHlSZXNlcnZhdGlvblNwZWNpZmljYXRpb24ge1xuLyoqXG4gKiBUaGUgY2FwYWNpdHkgcmVzZXJ2YXRpb24gcHJlZmVyZW5jZS4gVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6IFxuICogICArICBgYGNhcGFjaXR5LXJlc2VydmF0aW9ucy1vbmx5YGAgLSBBdXRvIFNjYWxpbmcgd2lsbCBvbmx5IGxhdW5jaCBpbnN0YW5jZXMgaW50byBhIENhcGFjaXR5IFJlc2VydmF0aW9uIG9yIENhcGFjaXR5IFJlc2VydmF0aW9uIHJlc291cmNlIGdyb3VwLiBJZiBjYXBhY2l0eSBpc24ndCBhdmFpbGFibGUsIGluc3RhbmNlcyB3aWxsIGZhaWwgdG8gbGF1bmNoLlxuICogICArICBgYGNhcGFjaXR5LXJlc2VydmF0aW9ucy1maXJzdGBgIC0gQXV0byBTY2FsaW5nIHdpbGwgdHJ5IHRvIGxhdW5jaCBpbnN0YW5jZXMgaW50byBhIENhcGFjaXR5IFJlc2VydmF0aW9uIG9yIENhcGFjaXR5IFJlc2VydmF0aW9uIHJlc291cmNlIGdyb3VwIGZpcnN0LiBJZiBjYXBhY2l0eSBpc24ndCBhdmFpbGFibGUsIGluc3RhbmNlcyB3aWxsIHJ1biBpbiBPbi1EZW1hbmQgY2FwYWNpdHkuXG4gKiAgICsgIGBgbm9uZWBgIC0gQXV0byBTY2FsaW5nIHdpbGwgbm90IGxhdW5jaCBpbnN0YW5jZXMgaW50byBhIENhcGFjaXR5IFJlc2VydmF0aW9uLiBJbnN0YW5jZXMgd2lsbCBydW4gaW4gT24tRGVtYW5kIGNhcGFjaXR5LiBcbiAqICAgKyAgYGBkZWZhdWx0YGAgLSBBdXRvIFNjYWxpbmcgdXNlcyB0aGUgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gcHJlZmVyZW5jZSBmcm9tIHlvdXIgbGF1bmNoIHRlbXBsYXRlIG9yIGFuIG9wZW4gQ2FwYWNpdHkgUmVzZXJ2YXRpb24uXG4gKi9cbkNhcGFjaXR5UmVzZXJ2YXRpb25QcmVmZXJlbmNlOiBzdHJpbmdcbkNhcGFjaXR5UmVzZXJ2YXRpb25UYXJnZXQ/OiBDYXBhY2l0eVJlc2VydmF0aW9uVGFyZ2V0XG59XG4vKipcbiAqIERlc2NyaWJlcyBhIHRhcmdldCBDYXBhY2l0eSBSZXNlcnZhdGlvbiBvciBDYXBhY2l0eSBSZXNlcnZhdGlvbiByZXNvdXJjZSBncm91cC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVJlc2VydmF0aW9uVGFyZ2V0IHtcbkNhcGFjaXR5UmVzZXJ2YXRpb25JZHM/OiBDYXBhY2l0eVJlc2VydmF0aW9uSWRzXG5DYXBhY2l0eVJlc2VydmF0aW9uUmVzb3VyY2VHcm91cEFybnM/OiBDYXBhY2l0eVJlc2VydmF0aW9uUmVzb3VyY2VHcm91cEFybnNcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3MtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTcGVjaWZ5IGFuIGluc3RhbmNlIGZhbWlseSB0byB1c2UgYXMgdGhlIGJhc2VsaW5lIHJlZmVyZW5jZSBmb3IgQ1BVIHBlcmZvcm1hbmNlLiBBbGwgaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzIHdpbGwgYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUgQ1BVIHBlcmZvcm1hbmNlIG9mIHRoZSByZWZlcmVuY2VkIGluc3RhbmNlIGZhbWlseSwgcmVnYXJkbGVzcyBvZiBDUFUgbWFudWZhY3R1cmVyIG9yIGFyY2hpdGVjdHVyZSBkaWZmZXJlbmNlcy4gXG4gKiAgIEN1cnJlbnRseSBvbmx5IG9uZSBpbnN0YW5jZSBmYW1pbHkgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IHR5cGUgUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VTZXRSZXF1ZXN0ID0gUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VSZXF1ZXN0W11cbi8qKlxuICogVGhlIENhcGFjaXR5IFJlc2VydmF0aW9uIElEcyB0byBsYXVuY2ggaW5zdGFuY2VzIGludG8uXG4gKi9cbmV4cG9ydCB0eXBlIENhcGFjaXR5UmVzZXJ2YXRpb25JZHMgPSBzdHJpbmdbXVxuLyoqXG4gKiBUaGUgcmVzb3VyY2UgZ3JvdXAgQVJOcyBvZiB0aGUgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gdG8gbGF1bmNoIGluc3RhbmNlcyBpbnRvLlxuICovXG5leHBvcnQgdHlwZSBDYXBhY2l0eVJlc2VydmF0aW9uUmVzb3VyY2VHcm91cEFybnMgPSBzdHJpbmdbXVxuXG4vKipcbiAqIFRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZSBkZWZpbmVzIGFuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGdyb3VwLCB3aGljaCBpcyBhIGNvbGxlY3Rpb24gb2YgQW1hem9uIEVDMiBpbnN0YW5jZXMgdGhhdCBhcmUgdHJlYXRlZCBhcyBhIGxvZ2ljYWwgZ3JvdXBpbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiBhdXRvbWF0aWMgc2NhbGluZyBhbmQgbWFuYWdlbWVudC4gXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcsIHNlZSB0aGUgW0FtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3doYXQtaXMtYW1hem9uLWVjMi1hdXRvLXNjYWxpbmcuaHRtbCkuIFxuICogICBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBjb25maWd1cmVzIGluc3RhbmNlcyBsYXVuY2hlZCBhcyBwYXJ0IG9mIGFuIEF1dG8gU2NhbGluZyBncm91cCB1c2luZyBlaXRoZXIgYSBbbGF1bmNoIHRlbXBsYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWxhdW5jaHRlbXBsYXRlLmh0bWwpIG9yIGEgbGF1bmNoIGNvbmZpZ3VyYXRpb24uIFdlIHN0cm9uZ2x5IHJlY29tbWVuZCB0aGF0IHlvdSBkbyBub3QgdXNlIGxhdW5jaCBjb25maWd1cmF0aW9ucy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTGF1bmNoIGNvbmZpZ3VyYXRpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9sYXVuY2gtY29uZmlndXJhdGlvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBGb3IgaGVscCBtaWdyYXRpbmcgZnJvbSBsYXVuY2ggY29uZmlndXJhdGlvbnMgdG8gbGF1bmNoIHRlbXBsYXRlcywgc2VlIFtNaWdyYXRlIENsb3VkRm9ybWF0aW9uIHN0YWNrcyBmcm9tIGxhdW5jaCBjb25maWd1cmF0aW9ucyB0byBsYXVuY2ggdGVtcGxhdGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9taWdyYXRlLWxhdW5jaC1jb25maWd1cmF0aW9ucy13aXRoLWNsb3VkZm9ybWF0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgX0FXU19BVVRPU0NBTElOR19BVVRPU0NBTElOR0dST1VQIHtcbi8qKlxuICogT25lIG9yIG1vcmUgbGlmZWN5Y2xlIGhvb2tzIHRvIGFkZCB0byB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGJlZm9yZSBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkLlxuICovXG5MaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbkxpc3Q/OiBMaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbltdXG4vKipcbiAqIEEgbGlzdCBvZiBDbGFzc2ljIExvYWQgQmFsYW5jZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEF1dG8gU2NhbGluZyBncm91cC4gRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLCBhbmQgR2F0ZXdheSBMb2FkIEJhbGFuY2Vycywgc3BlY2lmeSB0aGUgYGBUYXJnZXRHcm91cEFSTnNgYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICovXG5Mb2FkQmFsYW5jZXJOYW1lcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsYXVuY2ggY29uZmlndXJhdGlvbiB0byB1c2UgdG8gbGF1bmNoIGluc3RhbmNlcy5cbiAqICBSZXF1aXJlZCBvbmx5IGlmIHlvdSBkb24ndCBzcGVjaWZ5IGBgTGF1bmNoVGVtcGxhdGVgYCwgYGBNaXhlZEluc3RhbmNlc1BvbGljeWBgLCBvciBgYEluc3RhbmNlSWRgYC5cbiAqL1xuTGF1bmNoQ29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBzZXJ2aWNlLWxpbmtlZCByb2xlIHRoYXQgdGhlIEF1dG8gU2NhbGluZyBncm91cCB1c2VzIHRvIGNhbGwgb3RoZXIgQVdTIHNlcnZpY2Ugb24geW91ciBiZWhhbGYuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgYSBzZXJ2aWNlLWxpbmtlZCByb2xlIG5hbWVkIGBgQVdTU2VydmljZVJvbGVGb3JBdXRvU2NhbGluZ2BgLCB3aGljaCBpdCBjcmVhdGVzIGlmIGl0IGRvZXMgbm90IGV4aXN0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXJ2aWNlLWxpbmtlZCByb2xlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXV0b3NjYWxpbmctc2VydmljZS1saW5rZWQtcm9sZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5TZXJ2aWNlTGlua2VkUm9sZUFSTj86IHN0cmluZ1xuQXZhaWxhYmlsaXR5Wm9uZUltcGFpcm1lbnRQb2xpY3k/OiBBdmFpbGFiaWxpdHlab25lSW1wYWlybWVudFBvbGljeVxuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWVzIChBUk4pIG9mIHRoZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRhcmdldCBncm91cHMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIEF1dG8gU2NhbGluZyBncm91cC4gSW5zdGFuY2VzIGFyZSByZWdpc3RlcmVkIGFzIHRhcmdldHMgd2l0aCB0aGUgdGFyZ2V0IGdyb3Vwcy4gVGhlIHRhcmdldCBncm91cHMgcmVjZWl2ZSBpbmNvbWluZyB0cmFmZmljIGFuZCByb3V0ZSByZXF1ZXN0cyB0byBvbmUgb3IgbW9yZSByZWdpc3RlcmVkIHRhcmdldHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzZSBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRvIGRpc3RyaWJ1dGUgdHJhZmZpYyBhY3Jvc3MgdGhlIGluc3RhbmNlcyBpbiB5b3VyIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXV0b3NjYWxpbmctbG9hZC1iYWxhbmNlci5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5UYXJnZXRHcm91cEFSTnM/OiBzdHJpbmdbXVxuLyoqXG4gKiAqT25seSBuZWVkZWQgaWYgeW91IHVzZSBzaW1wbGUgc2NhbGluZyBwb2xpY2llcy4qIFxuICogIFRoZSBhbW91bnQgb2YgdGltZSwgaW4gc2Vjb25kcywgYmV0d2VlbiBvbmUgc2NhbGluZyBhY3Rpdml0eSBlbmRpbmcgYW5kIGFub3RoZXIgb25lIHN0YXJ0aW5nIGR1ZSB0byBzaW1wbGUgc2NhbGluZyBwb2xpY2llcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2NhbGluZyBjb29sZG93bnMgZm9yIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLXNjYWxpbmctY29vbGRvd25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgRGVmYXVsdDogYGAzMDBgYCBzZWNvbmRzXG4gKi9cbkNvb2xkb3duPzogc3RyaW5nXG4vKipcbiAqIENvbmZpZ3VyZXMgYW4gQXV0byBTY2FsaW5nIGdyb3VwIHRvIHNlbmQgbm90aWZpY2F0aW9ucyB3aGVuIHNwZWNpZmllZCBldmVudHMgdGFrZSBwbGFjZS5cbiAqL1xuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnM/OiBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uW11cbi8qKlxuICogVGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgdGhlIGluaXRpYWwgY2FwYWNpdHkgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cCBhdCB0aGUgdGltZSBvZiBpdHMgY3JlYXRpb24gYW5kIHRoZSBjYXBhY2l0eSBpdCBhdHRlbXB0cyB0byBtYWludGFpbi4gSXQgY2FuIHNjYWxlIGJleW9uZCB0aGlzIGNhcGFjaXR5IGlmIHlvdSBjb25maWd1cmUgYXV0b21hdGljIHNjYWxpbmcuXG4gKiAgVGhlIG51bWJlciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBncm91cCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGdyb3VwLiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBkZXNpcmVkIGNhcGFjaXR5IHdoZW4gY3JlYXRpbmcgdGhlIHN0YWNrLCB0aGUgZGVmYXVsdCBpcyB0aGUgbWluaW11bSBzaXplIG9mIHRoZSBncm91cC5cbiAqICBDbG91ZEZvcm1hdGlvbiBtYXJrcyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGFzIHN1Y2Nlc3NmdWwgKGJ5IHNldHRpbmcgaXRzIHN0YXR1cyB0byBDUkVBVEVfQ09NUExFVEUpIHdoZW4gdGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgcmVhY2hlZC4gSG93ZXZlciwgaWYgYSBtYXhpbXVtIFNwb3QgcHJpY2UgaXMgc2V0IGluIHRoZSBsYXVuY2ggdGVtcGxhdGUgb3IgbGF1bmNoIGNvbmZpZ3VyYXRpb24gdGhhdCB5b3Ugc3BlY2lmaWVkLCB0aGVuIGRlc2lyZWQgY2FwYWNpdHkgaXMgbm90IHVzZWQgYXMgYSBjcml0ZXJpYSBmb3Igc3VjY2Vzcy4gV2hldGhlciB5b3VyIHJlcXVlc3QgaXMgZnVsZmlsbGVkIGRlcGVuZHMgb24gU3BvdCBJbnN0YW5jZSBjYXBhY2l0eSBhbmQgeW91ciBtYXhpbXVtIHByaWNlLlxuICovXG5EZXNpcmVkQ2FwYWNpdHk/OiBzdHJpbmdcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdhaXRzIGJlZm9yZSBjaGVja2luZyB0aGUgaGVhbHRoIHN0YXR1cyBvZiBhbiBFQzIgaW5zdGFuY2UgdGhhdCBoYXMgY29tZSBpbnRvIHNlcnZpY2UgYW5kIG1hcmtpbmcgaXQgdW5oZWFsdGh5IGR1ZSB0byBhIGZhaWxlZCBoZWFsdGggY2hlY2suIFRoaXMgaXMgdXNlZnVsIGlmIHlvdXIgaW5zdGFuY2VzIGRvIG5vdCBpbW1lZGlhdGVseSBwYXNzIHRoZWlyIGhlYWx0aCBjaGVja3MgYWZ0ZXIgdGhleSBlbnRlciB0aGUgYGBJblNlcnZpY2VgYCBzdGF0ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbU2V0IHRoZSBoZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kIGZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2hlYWx0aC1jaGVjay1ncmFjZS1wZXJpb2QuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBEZWZhdWx0OiBgYDBgYCBzZWNvbmRzXG4gKi9cbkhlYWx0aENoZWNrR3JhY2VQZXJpb2Q/OiBudW1iZXJcbkluc3RhbmNlTGlmZWN5Y2xlUG9saWN5PzogSW5zdGFuY2VMaWZlY3ljbGVQb2xpY3lcbi8qKlxuICogVGhlIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB1bnRpbCBhIG5ldyBpbnN0YW5jZSBpcyBjb25zaWRlcmVkIHRvIGhhdmUgZmluaXNoZWQgaW5pdGlhbGl6aW5nIGFuZCByZXNvdXJjZSBjb25zdW1wdGlvbiB0byBiZWNvbWUgc3RhYmxlIGFmdGVyIGl0IGVudGVycyB0aGUgYGBJblNlcnZpY2VgYCBzdGF0ZS4gXG4gKiAgRHVyaW5nIGFuIGluc3RhbmNlIHJlZnJlc2gsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdhaXRzIGZvciB0aGUgd2FybS11cCBwZXJpb2QgYWZ0ZXIgaXQgcmVwbGFjZXMgYW4gaW5zdGFuY2UgYmVmb3JlIGl0IG1vdmVzIG9uIHRvIHJlcGxhY2luZyB0aGUgbmV4dCBpbnN0YW5jZS4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgYWxzbyB3YWl0cyBmb3IgdGhlIHdhcm0tdXAgcGVyaW9kIGJlZm9yZSBhZ2dyZWdhdGluZyB0aGUgbWV0cmljcyBmb3IgbmV3IGluc3RhbmNlcyB3aXRoIGV4aXN0aW5nIGluc3RhbmNlcyBpbiB0aGUgQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcyB0aGF0IGFyZSB1c2VkIGZvciBzY2FsaW5nLCByZXN1bHRpbmcgaW4gbW9yZSByZWxpYWJsZSB1c2FnZSBkYXRhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXQgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2FybXVwIGZvciBhbiBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctZGVmYXVsdC1pbnN0YW5jZS13YXJtdXAuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICAgVG8gbWFuYWdlIHZhcmlvdXMgd2FybS11cCBzZXR0aW5ncyBhdCB0aGUgZ3JvdXAgbGV2ZWwsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBzZXQgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2FybXVwLCAqZXZlbiBpZiBpdCBpcyBzZXQgdG8gMCBzZWNvbmRzKi4gVG8gcmVtb3ZlIGEgdmFsdWUgdGhhdCB5b3UgcHJldmlvdXNseSBzZXQsIGluY2x1ZGUgdGhlIHByb3BlcnR5IGJ1dCBzcGVjaWZ5IGBgLTFgYCBmb3IgdGhlIHZhbHVlLiBIb3dldmVyLCB3ZSBzdHJvbmdseSByZWNvbW1lbmQga2VlcGluZyB0aGUgZGVmYXVsdCBpbnN0YW5jZSB3YXJtdXAgZW5hYmxlZCBieSBzcGVjaWZ5aW5nIGEgdmFsdWUgb2YgYGAwYGAgb3Igb3RoZXIgbm9taW5hbCB2YWx1ZS5cbiAqICAgRGVmYXVsdDogTm9uZVxuICovXG5EZWZhdWx0SW5zdGFuY2VXYXJtdXA/OiBudW1iZXJcblNraXBab25hbFNoaWZ0VmFsaWRhdGlvbj86IGJvb2xlYW5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgbmV3bHkgbGF1bmNoZWQgaW5zdGFuY2VzIGFyZSBwcm90ZWN0ZWQgZnJvbSB0ZXJtaW5hdGlvbiBieSBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB3aGVuIHNjYWxpbmcgaW4uIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHByZXZlbnRpbmcgaW5zdGFuY2VzIGZyb20gdGVybWluYXRpbmcgb24gc2NhbGUgaW4sIHNlZSBbVXNlIGluc3RhbmNlIHNjYWxlLWluIHByb3RlY3Rpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctaW5zdGFuY2UtcHJvdGVjdGlvbi5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5OZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbj86IGJvb2xlYW5cbkxhdW5jaFRlbXBsYXRlPzogTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uXG5NaXhlZEluc3RhbmNlc1BvbGljeT86IE1peGVkSW5zdGFuY2VzUG9saWN5XG4vKipcbiAqIEEgbGlzdCBvZiBzdWJuZXQgSURzIGZvciBhIHZpcnR1YWwgcHJpdmF0ZSBjbG91ZCAoVlBDKSB3aGVyZSBpbnN0YW5jZXMgaW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCBjYW4gYmUgY3JlYXRlZC5cbiAqICBJZiB0aGlzIHJlc291cmNlIHNwZWNpZmllcyBwdWJsaWMgc3VibmV0cyBhbmQgaXMgYWxzbyBpbiBhIFZQQyB0aGF0IGlzIGRlZmluZWQgaW4gdGhlIHNhbWUgc3RhY2sgdGVtcGxhdGUsIHlvdSBtdXN0IHVzZSB0aGUgW0RlcGVuZHNPbiBhdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtZGVwZW5kc29uLmh0bWwpIHRvIGRlY2xhcmUgYSBkZXBlbmRlbmN5IG9uIHRoZSBbVlBDLWdhdGV3YXkgYXR0YWNobWVudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cGMtZ2F0ZXdheS1hdHRhY2htZW50Lmh0bWwpLlxuICogICBXaGVuIHlvdSB1cGRhdGUgYGBWUENab25lSWRlbnRpZmllcmBgLCB0aGlzIHJldGFpbnMgdGhlIHNhbWUgQXV0byBTY2FsaW5nIGdyb3VwIGFuZCByZXBsYWNlcyBvbGQgaW5zdGFuY2VzIHdpdGggbmV3IG9uZXMsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHN1Ym5ldHMuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGhvdyBDbG91ZEZvcm1hdGlvbiBoYW5kbGVzIHRoZXNlIHVwZGF0ZXMgYnkgdXNpbmcgYW4gW1VwZGF0ZVBvbGljeSBhdHRyaWJ1dGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1hdHRyaWJ1dGUtdXBkYXRlcG9saWN5Lmh0bWwpLlxuICogICBSZXF1aXJlZCB0byBsYXVuY2ggaW5zdGFuY2VzIGludG8gYSBub25kZWZhdWx0IFZQQy4gSWYgeW91IHNwZWNpZnkgYGBWUENab25lSWRlbnRpZmllcmBgIHdpdGggYGBBdmFpbGFiaWxpdHlab25lc2BgLCB0aGUgc3VibmV0cyB0aGF0IHlvdSBzcGVjaWZ5IGZvciB0aGlzIHByb3BlcnR5IG11c3QgcmVzaWRlIGluIHRob3NlIEF2YWlsYWJpbGl0eSBab25lcy5cbiAqL1xuVlBDWm9uZUlkZW50aWZpZXI/OiBzdHJpbmdbXVxuLyoqXG4gKiBPbmUgb3IgbW9yZSB0YWdzLiBZb3UgY2FuIHRhZyB5b3VyIEF1dG8gU2NhbGluZyBncm91cCBhbmQgcHJvcGFnYXRlIHRoZSB0YWdzIHRvIHRoZSBBbWF6b24gRUMyIGluc3RhbmNlcyBpdCBsYXVuY2hlcy4gVGFncyBhcmUgbm90IHByb3BhZ2F0ZWQgdG8gQW1hem9uIEVCUyB2b2x1bWVzLiBUbyBhZGQgdGFncyB0byBBbWF6b24gRUJTIHZvbHVtZXMsIHNwZWNpZnkgdGhlIHRhZ3MgaW4gYSBsYXVuY2ggdGVtcGxhdGUgYnV0IHVzZSBjYXV0aW9uLiBJZiB0aGUgbGF1bmNoIHRlbXBsYXRlIHNwZWNpZmllcyBhbiBpbnN0YW5jZSB0YWcgd2l0aCBhIGtleSB0aGF0IGlzIGFsc28gc3BlY2lmaWVkIGZvciB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBvdmVycmlkZXMgdGhlIHZhbHVlIG9mIHRoYXQgaW5zdGFuY2UgdGFnIHdpdGggdGhlIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtUYWcgQXV0byBTY2FsaW5nIGdyb3VwcyBhbmQgaW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLXRhZ2dpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuVGFncz86IFRhZ1Byb3BlcnR5W11cbi8qKlxuICogUmVzZXJ2ZWQuXG4gKi9cbkNvbnRleHQ/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgQ2FwYWNpdHkgUmViYWxhbmNpbmcgaXMgZW5hYmxlZC4gT3RoZXJ3aXNlLCBDYXBhY2l0eSBSZWJhbGFuY2luZyBpcyBkaXNhYmxlZC4gV2hlbiB5b3UgdHVybiBvbiBDYXBhY2l0eSBSZWJhbGFuY2luZywgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgYXR0ZW1wdHMgdG8gbGF1bmNoIGEgU3BvdCBJbnN0YW5jZSB3aGVuZXZlciBBbWF6b24gRUMyIG5vdGlmaWVzIHRoYXQgYSBTcG90IEluc3RhbmNlIGlzIGF0IGFuIGVsZXZhdGVkIHJpc2sgb2YgaW50ZXJydXB0aW9uLiBBZnRlciBsYXVuY2hpbmcgYSBuZXcgaW5zdGFuY2UsIGl0IHRoZW4gdGVybWluYXRlcyBhbiBvbGQgaW5zdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1VzZSBDYXBhY2l0eSBSZWJhbGFuY2luZyB0byBoYW5kbGUgQW1hem9uIEVDMiBTcG90IEludGVycnVwdGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctY2FwYWNpdHktcmViYWxhbmNpbmcuaHRtbCkgaW4gdGhlIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbkNhcGFjaXR5UmViYWxhbmNlPzogYm9vbGVhblxuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGluc3RhbmNlIHVzZWQgdG8gYmFzZSB0aGUgbGF1bmNoIGNvbmZpZ3VyYXRpb24gb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZSBhbiBBdXRvIFNjYWxpbmcgZ3JvdXAgdXNpbmcgYW4gRUMyIGluc3RhbmNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9jcmVhdGUtYXNnLWZyb20taW5zdGFuY2UuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBJZiB5b3Ugc3BlY2lmeSBgYExhdW5jaFRlbXBsYXRlYGAsIGBgTWl4ZWRJbnN0YW5jZXNQb2xpY3lgYCwgb3IgYGBMYXVuY2hDb25maWd1cmF0aW9uTmFtZWBgLCBkb24ndCBzcGVjaWZ5IGBgSW5zdGFuY2VJZGBgLlxuICovXG5JbnN0YW5jZUlkPzogc3RyaW5nXG5BdXRvU2NhbGluZ0dyb3VwQVJOPzogc3RyaW5nXG4vKipcbiAqIEEgbGlzdCBvZiBBdmFpbGFiaWxpdHkgWm9uZXMgd2hlcmUgaW5zdGFuY2VzIGluIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgY2FuIGJlIGNyZWF0ZWQuIFVzZWQgZm9yIGxhdW5jaGluZyBpbnRvIHRoZSBkZWZhdWx0IFZQQyBzdWJuZXQgaW4gZWFjaCBBdmFpbGFiaWxpdHkgWm9uZSB3aGVuIG5vdCB1c2luZyB0aGUgYGBWUENab25lSWRlbnRpZmllcmBgIHByb3BlcnR5LCBvciBmb3IgYXR0YWNoaW5nIGEgbmV0d29yayBpbnRlcmZhY2Ugd2hlbiBhbiBleGlzdGluZyBuZXR3b3JrIGludGVyZmFjZSBJRCBpcyBzcGVjaWZpZWQgaW4gYSBsYXVuY2ggdGVtcGxhdGUuXG4gKi9cbkF2YWlsYWJpbGl0eVpvbmVzPzogc3RyaW5nW11cbk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uMVxuQXZhaWxhYmlsaXR5Wm9uZURpc3RyaWJ1dGlvbj86IEF2YWlsYWJpbGl0eVpvbmVEaXN0cmlidXRpb25cbi8qKlxuICogRW5hYmxlcyB0aGUgbW9uaXRvcmluZyBvZiBncm91cCBtZXRyaWNzIG9mIGFuIEF1dG8gU2NhbGluZyBncm91cC4gQnkgZGVmYXVsdCwgdGhlc2UgbWV0cmljcyBhcmUgZGlzYWJsZWQuXG4gKi9cbk1ldHJpY3NDb2xsZWN0aW9uPzogTWV0cmljc0NvbGxlY3Rpb25bXVxuSW5zdGFuY2VNYWludGVuYW5jZVBvbGljeT86IEluc3RhbmNlTWFpbnRlbmFuY2VQb2xpY3lcbi8qKlxuICogVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAuXG4gKiAgIFdpdGggYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5IHRoYXQgdXNlcyBpbnN0YW5jZSB3ZWlnaHRpbmcsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIG1heSBuZWVkIHRvIGdvIGFib3ZlIGBgTWF4U2l6ZWBgIHRvIG1lZXQgeW91ciBjYXBhY2l0eSByZXF1aXJlbWVudHMuIEluIHRoaXMgZXZlbnQsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgbmV2ZXIgZ28gYWJvdmUgYGBNYXhTaXplYGAgYnkgbW9yZSB0aGFuIHlvdXIgbGFyZ2VzdCBpbnN0YW5jZSB3ZWlnaHQgKHdlaWdodHMgdGhhdCBkZWZpbmUgaG93IG1hbnkgdW5pdHMgZWFjaCBpbnN0YW5jZSBjb250cmlidXRlcyB0byB0aGUgZGVzaXJlZCBjYXBhY2l0eSBvZiB0aGUgZ3JvdXApLlxuICovXG5NYXhTaXplOiBzdHJpbmdcbi8qKlxuICogVGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgZ3JvdXAuXG4gKi9cbk1pblNpemU6IHN0cmluZ1xuLyoqXG4gKiBBIHBvbGljeSBvciBhIGxpc3Qgb2YgcG9saWNpZXMgdGhhdCBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIGluc3RhbmNlIHRvIHRlcm1pbmF0ZS4gVGhlc2UgcG9saWNpZXMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGF0IHlvdSBsaXN0IHRoZW0uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NvbmZpZ3VyZSB0ZXJtaW5hdGlvbiBwb2xpY2llcyBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctdGVybWluYXRpb24tcG9saWNpZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqICBWYWxpZCB2YWx1ZXM6IGBgRGVmYXVsdGBgIHwgYGBBbGxvY2F0aW9uU3RyYXRlZ3lgYCB8IGBgQ2xvc2VzdFRvTmV4dEluc3RhbmNlSG91cmBgIHwgYGBOZXdlc3RJbnN0YW5jZWBgIHwgYGBPbGRlc3RJbnN0YW5jZWBgIHwgYGBPbGRlc3RMYXVuY2hDb25maWd1cmF0aW9uYGAgfCBgYE9sZGVzdExhdW5jaFRlbXBsYXRlYGAgfCBgYGFybjphd3M6bGFtYmRhOnJlZ2lvbjphY2NvdW50LWlkOmZ1bmN0aW9uOm15LWZ1bmN0aW9uOm15LWFsaWFzYGBcbiAqL1xuVGVybWluYXRpb25Qb2xpY2llcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIFRoaXMgbmFtZSBtdXN0IGJlIHVuaXF1ZSBwZXIgUmVnaW9uIHBlciBhY2NvdW50LlxuICogIFRoZSBuYW1lIGNhbiBjb250YWluIGFueSBBU0NJSSBjaGFyYWN0ZXIgMzMgdG8gMTI2IGluY2x1ZGluZyBtb3N0IHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMsIGRpZ2l0cywgYW5kIHVwcGVyIGFuZCBsb3dlcmNhc2VkIGxldHRlcnMuXG4gKiAgIFlvdSBjYW5ub3QgdXNlIGEgY29sb24gKDopIGluIHRoZSBuYW1lLlxuICovXG5BdXRvU2NhbGluZ0dyb3VwTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdHJhZmZpYyBzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuVHJhZmZpY1NvdXJjZXM/OiBUcmFmZmljU291cmNlSWRlbnRpZmllcltdXG4vKipcbiAqIFRoZSB1bml0IG9mIG1lYXN1cmVtZW50IGZvciB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciBkZXNpcmVkIGNhcGFjaXR5LiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzdXBwb3J0cyBgYERlc2lyZWRDYXBhY2l0eVR5cGVgYCBmb3IgYXR0cmlidXRlLWJhc2VkIGluc3RhbmNlIHR5cGUgc2VsZWN0aW9uIG9ubHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0NyZWF0ZSBhIG1peGVkIGluc3RhbmNlcyBncm91cCB1c2luZyBhdHRyaWJ1dGUtYmFzZWQgaW5zdGFuY2UgdHlwZSBzZWxlY3Rpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2NyZWF0ZS1taXhlZC1pbnN0YW5jZXMtZ3JvdXAtYXR0cmlidXRlLWJhc2VkLWluc3RhbmNlLXR5cGUtc2VsZWN0aW9uLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgQnkgZGVmYXVsdCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc3BlY2lmaWVzIGBgdW5pdHNgYCwgd2hpY2ggdHJhbnNsYXRlcyBpbnRvIG51bWJlciBvZiBpbnN0YW5jZXMuXG4gKiAgVmFsaWQgdmFsdWVzOiBgYHVuaXRzYGAgfCBgYHZjcHVgYCB8IGBgbWVtb3J5LW1pYmBgXG4gKi9cbkRlc2lyZWRDYXBhY2l0eVR5cGU/OiBzdHJpbmdcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIHBsYWNlbWVudCBncm91cCBpbnRvIHdoaWNoIHRvIGxhdW5jaCB5b3VyIGluc3RhbmNlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUGxhY2VtZW50IGdyb3Vwc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogICBBICpjbHVzdGVyKiBwbGFjZW1lbnQgZ3JvdXAgaXMgYSBsb2dpY2FsIGdyb3VwaW5nIG9mIGluc3RhbmNlcyB3aXRoaW4gYSBzaW5nbGUgQXZhaWxhYmlsaXR5IFpvbmUuIFlvdSBjYW5ub3Qgc3BlY2lmeSBtdWx0aXBsZSBBdmFpbGFiaWxpdHkgWm9uZXMgYW5kIGEgY2x1c3RlciBwbGFjZW1lbnQgZ3JvdXAuXG4gKi9cblBsYWNlbWVudEdyb3VwPzogc3RyaW5nXG5DYXBhY2l0eVJlc2VydmF0aW9uU3BlY2lmaWNhdGlvbj86IENhcGFjaXR5UmVzZXJ2YXRpb25TcGVjaWZpY2F0aW9uXG4vKipcbiAqIEEgY29tbWEtc2VwYXJhdGVkIHZhbHVlIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBoZWFsdGggY2hlY2sgdHlwZXMuXG4gKiAgVGhlIHZhbGlkIHZhbHVlcyBhcmUgYGBFQzJgYCwgYGBFQlNgYCwgYGBFTEJgYCwgYW5kIGBgVlBDX0xBVFRJQ0VgYC4gYGBFQzJgYCBpcyB0aGUgZGVmYXVsdCBoZWFsdGggY2hlY2sgYW5kIGNhbm5vdCBiZSBkaXNhYmxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbSGVhbHRoIGNoZWNrcyBmb3IgaW5zdGFuY2VzIGluIGFuIEF1dG8gU2NhbGluZyBncm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1oZWFsdGgtY2hlY2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgT25seSBzcGVjaWZ5IGBgRUMyYGAgaWYgeW91IG11c3QgY2xlYXIgYSB2YWx1ZSB0aGF0IHdhcyBwcmV2aW91c2x5IHNldC5cbiAqL1xuSGVhbHRoQ2hlY2tUeXBlPzogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IGFuIGluc3RhbmNlIGNhbiBiZSBpbiBzZXJ2aWNlLiBUaGUgZGVmYXVsdCBpcyBudWxsLiBJZiBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIGVpdGhlciAwIG9yIGEgbnVtYmVyIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiA4Niw0MDAgc2Vjb25kcyAoMSBkYXkpLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSZXBsYWNlIEF1dG8gU2NhbGluZyBpbnN0YW5jZXMgYmFzZWQgb24gbWF4aW11bSBpbnN0YW5jZSBsaWZldGltZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXNnLW1heC1pbnN0YW5jZS1saWZldGltZS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5NYXhJbnN0YW5jZUxpZmV0aW1lPzogbnVtYmVyXG59XG4vKipcbiAqIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25gYCBzcGVjaWZpZXMgYSBsaWZlY3ljbGUgaG9vayBmb3IgdGhlIGBgTGlmZWN5Y2xlSG9va1NwZWNpZmljYXRpb25MaXN0YGAgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZS4gQSBsaWZlY3ljbGUgaG9vayBzcGVjaWZpZXMgYWN0aW9ucyB0byBwZXJmb3JtIHdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgb3IgdGVybWluYXRlcyBpbnN0YW5jZXMuIFxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxpZmVjeWNsZSBob29rc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFlvdSBjYW4gZmluZCBhIHNhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0IGluIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hcy1saWZlY3ljbGVob29rLmh0bWwjYXdzLXJlc291cmNlLWFzLWxpZmVjeWNsZWhvb2stLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkxpZmVjeWNsZUhvb2tgYCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVIb29rU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBsaWZlY3ljbGUgaG9vay5cbiAqL1xuTGlmZWN5Y2xlSG9va05hbWU6IHN0cmluZ1xuLyoqXG4gKiBUaGUgbGlmZWN5Y2xlIHRyYW5zaXRpb24uIEZvciBBdXRvIFNjYWxpbmcgZ3JvdXBzLCB0aGVyZSBhcmUgdHdvIG1ham9yIGxpZmVjeWNsZSB0cmFuc2l0aW9ucy5cbiAqICAgKyAgVG8gY3JlYXRlIGEgbGlmZWN5Y2xlIGhvb2sgZm9yIHNjYWxlLW91dCBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfTEFVTkNISU5HYGAuXG4gKiAgICsgIFRvIGNyZWF0ZSBhIGxpZmVjeWNsZSBob29rIGZvciBzY2FsZS1pbiBldmVudHMsIHNwZWNpZnkgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRJTkdgYC5cbiAqL1xuTGlmZWN5Y2xlVHJhbnNpdGlvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBtYXhpbXVtIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgY2FuIGVsYXBzZSBiZWZvcmUgdGhlIGxpZmVjeWNsZSBob29rIHRpbWVzIG91dC4gVGhlIHJhbmdlIGlzIGZyb20gYGAzMGBgIHRvIGBgNzIwMGBgIHNlY29uZHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgMzYwMGBgIHNlY29uZHMgKDEgaG91cikuXG4gKi9cbkhlYXJ0YmVhdFRpbWVvdXQ/OiBudW1iZXJcbi8qKlxuICogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgYW55IHRpbWUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBub3RpZmljYXRpb24gdGFyZ2V0LlxuICovXG5Ob3RpZmljYXRpb25NZXRhZGF0YT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgYWN0aW9uIHRoZSBBdXRvIFNjYWxpbmcgZ3JvdXAgdGFrZXMgd2hlbiB0aGUgbGlmZWN5Y2xlIGhvb2sgdGltZW91dCBlbGFwc2VzIG9yIGlmIGFuIHVuZXhwZWN0ZWQgZmFpbHVyZSBvY2N1cnMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgQUJBTkRPTmBgLlxuICogIFZhbGlkIHZhbHVlczogYGBDT05USU5VRWBgIHwgYGBBQkFORE9OYGBcbiAqL1xuRGVmYXVsdFJlc3VsdD86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIG5vdGlmaWNhdGlvbiB0YXJnZXQgdGhhdCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZW5kcyBub3RpZmljYXRpb25zIHRvIHdoZW4gYW4gaW5zdGFuY2UgaXMgaW4gYSB3YWl0IHN0YXRlIGZvciB0aGUgbGlmZWN5Y2xlIGhvb2suIFlvdSBjYW4gc3BlY2lmeSBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cbk5vdGlmaWNhdGlvblRhcmdldEFSTj86IHN0cmluZ1xuLyoqXG4gKiBUaGUgQVJOIG9mIHRoZSBJQU0gcm9sZSB0aGF0IGFsbG93cyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIHB1Ymxpc2ggdG8gdGhlIHNwZWNpZmllZCBub3RpZmljYXRpb24gdGFyZ2V0LiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY3JlYXRpbmcgdGhpcyByb2xlLCBzZWUgW1ByZXBhcmUgdG8gYWRkIGEgbGlmZWN5Y2xlIGhvb2sgdG8geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL3ByZXBhcmUtZm9yLWxpZmVjeWNsZS1ub3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgVmFsaWQgb25seSBpZiB0aGUgbm90aWZpY2F0aW9uIHRhcmdldCBpcyBhbiBBbWF6b24gU05TIHRvcGljIG9yIGFuIEFtYXpvbiBTUVMgcXVldWUuXG4gKi9cblJvbGVBUk4/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIEF2YWlsYWJpbGl0eSBab25lIGltcGFpcm1lbnQgcG9saWN5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF2YWlsYWJpbGl0eVpvbmVJbXBhaXJtZW50UG9saWN5IHtcbi8qKlxuICogSWYgYGB0cnVlYGAsIGVuYWJsZSB6b25hbCBzaGlmdCBmb3IgeW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAuXG4gKi9cblpvbmFsU2hpZnRFbmFibGVkOiBib29sZWFuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaGVhbHRoIGNoZWNrIGJlaGF2aW9yIGZvciB0aGUgaW1wYWlyZWQgQXZhaWxhYmlsaXR5IFpvbmUgaW4gYW4gYWN0aXZlIHpvbmFsIHNoaWZ0LiBJZiB5b3Ugc2VsZWN0IGBgUmVwbGFjZSB1bmhlYWx0aHlgYCwgaW5zdGFuY2VzIHRoYXQgYXBwZWFyIHVuaGVhbHRoeSB3aWxsIGJlIHJlcGxhY2VkIGluIGFsbCBBdmFpbGFiaWxpdHkgWm9uZXMuIElmIHlvdSBzZWxlY3QgYGBJZ25vcmUgdW5oZWFsdGh5YGAsIGluc3RhbmNlcyB3aWxsIG5vdCBiZSByZXBsYWNlZCBpbiB0aGUgQXZhaWxhYmlsaXR5IFpvbmUgd2l0aCB0aGUgYWN0aXZlIHpvbmFsIHNoaWZ0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBdXRvIFNjYWxpbmcgZ3JvdXAgem9uYWwgc2hpZnRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctem9uYWwtc2hpZnQuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuSW1wYWlyZWRab25lSGVhbHRoQ2hlY2tCZWhhdmlvcjogKFwiSWdub3JlVW5oZWFsdGh5XCIgfCBcIlJlcGxhY2VVbmhlYWx0aHlcIilcbn1cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgYW4gQW1hem9uIFNOUyBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGBgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbnNgYCBwcm9wZXJ0eSBvZiB0aGUgW0FXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwpIHJlc291cmNlLlxuICogIEZvciBhbiBleGFtcGxlIHRlbXBsYXRlIHNuaXBwZXQsIHNlZSBbQ29uZmlndXJlIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHJlc291cmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvcXVpY2tyZWYtZWMyLWF1dG8tc2NhbGluZy5odG1sKS5cbiAqICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHZXQgQW1hem9uIFNOUyBub3RpZmljYXRpb25zIHdoZW4geW91ciBBdXRvIFNjYWxpbmcgZ3JvdXAgc2NhbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9BU0dldHRpbmdOb3RpZmljYXRpb25zLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFNOUyB0b3BpYy5cbiAqL1xuVG9waWNBUk46IChzdHJpbmcgfCBzdHJpbmdbXSlcbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgc2VuZCBhIG5vdGlmaWNhdGlvbi4gRXZlbnQgdHlwZXMgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFxuICogICpBbGxvd2VkIHZhbHVlcyo6XG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX0xBVU5DSF9FUlJPUmBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9URVJNSU5BVEVfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6VEVTVF9OT1RJRklDQVRJT05gYFxuICovXG5Ob3RpZmljYXRpb25UeXBlcz86IHN0cmluZ1tdXG59XG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlTGlmZWN5Y2xlUG9saWN5IHtcblJldGVudGlvblRyaWdnZXJzPzogUmV0ZW50aW9uVHJpZ2dlcnNcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmV0ZW50aW9uVHJpZ2dlcnMge1xuVGVybWluYXRlSG9va0FiYW5kb24/OiBzdHJpbmdcbn1cbi8qKlxuICogSW5mb3JtYXRpb24gdXNlZCB0byBzcGVjaWZ5IHRoZSBsYXVuY2ggdGVtcGxhdGUgYW5kIHZlcnNpb24gdG8gdXNlIHRvIGxhdW5jaCBpbnN0YW5jZXMuIFlvdSBjYW4gYWx0ZXJuYXRpdmVseSBhc3NvY2lhdGUgYSBsYXVuY2ggdGVtcGxhdGUgdG8gdGhlIEF1dG8gU2NhbGluZyBncm91cCBieSBzcGVjaWZ5aW5nIGEgYGBNaXhlZEluc3RhbmNlc1BvbGljeWBgLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGluZyBsYXVuY2ggdGVtcGxhdGVzLCBzZWUgW0NyZWF0ZSBhIGxhdW5jaCB0ZW1wbGF0ZSBmb3IgYW4gQXV0byBTY2FsaW5nIGdyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9jcmVhdGUtbGF1bmNoLXRlbXBsYXRlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKiAgSWYgeW91IG9taXQgdGhpcyBwcm9wZXJ0eSwgeW91IG11c3Qgc3BlY2lmeSBgYE1peGVkSW5zdGFuY2VzUG9saWN5YGAsIGBgTGF1bmNoQ29uZmlndXJhdGlvbk5hbWVgYCwgb3IgYGBJbnN0YW5jZUlkYGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgU3BlY2lmeWluZyBgYCRMYXRlc3RgYCBvciBgYCREZWZhdWx0YGAgZm9yIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIG51bWJlciBpcyBub3Qgc3VwcG9ydGVkLiBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYGBMYXRlc3RWZXJzaW9uTnVtYmVyYGAgb3IgYGBEZWZhdWx0VmVyc2lvbk51bWJlcmBgIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZuOjpHZXRBdHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtZ2V0YXR0Lmh0bWwpLlxuICogICBGb3IgYW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24sIHNlZSB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cblZlcnNpb246IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIEFuIGVtYmVkZGVkIG9iamVjdCB0aGF0IHNwZWNpZmllcyBhIG1peGVkIGluc3RhbmNlcyBwb2xpY3kuXG4gKiAgVGhlIHBvbGljeSBpbmNsdWRlcyBwcm9wZXJ0aWVzIHRoYXQgbm90IG9ubHkgZGVmaW5lIHRoZSBkaXN0cmlidXRpb24gb2YgT24tRGVtYW5kIEluc3RhbmNlcyBhbmQgU3BvdCBJbnN0YW5jZXMsIHRoZSBtYXhpbXVtIHByaWNlIHRvIHBheSBmb3IgU3BvdCBJbnN0YW5jZXMgKG9wdGlvbmFsKSwgYW5kIGhvdyB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGFsbG9jYXRlcyBpbnN0YW5jZSB0eXBlcyB0byBmdWxmaWxsIE9uLURlbWFuZCBhbmQgU3BvdCBjYXBhY2l0aWVzLCBidXQgYWxzbyB0aGUgcHJvcGVydGllcyB0aGF0IHNwZWNpZnkgdGhlIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb27igJR0aGUgbGF1bmNoIHRlbXBsYXRlIGFuZCBpbnN0YW5jZSB0eXBlcy4gVGhlIHBvbGljeSBjYW4gYWxzbyBpbmNsdWRlIGEgd2VpZ2h0IGZvciBlYWNoIGluc3RhbmNlIHR5cGUgYW5kIGRpZmZlcmVudCBsYXVuY2ggdGVtcGxhdGVzIGZvciBpbmRpdmlkdWFsIGluc3RhbmNlIHR5cGVzLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0F1dG8gU2NhbGluZyBncm91cHMgd2l0aCBtdWx0aXBsZSBpbnN0YW5jZSB0eXBlcyBhbmQgcHVyY2hhc2Ugb3B0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvZWMyLWF1dG8tc2NhbGluZy1taXhlZC1pbnN0YW5jZXMtZ3JvdXBzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWl4ZWRJbnN0YW5jZXNQb2xpY3kge1xuSW5zdGFuY2VzRGlzdHJpYnV0aW9uPzogSW5zdGFuY2VzRGlzdHJpYnV0aW9uXG5MYXVuY2hUZW1wbGF0ZTogTGF1bmNoVGVtcGxhdGVcbn1cbi8qKlxuICogVGhlIGluc3RhbmNlcyBkaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VzRGlzdHJpYnV0aW9uIHtcbi8qKlxuICogVGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gYXBwbHkgdG8geW91ciBPbi1EZW1hbmQgSW5zdGFuY2VzIHdoZW4gdGhleSBhcmUgbGF1bmNoZWQuIFBvc3NpYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIHRoYXQgeW91IHNwZWNpZnkuXG4gKiAgVGhlIGZvbGxvd2luZyBsaXN0cyB0aGUgdmFsaWQgdmFsdWVzOlxuICogICArIGxvd2VzdC1wcmljZSBVc2VzIHByaWNlIHRvIGRldGVybWluZSB3aGljaCBpbnN0YW5jZSB0eXBlcyBhcmUgdGhlIGhpZ2hlc3QgcHJpb3JpdHksIGxhdW5jaGluZyB0aGUgbG93ZXN0IHByaWNlZCBpbnN0YW5jZSB0eXBlcyB3aXRoaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUgZmlyc3QuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgdGhhdCBzcGVjaWZ5IEluc3RhbmNlUmVxdWlyZW1lbnRzLiArIHByaW9yaXRpemVkIFlvdSBzZXQgdGhlIG9yZGVyIG9mIGluc3RhbmNlIHR5cGVzIGZvciB0aGUgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHByaW9yaXR5IChmcm9tIGZpcnN0IHRvIGxhc3QgaW4gdGhlIGxpc3QpLiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyB5b3VyIGhpZ2hlc3QgcHJpb3JpdHkgaW5zdGFuY2UgdHlwZXMgZmlyc3QuIElmIGFsbCB5b3VyIE9uLURlbWFuZCBjYXBhY2l0eSBjYW5ub3QgYmUgZnVsZmlsbGVkIHVzaW5nIHlvdXIgaGlnaGVzdCBwcmlvcml0eSBpbnN0YW5jZSB0eXBlLCB0aGVuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxhdW5jaGVzIHRoZSByZW1haW5pbmcgY2FwYWNpdHkgdXNpbmcgdGhlIHNlY29uZCBwcmlvcml0eSBpbnN0YW5jZSB0eXBlLCBhbmQgc28gb24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgdGhhdCBkb24ndCBzcGVjaWZ5IEluc3RhbmNlUmVxdWlyZW1lbnRzIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3IgZ3JvdXBzIHRoYXQgZG8uXG4gKi9cbk9uRGVtYW5kQWxsb2NhdGlvblN0cmF0ZWd5Pzogc3RyaW5nXG4vKipcbiAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwJ3MgY2FwYWNpdHkgdGhhdCBtdXN0IGJlIGZ1bGZpbGxlZCBieSBPbi1EZW1hbmQgSW5zdGFuY2VzLiBUaGlzIGJhc2UgcG9ydGlvbiBpcyBsYXVuY2hlZCBmaXJzdCBhcyB5b3VyIGdyb3VwIHNjYWxlcy5cbiAqICBUaGlzIG51bWJlciBoYXMgdGhlIHNhbWUgdW5pdCBvZiBtZWFzdXJlbWVudCBhcyB0aGUgZ3JvdXAncyBkZXNpcmVkIGNhcGFjaXR5LiBJZiB5b3UgY2hhbmdlIHRoZSBkZWZhdWx0IHVuaXQgb2YgbWVhc3VyZW1lbnQgKG51bWJlciBvZiBpbnN0YW5jZXMpIGJ5IHNwZWNpZnlpbmcgd2VpZ2h0ZWQgY2FwYWNpdHkgdmFsdWVzIGluIHlvdXIgbGF1bmNoIHRlbXBsYXRlIG92ZXJyaWRlcyBsaXN0LCBvciBieSBjaGFuZ2luZyB0aGUgZGVmYXVsdCBkZXNpcmVkIGNhcGFjaXR5IHR5cGUgc2V0dGluZyBvZiB0aGUgZ3JvdXAsIHlvdSBtdXN0IHNwZWNpZnkgdGhpcyBudW1iZXIgdXNpbmcgdGhlIHNhbWUgdW5pdCBvZiBtZWFzdXJlbWVudC5cbiAqICBEZWZhdWx0OiAwXG4gKiAgIEFuIHVwZGF0ZSB0byB0aGlzIHNldHRpbmcgbWVhbnMgYSBncmFkdWFsIHJlcGxhY2VtZW50IG9mIGluc3RhbmNlcyB0byBhZGp1c3QgdGhlIGN1cnJlbnQgT24tRGVtYW5kIEluc3RhbmNlIGxldmVscy4gV2hlbiByZXBsYWNpbmcgaW5zdGFuY2VzLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyBuZXcgaW5zdGFuY2VzIGJlZm9yZSB0ZXJtaW5hdGluZyB0aGUgcHJldmlvdXMgb25lcy5cbiAqL1xuT25EZW1hbmRCYXNlQ2FwYWNpdHk/OiBudW1iZXJcbi8qKlxuICogQ29udHJvbHMgdGhlIHBlcmNlbnRhZ2VzIG9mIE9uLURlbWFuZCBJbnN0YW5jZXMgYW5kIFNwb3QgSW5zdGFuY2VzIGZvciB5b3VyIGFkZGl0aW9uYWwgY2FwYWNpdHkgYmV5b25kIGBgT25EZW1hbmRCYXNlQ2FwYWNpdHlgYC4gRXhwcmVzc2VkIGFzIGEgbnVtYmVyIChmb3IgZXhhbXBsZSwgMjAgc3BlY2lmaWVzIDIwJSBPbi1EZW1hbmQgSW5zdGFuY2VzLCA4MCUgU3BvdCBJbnN0YW5jZXMpLiBJZiBzZXQgdG8gMTAwLCBvbmx5IE9uLURlbWFuZCBJbnN0YW5jZXMgYXJlIHVzZWQuXG4gKiAgRGVmYXVsdDogMTAwXG4gKiAgIEFuIHVwZGF0ZSB0byB0aGlzIHNldHRpbmcgbWVhbnMgYSBncmFkdWFsIHJlcGxhY2VtZW50IG9mIGluc3RhbmNlcyB0byBhZGp1c3QgdGhlIGN1cnJlbnQgT24tRGVtYW5kIGFuZCBTcG90IEluc3RhbmNlIGxldmVscyBmb3IgeW91ciBhZGRpdGlvbmFsIGNhcGFjaXR5IGhpZ2hlciB0aGFuIHRoZSBiYXNlIGNhcGFjaXR5LiBXaGVuIHJlcGxhY2luZyBpbnN0YW5jZXMsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGxhdW5jaGVzIG5ldyBpbnN0YW5jZXMgYmVmb3JlIHRlcm1pbmF0aW5nIHRoZSBwcmV2aW91cyBvbmVzLlxuICovXG5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eT86IG51bWJlclxuLyoqXG4gKiBUaGUgbnVtYmVyIG9mIFNwb3QgSW5zdGFuY2UgcG9vbHMgYWNyb3NzIHdoaWNoIHRvIGFsbG9jYXRlIHlvdXIgU3BvdCBJbnN0YW5jZXMuIFRoZSBTcG90IHBvb2xzIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlIGRpZmZlcmVudCBpbnN0YW5jZSB0eXBlcyBpbiB0aGUgb3ZlcnJpZGVzLiBWYWxpZCBvbmx5IHdoZW4gdGhlIGBgU3BvdEFsbG9jYXRpb25TdHJhdGVneWBgIGlzIGBgbG93ZXN0LXByaWNlYGAuIFZhbHVlIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDHigJMyMC5cbiAqICBEZWZhdWx0OiAyXG4gKi9cblNwb3RJbnN0YW5jZVBvb2xzPzogbnVtYmVyXG4vKipcbiAqIFRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IHRvIGFwcGx5IHRvIHlvdXIgU3BvdCBJbnN0YW5jZXMgd2hlbiB0aGV5IGFyZSBsYXVuY2hlZC4gUG9zc2libGUgaW5zdGFuY2UgdHlwZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIGxhdW5jaCB0ZW1wbGF0ZSBvdmVycmlkZXMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAqICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSB2YWxpZCB2YWx1ZXM6XG4gKiAgICsgY2FwYWNpdHktb3B0aW1pemVkIFJlcXVlc3RzIFNwb3QgSW5zdGFuY2VzIHVzaW5nIHBvb2xzIHRoYXQgYXJlIG9wdGltYWxseSBjaG9zZW4gYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBTcG90IGNhcGFjaXR5LiBUaGlzIHN0cmF0ZWd5IGhhcyB0aGUgbG93ZXN0IHJpc2sgb2YgaW50ZXJydXB0aW9uLiBUbyBnaXZlIGNlcnRhaW4gaW5zdGFuY2UgdHlwZXMgYSBoaWdoZXIgY2hhbmNlIG9mIGxhdW5jaGluZyBmaXJzdCwgdXNlIGNhcGFjaXR5LW9wdGltaXplZC1wcmlvcml0aXplZC4gKyBjYXBhY2l0eS1vcHRpbWl6ZWQtcHJpb3JpdGl6ZWQgWW91IHNldCB0aGUgb3JkZXIgb2YgaW5zdGFuY2UgdHlwZXMgZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUgb3ZlcnJpZGVzIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgcHJpb3JpdHkgKGZyb20gZmlyc3QgdG8gbGFzdCBpbiB0aGUgbGlzdCkuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGhvbm9ycyB0aGUgaW5zdGFuY2UgdHlwZSBwcmlvcml0aWVzIG9uIGEgYmVzdCBlZmZvcnQgYmFzaXMgYnV0IG9wdGltaXplcyBmb3IgY2FwYWNpdHkgZmlyc3QuIE5vdGUgdGhhdCBpZiB0aGUgT24tRGVtYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgc2V0IHRvIHByaW9yaXRpemVkLCB0aGUgc2FtZSBwcmlvcml0eSBpcyBhcHBsaWVkIHdoZW4gZnVsZmlsbGluZyBPbi1EZW1hbmQgY2FwYWNpdHkuIFRoaXMgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIEF1dG8gU2NhbGluZyBncm91cHMgdGhhdCBzcGVjaWZ5IEluc3RhbmNlUmVxdWlyZW1lbnRzLiArIGxvd2VzdC1wcmljZSBSZXF1ZXN0cyBTcG90IEluc3RhbmNlcyB1c2luZyB0aGUgbG93ZXN0IHByaWNlZCBwb29scyB3aXRoaW4gYW4gQXZhaWxhYmlsaXR5IFpvbmUsIGFjcm9zcyB0aGUgbnVtYmVyIG9mIFNwb3QgcG9vbHMgdGhhdCB5b3Ugc3BlY2lmeSBmb3IgdGhlIFNwb3RJbnN0YW5jZVBvb2xzIHByb3BlcnR5LiBUbyBlbnN1cmUgdGhhdCB5b3VyIGRlc2lyZWQgY2FwYWNpdHkgaXMgbWV0LCB5b3UgbWlnaHQgcmVjZWl2ZSBTcG90IEluc3RhbmNlcyBmcm9tIHNldmVyYWwgcG9vbHMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCBpdCBtaWdodCBsZWFkIHRvIGhpZ2ggaW50ZXJydXB0aW9uIHJhdGVzIGJlY2F1c2UgdGhpcyBzdHJhdGVneSBvbmx5IGNvbnNpZGVycyBpbnN0YW5jZSBwcmljZSBhbmQgbm90IGF2YWlsYWJsZSBjYXBhY2l0eS4gKyBwcmljZS1jYXBhY2l0eS1vcHRpbWl6ZWQgKHJlY29tbWVuZGVkKSBUaGUgcHJpY2UgYW5kIGNhcGFjaXR5IG9wdGltaXplZCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGxvb2tzIGF0IGJvdGggcHJpY2UgYW5kIGNhcGFjaXR5IHRvIHNlbGVjdCB0aGUgU3BvdCBJbnN0YW5jZSBwb29scyB0aGF0IGFyZSB0aGUgbGVhc3QgbGlrZWx5IHRvIGJlIGludGVycnVwdGVkIGFuZCBoYXZlIHRoZSBsb3dlc3QgcG9zc2libGUgcHJpY2UuXG4gKi9cblNwb3RBbGxvY2F0aW9uU3RyYXRlZ3k/OiBzdHJpbmdcbi8qKlxuICogVGhlIG1heGltdW0gcHJpY2UgcGVyIHVuaXQgaG91ciB0aGF0IHlvdSBhcmUgd2lsbGluZyB0byBwYXkgZm9yIGEgU3BvdCBJbnN0YW5jZS4gSWYgeW91ciBtYXhpbXVtIHByaWNlIGlzIGxvd2VyIHRoYW4gdGhlIFNwb3QgcHJpY2UgZm9yIHRoZSBpbnN0YW5jZSB0eXBlcyB0aGF0IHlvdSBzZWxlY3RlZCwgeW91ciBTcG90IEluc3RhbmNlcyBhcmUgbm90IGxhdW5jaGVkLiBXZSBkbyBub3QgcmVjb21tZW5kIHNwZWNpZnlpbmcgYSBtYXhpbXVtIHByaWNlIGJlY2F1c2UgaXQgY2FuIGxlYWQgdG8gaW5jcmVhc2VkIGludGVycnVwdGlvbnMuIFdoZW4gU3BvdCBJbnN0YW5jZXMgbGF1bmNoLCB5b3UgcGF5IHRoZSBjdXJyZW50IFNwb3QgcHJpY2UuIFRvIHJlbW92ZSBhIG1heGltdW0gcHJpY2UgdGhhdCB5b3UgcHJldmlvdXNseSBzZXQsIGluY2x1ZGUgdGhlIHByb3BlcnR5IGJ1dCBzcGVjaWZ5IGFuIGVtcHR5IHN0cmluZyAoXCJcIikgZm9yIHRoZSB2YWx1ZS5cbiAqICAgSWYgeW91IHNwZWNpZnkgYSBtYXhpbXVtIHByaWNlLCB5b3VyIGluc3RhbmNlcyB3aWxsIGJlIGludGVycnVwdGVkIG1vcmUgZnJlcXVlbnRseSB0aGFuIGlmIHlvdSBkbyBub3Qgc3BlY2lmeSBvbmUuXG4gKiAgIFZhbGlkIFJhbmdlOiBNaW5pbXVtIHZhbHVlIG9mIDAuMDAxXG4gKi9cblNwb3RNYXhQcmljZT86IHN0cmluZ1xufVxuLyoqXG4gKiBPbmUgb3IgbW9yZSBsYXVuY2ggdGVtcGxhdGVzIGFuZCB0aGUgaW5zdGFuY2UgdHlwZXMgKG92ZXJyaWRlcykgdGhhdCBhcmUgdXNlZCB0byBsYXVuY2ggRUMyIGluc3RhbmNlcyB0byBmdWxmaWxsIE9uLURlbWFuZCBhbmQgU3BvdCBjYXBhY2l0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlIHtcbkxhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjogTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uMVxuLyoqXG4gKiBBbnkgcHJvcGVydGllcyB0aGF0IHlvdSBzcGVjaWZ5IG92ZXJyaWRlIHRoZSBzYW1lIHByb3BlcnRpZXMgaW4gdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqL1xuT3ZlcnJpZGVzPzogTGF1bmNoVGVtcGxhdGVPdmVycmlkZXNbXVxufVxuLyoqXG4gKiBUaGUgbGF1bmNoIHRlbXBsYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjEge1xuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVOYW1lYGAgb3IgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlTmFtZT86IHN0cmluZ1xuLyoqXG4gKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBTcGVjaWZ5aW5nIGBgJExhdGVzdGBgIG9yIGBgJERlZmF1bHRgYCBmb3IgdGhlIHRlbXBsYXRlIHZlcnNpb24gbnVtYmVyIGlzIG5vdCBzdXBwb3J0ZWQuIEhvd2V2ZXIsIHlvdSBjYW4gc3BlY2lmeSBgYExhdGVzdFZlcnNpb25OdW1iZXJgYCBvciBgYERlZmF1bHRWZXJzaW9uTnVtYmVyYGAgdXNpbmcgdGhlIGBgRm46OkdldEF0dGBgIGludHJpbnNpYyBmdW5jdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbRm46OkdldEF0dF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvaW50cmluc2ljLWZ1bmN0aW9uLXJlZmVyZW5jZS1nZXRhdHQuaHRtbCkuXG4gKiAgIEZvciBhbiBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBmdW5jdGlvbiwgc2VlIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwjYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZS5cbiAqL1xuVmVyc2lvbjogc3RyaW5nXG4vKipcbiAqIFRoZSBJRCBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogIFlvdSBtdXN0IHNwZWNpZnkgdGhlIGBgTGF1bmNoVGVtcGxhdGVJRGBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgLCBidXQgbm90IGJvdGguXG4gKi9cbkxhdW5jaFRlbXBsYXRlSWQ/OiBzdHJpbmdcbn1cbi8qKlxuICogVXNlIHRoaXMgc3RydWN0dXJlIHRvIGxldCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBkbyB0aGUgZm9sbG93aW5nIHdoZW4gdGhlIEF1dG8gU2NhbGluZyBncm91cCBoYXMgYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5OlxuICogICArICBPdmVycmlkZSB0aGUgaW5zdGFuY2UgdHlwZSB0aGF0IGlzIHNwZWNpZmllZCBpbiB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICogICArICBVc2UgbXVsdGlwbGUgaW5zdGFuY2UgdHlwZXMuXG4gKiAgIFxuICogIFNwZWNpZnkgdGhlIGluc3RhbmNlIHR5cGVzIHRoYXQgeW91IHdhbnQsIG9yIGRlZmluZSB5b3VyIGluc3RhbmNlIHJlcXVpcmVtZW50cyBpbnN0ZWFkIGFuZCBsZXQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgcHJvdmlzaW9uIHRoZSBhdmFpbGFibGUgaW5zdGFuY2UgdHlwZXMgdGhhdCBtZWV0IHlvdXIgcmVxdWlyZW1lbnRzLiBUaGlzIGNhbiBwcm92aWRlIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpdGggYSBsYXJnZXIgc2VsZWN0aW9uIG9mIGluc3RhbmNlIHR5cGVzIHRvIGNob29zZSBmcm9tIHdoZW4gZnVsZmlsbGluZyBTcG90IGFuZCBPbi1EZW1hbmQgY2FwYWNpdGllcy4gWW91IGNhbiB2aWV3IHdoaWNoIGluc3RhbmNlIHR5cGVzIGFyZSBtYXRjaGVkIGJlZm9yZSB5b3UgYXBwbHkgdGhlIGluc3RhbmNlIHJlcXVpcmVtZW50cyB0byB5b3VyIEF1dG8gU2NhbGluZyBncm91cC5cbiAqICBBZnRlciB5b3UgZGVmaW5lIHlvdXIgaW5zdGFuY2UgcmVxdWlyZW1lbnRzLCB5b3UgZG9uJ3QgaGF2ZSB0byBrZWVwIHVwZGF0aW5nIHRoZXNlIHNldHRpbmdzIHRvIGdldCBuZXcgRUMyIGluc3RhbmNlIHR5cGVzIGF1dG9tYXRpY2FsbHkuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgdGhlIGluc3RhbmNlIHJlcXVpcmVtZW50cyBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbmV3IEVDMiBpbnN0YW5jZSB0eXBlIGNhbiBiZSB1c2VkLlxuICogIGBgTGF1bmNoVGVtcGxhdGVPdmVycmlkZXNgYCBpcyBhIHByb3BlcnR5IG9mIHRoZSBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cCBMYXVuY2hUZW1wbGF0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1sYXVuY2h0ZW1wbGF0ZS5odG1sKSBwcm9wZXJ0eSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlT3ZlcnJpZGVzIHtcbkxhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbj86IExhdW5jaFRlbXBsYXRlU3BlY2lmaWNhdGlvbjJcbi8qKlxuICogSWYgeW91IHByb3ZpZGUgYSBsaXN0IG9mIGluc3RhbmNlIHR5cGVzIHRvIHVzZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgcHJvdmlkZWQgYnkgZWFjaCBpbnN0YW5jZSB0eXBlIGluIHRlcm1zIG9mIHZpcnR1YWwgQ1BVcywgbWVtb3J5LCBzdG9yYWdlLCB0aHJvdWdocHV0LCBvciBvdGhlciByZWxhdGl2ZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpYy4gV2hlbiBhIFNwb3Qgb3IgT24tRGVtYW5kIEluc3RhbmNlIGlzIGxhdW5jaGVkLCB0aGUgY2FwYWNpdHkgdW5pdHMgY291bnQgdG93YXJkIHRoZSBkZXNpcmVkIGNhcGFjaXR5LiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBsYXVuY2hlcyBpbnN0YW5jZXMgdW50aWwgdGhlIGRlc2lyZWQgY2FwYWNpdHkgaXMgdG90YWxseSBmdWxmaWxsZWQsIGV2ZW4gaWYgdGhpcyByZXN1bHRzIGluIGFuIG92ZXJhZ2UuIEZvciBleGFtcGxlLCBpZiB0aGVyZSBhcmUgdHdvIHVuaXRzIHJlbWFpbmluZyB0byBmdWxmaWxsIGNhcGFjaXR5LCBhbmQgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgY2FuIG9ubHkgbGF1bmNoIGFuIGluc3RhbmNlIHdpdGggYSBgYFdlaWdodGVkQ2FwYWNpdHlgYCBvZiBmaXZlIHVuaXRzLCB0aGUgaW5zdGFuY2UgaXMgbGF1bmNoZWQsIGFuZCB0aGUgZGVzaXJlZCBjYXBhY2l0eSBpcyBleGNlZWRlZCBieSB0aHJlZSB1bml0cy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQ29uZmlndXJlIGluc3RhbmNlIHdlaWdodGluZyBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctbWl4ZWQtaW5zdGFuY2VzLWdyb3Vwcy1pbnN0YW5jZS13ZWlnaHRpbmcuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi4gVmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMS05OTkuIFxuICogIElmIHlvdSBzcGVjaWZ5IGEgdmFsdWUgZm9yIGBgV2VpZ2h0ZWRDYXBhY2l0eWBgIGZvciBvbmUgaW5zdGFuY2UgdHlwZSwgeW91IG11c3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBgYFdlaWdodGVkQ2FwYWNpdHlgYCBmb3IgYWxsIG9mIHRoZW0uXG4gKiAgIEV2ZXJ5IEF1dG8gU2NhbGluZyBncm91cCBoYXMgdGhyZWUgc2l6ZSBwYXJhbWV0ZXJzIChgYERlc2lyZWRDYXBhY2l0eWBgLCBgYE1heFNpemVgYCwgYW5kIGBgTWluU2l6ZWBgKS4gVXN1YWxseSwgeW91IHNldCB0aGVzZSBzaXplcyBiYXNlZCBvbiBhIHNwZWNpZmljIG51bWJlciBvZiBpbnN0YW5jZXMuIEhvd2V2ZXIsIGlmIHlvdSBjb25maWd1cmUgYSBtaXhlZCBpbnN0YW5jZXMgcG9saWN5IHRoYXQgZGVmaW5lcyB3ZWlnaHRzIGZvciB0aGUgaW5zdGFuY2UgdHlwZXMsIHlvdSBtdXN0IHNwZWNpZnkgdGhlc2Ugc2l6ZXMgd2l0aCB0aGUgc2FtZSB1bml0cyB0aGF0IHlvdSB1c2UgZm9yIHdlaWdodGluZyBpbnN0YW5jZXMuXG4gKi9cbldlaWdodGVkQ2FwYWNpdHk/OiBzdHJpbmdcbkltYWdlSWQ/OiBzdHJpbmdcbkluc3RhbmNlUmVxdWlyZW1lbnRzPzogSW5zdGFuY2VSZXF1aXJlbWVudHNcbi8qKlxuICogVGhlIGluc3RhbmNlIHR5cGUsIHN1Y2ggYXMgYGBtMy54bGFyZ2VgYC4gWW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YW5jZSB0eXBlIHRoYXQgaXMgc3VwcG9ydGVkIGluIHlvdXIgcmVxdWVzdGVkIFJlZ2lvbiBhbmQgQXZhaWxhYmlsaXR5IFpvbmVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtJbnN0YW5jZSB0eXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gNDAgaW5zdGFuY2UgdHlwZXMgcGVyIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuSW5zdGFuY2VUeXBlPzogc3RyaW5nXG59XG4vKipcbiAqIFByb3ZpZGVzIGEgbGF1bmNoIHRlbXBsYXRlIGZvciB0aGUgc3BlY2lmaWVkIGluc3RhbmNlIHR5cGUgb3Igc2V0IG9mIGluc3RhbmNlIHJlcXVpcmVtZW50cy4gRm9yIGV4YW1wbGUsIHNvbWUgaW5zdGFuY2UgdHlwZXMgbWlnaHQgcmVxdWlyZSBhIGxhdW5jaCB0ZW1wbGF0ZSB3aXRoIGEgZGlmZmVyZW50IEFNSS4gSWYgbm90IHByb3ZpZGVkLCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyB1c2VzIHRoZSBsYXVuY2ggdGVtcGxhdGUgdGhhdCdzIHNwZWNpZmllZCBpbiB0aGUgYGBMYXVuY2hUZW1wbGF0ZWBgIGRlZmluaXRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1NwZWNpZnlpbmcgYSBkaWZmZXJlbnQgbGF1bmNoIHRlbXBsYXRlIGZvciBhbiBpbnN0YW5jZSB0eXBlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLW1peGVkLWluc3RhbmNlcy1ncm91cHMtbGF1bmNoLXRlbXBsYXRlLW92ZXJyaWRlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLiBcbiAqICBZb3UgY2FuIHNwZWNpZnkgdXAgdG8gMjAgbGF1bmNoIHRlbXBsYXRlcyBwZXIgQXV0byBTY2FsaW5nIGdyb3VwLiBUaGUgbGF1bmNoIHRlbXBsYXRlcyBzcGVjaWZpZWQgaW4gdGhlIG92ZXJyaWRlcyBhbmQgaW4gdGhlIGBgTGF1bmNoVGVtcGxhdGVgYCBkZWZpbml0aW9uIGNvdW50IHRvd2FyZHMgdGhpcyBsaW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb24yIHtcbi8qKlxuICogVGhlIG5hbWUgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlTmFtZWBgIG9yIHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZU5hbWU/OiBzdHJpbmdcbi8qKlxuICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gKiAgU3BlY2lmeWluZyBgYCRMYXRlc3RgYCBvciBgYCREZWZhdWx0YGAgZm9yIHRoZSB0ZW1wbGF0ZSB2ZXJzaW9uIG51bWJlciBpcyBub3Qgc3VwcG9ydGVkLiBIb3dldmVyLCB5b3UgY2FuIHNwZWNpZnkgYGBMYXRlc3RWZXJzaW9uTnVtYmVyYGAgb3IgYGBEZWZhdWx0VmVyc2lvbk51bWJlcmBgIHVzaW5nIHRoZSBgYEZuOjpHZXRBdHRgYCBpbnRyaW5zaWMgZnVuY3Rpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0ZuOjpHZXRBdHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2ludHJpbnNpYy1mdW5jdGlvbi1yZWZlcmVuY2UtZ2V0YXR0Lmh0bWwpLlxuICogICBGb3IgYW4gZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBGbjo6R2V0QXR0YGAgZnVuY3Rpb24sIHNlZSB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKi9cblZlcnNpb246IHN0cmluZ1xuLyoqXG4gKiBUaGUgSUQgb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZS5cbiAqICBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBgYExhdW5jaFRlbXBsYXRlSURgYCBvciB0aGUgYGBMYXVuY2hUZW1wbGF0ZU5hbWVgYCwgYnV0IG5vdCBib3RoLlxuICovXG5MYXVuY2hUZW1wbGF0ZUlkPzogc3RyaW5nXG59XG4vKipcbiAqIFRoZSBpbnN0YW5jZSByZXF1aXJlbWVudHMuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHVzZXMgeW91ciBzcGVjaWZpZWQgcmVxdWlyZW1lbnRzIHRvIGlkZW50aWZ5IGluc3RhbmNlIHR5cGVzLiBUaGVuLCBpdCB1c2VzIHlvdXIgT24tRGVtYW5kIGFuZCBTcG90IGFsbG9jYXRpb24gc3RyYXRlZ2llcyB0byBsYXVuY2ggaW5zdGFuY2VzIGZyb20gdGhlc2UgaW5zdGFuY2UgdHlwZXMuXG4gKiAgWW91IGNhbiBzcGVjaWZ5IHVwIHRvIGZvdXIgc2VwYXJhdGUgc2V0cyBvZiBpbnN0YW5jZSByZXF1aXJlbWVudHMgcGVyIEF1dG8gU2NhbGluZyBncm91cC4gVGhpcyBpcyB1c2VmdWwgZm9yIHByb3Zpc2lvbmluZyBpbnN0YW5jZXMgZnJvbSBkaWZmZXJlbnQgQW1hem9uIE1hY2hpbmUgSW1hZ2VzIChBTUlzKSBpbiB0aGUgc2FtZSBBdXRvIFNjYWxpbmcgZ3JvdXAuIFRvIGRvIHRoaXMsIGNyZWF0ZSB0aGUgQU1JcyBhbmQgY3JlYXRlIGEgbmV3IGxhdW5jaCB0ZW1wbGF0ZSBmb3IgZWFjaCBBTUkuIFRoZW4sIGNyZWF0ZSBhIGNvbXBhdGlibGUgc2V0IG9mIGluc3RhbmNlIHJlcXVpcmVtZW50cyBmb3IgZWFjaCBsYXVuY2ggdGVtcGxhdGUuIFxuICogICBJZiB5b3Ugc3BlY2lmeSBgYEluc3RhbmNlUmVxdWlyZW1lbnRzYGAsIHlvdSBjYW4ndCBzcGVjaWZ5IGBgSW5zdGFuY2VUeXBlYGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VSZXF1aXJlbWVudHMge1xuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBjdXJyZW50IG9yIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgYXJlIGluY2x1ZGVkLlxuICogICArICBGb3IgY3VycmVudCBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzLCBzcGVjaWZ5IGBgY3VycmVudGBgLiBUaGUgY3VycmVudCBnZW5lcmF0aW9uIGluY2x1ZGVzIEVDMiBpbnN0YW5jZSB0eXBlcyBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIHVzZS4gVGhpcyB0eXBpY2FsbHkgaW5jbHVkZXMgdGhlIGxhdGVzdCB0d28gdG8gdGhyZWUgZ2VuZXJhdGlvbnMgaW4gZWFjaCBpbnN0YW5jZSBmYW1pbHkuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0luc3RhbmNlIHR5cGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2UtdHlwZXMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogICArICBGb3IgcHJldmlvdXMgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcywgc3BlY2lmeSBgYHByZXZpb3VzYGAuXG4gKiAgIFxuICogIERlZmF1bHQ6IEFueSBjdXJyZW50IG9yIHByZXZpb3VzIGdlbmVyYXRpb25cbiAqL1xuSW5zdGFuY2VHZW5lcmF0aW9ucz86IHN0cmluZ1tdXG4vKipcbiAqIExpc3RzIHRoZSBhY2NlbGVyYXRvciB0eXBlcyB0aGF0IG11c3QgYmUgb24gYW4gaW5zdGFuY2UgdHlwZS5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggR1BVIGFjY2VsZXJhdG9ycywgc3BlY2lmeSBgYGdwdWBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBGUEdBIGFjY2VsZXJhdG9ycywgc3BlY2lmeSBgYGZwZ2FgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggaW5mZXJlbmNlIGFjY2VsZXJhdG9ycywgc3BlY2lmeSBgYGluZmVyZW5jZWBgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgYWNjZWxlcmF0b3IgdHlwZVxuICovXG5BY2NlbGVyYXRvclR5cGVzPzogc3RyaW5nW11cbk1lbW9yeUdpQlBlclZDcHU/OiBNZW1vcnlHaUJQZXJWQ3B1UmVxdWVzdFxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBpbnN0YW5jZSB0eXBlcyBtdXN0IGhhdmUgYWNjZWxlcmF0b3JzIGJ5IHNwZWNpZmljIG1hbnVmYWN0dXJlcnMuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIE5WSURJQSBkZXZpY2VzLCBzcGVjaWZ5IGBgbnZpZGlhYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEFNRCBkZXZpY2VzLCBzcGVjaWZ5IGBgYW1kYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEFXUyBkZXZpY2VzLCBzcGVjaWZ5IGBgYW1hem9uLXdlYi1zZXJ2aWNlc2BgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBYaWxpbnggZGV2aWNlcywgc3BlY2lmeSBgYHhpbGlueGBgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgbWFudWZhY3R1cmVyXG4gKi9cbkFjY2VsZXJhdG9yTWFudWZhY3R1cmVycz86IHN0cmluZ1tdXG5WQ3B1Q291bnQ6IFZDcHVDb3VudFJlcXVlc3Rcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2UgdHlwZXMgd2l0aCBpbnN0YW5jZSBzdG9yZSB2b2x1bWVzIGFyZSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHJlcXVpcmVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUMyIGluc3RhbmNlIHN0b3JlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvSW5zdGFuY2VTdG9yYWdlLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBVc2VyIEd1aWRlKi5cbiAqICBEZWZhdWx0OiBgYGluY2x1ZGVkYGBcbiAqL1xuTG9jYWxTdG9yYWdlPzogc3RyaW5nXG4vKipcbiAqIExpc3RzIHdoaWNoIHNwZWNpZmljIENQVSBtYW51ZmFjdHVyZXJzIHRvIGluY2x1ZGUuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIEludGVsIENQVXMsIHNwZWNpZnkgYGBpbnRlbGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBTUQgQ1BVcywgc3BlY2lmeSBgYGFtZGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBBV1MgQ1BVcywgc3BlY2lmeSBgYGFtYXpvbi13ZWItc2VydmljZXNgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQXBwbGUgQ1BVcywgc3BlY2lmeSBgYGFwcGxlYGAuXG4gKiAgIFxuICogICBEb24ndCBjb25mdXNlIHRoZSBDUFUgaGFyZHdhcmUgbWFudWZhY3R1cmVyIHdpdGggdGhlIENQVSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUuIEluc3RhbmNlcyB3aWxsIGJlIGxhdW5jaGVkIHdpdGggYSBjb21wYXRpYmxlIENQVSBhcmNoaXRlY3R1cmUgYmFzZWQgb24gdGhlIEFtYXpvbiBNYWNoaW5lIEltYWdlIChBTUkpIHRoYXQgeW91IHNwZWNpZnkgaW4geW91ciBsYXVuY2ggdGVtcGxhdGUuIFxuICogICBEZWZhdWx0OiBBbnkgbWFudWZhY3R1cmVyXG4gKi9cbkNwdU1hbnVmYWN0dXJlcnM/OiBzdHJpbmdbXVxuLyoqXG4gKiBJbmRpY2F0ZXMgd2hldGhlciBiYXJlIG1ldGFsIGluc3RhbmNlIHR5cGVzIGFyZSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHJlcXVpcmVkLlxuICogIERlZmF1bHQ6IGBgZXhjbHVkZWRgYFxuICovXG5CYXJlTWV0YWw/OiBzdHJpbmdcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgaW5zdGFuY2UgdHlwZXMgbXVzdCBwcm92aWRlIE9uLURlbWFuZCBJbnN0YW5jZSBoaWJlcm5hdGlvbiBzdXBwb3J0LlxuICogIERlZmF1bHQ6IGBgZmFsc2VgYFxuICovXG5SZXF1aXJlSGliZXJuYXRlU3VwcG9ydD86IGJvb2xlYW5cbi8qKlxuICogW1ByaWNlIHByb3RlY3Rpb25dIFRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgU3BvdCBJbnN0YW5jZXMsIGFzIGEgcGVyY2VudGFnZSBvZiBhbiBpZGVudGlmaWVkIE9uLURlbWFuZCBwcmljZS4gVGhlIGlkZW50aWZpZWQgT24tRGVtYW5kIHByaWNlIGlzIHRoZSBwcmljZSBvZiB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIHdpdGggeW91ciBzcGVjaWZpZWQgYXR0cmlidXRlcy4gSWYgbm8gY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSBtYXRjaGVzIHlvdXIgYXR0cmlidXRlcywgdGhlbiB0aGUgaWRlbnRpZmllZCBwcmljZSBpcyBmcm9tIGVpdGhlciB0aGUgbG93ZXN0IHByaWNlZCBjdXJyZW50IGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgb3IsIGZhaWxpbmcgdGhhdCwgdGhlIGxvd2VzdCBwcmljZWQgcHJldmlvdXMgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcy4gV2hlbiBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZWxlY3RzIGluc3RhbmNlIHR5cGVzIHdpdGggeW91ciBhdHRyaWJ1dGVzLCB3ZSB3aWxsIGV4Y2x1ZGUgaW5zdGFuY2UgdHlwZXMgd2hvc2UgcHJpY2UgZXhjZWVkcyB5b3VyIHNwZWNpZmllZCB0aHJlc2hvbGQuXG4gKiAgVGhlIHBhcmFtZXRlciBhY2NlcHRzIGFuIGludGVnZXIsIHdoaWNoIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGludGVycHJldHMgYXMgYSBwZXJjZW50YWdlLlxuICogIElmIHlvdSBzZXQgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgdG8gYGB2Y3B1YGAgb3IgYGBtZW1vcnktbWliYGAsIHRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBpcyBiYXNlZCBvbiB0aGUgcGVyLXZDUFUgb3IgcGVyLW1lbW9yeSBwcmljZSBpbnN0ZWFkIG9mIHRoZSBwZXIgaW5zdGFuY2UgcHJpY2UuIFxuICogICBPbmx5IG9uZSBvZiBgYFNwb3RNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2VgYCBvciBgYE1heFNwb3RQcmljZUFzUGVyY2VudGFnZU9mT3B0aW1hbE9uRGVtYW5kUHJpY2VgYCBjYW4gYmUgc3BlY2lmaWVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBlaXRoZXIsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYXV0b21hdGljYWxseSBhcHBseSBvcHRpbWFsIHByaWNlIHByb3RlY3Rpb24gdG8gY29uc2lzdGVudGx5IHNlbGVjdCBmcm9tIGEgd2lkZSByYW5nZSBvZiBpbnN0YW5jZSB0eXBlcy4gVG8gaW5kaWNhdGUgbm8gcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIFNwb3QgSW5zdGFuY2VzLCBtZWFuaW5nIHlvdSB3YW50IHRvIGNvbnNpZGVyIGFsbCBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcywgaW5jbHVkZSBvbmUgb2YgdGhlc2UgcGFyYW1ldGVycyBhbmQgc3BlY2lmeSBhIGhpZ2ggdmFsdWUsIHN1Y2ggYXMgYGA5OTk5OTlgYC5cbiAqL1xuTWF4U3BvdFByaWNlQXNQZXJjZW50YWdlT2ZPcHRpbWFsT25EZW1hbmRQcmljZT86IG51bWJlclxuLyoqXG4gKiBbUHJpY2UgcHJvdGVjdGlvbl0gVGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGZvciBPbi1EZW1hbmQgSW5zdGFuY2VzLCBhcyBhIHBlcmNlbnRhZ2UgaGlnaGVyIHRoYW4gYW4gaWRlbnRpZmllZCBPbi1EZW1hbmQgcHJpY2UuIFRoZSBpZGVudGlmaWVkIE9uLURlbWFuZCBwcmljZSBpcyB0aGUgcHJpY2Ugb2YgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIEMsIE0sIG9yIFIgaW5zdGFuY2UgdHlwZSB3aXRoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuIElmIG5vIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgbWF0Y2hlcyB5b3VyIGF0dHJpYnV0ZXMsIHRoZW4gdGhlIGlkZW50aWZpZWQgcHJpY2UgaXMgZnJvbSBlaXRoZXIgdGhlIGxvd2VzdCBwcmljZWQgY3VycmVudCBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIG9yLCBmYWlsaW5nIHRoYXQsIHRoZSBsb3dlc3QgcHJpY2VkIHByZXZpb3VzIGdlbmVyYXRpb24gaW5zdGFuY2UgdHlwZXMgdGhhdCBtYXRjaCB5b3VyIGF0dHJpYnV0ZXMuIFdoZW4gQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgc2VsZWN0cyBpbnN0YW5jZSB0eXBlcyB3aXRoIHlvdXIgYXR0cmlidXRlcywgd2Ugd2lsbCBleGNsdWRlIGluc3RhbmNlIHR5cGVzIHdob3NlIHByaWNlIGV4Y2VlZHMgeW91ciBzcGVjaWZpZWQgdGhyZXNob2xkLiBcbiAqICBUaGUgcGFyYW1ldGVyIGFjY2VwdHMgYW4gaW50ZWdlciwgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgaW50ZXJwcmV0cyBhcyBhIHBlcmNlbnRhZ2UuXG4gKiAgVG8gdHVybiBvZmYgcHJpY2UgcHJvdGVjdGlvbiwgc3BlY2lmeSBhIGhpZ2ggdmFsdWUsIHN1Y2ggYXMgYGA5OTk5OTlgYC4gXG4gKiAgSWYgeW91IHNldCBgYERlc2lyZWRDYXBhY2l0eVR5cGVgYCB0byBgYHZjcHVgYCBvciBgYG1lbW9yeS1taWJgYCwgdGhlIHByaWNlIHByb3RlY3Rpb24gdGhyZXNob2xkIGlzIGFwcGxpZWQgYmFzZWQgb24gdGhlIHBlci12Q1BVIG9yIHBlci1tZW1vcnkgcHJpY2UgaW5zdGVhZCBvZiB0aGUgcGVyIGluc3RhbmNlIHByaWNlLiBcbiAqICBEZWZhdWx0OiBgYDIwYGBcbiAqL1xuT25EZW1hbmRNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2U/OiBudW1iZXJcbk1lbW9yeU1pQjogTWVtb3J5TWlCUmVxdWVzdFxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIHR5cGUgb2YgbG9jYWwgc3RvcmFnZSB0aGF0IGlzIHJlcXVpcmVkLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBoYXJkIGRpc2sgZHJpdmUgKEhERCkgc3RvcmFnZSwgc3BlY2lmeSBgYGhkZGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBzb2xpZCBzdGF0ZSBkcml2ZSAoU1NEKSBzdG9yYWdlLCBzcGVjaWZ5IGBgc3NkYGAuXG4gKiAgIFxuICogIERlZmF1bHQ6IEFueSBsb2NhbCBzdG9yYWdlIHR5cGVcbiAqL1xuTG9jYWxTdG9yYWdlVHlwZXM/OiBzdHJpbmdbXVxuTmV0d29ya0ludGVyZmFjZUNvdW50PzogTmV0d29ya0ludGVyZmFjZUNvdW50UmVxdWVzdFxuLyoqXG4gKiBUaGUgaW5zdGFuY2UgdHlwZXMgdG8gZXhjbHVkZS4gWW91IGNhbiB1c2Ugc3RyaW5ncyB3aXRoIG9uZSBvciBtb3JlIHdpbGQgY2FyZHMsIHJlcHJlc2VudGVkIGJ5IGFuIGFzdGVyaXNrIChgYCpgYCksIHRvIGV4Y2x1ZGUgYW4gaW5zdGFuY2UgZmFtaWx5LCB0eXBlLCBzaXplLCBvciBnZW5lcmF0aW9uLiBUaGUgZm9sbG93aW5nIGFyZSBleGFtcGxlczogYGBtNS44eGxhcmdlYGAsIGBgYzUqLipgYCwgYGBtNWEuKmBgLCBgYHIqYGAsIGBgKjMqYGAuIFxuICogIEZvciBleGFtcGxlLCBpZiB5b3Ugc3BlY2lmeSBgYGM1KmBgLCB5b3UgYXJlIGV4Y2x1ZGluZyB0aGUgZW50aXJlIEM1IGluc3RhbmNlIGZhbWlseSwgd2hpY2ggaW5jbHVkZXMgYWxsIEM1YSBhbmQgQzVuIGluc3RhbmNlIHR5cGVzLiBJZiB5b3Ugc3BlY2lmeSBgYG01YS4qYGAsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgZXhjbHVkZSBhbGwgdGhlIE01YSBpbnN0YW5jZSB0eXBlcywgYnV0IG5vdCB0aGUgTTVuIGluc3RhbmNlIHR5cGVzLlxuICogICBJZiB5b3Ugc3BlY2lmeSBgYEV4Y2x1ZGVkSW5zdGFuY2VUeXBlc2BgLCB5b3UgY2FuJ3Qgc3BlY2lmeSBgYEFsbG93ZWRJbnN0YW5jZVR5cGVzYGAuXG4gKiAgIERlZmF1bHQ6IE5vIGV4Y2x1ZGVkIGluc3RhbmNlIHR5cGVzXG4gKi9cbkV4Y2x1ZGVkSW5zdGFuY2VUeXBlcz86IHN0cmluZ1tdXG4vKipcbiAqIFRoZSBpbnN0YW5jZSB0eXBlcyB0byBhcHBseSB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzIGFnYWluc3QuIEFsbCBvdGhlciBpbnN0YW5jZSB0eXBlcyBhcmUgaWdub3JlZCwgZXZlbiBpZiB0aGV5IG1hdGNoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMuXG4gKiAgWW91IGNhbiB1c2Ugc3RyaW5ncyB3aXRoIG9uZSBvciBtb3JlIHdpbGQgY2FyZHMsIHJlcHJlc2VudGVkIGJ5IGFuIGFzdGVyaXNrIChgYCpgYCksIHRvIGFsbG93IGFuIGluc3RhbmNlIHR5cGUsIHNpemUsIG9yIGdlbmVyYXRpb24uIFRoZSBmb2xsb3dpbmcgYXJlIGV4YW1wbGVzOiBgYG01Ljh4bGFyZ2VgYCwgYGBjNSouKmBgLCBgYG01YS4qYGAsIGBgcipgYCwgYGAqMypgYC5cbiAqICBGb3IgZXhhbXBsZSwgaWYgeW91IHNwZWNpZnkgYGBjNSpgYCwgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgd2lsbCBhbGxvdyB0aGUgZW50aXJlIEM1IGluc3RhbmNlIGZhbWlseSwgd2hpY2ggaW5jbHVkZXMgYWxsIEM1YSBhbmQgQzVuIGluc3RhbmNlIHR5cGVzLiBJZiB5b3Ugc3BlY2lmeSBgYG01YS4qYGAsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYWxsb3cgYWxsIHRoZSBNNWEgaW5zdGFuY2UgdHlwZXMsIGJ1dCBub3QgdGhlIE01biBpbnN0YW5jZSB0eXBlcy5cbiAqICAgSWYgeW91IHNwZWNpZnkgYGBBbGxvd2VkSW5zdGFuY2VUeXBlc2BgLCB5b3UgY2FuJ3Qgc3BlY2lmeSBgYEV4Y2x1ZGVkSW5zdGFuY2VUeXBlc2BgLlxuICogICBEZWZhdWx0OiBBbGwgaW5zdGFuY2UgdHlwZXNcbiAqL1xuQWxsb3dlZEluc3RhbmNlVHlwZXM/OiBzdHJpbmdbXVxuQWNjZWxlcmF0b3JDb3VudD86IEFjY2VsZXJhdG9yQ291bnRSZXF1ZXN0XG5OZXR3b3JrQmFuZHdpZHRoR2Jwcz86IE5ldHdvcmtCYW5kd2lkdGhHYnBzUmVxdWVzdFxuQmFzZWxpbmVQZXJmb3JtYW5jZUZhY3RvcnM/OiBCYXNlbGluZVBlcmZvcm1hbmNlRmFjdG9yc1JlcXVlc3RcbkJhc2VsaW5lRWJzQmFuZHdpZHRoTWJwcz86IEJhc2VsaW5lRWJzQmFuZHdpZHRoTWJwc1JlcXVlc3Rcbi8qKlxuICogW1ByaWNlIHByb3RlY3Rpb25dIFRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBmb3IgU3BvdCBJbnN0YW5jZXMsIGFzIGEgcGVyY2VudGFnZSBoaWdoZXIgdGhhbiBhbiBpZGVudGlmaWVkIFNwb3QgcHJpY2UuIFRoZSBpZGVudGlmaWVkIFNwb3QgcHJpY2UgaXMgdGhlIHByaWNlIG9mIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBDLCBNLCBvciBSIGluc3RhbmNlIHR5cGUgd2l0aCB5b3VyIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiBJZiBubyBjdXJyZW50IGdlbmVyYXRpb24gQywgTSwgb3IgUiBpbnN0YW5jZSB0eXBlIG1hdGNoZXMgeW91ciBhdHRyaWJ1dGVzLCB0aGVuIHRoZSBpZGVudGlmaWVkIHByaWNlIGlzIGZyb20gZWl0aGVyIHRoZSBsb3dlc3QgcHJpY2VkIGN1cnJlbnQgZ2VuZXJhdGlvbiBpbnN0YW5jZSB0eXBlcyBvciwgZmFpbGluZyB0aGF0LCB0aGUgbG93ZXN0IHByaWNlZCBwcmV2aW91cyBnZW5lcmF0aW9uIGluc3RhbmNlIHR5cGVzIHRoYXQgbWF0Y2ggeW91ciBhdHRyaWJ1dGVzLiBXaGVuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHNlbGVjdHMgaW5zdGFuY2UgdHlwZXMgd2l0aCB5b3VyIGF0dHJpYnV0ZXMsIHdlIHdpbGwgZXhjbHVkZSBpbnN0YW5jZSB0eXBlcyB3aG9zZSBwcmljZSBleGNlZWRzIHlvdXIgc3BlY2lmaWVkIHRocmVzaG9sZC5cbiAqICBUaGUgcGFyYW1ldGVyIGFjY2VwdHMgYW4gaW50ZWdlciwgd2hpY2ggQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgaW50ZXJwcmV0cyBhcyBhIHBlcmNlbnRhZ2UuIFxuICogIElmIHlvdSBzZXQgYGBEZXNpcmVkQ2FwYWNpdHlUeXBlYGAgdG8gYGB2Y3B1YGAgb3IgYGBtZW1vcnktbWliYGAsIHRoZSBwcmljZSBwcm90ZWN0aW9uIHRocmVzaG9sZCBpcyBiYXNlZCBvbiB0aGUgcGVyLXZDUFUgb3IgcGVyLW1lbW9yeSBwcmljZSBpbnN0ZWFkIG9mIHRoZSBwZXIgaW5zdGFuY2UgcHJpY2UuIFxuICogICBPbmx5IG9uZSBvZiBgYFNwb3RNYXhQcmljZVBlcmNlbnRhZ2VPdmVyTG93ZXN0UHJpY2VgYCBvciBgYE1heFNwb3RQcmljZUFzUGVyY2VudGFnZU9mT3B0aW1hbE9uRGVtYW5kUHJpY2VgYCBjYW4gYmUgc3BlY2lmaWVkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBlaXRoZXIsIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIHdpbGwgYXV0b21hdGljYWxseSBhcHBseSBvcHRpbWFsIHByaWNlIHByb3RlY3Rpb24gdG8gY29uc2lzdGVudGx5IHNlbGVjdCBmcm9tIGEgd2lkZSByYW5nZSBvZiBpbnN0YW5jZSB0eXBlcy4gVG8gaW5kaWNhdGUgbm8gcHJpY2UgcHJvdGVjdGlvbiB0aHJlc2hvbGQgZm9yIFNwb3QgSW5zdGFuY2VzLCBtZWFuaW5nIHlvdSB3YW50IHRvIGNvbnNpZGVyIGFsbCBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgYXR0cmlidXRlcywgaW5jbHVkZSBvbmUgb2YgdGhlc2UgcGFyYW1ldGVycyBhbmQgc3BlY2lmeSBhIGhpZ2ggdmFsdWUsIHN1Y2ggYXMgYGA5OTk5OTlgYC5cbiAqL1xuU3BvdE1heFByaWNlUGVyY2VudGFnZU92ZXJMb3dlc3RQcmljZT86IG51bWJlclxuLyoqXG4gKiBMaXN0cyB0aGUgYWNjZWxlcmF0b3JzIHRoYXQgbXVzdCBiZSBvbiBhbiBpbnN0YW5jZSB0eXBlLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgQTEwMCBHUFVzLCBzcGVjaWZ5IGBgYTEwMGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgVjEwMCBHUFVzLCBzcGVjaWZ5IGBgdjEwMGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgSzgwIEdQVXMsIHNwZWNpZnkgYGBrODBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggTlZJRElBIFQ0IEdQVXMsIHNwZWNpZnkgYGB0NGBgLlxuICogICArICBGb3IgaW5zdGFuY2UgdHlwZXMgd2l0aCBOVklESUEgTTYwIEdQVXMsIHNwZWNpZnkgYGBtNjBgYC5cbiAqICAgKyAgRm9yIGluc3RhbmNlIHR5cGVzIHdpdGggQU1EIFJhZGVvbiBQcm8gVjUyMCBHUFVzLCBzcGVjaWZ5IGBgcmFkZW9uLXByby12NTIwYGAuXG4gKiAgICsgIEZvciBpbnN0YW5jZSB0eXBlcyB3aXRoIFhpbGlueCBWVTlQIEZQR0FzLCBzcGVjaWZ5IGBgdnU5cGBgLlxuICogICBcbiAqICBEZWZhdWx0OiBBbnkgYWNjZWxlcmF0b3JcbiAqL1xuQWNjZWxlcmF0b3JOYW1lcz86IHN0cmluZ1tdXG5BY2NlbGVyYXRvclRvdGFsTWVtb3J5TWlCPzogQWNjZWxlcmF0b3JUb3RhbE1lbW9yeU1pQlJlcXVlc3Rcbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgYnVyc3RhYmxlIHBlcmZvcm1hbmNlIGluc3RhbmNlIHR5cGVzIGFyZSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHJlcXVpcmVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtCdXJzdGFibGUgcGVyZm9ybWFuY2UgaW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLXBlcmZvcm1hbmNlLWluc3RhbmNlcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgVXNlciBHdWlkZSouXG4gKiAgRGVmYXVsdDogYGBleGNsdWRlZGBgXG4gKi9cbkJ1cnN0YWJsZVBlcmZvcm1hbmNlPzogc3RyaW5nXG5Ub3RhbExvY2FsU3RvcmFnZUdCPzogVG90YWxMb2NhbFN0b3JhZ2VHQlJlcXVlc3Rcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gYW1vdW50IG9mIG1lbW9yeSBwZXIgdkNQVSBmb3IgYW4gaW5zdGFuY2UgdHlwZSwgaW4gR2lCLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlHaUJQZXJWQ3B1UmVxdWVzdCB7XG4vKipcbiAqIFRoZSBtZW1vcnkgbWluaW11bSBpbiBHaUIuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWVtb3J5IG1heGltdW0gaW4gR2lCLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIHZDUFVzIGZvciBhbiBpbnN0YW5jZSB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZDcHVDb3VudFJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWluaW11bSBudW1iZXIgb2YgdkNQVXMuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdkNQVXMuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSBpbnN0YW5jZSBtZW1vcnkgc2l6ZSBmb3IgYW4gaW5zdGFuY2UgdHlwZSwgaW4gTWlCLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeU1pQlJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWVtb3J5IG1pbmltdW0gaW4gTWlCLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1lbW9yeSBtYXhpbXVtIGluIE1pQi5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMgZm9yIGFuIGluc3RhbmNlIHR5cGUuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5ldHdvcmtJbnRlcmZhY2VDb3VudFJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWluaW11bSBudW1iZXIgb2YgbmV0d29yayBpbnRlcmZhY2VzLlxuICovXG5NaW4/OiBudW1iZXJcbi8qKlxuICogVGhlIG1heGltdW0gbnVtYmVyIG9mIG5ldHdvcmsgaW50ZXJmYWNlcy5cbiAqL1xuTWF4PzogbnVtYmVyXG59XG4vKipcbiAqIFRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZiBhY2NlbGVyYXRvcnMgKEdQVXMsIEZQR0FzLCBvciBBV1MgSW5mZXJlbnRpYSBjaGlwcykgZm9yIGFuIGluc3RhbmNlIHR5cGUuXG4gKiAgVG8gZXhjbHVkZSBhY2NlbGVyYXRvci1lbmFibGVkIGluc3RhbmNlIHR5cGVzLCBzZXQgYGBNYXhgYCB0byBgYDBgYC5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWNjZWxlcmF0b3JDb3VudFJlcXVlc3Qge1xuLyoqXG4gKiBUaGUgbWluaW11bSB2YWx1ZS5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIHZhbHVlLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gYW1vdW50IG9mIG5ldHdvcmsgYmFuZHdpZHRoLCBpbiBnaWdhYml0cyBwZXIgc2Vjb25kIChHYnBzKS5cbiAqICBEZWZhdWx0OiBObyBtaW5pbXVtIG9yIG1heGltdW0gbGltaXRzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0JhbmR3aWR0aEdicHNSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gYW1vdW50IG9mIG5ldHdvcmsgYmFuZHdpZHRoLCBpbiBnaWdhYml0cyBwZXIgc2Vjb25kIChHYnBzKS5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBuZXR3b3JrIGJhbmR3aWR0aCwgaW4gZ2lnYWJpdHMgcGVyIHNlY29uZCAoR2JwcykuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgYmFzZWxpbmUgcGVyZm9ybWFuY2UgZmFjdG9ycyBmb3IgdGhlIGluc3RhbmNlIHJlcXVpcmVtZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlbGluZVBlcmZvcm1hbmNlRmFjdG9yc1JlcXVlc3Qge1xuQ3B1PzogQ3B1UGVyZm9ybWFuY2VGYWN0b3JSZXF1ZXN0XG59XG4vKipcbiAqIFRoZSBDUFUgcGVyZm9ybWFuY2UgdG8gY29uc2lkZXIsIHVzaW5nIGFuIGluc3RhbmNlIGZhbWlseSBhcyB0aGUgYmFzZWxpbmUgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENwdVBlcmZvcm1hbmNlRmFjdG9yUmVxdWVzdCB7XG5SZWZlcmVuY2VzPzogUGVyZm9ybWFuY2VGYWN0b3JSZWZlcmVuY2VTZXRSZXF1ZXN0XG59XG4vKipcbiAqIFNwZWNpZnkgYW4gaW5zdGFuY2UgZmFtaWx5IHRvIHVzZSBhcyB0aGUgYmFzZWxpbmUgcmVmZXJlbmNlIGZvciBDUFUgcGVyZm9ybWFuY2UuIEFsbCBpbnN0YW5jZSB0eXBlcyB0aGF0IEFsbCBpbnN0YW5jZSB0eXBlcyB0aGF0IG1hdGNoIHlvdXIgc3BlY2lmaWVkIGF0dHJpYnV0ZXMgd2lsbCBiZSBjb21wYXJlZCBhZ2FpbnN0IHRoZSBDUFUgcGVyZm9ybWFuY2Ugb2YgdGhlIHJlZmVyZW5jZWQgaW5zdGFuY2UgZmFtaWx5LCByZWdhcmRsZXNzIG9mIENQVSBtYW51ZmFjdHVyZXIgb3IgYXJjaGl0ZWN0dXJlIGRpZmZlcmVuY2VzLiBcbiAqICAgQ3VycmVudGx5IG9ubHkgb25lIGluc3RhbmNlIGZhbWlseSBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBsaXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcmZvcm1hbmNlRmFjdG9yUmVmZXJlbmNlUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBpbnN0YW5jZSBmYW1pbHkgdG8gdXNlIGFzIGEgYmFzZWxpbmUgcmVmZXJlbmNlLiBcbiAqICAgTWFrZSBzdXJlIHRoYXQgeW91IHNwZWNpZnkgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoZSBpbnN0YW5jZSBmYW1pbHkuIFRoZSBpbnN0YW5jZSBmYW1pbHkgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhlIHBlcmlvZCAoLikgaW4gdGhlIGluc3RhbmNlIHR5cGUgbmFtZS4gRm9yIGV4YW1wbGUsIGluIHRoZSBpbnN0YW5jZSBgYGM2aS5sYXJnZWBgLCB0aGUgaW5zdGFuY2UgZmFtaWx5IGlzIGBgYzZpYGAsIG5vdCBgYGM2YGAuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0FtYXpvbiBFQzIgaW5zdGFuY2UgdHlwZSBuYW1pbmcgY29udmVudGlvbnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYzIvbGF0ZXN0L2luc3RhbmNldHlwZXMvaW5zdGFuY2UtdHlwZS1uYW1lcy5odG1sKSBpbiAqQW1hem9uIEVDMiBJbnN0YW5jZSBUeXBlcyouXG4gKiAgIFRoZSBmb2xsb3dpbmcgaW5zdGFuY2UgdHlwZXMgYXJlICpub3Qgc3VwcG9ydGVkKiBmb3IgcGVyZm9ybWFuY2UgcHJvdGVjdGlvbi5cbiAqICAgKyAgIGBgYzFgYCBcbiAqICAgKyAgIGBgZzN8IGczc2BgIFxuICogICArICAgYGBocGM3Z2BgIFxuICogICArICAgYGBtMXwgbTJgYCBcbiAqICAgKyAgIGBgbWFjMSB8IG1hYzIgfCBtYWMyLW0xdWx0cmEgfCBtYWMyLW0yIHwgbWFjMi1tMnByb2BgIFxuICogICArICAgYGBwM2RuIHwgcDRkIHwgcDVgYCBcbiAqICAgKyAgIGBgdDFgYCBcbiAqICAgKyAgIGBgdS0xMnRiMSB8IHUtMTh0YjEgfCB1LTI0dGIxIHwgdS0zdGIxIHwgdS02dGIxIHwgdS05dGIxIHwgdTdpLTEydGIgfCB1N2luLTE2dGIgfCB1N2luLTI0dGIgfCB1N2luLTMydGJgYCBcbiAqICAgXG4gKiAgSWYgeW91IHBlcmZvcm1hbmNlIHByb3RlY3Rpb24gYnkgc3BlY2lmeWluZyBhIHN1cHBvcnRlZCBpbnN0YW5jZSBmYW1pbHksIHRoZSByZXR1cm5lZCBpbnN0YW5jZSB0eXBlcyB3aWxsIGV4Y2x1ZGUgdGhlIHByZWNlZGluZyB1bnN1cHBvcnRlZCBpbnN0YW5jZSBmYW1pbGllcy5cbiAqICBJZiB5b3Ugc3BlY2lmeSBhbiB1bnN1cHBvcnRlZCBpbnN0YW5jZSBmYW1pbHkgYXMgYSB2YWx1ZSBmb3IgYmFzZWxpbmUgcGVyZm9ybWFuY2UsIHRoZSBBUEkgcmV0dXJucyBhbiBlbXB0eSByZXNwb25zZS5cbiAqL1xuSW5zdGFuY2VGYW1pbHk/OiBzdHJpbmdcbn1cbi8qKlxuICogVGhlIG1pbmltdW0gYW5kIG1heGltdW0gYmFzZWxpbmUgYmFuZHdpZHRoIHBlcmZvcm1hbmNlIGZvciBhbiBpbnN0YW5jZSB0eXBlLCBpbiBNYnBzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtBbWF6b24gRUJT4oCTb3B0aW1pemVkIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy1vcHRpbWl6ZWQuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIFVzZXIgR3VpZGUqLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlbGluZUVic0JhbmR3aWR0aE1icHNSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1pbmltdW0gdmFsdWUgaW4gTWJwcy5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtYXhpbXVtIHZhbHVlIGluIE1icHMuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSB0b3RhbCBtZW1vcnkgc2l6ZSBmb3IgdGhlIGFjY2VsZXJhdG9ycyBvbiBhbiBpbnN0YW5jZSB0eXBlLCBpbiBNaUIuXG4gKiAgRGVmYXVsdDogTm8gbWluaW11bSBvciBtYXhpbXVtIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VsZXJhdG9yVG90YWxNZW1vcnlNaUJSZXF1ZXN0IHtcbi8qKlxuICogVGhlIG1lbW9yeSBtaW5pbXVtIGluIE1pQi5cbiAqL1xuTWluPzogbnVtYmVyXG4vKipcbiAqIFRoZSBtZW1vcnkgbWF4aW11bSBpbiBNaUIuXG4gKi9cbk1heD86IG51bWJlclxufVxuLyoqXG4gKiBUaGUgbWluaW11bSBhbmQgbWF4aW11bSB0b3RhbCBsb2NhbCBzdG9yYWdlIHNpemUgZm9yIGFuIGluc3RhbmNlIHR5cGUsIGluIEdCLlxuICogIERlZmF1bHQ6IE5vIG1pbmltdW0gb3IgbWF4aW11bSBsaW1pdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbExvY2FsU3RvcmFnZUdCUmVxdWVzdCB7XG4vKipcbiAqIFRoZSBzdG9yYWdlIG1pbmltdW0gaW4gR0IuXG4gKi9cbk1pbj86IG51bWJlclxuLyoqXG4gKiBUaGUgc3RvcmFnZSBtYXhpbXVtIGluIEdCLlxuICovXG5NYXg/OiBudW1iZXJcbn1cbi8qKlxuICogQSBzdHJ1Y3R1cmUgdGhhdCBzcGVjaWZpZXMgYSB0YWcgZm9yIHRoZSBgYFRhZ3NgYCBwcm9wZXJ0eSBvZiBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCkgcmVzb3VyY2UuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbVGFnIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGluc3RhbmNlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2VjMi91c2VyZ3VpZGUvYXV0b3NjYWxpbmctdGFnZ2luZy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLiBZb3UgY2FuIGZpbmQgYSBzYW1wbGUgdGVtcGxhdGUgc25pcHBldCBpbiB0aGUgW0V4YW1wbGVzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sI2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLS1leGFtcGxlcykgc2VjdGlvbiBvZiB0aGUgYGBBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwYGAgcmVzb3VyY2UuXG4gKiAgQ2xvdWRGb3JtYXRpb24gYWRkcyB0aGUgZm9sbG93aW5nIHRhZ3MgdG8gYWxsIEF1dG8gU2NhbGluZyBncm91cHMgYW5kIGFzc29jaWF0ZWQgaW5zdGFuY2VzOiBcbiAqICAgKyAgYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLW5hbWVcbiAqICAgKyAgYXdzOmNsb3VkZm9ybWF0aW9uOnN0YWNrLWlkXG4gKiAgICsgIGF3czpjbG91ZGZvcm1hdGlvbjpsb2dpY2FsLWlkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnUHJvcGVydHkge1xuLyoqXG4gKiBUaGUgdGFnIHZhbHVlLlxuICovXG5WYWx1ZTogc3RyaW5nXG4vKipcbiAqIFRoZSB0YWcga2V5LlxuICovXG5LZXk6IHN0cmluZ1xuLyoqXG4gKiBTZXQgdG8gYGB0cnVlYGAgaWYgeW91IHdhbnQgQ2xvdWRGb3JtYXRpb24gdG8gY29weSB0aGUgdGFnIHRvIEVDMiBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgYXMgcGFydCBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBTZXQgdG8gYGBmYWxzZWBgIGlmIHlvdSB3YW50IHRoZSB0YWcgYXR0YWNoZWQgb25seSB0byB0aGUgQXV0byBTY2FsaW5nIGdyb3VwIGFuZCBub3QgY29waWVkIHRvIGFueSBpbnN0YW5jZXMgbGF1bmNoZWQgYXMgcGFydCBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLlxuICovXG5Qcm9wYWdhdGVBdExhdW5jaDogYm9vbGVhblxufVxuLyoqXG4gKiBBIHN0cnVjdHVyZSB0aGF0IHNwZWNpZmllcyBhbiBBbWF6b24gU05TIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgYGBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uc2BgIHByb3BlcnR5IG9mIHRoZSBbQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbCkgcmVzb3VyY2UuXG4gKiAgRm9yIGFuIGV4YW1wbGUgdGVtcGxhdGUgc25pcHBldCwgc2VlIFtDb25maWd1cmUgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgcmVzb3VyY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9xdWlja3JlZi1lYzItYXV0by1zY2FsaW5nLmh0bWwpLlxuICogIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0dldCBBbWF6b24gU05TIG5vdGlmaWNhdGlvbnMgd2hlbiB5b3VyIEF1dG8gU2NhbGluZyBncm91cCBzY2FsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL0FTR2V0dGluZ05vdGlmaWNhdGlvbnMuaHRtbCkgaW4gdGhlICpBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBVc2VyIEd1aWRlKi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb3RpZmljYXRpb25Db25maWd1cmF0aW9uMSB7XG4vKipcbiAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgQW1hem9uIFNOUyB0b3BpYy5cbiAqL1xuVG9waWNBUk46IChzdHJpbmcgfCBzdHJpbmdbXSlcbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgc2VuZCBhIG5vdGlmaWNhdGlvbi4gRXZlbnQgdHlwZXMgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsb3dpbmcgdHlwZXMuIFxuICogICpBbGxvd2VkIHZhbHVlcyo6XG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9MQVVOQ0hgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6RUMyX0lOU1RBTkNFX0xBVU5DSF9FUlJPUmBgIFxuICogICArICAgYGBhdXRvc2NhbGluZzpFQzJfSU5TVEFOQ0VfVEVSTUlOQVRFYGAgXG4gKiAgICsgICBgYGF1dG9zY2FsaW5nOkVDMl9JTlNUQU5DRV9URVJNSU5BVEVfRVJST1JgYCBcbiAqICAgKyAgIGBgYXV0b3NjYWxpbmc6VEVTVF9OT1RJRklDQVRJT05gYFxuICovXG5Ob3RpZmljYXRpb25UeXBlcz86IHN0cmluZ1tdXG59XG4vKipcbiAqIFRoZSBpbnN0YW5jZSBjYXBhY2l0eSBkaXN0cmlidXRpb24gYWNyb3NzIEF2YWlsYWJpbGl0eSBab25lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdmFpbGFiaWxpdHlab25lRGlzdHJpYnV0aW9uIHtcbi8qKlxuICogSWYgbGF1bmNoZXMgZmFpbCBpbiBhbiBBdmFpbGFiaWxpdHkgWm9uZSwgdGhlIGZvbGxvd2luZyBzdHJhdGVnaWVzIGFyZSBhdmFpbGFibGUuIFRoZSBkZWZhdWx0IGlzIGBgYmFsYW5jZWQtYmVzdC1lZmZvcnRgYC4gXG4gKiAgICsgIGBgYmFsYW5jZWQtb25seWBgIC0gSWYgbGF1bmNoZXMgZmFpbCBpbiBhbiBBdmFpbGFiaWxpdHkgWm9uZSwgQXV0byBTY2FsaW5nIHdpbGwgY29udGludWUgdG8gYXR0ZW1wdCB0byBsYXVuY2ggaW4gdGhlIHVuaGVhbHRoeSB6b25lIHRvIHByZXNlcnZlIGEgYmFsYW5jZWQgZGlzdHJpYnV0aW9uLlxuICogICArICBgYGJhbGFuY2VkLWJlc3QtZWZmb3J0YGAgLSBJZiBsYXVuY2hlcyBmYWlsIGluIGFuIEF2YWlsYWJpbGl0eSBab25lLCBBdXRvIFNjYWxpbmcgd2lsbCBhdHRlbXB0IHRvIGxhdW5jaCBpbiBhbm90aGVyIGhlYWx0aHkgQXZhaWxhYmlsaXR5IFpvbmUgaW5zdGVhZC5cbiAqL1xuQ2FwYWNpdHlEaXN0cmlidXRpb25TdHJhdGVneT86IChcImJhbGFuY2VkLWJlc3QtZWZmb3J0XCIgfCBcImJhbGFuY2VkLW9ubHlcIilcbn1cbi8qKlxuICogYGBNZXRyaWNzQ29sbGVjdGlvbmBgIGlzIGEgcHJvcGVydHkgb2YgdGhlIFtBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sKSByZXNvdXJjZSB0aGF0IGRlc2NyaWJlcyB0aGUgZ3JvdXAgbWV0cmljcyB0aGF0IGFuIEFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIGdyb3VwIHNlbmRzIHRvIEFtYXpvbiBDbG91ZFdhdGNoLiBUaGVzZSBtZXRyaWNzIGRlc2NyaWJlIHRoZSBncm91cCByYXRoZXIgdGhhbiBhbnkgb2YgaXRzIGluc3RhbmNlcy4gXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbTW9uaXRvciBDbG91ZFdhdGNoIG1ldHJpY3MgZm9yIHlvdXIgQXV0byBTY2FsaW5nIGdyb3VwcyBhbmQgaW5zdGFuY2VzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9hcy1pbnN0YW5jZS1tb25pdG9yaW5nLmh0bWwpIGluIHRoZSAqQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgVXNlciBHdWlkZSouIFlvdSBjYW4gZmluZCBhIHNhbXBsZSB0ZW1wbGF0ZSBzbmlwcGV0IGluIHRoZSBbRXhhbXBsZXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWwjYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAtLWV4YW1wbGVzKSBzZWN0aW9uIG9mIHRoZSBgYEFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBgYCByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRyaWNzQ29sbGVjdGlvbiB7XG4vKipcbiAqIElkZW50aWZpZXMgdGhlIG1ldHJpY3MgdG8gZW5hYmxlLlxuICogIFlvdSBjYW4gc3BlY2lmeSBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIG1ldHJpY3M6XG4gKiAgICsgICBgYEdyb3VwTWluU2l6ZWBgIFxuICogICArICAgYGBHcm91cE1heFNpemVgYCBcbiAqICAgKyAgIGBgR3JvdXBEZXNpcmVkQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBJblNlcnZpY2VJbnN0YW5jZXNgYCBcbiAqICAgKyAgIGBgR3JvdXBQZW5kaW5nSW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwU3RhbmRieUluc3RhbmNlc2BgIFxuICogICArICAgYGBHcm91cFRlcm1pbmF0aW5nSW5zdGFuY2VzYGAgXG4gKiAgICsgICBgYEdyb3VwVG90YWxJbnN0YW5jZXNgYCBcbiAqICAgKyAgIGBgR3JvdXBJblNlcnZpY2VDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cFBlbmRpbmdDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cFN0YW5kYnlDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cFRlcm1pbmF0aW5nQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgR3JvdXBUb3RhbENhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sRGVzaXJlZENhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sV2FybWVkQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgV2FybVBvb2xQZW5kaW5nQ2FwYWNpdHlgYCBcbiAqICAgKyAgIGBgV2FybVBvb2xUZXJtaW5hdGluZ0NhcGFjaXR5YGAgXG4gKiAgICsgICBgYFdhcm1Qb29sVG90YWxDYXBhY2l0eWBgIFxuICogICArICAgYGBHcm91cEFuZFdhcm1Qb29sRGVzaXJlZENhcGFjaXR5YGAgXG4gKiAgICsgICBgYEdyb3VwQW5kV2FybVBvb2xUb3RhbENhcGFjaXR5YGAgXG4gKiAgIFxuICogIElmIHlvdSBzcGVjaWZ5IGBgR3JhbnVsYXJpdHlgYCBhbmQgZG9uJ3Qgc3BlY2lmeSBhbnkgbWV0cmljcywgYWxsIG1ldHJpY3MgYXJlIGVuYWJsZWQuXG4gKiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbQW1hem9uIENsb3VkV2F0Y2ggbWV0cmljcyBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmddKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdXRvc2NhbGluZy9lYzIvdXNlcmd1aWRlL2VjMi1hdXRvLXNjYWxpbmctbWV0cmljcy5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5NZXRyaWNzPzogc3RyaW5nW11cbi8qKlxuICogVGhlIGZyZXF1ZW5jeSBhdCB3aGljaCBBbWF6b24gRUMyIEF1dG8gU2NhbGluZyBzZW5kcyBhZ2dyZWdhdGVkIGRhdGEgdG8gQ2xvdWRXYXRjaC4gVGhlIG9ubHkgdmFsaWQgdmFsdWUgaXMgYGAxTWludXRlYGAuXG4gKi9cbkdyYW51bGFyaXR5OiBzdHJpbmdcbn1cbi8qKlxuICogQW4gaW5zdGFuY2UgbWFpbnRlbmFuY2UgcG9saWN5LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtTZXQgaW5zdGFuY2UgbWFpbnRlbmFuY2UgcG9saWN5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXV0b3NjYWxpbmcvZWMyL3VzZXJndWlkZS9lYzItYXV0by1zY2FsaW5nLWluc3RhbmNlLW1haW50ZW5hbmNlLXBvbGljeS5odG1sKSBpbiB0aGUgKkFtYXpvbiBFQzIgQXV0byBTY2FsaW5nIFVzZXIgR3VpZGUqLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlTWFpbnRlbmFuY2VQb2xpY3kge1xuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHVwcGVyIHRocmVzaG9sZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGRlc2lyZWQgY2FwYWNpdHkgb2YgdGhlIEF1dG8gU2NhbGluZyBncm91cC4gSXQgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBwZXJjZW50YWdlIG9mIHRoZSBncm91cCB0aGF0IGNhbiBiZSBpbiBzZXJ2aWNlIGFuZCBoZWFsdGh5LCBvciBwZW5kaW5nLCB0byBzdXBwb3J0IHlvdXIgd29ya2xvYWQgd2hlbiByZXBsYWNpbmcgaW5zdGFuY2VzLiBWYWx1ZSByYW5nZSBpcyAxMDAgdG8gMjAwLiBUbyBjbGVhciBhIHByZXZpb3VzbHkgc2V0IHZhbHVlLCBzcGVjaWZ5IGEgdmFsdWUgb2YgYGAtMWBgLlxuICogIEJvdGggYGBNaW5IZWFsdGh5UGVyY2VudGFnZWBgIGFuZCBgYE1heEhlYWx0aHlQZXJjZW50YWdlYGAgbXVzdCBiZSBzcGVjaWZpZWQsIGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAxMDAuIEEgbGFyZ2UgcmFuZ2UgaW5jcmVhc2VzIHRoZSBudW1iZXIgb2YgaW5zdGFuY2VzIHRoYXQgY2FuIGJlIHJlcGxhY2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4gKi9cbk1heEhlYWx0aHlQZXJjZW50YWdlPzogbnVtYmVyXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgbG93ZXIgdGhyZXNob2xkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgZGVzaXJlZCBjYXBhY2l0eSBvZiB0aGUgQXV0byBTY2FsaW5nIGdyb3VwLiBJdCByZXByZXNlbnRzIHRoZSBtaW5pbXVtIHBlcmNlbnRhZ2Ugb2YgdGhlIGdyb3VwIHRvIGtlZXAgaW4gc2VydmljZSwgaGVhbHRoeSwgYW5kIHJlYWR5IHRvIHVzZSB0byBzdXBwb3J0IHlvdXIgd29ya2xvYWQgd2hlbiByZXBsYWNpbmcgaW5zdGFuY2VzLiBWYWx1ZSByYW5nZSBpcyAwIHRvIDEwMC4gVG8gY2xlYXIgYSBwcmV2aW91c2x5IHNldCB2YWx1ZSwgc3BlY2lmeSBhIHZhbHVlIG9mIGBgLTFgYC5cbiAqL1xuTWluSGVhbHRoeVBlcmNlbnRhZ2U/OiBudW1iZXJcbn1cbi8qKlxuICogSWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gZm9yIGEgdHJhZmZpYyBzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhZmZpY1NvdXJjZUlkZW50aWZpZXIge1xuLyoqXG4gKiBQcm92aWRlcyBhZGRpdGlvbmFsIGNvbnRleHQgZm9yIHRoZSB2YWx1ZSBvZiBgYElkZW50aWZpZXJgYC5cbiAqICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSB2YWxpZCB2YWx1ZXM6XG4gKiAgICsgIGBgZWxiYGAgaWYgYGBJZGVudGlmaWVyYGAgaXMgdGhlIG5hbWUgb2YgYSBDbGFzc2ljIExvYWQgQmFsYW5jZXIuXG4gKiAgICsgIGBgZWxidjJgYCBpZiBgYElkZW50aWZpZXJgYCBpcyB0aGUgQVJOIG9mIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIsIEdhdGV3YXkgTG9hZCBCYWxhbmNlciwgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyIHRhcmdldCBncm91cC5cbiAqICAgKyAgYGB2cGMtbGF0dGljZWBgIGlmIGBgSWRlbnRpZmllcmBgIGlzIHRoZSBBUk4gb2YgYSBWUEMgTGF0dGljZSB0YXJnZXQgZ3JvdXAuXG4gKiAgIFxuICogIFJlcXVpcmVkIGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBuYW1lIG9mIGEgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyLlxuICovXG5UeXBlOiBzdHJpbmdcbi8qKlxuICogSWRlbnRpZmllcyB0aGUgdHJhZmZpYyBzb3VyY2UuXG4gKiAgRm9yIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXJzLCBHYXRld2F5IExvYWQgQmFsYW5jZXJzLCBOZXR3b3JrIExvYWQgQmFsYW5jZXJzLCBhbmQgVlBDIExhdHRpY2UsIHRoaXMgd2lsbCBiZSB0aGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgZm9yIGEgdGFyZ2V0IGdyb3VwIGluIHRoaXMgYWNjb3VudCBhbmQgUmVnaW9uLiBGb3IgQ2xhc3NpYyBMb2FkIEJhbGFuY2VycywgdGhpcyB3aWxsIGJlIHRoZSBuYW1lIG9mIHRoZSBDbGFzc2ljIExvYWQgQmFsYW5jZXIgaW4gdGhpcyBhY2NvdW50IGFuZCBSZWdpb24uXG4gKiAgRm9yIGV4YW1wbGU6IFxuICogICArICBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIEFSTjogYGBhcm46YXdzOmVsYXN0aWNsb2FkYmFsYW5jaW5nOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6dGFyZ2V0Z3JvdXAvbXktdGFyZ2V0cy8xMjM0NTY3ODkwMTIzNDU2YGBcbiAqICAgKyAgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyIG5hbWU6IGBgbXktY2xhc3NpYy1sb2FkLWJhbGFuY2VyYGBcbiAqICAgKyAgVlBDIExhdHRpY2UgQVJOOiBgYGFybjphd3M6dnBjLWxhdHRpY2U6dXMtd2VzdC0yOjEyMzQ1Njc4OTAxMjp0YXJnZXRncm91cC90Zy0xMjM0NTY3ODkwMTIzNDU2YGBcbiAqICAgXG4gKiAgVG8gZ2V0IHRoZSBBUk4gb2YgYSB0YXJnZXQgZ3JvdXAgZm9yIGEgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciwgR2F0ZXdheSBMb2FkIEJhbGFuY2VyLCBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXIsIG9yIHRoZSBuYW1lIG9mIGEgQ2xhc3NpYyBMb2FkIEJhbGFuY2VyLCB1c2UgdGhlIEVsYXN0aWMgTG9hZCBCYWxhbmNpbmcgW0Rlc2NyaWJlVGFyZ2V0R3JvdXBzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVUYXJnZXRHcm91cHMuaHRtbCkgYW5kIFtEZXNjcmliZUxvYWRCYWxhbmNlcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZXNjcmliZUxvYWRCYWxhbmNlcnMuaHRtbCkgQVBJIG9wZXJhdGlvbnMuXG4gKiAgVG8gZ2V0IHRoZSBBUk4gb2YgYSB0YXJnZXQgZ3JvdXAgZm9yIFZQQyBMYXR0aWNlLCB1c2UgdGhlIFZQQyBMYXR0aWNlIFtHZXRUYXJnZXRHcm91cF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy1sYXR0aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldFRhcmdldEdyb3VwLmh0bWwpIEFQSSBvcGVyYXRpb24uXG4gKi9cbklkZW50aWZpZXI6IHN0cmluZ1xufVxuLyoqXG4gKiBUaGUgY2FwYWNpdHkgcmVzZXJ2YXRpb24gc3BlY2lmaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXBhY2l0eVJlc2VydmF0aW9uU3BlY2lmaWNhdGlvbiB7XG4vKipcbiAqIFRoZSBjYXBhY2l0eSByZXNlcnZhdGlvbiBwcmVmZXJlbmNlLiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTogXG4gKiAgICsgIGBgY2FwYWNpdHktcmVzZXJ2YXRpb25zLW9ubHlgYCAtIEF1dG8gU2NhbGluZyB3aWxsIG9ubHkgbGF1bmNoIGluc3RhbmNlcyBpbnRvIGEgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gb3IgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gcmVzb3VyY2UgZ3JvdXAuIElmIGNhcGFjaXR5IGlzbid0IGF2YWlsYWJsZSwgaW5zdGFuY2VzIHdpbGwgZmFpbCB0byBsYXVuY2guXG4gKiAgICsgIGBgY2FwYWNpdHktcmVzZXJ2YXRpb25zLWZpcnN0YGAgLSBBdXRvIFNjYWxpbmcgd2lsbCB0cnkgdG8gbGF1bmNoIGluc3RhbmNlcyBpbnRvIGEgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gb3IgQ2FwYWNpdHkgUmVzZXJ2YXRpb24gcmVzb3VyY2UgZ3JvdXAgZmlyc3QuIElmIGNhcGFjaXR5IGlzbid0IGF2YWlsYWJsZSwgaW5zdGFuY2VzIHdpbGwgcnVuIGluIE9uLURlbWFuZCBjYXBhY2l0eS5cbiAqICAgKyAgYGBub25lYGAgLSBBdXRvIFNjYWxpbmcgd2lsbCBub3QgbGF1bmNoIGluc3RhbmNlcyBpbnRvIGEgQ2FwYWNpdHkgUmVzZXJ2YXRpb24uIEluc3RhbmNlcyB3aWxsIHJ1biBpbiBPbi1EZW1hbmQgY2FwYWNpdHkuIFxuICogICArICBgYGRlZmF1bHRgYCAtIEF1dG8gU2NhbGluZyB1c2VzIHRoZSBDYXBhY2l0eSBSZXNlcnZhdGlvbiBwcmVmZXJlbmNlIGZyb20geW91ciBsYXVuY2ggdGVtcGxhdGUgb3IgYW4gb3BlbiBDYXBhY2l0eSBSZXNlcnZhdGlvbi5cbiAqL1xuQ2FwYWNpdHlSZXNlcnZhdGlvblByZWZlcmVuY2U6IHN0cmluZ1xuQ2FwYWNpdHlSZXNlcnZhdGlvblRhcmdldD86IENhcGFjaXR5UmVzZXJ2YXRpb25UYXJnZXRcbn1cbi8qKlxuICogRGVzY3JpYmVzIGEgdGFyZ2V0IENhcGFjaXR5IFJlc2VydmF0aW9uIG9yIENhcGFjaXR5IFJlc2VydmF0aW9uIHJlc291cmNlIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcGFjaXR5UmVzZXJ2YXRpb25UYXJnZXQge1xuQ2FwYWNpdHlSZXNlcnZhdGlvbklkcz86IENhcGFjaXR5UmVzZXJ2YXRpb25JZHNcbkNhcGFjaXR5UmVzZXJ2YXRpb25SZXNvdXJjZUdyb3VwQXJucz86IENhcGFjaXR5UmVzZXJ2YXRpb25SZXNvdXJjZUdyb3VwQXJuc1xufVxuIl19