@cdklabs/cdk-appmod-catalog-blueprints 1.16.0 → 1.16.1

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 (30) hide show
  1. package/.jsii +38 -31
  2. package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
  3. package/lib/document-processing/agentic-document-processing.js +1 -1
  4. package/lib/document-processing/base-document-processing.js +1 -1
  5. package/lib/document-processing/bedrock-document-processing.js +1 -1
  6. package/lib/document-processing/default-document-processing-config.js +1 -1
  7. package/lib/framework/agents/base-agent.js +1 -1
  8. package/lib/framework/agents/batch-agent.js +1 -1
  9. package/lib/framework/agents/default-agent-config.js +1 -1
  10. package/lib/framework/agents/interactive-agent.js +88 -11
  11. package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
  12. package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +1 -1
  13. package/lib/framework/bedrock/bedrock.js +1 -1
  14. package/lib/framework/custom-resource/default-runtimes.js +1 -1
  15. package/lib/framework/foundation/access-log.js +1 -1
  16. package/lib/framework/foundation/eventbridge-broker.js +1 -1
  17. package/lib/framework/foundation/network.d.ts +1 -1
  18. package/lib/framework/foundation/network.js +8 -3
  19. package/lib/tsconfig.tsbuildinfo +1 -1
  20. package/lib/utilities/data-loader.js +1 -1
  21. package/lib/utilities/lambda-iam-utils.js +1 -1
  22. package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
  23. package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
  24. package/lib/utilities/observability/default-observability-config.js +1 -1
  25. package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
  26. package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
  27. package/lib/utilities/observability/powertools-config.js +1 -1
  28. package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
  29. package/lib/webapp/frontend-construct.js +1 -1
  30. package/package.json +1 -1
package/.jsii CHANGED
@@ -12919,7 +12919,7 @@
12919
12919
  },
12920
12920
  "locationInModule": {
12921
12921
  "filename": "use-cases/framework/agents/interactive-agent.ts",
12922
- "line": 1830
12922
+ "line": 1912
12923
12923
  },
12924
12924
  "parameters": [
12925
12925
  {
@@ -12945,7 +12945,7 @@
12945
12945
  "kind": "class",
12946
12946
  "locationInModule": {
12947
12947
  "filename": "use-cases/framework/agents/interactive-agent.ts",
12948
- "line": 1808
12948
+ "line": 1890
12949
12949
  },
12950
12950
  "name": "InteractiveAgent",
12951
12951
  "properties": [
@@ -12956,7 +12956,7 @@
12956
12956
  "immutable": true,
12957
12957
  "locationInModule": {
12958
12958
  "filename": "use-cases/framework/agents/interactive-agent.ts",
12959
- "line": 1814
12959
+ "line": 1896
12960
12960
  },
12961
12961
  "name": "apiEndpoint",
12962
12962
  "type": {
@@ -12970,7 +12970,7 @@
12970
12970
  "immutable": true,
12971
12971
  "locationInModule": {
12972
12972
  "filename": "use-cases/framework/agents/interactive-agent.ts",
12973
- "line": 1810
12973
+ "line": 1892
12974
12974
  },
12975
12975
  "name": "adapter",
12976
12976
  "optional": true,
@@ -12987,7 +12987,7 @@
12987
12987
  "immutable": true,
12988
12988
  "locationInModule": {
12989
12989
  "filename": "use-cases/framework/agents/interactive-agent.ts",
12990
- "line": 1809
12990
+ "line": 1891
12991
12991
  },
12992
12992
  "name": "agentFunction",
12993
12993
  "optional": true,
@@ -13003,7 +13003,7 @@
13003
13003
  "immutable": true,
13004
13004
  "locationInModule": {
13005
13005
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13006
- "line": 1813
13006
+ "line": 1895
13007
13007
  },
13008
13008
  "name": "authenticator",
13009
13009
  "optional": true,
@@ -13018,7 +13018,7 @@
13018
13018
  "immutable": true,
13019
13019
  "locationInModule": {
13020
13020
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13021
- "line": 1816
13021
+ "line": 1898
13022
13022
  },
13023
13023
  "name": "cfnRuntime",
13024
13024
  "optional": true,
@@ -13034,7 +13034,7 @@
13034
13034
  "immutable": true,
13035
13035
  "locationInModule": {
13036
13036
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13037
- "line": 1828
13037
+ "line": 1910
13038
13038
  },
13039
13039
  "name": "cognitoAuthorizer",
13040
13040
  "optional": true,
@@ -13049,7 +13049,7 @@
13049
13049
  "immutable": true,
13050
13050
  "locationInModule": {
13051
13051
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13052
- "line": 1812
13052
+ "line": 1894
13053
13053
  },
13054
13054
  "name": "contextStrategy",
13055
13055
  "optional": true,
@@ -13065,7 +13065,7 @@
13065
13065
  "immutable": true,
13066
13066
  "locationInModule": {
13067
13067
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13068
- "line": 1824
13068
+ "line": 1906
13069
13069
  },
13070
13070
  "name": "restApi",
13071
13071
  "optional": true,
@@ -13080,7 +13080,7 @@
13080
13080
  "immutable": true,
13081
13081
  "locationInModule": {
13082
13082
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13083
- "line": 1815
13083
+ "line": 1897
13084
13084
  },
13085
13085
  "name": "sessionBucket",
13086
13086
  "optional": true,
@@ -13096,7 +13096,7 @@
13096
13096
  "immutable": true,
13097
13097
  "locationInModule": {
13098
13098
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13099
- "line": 1820
13099
+ "line": 1902
13100
13100
  },
13101
13101
  "name": "sessionIndex",
13102
13102
  "optional": true,
@@ -13111,7 +13111,7 @@
13111
13111
  "immutable": true,
13112
13112
  "locationInModule": {
13113
13113
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13114
- "line": 1811
13114
+ "line": 1893
13115
13115
  },
13116
13116
  "name": "sessionStore",
13117
13117
  "optional": true,
@@ -13137,7 +13137,7 @@
13137
13137
  "kind": "interface",
13138
13138
  "locationInModule": {
13139
13139
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13140
- "line": 1638
13140
+ "line": 1720
13141
13141
  },
13142
13142
  "name": "InteractiveAgentProps",
13143
13143
  "properties": [
@@ -13151,7 +13151,7 @@
13151
13151
  "immutable": true,
13152
13152
  "locationInModule": {
13153
13153
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13154
- "line": 1747
13154
+ "line": 1829
13155
13155
  },
13156
13156
  "name": "architecture",
13157
13157
  "optional": true,
@@ -13169,7 +13169,7 @@
13169
13169
  "immutable": true,
13170
13170
  "locationInModule": {
13171
13171
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13172
- "line": 1717
13172
+ "line": 1799
13173
13173
  },
13174
13174
  "name": "authenticator",
13175
13175
  "optional": true,
@@ -13187,7 +13187,7 @@
13187
13187
  "immutable": true,
13188
13188
  "locationInModule": {
13189
13189
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13190
- "line": 1657
13190
+ "line": 1739
13191
13191
  },
13192
13192
  "name": "communicationAdapter",
13193
13193
  "optional": true,
@@ -13206,7 +13206,7 @@
13206
13206
  "immutable": true,
13207
13207
  "locationInModule": {
13208
13208
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13209
- "line": 1699
13209
+ "line": 1781
13210
13210
  },
13211
13211
  "name": "contextStrategy",
13212
13212
  "optional": true,
@@ -13225,7 +13225,7 @@
13225
13225
  "immutable": true,
13226
13226
  "locationInModule": {
13227
13227
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13228
- "line": 1726
13228
+ "line": 1808
13229
13229
  },
13230
13230
  "name": "corsAllowMethods",
13231
13231
  "optional": true,
@@ -13249,7 +13249,7 @@
13249
13249
  "immutable": true,
13250
13250
  "locationInModule": {
13251
13251
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13252
- "line": 1651
13252
+ "line": 1733
13253
13253
  },
13254
13254
  "name": "hostingAdapter",
13255
13255
  "optional": true,
@@ -13267,7 +13267,7 @@
13267
13267
  "immutable": true,
13268
13268
  "locationInModule": {
13269
13269
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13270
- "line": 1733
13270
+ "line": 1815
13271
13271
  },
13272
13272
  "name": "memorySize",
13273
13273
  "optional": true,
@@ -13287,7 +13287,7 @@
13287
13287
  "immutable": true,
13288
13288
  "locationInModule": {
13289
13289
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13290
- "line": 1710
13290
+ "line": 1792
13291
13291
  },
13292
13292
  "name": "messageHistoryLimit",
13293
13293
  "optional": true,
@@ -13305,7 +13305,7 @@
13305
13305
  "immutable": true,
13306
13306
  "locationInModule": {
13307
13307
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13308
- "line": 1754
13308
+ "line": 1836
13309
13309
  },
13310
13310
  "name": "reservedConcurrentExecutions",
13311
13311
  "optional": true,
@@ -13324,7 +13324,7 @@
13324
13324
  "immutable": true,
13325
13325
  "locationInModule": {
13326
13326
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13327
- "line": 1675
13327
+ "line": 1757
13328
13328
  },
13329
13329
  "name": "sessionBucket",
13330
13330
  "optional": true,
@@ -13343,7 +13343,7 @@
13343
13343
  "immutable": true,
13344
13344
  "locationInModule": {
13345
13345
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13346
- "line": 1690
13346
+ "line": 1772
13347
13347
  },
13348
13348
  "name": "sessionIndex",
13349
13349
  "optional": true,
@@ -13363,7 +13363,7 @@
13363
13363
  "immutable": true,
13364
13364
  "locationInModule": {
13365
13365
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13366
- "line": 1667
13366
+ "line": 1749
13367
13367
  },
13368
13368
  "name": "sessionStore",
13369
13369
  "optional": true,
@@ -13381,7 +13381,7 @@
13381
13381
  "immutable": true,
13382
13382
  "locationInModule": {
13383
13383
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13384
- "line": 1682
13384
+ "line": 1764
13385
13385
  },
13386
13386
  "name": "sessionTTL",
13387
13387
  "optional": true,
@@ -13399,7 +13399,7 @@
13399
13399
  "immutable": true,
13400
13400
  "locationInModule": {
13401
13401
  "filename": "use-cases/framework/agents/interactive-agent.ts",
13402
- "line": 1740
13402
+ "line": 1822
13403
13403
  },
13404
13404
  "name": "timeout",
13405
13405
  "optional": true,
@@ -14952,7 +14952,7 @@
14952
14952
  },
14953
14953
  "locationInModule": {
14954
14954
  "filename": "use-cases/framework/foundation/network.ts",
14955
- "line": 102
14955
+ "line": 108
14956
14956
  },
14957
14957
  "name": "applicationSubnetSelection",
14958
14958
  "returns": {
@@ -14989,6 +14989,13 @@
14989
14989
  "type": {
14990
14990
  "fqn": "aws-cdk-lib.aws_ec2.IPeer"
14991
14991
  }
14992
+ },
14993
+ {
14994
+ "name": "privateDnsEnabled",
14995
+ "optional": true,
14996
+ "type": {
14997
+ "primitive": "boolean"
14998
+ }
14992
14999
  }
14993
15000
  ],
14994
15001
  "returns": {
@@ -16941,6 +16948,6 @@
16941
16948
  "usedFeatures": [
16942
16949
  "class-covariant-overrides"
16943
16950
  ],
16944
- "version": "1.16.0",
16945
- "fingerprint": "qMgFSYJ/Ddnd7v4XlRse9mWTeos+hvInFuI+o5b9pn0="
16951
+ "version": "1.16.1",
16952
+ "fingerprint": "nOqZiA30a8KUi5UCggWI5QXGJVUGSDTSvDdKdI1JR+o="
16946
16953
  }
@@ -240,5 +240,5 @@ class QueuedS3Adapter {
240
240
  }
241
241
  exports.QueuedS3Adapter = QueuedS3Adapter;
242
242
  _a = JSII_RTTI_SYMBOL_1;
243
- QueuedS3Adapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.QueuedS3Adapter", version: "1.16.0" };
243
+ QueuedS3Adapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.QueuedS3Adapter", version: "1.16.1" };
244
244
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkLXMzLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9hZGFwdGVyL3F1ZXVlZC1zMy1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0QyxrQ0FBa0M7QUFDbEMsOEVBQWtFO0FBQ2xFLDZDQUFzRDtBQUN0RCxpREFBcUU7QUFDckUsaURBQXNHO0FBQ3RHLGlEQUEwQztBQUUxQyxtRkFBc0U7QUFDdEUsK0NBQXlFO0FBQ3pFLDJFQUFrRTtBQUNsRSxpREFBNkQ7QUFDN0QscUVBQThFO0FBQzlFLGlGQUFxRTtBQUlyRSwrQ0FBa0Q7QUFDbEQsK0NBQStGO0FBQy9GLDhGQUF3RjtBQTREeEY7OztHQUdHO0FBQ0gsTUFBYSxlQUFlO0lBSzFCLFlBQVksZUFBcUMsRUFBRTtRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1lBQzlELFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQztZQUNoRixNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7U0FDeEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxNQUEwQixFQUFFLFlBQW9CO1FBQ3RFLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7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QUMsU0FBUyxJQUFJLENBQUM7WUFDdkMsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7QUFqUUgsMENBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBQeXRob25GdW5jdGlvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFNxc0V2ZW50U291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgRXZlbnRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFNxc0Rlc3RpbmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLW5vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgUXVldWUsIFF1ZXVlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zcXMnO1xuaW1wb3J0IHsgQ2hhaW4sIEpzb25QYXRoLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBDYWxsQXdzU2VydmljZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIH0gZnJvbSAnLi4vYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IElBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZywgTGFtYmRhSWFtVXRpbHMsIFBvd2VydG9vbHNDb25maWcgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB9IGZyb20gJy4uL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcnO1xuXG4vKipcbiAqIFN0cnVjdCBmb3IgUzMgUHJlZml4ZXNcbiAqL1xuaW50ZXJmYWNlIFMzUHJlZml4ZXMge1xuICByZWFkb25seSByYXc6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvY2Vzc2VkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZhaWxlZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUXVldWVkIFMzIEFkYXB0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZWRTM0FkYXB0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIGRvY3VtZW50IHN0b3JhZ2Ugd2l0aCBvcmdhbml6ZWQgcHJlZml4ZXMgKHJhdy8sIHByb2Nlc3NlZC8sIGZhaWxlZC8pLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhdXRvLWRlbGV0ZSBlbmFibGVkIGJhc2VkIG9uIHJlbW92YWxQb2xpY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IGNyZWF0ZSBhIG5ldyBidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IEJ1Y2tldDtcblxuICAvKipcbiAgICogUzMgcHJlZml4IHdoZXJlIHRoZSByYXcgZmlsZXMgd291bGQgYmUgc3RvcmVkLlxuICAgKiBUaGlzIHNlcnZlcyBhcyB0aGUgdHJpZ2dlciBwb2ludCBmb3IgcHJvY2Vzc2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBcInJhdy9cIlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3UHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTMyBwcmVmaXggd2hlcmUgdGhlIHByb2Nlc3NlZCBmaWxlcyB3b3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwicHJvY2Vzc2VkL1wiXG4gICAqL1xuICByZWFkb25seSBwcm9jZXNzZWRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHByZWZpeCB3aGVyZSB0aGUgZmlsZXMgdGhhdCBmYWlsZWQgcHJvY2Vzc2luZyB3b3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZmFpbGVkL1wiXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNRUyBxdWV1ZSB2aXNpYmlsaXR5IHRpbWVvdXQgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMuXG4gICAqIFNob3VsZCBiZSBsb25nZXIgdGhhbiBleHBlY3RlZCBwcm9jZXNzaW5nIHRpbWUgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZy5cbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMDApXG4gICAqL1xuICByZWFkb25seSBxdWV1ZVZpc2liaWxpdHlUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgYSBtZXNzYWdlIGNhbiBiZSB1bnN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSBkbHFNYXhSZWNlaXZlQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyBhZGFwdGVyIGFsbG93cyB0aGUgaW50ZWxsaWdlbnQgZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd1xuICogdG8gYmUgdHJpZ2dlcmVkIGJ5IGZpbGVzIHRoYXQgYXJlIHVwbG9hZGVkIGludG8gYSBTMyBCdWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWV1ZWRTM0FkYXB0ZXIgaW1wbGVtZW50cyBJQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlclByb3BzOiBRdWV1ZWRTM0FkYXB0ZXJQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZml4ZXM6IFMzUHJlZml4ZXM7XG5cbiAgY29uc3RydWN0b3IoYWRhcHRlclByb3BzOiBRdWV1ZWRTM0FkYXB0ZXJQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5hZGFwdGVyUHJvcHMgPSBhZGFwdGVyUHJvcHM7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbiAgICB0aGlzLnByZWZpeGVzID0ge1xuICAgICAgcmF3OiB0aGlzLm5vcm1hbGl6ZVByZWZpeCh0aGlzLmFkYXB0ZXJQcm9wcy5yYXdQcmVmaXgsICdyYXcvJyksXG4gICAgICBwcm9jZXNzZWQ6IHRoaXMubm9ybWFsaXplUHJlZml4KHRoaXMuYWRhcHRlclByb3BzLnByb2Nlc3NlZFByZWZpeCwgJ3Byb2Nlc3NlZC8nKSxcbiAgICAgIGZhaWxlZDogdGhpcy5ub3JtYWxpemVQcmVmaXgodGhpcy5hZGFwdGVyUHJvcHMuZmFpbGVkUHJlZml4LCAnZmFpbGVkLycpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyBhIHByZWZpeCBlbmRzIHdpdGggJy8nLlxuICAgKiBAcGFyYW0gcHJlZml4IC0gVGhlIHByZWZpeCB0byBub3JtYWxpemVcbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcHJlZml4IGlzIHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwcmVmaXggZW5kaW5nIHdpdGggJy8nXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVByZWZpeChwcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeC5lbmRzV2l0aCgnLycpID8gcHJlZml4IDogYCR7cHJlZml4fS9gO1xuICB9XG5cbiAgaW5pdChzY29wZTogQ29uc3RydWN0LCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKTogdm9pZCB7XG4gICAgaWYgKHByb3BzLm5ldHdvcmspIHtcbiAgICAgIHByb3BzLm5ldHdvcmsuY3JlYXRlU2VydmljZUVuZHBvaW50KCd2cGNlLXNxcycsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TUVMpO1xuICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtczMnLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcm9wcy5lbmNyeXB0aW9uS2V5IHx8IG5ldyBLZXkoc2NvcGUsICdRdWV1ZWRTM0FkYXB0ZXJFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIHRoaXMucmVzb3VyY2VzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5O1xuXG4gICAgY29uc3QgYnVja2V0ID0gdGhpcy5hZGFwdGVyUHJvcHMuYnVja2V0IHx8IG5ldyBCdWNrZXQoc2NvcGUsICdEb2N1bWVudFByb2Nlc3NpbmdCdWNrZXQnLCB7XG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogKHByb3BzLnJlbW92YWxQb2xpY3kgJiYgcHJvcHMucmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKSB8fCAhcHJvcHMucmVtb3ZhbFBvbGljeSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5LTVMsIC8vIFVzZXMgQVdTLW1hbmFnZWQgS01TIGtleSBmb3IgZW5jcnlwdGlvbiBhdCByZXN0XG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYnVja2V0S2V5RW5hYmxlZDogdHJ1ZSwgLy8gUmVkdWNlcyBLTVMgY29zdHMgYnkgdXNpbmcgUzMgQnVja2V0IEtleXNcbiAgICB9KTtcblxuICAgIHRoaXMucmVzb3VyY2VzLmJ1Y2tldCA9IGJ1Y2tldDtcblxuICAgIGNvbnN0IGRlYWRMZXR0ZXJRdWV1ZSA9IG5ldyBRdWV1ZShzY29wZSwgJ0RvY3VtZW50UHJvY2Vzc2luZ0RMUScsIHtcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiB0aGlzLmFkYXB0ZXJQcm9wcy5xdWV1ZVZpc2liaWxpdHlUaW1lb3V0IHx8IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBlbmNyeXB0aW9uS2V5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWUoc2NvcGUsICdEb2N1bWVudFByb2Nlc3NpbmdRdWV1ZScsIHtcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiB0aGlzLmFkYXB0ZXJQcm9wcy5xdWV1ZVZpc2liaWxpdHlUaW1lb3V0IHx8IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZToge1xuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IHRoaXMuYWRhcHRlclByb3BzLmRscU1heFJlY2VpdmVDb3VudCB8fCA1LFxuICAgICAgICBxdWV1ZTogZGVhZExldHRlclF1ZXVlLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBlbmNyeXB0aW9uS2V5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMuZGVhZExldHRlclF1ZXVlID0gZGVhZExldHRlclF1ZXVlO1xuICAgIHRoaXMucmVzb3VyY2VzLnF1ZXVlID0gcXVldWU7XG4gIH1cblxuICBjcmVhdGVJbmdyZXNzVHJpZ2dlcihzY29wZTogQ29uc3RydWN0LCBzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZSwgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuICAgIGNvbnN0IHF1ZXVlOiBRdWV1ZSA9IHRoaXMucmVzb3VyY2VzLnF1ZXVlO1xuICAgIGNvbnN0IGVuY3J5cHRpb25LZXk6IEtleSA9IHRoaXMucmVzb3VyY2VzLmVuY3J5cHRpb25LZXk7XG5cbiAgICBidWNrZXQuYWRkRXZlbnROb3RpZmljYXRpb24oRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVELCBuZXcgU3FzRGVzdGluYXRpb24ocXVldWUpLCB7XG4gICAgICBwcmVmaXg6IHRoaXMucHJlZml4ZXMucmF3LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3FzQ29uc3VtZXJMYW1iZGFGbiA9IHRoaXMuY3JlYXRlU1FTQ29uc3VtZXJMYW1iZGEoc2NvcGUsIHN0YXRlTWFjaGluZSwgcHJvcHMsIGVuY3J5cHRpb25LZXksIHF1ZXVlKTtcblxuICAgIHRoaXMucmVzb3VyY2VzLnNxc0NvbnN1bWVyTGFtYmRhRnVuY3Rpb24gPSBzcXNDb25zdW1lckxhbWJkYUZuO1xuXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTUVNDb25zdW1lckxhbWJkYShzY29wZTogQ29uc3RydWN0LCBzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZVxuICAgICwgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcywgZW5jcnlwdGlvbktleTogS2V5LCBxdWV1ZTogUXVldWUpOiBGdW5jdGlvbiB7XG4gICAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICBjb25zdCBtZXRyaWNTZXJ2aWNlTmFtZSA9IHByb3BzLm1ldHJpY1NlcnZpY2VOYW1lIHx8IERlZmF1bHREb2N1bWVudFByb2Nlc3NpbmdDb25maWcuREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRTtcblxuICAgIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBMYW1iZGFJYW1VdGlscy5nZXRTdGFja0luZm8oc2NvcGUpO1xuICAgIC8vIENyZWF0ZSBsb2dzIHBlcm1pc3Npb25zIGFuZCBnZXQgdW5pcXVlIGZ1bmN0aW9uIG5hbWVcbiAgICBjb25zdCBsb2dzUGVybWlzc2lvbnMgPSBMYW1iZGFJYW1VdGlscy5jcmVhdGVMb2dzUGVybWlzc2lvbnMoe1xuICAgICAgc2NvcGUsXG4gICAgICBmdW5jdGlvbk5hbWU6ICdTUVNDb25zdW1lcicsXG4gICAgICByZWdpb24sXG4gICAgICBhY2NvdW50LFxuICAgICAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBwb2xpY3kgc3RhdGVtZW50cyBmb3IgU1FTIGNvbnN1bWVyIExhbWJkYVxuICAgIGNvbnN0IHBvbGljeVN0YXRlbWVudHMgPSBbXG4gICAgICAuLi5sb2dzUGVybWlzc2lvbnMucG9saWN5U3RhdGVtZW50cyxcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydzdGF0ZXM6U3RhcnRFeGVjdXRpb24nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybl0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgaWYgKHByb3BzLm5ldHdvcmspIHtcbiAgICAgIHBvbGljeVN0YXRlbWVudHMucHVzaChMYW1iZGFJYW1VdGlscy5nZW5lcmF0ZUxhbWJkYVZQQ1Blcm1pc3Npb25zKCkpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBJQU0gcm9sZSBmb3IgU1FTIGNvbnN1bWVyIExhbWJkYVxuICAgIGNvbnN0IHNxc0NvbnN1bWVyUm9sZSA9IG5ldyBSb2xlKHNjb3BlLCAnU1FTQ29uc3VtZXJSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFNRU0NvbnN1bWVyRXhlY3V0aW9uUG9saWN5OiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IHBvbGljeVN0YXRlbWVudHMsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0RGVjcnlwdChzcXNDb25zdW1lclJvbGUpO1xuXG4gICAgLy8gQ3JlYXRlIFNRUyBjb25zdW1lciBMYW1iZGEgZnVuY3Rpb25cbiAgICBjb25zdCBzcXNDb25zdW1lckxhbWJkYSA9IG5ldyBQeXRob25GdW5jdGlvbihzY29wZSwgJ1NRU0NvbnN1bWVyJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBsb2dzUGVybWlzc2lvbnMudW5pcXVlRnVuY3Rpb25OYW1lLFxuICAgICAgcnVudGltZTogRGVmYXVsdFJ1bnRpbWVzLlBZVEhPTixcbiAgICAgIHJvbGU6IHNxc0NvbnN1bWVyUm9sZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLy4uL3Jlc291cmNlcy9kZWZhdWx0LXNxcy1jb25zdW1lcicpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU1RBVEVfTUFDSElORV9BUk46IHN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgIFJBV19QUkVGSVg6IHRoaXMucHJlZml4ZXMucmF3LFxuICAgICAgICAuLi5Qb3dlcnRvb2xzQ29uZmlnLmdlbmVyYXRlRGVmYXVsdExhbWJkYUNvbmZpZyhwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LCBtZXRyaWNOYW1lc3BhY2UsIG1ldHJpY1NlcnZpY2VOYW1lKSxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgZGVzY3JpcHRpb246ICdDb25zdW1lcyBTUVMgbWVzc2FnZXMgYW5kIHRyaWdnZXJzIFN0ZXAgRnVuY3Rpb25zIGV4ZWN1dGlvbnMgZm9yIGRvY3VtZW50IHByb2Nlc3NpbmcnLFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiBlbmNyeXB0aW9uS2V5LFxuICAgICAgdnBjOiBwcm9wcy5uZXR3b3JrID8gcHJvcHMubmV0d29yay52cGMgOiB1bmRlZmluZWQsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy5uZXR3b3JrID8gcHJvcHMubmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIFNRUyBldmVudCBzb3VyY2UgdG8gTGFtYmRhXG4gICAgc3FzQ29uc3VtZXJMYW1iZGEuYWRkRXZlbnRTb3VyY2UoXG4gICAgICBuZXcgU3FzRXZlbnRTb3VyY2UocXVldWUsIHtcbiAgICAgICAgYmF0Y2hTaXplOiAxMCxcbiAgICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBzcXNDb25zdW1lckxhbWJkYTtcbiAgfVxuXG4gIGdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKGFkZGl0aW9uYWxJQU1BY3Rpb25zPzogc3RyaW5nW10sIG5hcnJvd0FjdGlvbnM/OiBib29sZWFuKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZElBTUFjdGlvbnMgPSBhZGRpdGlvbmFsSUFNQWN0aW9ucyB8fCBbXTtcblxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXTtcbiAgICBpZiAoIW5hcnJvd0FjdGlvbnMpIHtcbiAgICAgIHN0YXRlbWVudHMucHVzaChuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkNvcHlPYmplY3QnLCAnczM6RGVsZXRlT2JqZWN0JywgJ3MzOlB1dE9iamVjdCcsICdzMzpMaXN0KicsIC4uLm5vcm1hbGl6ZWRJQU1BY3Rpb25zXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmAsIGJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoYnVja2V0LmVuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdrbXM6RW5jcnlwdCcsXG4gICAgICAgICAgICAna21zOlJlRW5jcnlwdConLFxuICAgICAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXkqJyxcbiAgICAgICAgICAgICdrbXM6RGVjcnlwdCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtidWNrZXQuZW5jcnlwdGlvbktleS5rZXlBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVtZW50cy5wdXNoKG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogbm9ybWFsaXplZElBTUFjdGlvbnMsXG4gICAgICAgIHJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGNyZWF0ZUZhaWxlZENoYWluKHNjb3BlOiBDb25zdHJ1Y3QsIGlkUHJlZml4Pzogc3RyaW5nKTogQ2hhaW4ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuICAgIGNvbnN0IHByZWZpeCA9IGlkUHJlZml4ID8gYCR7aWRQcmVmaXh9LWAgOiAnJztcblxuICAgIGNvbnN0IGZhaWxlZENoYWluID0gbmV3IENhbGxBd3NTZXJ2aWNlKHNjb3BlLCBgJHtwcmVmaXh9Q29weVRvRmFpbGVkYCwge1xuICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgIGFjdGlvbjogJ2NvcHlPYmplY3QnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWNrZXQ6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuYnVja2V0JyksXG4gICAgICAgIENvcHlTb3VyY2U6IEpzb25QYXRoLmZvcm1hdCgne30ve30nLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmJ1Y2tldCcpLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmtleScpKSxcbiAgICAgICAgS2V5OiBKc29uUGF0aC5mb3JtYXQoYCR7dGhpcy5wcmVmaXhlcy5mYWlsZWR9e30ve31gLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJyksIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuZmlsZW5hbWUnKSksXG4gICAgICB9LFxuICAgICAgaWFtUmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmBdLFxuICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICB9KS5uZXh0KFxuICAgICAgbmV3IENhbGxBd3NTZXJ2aWNlKHNjb3BlLCBgJHtwcmVmaXh9RGVsZXRlRnJvbVJhd2AsIHtcbiAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgYWN0aW9uOiAnZGVsZXRlT2JqZWN0JyxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgICBLZXk6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JyksXG4gICAgICAgIH0sXG4gICAgICAgIGlhbVJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFpbGVkQ2hhaW47XG4gIH1cblxuICBjcmVhdGVTdWNjZXNzQ2hhaW4oc2NvcGU6IENvbnN0cnVjdCwgaWRQcmVmaXg/OiBzdHJpbmcpOiBDaGFpbiB7XG4gICAgY29uc3QgYnVja2V0OiBCdWNrZXQgPSB0aGlzLnJlc291cmNlcy5idWNrZXQ7XG4gICAgY29uc3QgcHJlZml4ID0gaWRQcmVmaXggPyBgJHtpZFByZWZpeH0tYCA6ICcnO1xuXG4gICAgY29uc3QgY2hhaW4gPSBuZXcgQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsIGAke3ByZWZpeH1Db3B5VG9Qcm9jZXNzZWRgLCB7XG4gICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgYWN0aW9uOiAnY29weU9iamVjdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgQ29weVNvdXJjZTogSnNvblBhdGguZm9ybWF0KCd7fS97fScsIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuYnVja2V0JyksIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JykpLFxuICAgICAgICBLZXk6IEpzb25QYXRoLmZvcm1hdChgJHt0aGlzLnByZWZpeGVzLnByb2Nlc3NlZH17fS97fWAsIEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSwgSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5maWxlbmFtZScpKSxcbiAgICAgIH0sXG4gICAgICBpYW1SZXNvdXJjZXM6IFtgJHtidWNrZXQuYnVja2V0QXJufS8qYF0sXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pLm5leHQoXG4gICAgICBuZXcgQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsIGAke3ByZWZpeH1EZWxldGVGcm9tUmF3U3VjY2Vzc2AsIHtcbiAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgYWN0aW9uOiAnZGVsZXRlT2JqZWN0JyxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgICBLZXk6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JyksXG4gICAgICAgIH0sXG4gICAgICAgIGlhbVJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gY2hhaW47XG4gIH1cbn0iXX0=
@@ -39,5 +39,5 @@ class AgenticDocumentProcessing extends bedrock_document_processing_1.BedrockDoc
39
39
  }
40
40
  exports.AgenticDocumentProcessing = AgenticDocumentProcessing;
41
41
  _a = JSII_RTTI_SYMBOL_1;
42
- AgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgenticDocumentProcessing", version: "1.16.0" };
42
+ AgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgenticDocumentProcessing", version: "1.16.1" };
43
43
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUZBQW1FO0FBR25FLCtFQUEwRztBQUMxRyw0Q0FBMkQ7QUFXM0QsTUFBYSx5QkFBMEIsU0FBUSx1REFBeUI7SUFNdEUsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsY0FBYztRQUN0Qiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsOEJBQWdFLENBQUM7WUFDekYsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHNCQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBRS9FLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pGLEtBQUssTUFBTSxTQUFTLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFFRCx1R0FBdUc7UUFDdkcsSUFBSSxJQUFJLENBQUMsNkJBQTZCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUVyQyxPQUFPLElBQUksc0NBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3BDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWM7WUFDL0MsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxjQUFjLEVBQUU7Z0JBQ2QsVUFBVSxFQUFFLGtCQUFrQjthQUMvQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdkNILDhEQXdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhbWJkYUludm9rZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfSBmcm9tICcuL2Jhc2UtZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgfSBmcm9tICcuL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBCYXRjaEFnZW50LCBCYXRjaEFnZW50UHJvcHMgfSBmcm9tICcuLi9mcmFtZXdvcmsnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGV4dGVuZHMgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoaXMgcGFyYW1ldGVyIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogYHByb2Nlc3NpbmdCZWRyb2NrTW9kZWxgIHBhcmFtZXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb2Nlc3NpbmdBZ2VudFBhcmFtZXRlcnM6IEJhdGNoQWdlbnRQcm9wcztcbn1cblxuZXhwb3J0IGNsYXNzIEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmcgZXh0ZW5kcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nIHtcbiAgLyoqIENhY2hlZCBiYXRjaCBhZ2VudCB0byBhdm9pZCBkdXBsaWNhdGUgcmVzb3VyY2UgY3JlYXRpb24gKi9cbiAgcHJpdmF0ZSBfYmF0Y2hBZ2VudD86IEJhdGNoQWdlbnQ7XG4gIC8qKiBDb3VudGVyIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBwcm9jZXNzaW5nIHN0ZXAgSURzICovXG4gIHByaXZhdGUgX2FnZW50aWNQcm9jZXNzaW5nU3RlcENvdW50ZXI/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICAvLyBDcmVhdGUgQmF0Y2hBZ2VudCBvbmx5IG9uY2VcbiAgICBpZiAoIXRoaXMuX2JhdGNoQWdlbnQpIHtcbiAgICAgIGNvbnN0IGFnZW50UHJvcHMgPSB0aGlzLmJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyBhcyBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHM7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nQWdlbnRQcm9wcyA9IGFnZW50UHJvcHMucHJvY2Vzc2luZ0FnZW50UGFyYW1ldGVycztcbiAgICAgIHRoaXMuX2JhdGNoQWdlbnQgPSBuZXcgQmF0Y2hBZ2VudCh0aGlzLCAnSURQQmF0Y2hBZ2VudCcsIHByb2Nlc3NpbmdBZ2VudFByb3BzKTtcblxuICAgICAgY29uc3QgYWRhcHRlclBvbGljeVN0YXRlbWVudHMgPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKCk7XG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhZGFwdGVyUG9saWN5U3RhdGVtZW50cykge1xuICAgICAgICB0aGlzLl9iYXRjaEFnZW50LmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgY291bnRlciBpZiBub3QgeWV0IHNldCAoaGFuZGxlcyBjYXNlIHdoZXJlIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIGNvbnN0cnVjdG9yIGNvbXBsZXRlcylcbiAgICBpZiAodGhpcy5fYWdlbnRpY1Byb2Nlc3NpbmdTdGVwQ291bnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9hZ2VudGljUHJvY2Vzc2luZ1N0ZXBDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgY3JlYXRlIGEgbmV3IExhbWJkYUludm9rZSB0YXNrIHRvIGFsbG93IHByb3BlciBzdGF0ZSBjaGFpbmluZ1xuICAgIGNvbnN0IHN0ZXBJZCA9IGBQcm9jZXNzaW5nU3RlcC0ke3RoaXMuX2FnZW50aWNQcm9jZXNzaW5nU3RlcENvdW50ZXJ9YDtcbiAgICB0aGlzLl9hZ2VudGljUHJvY2Vzc2luZ1N0ZXBDb3VudGVyKys7XG5cbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCBzdGVwSWQsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLl9iYXRjaEFnZW50LmFnZW50RnVuY3Rpb24hLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAncmVzdWx0LiQnOiAnJC5QYXlsb2FkLnJlc3VsdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59Il19
@@ -377,5 +377,5 @@ class BaseDocumentProcessing extends constructs_1.Construct {
377
377
  }
378
378
  exports.BaseDocumentProcessing = BaseDocumentProcessing;
379
379
  _a = JSII_RTTI_SYMBOL_1;
380
- BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.16.0" };
380
+ BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.16.1" };
381
381
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBeUU7QUFFekUsMkRBQThGO0FBQzlGLGlEQUFxRTtBQUNyRSxpREFBc0c7QUFDdEcsaURBQTBDO0FBQzFDLHFFQUEySTtBQUMzSSxpRkFBMks7QUFDM0ssMkNBQXVDO0FBQ3ZDLHVDQUFzRDtBQUN0RCw2RkFBdUY7QUFHdkYsNENBQXdGO0FBQ3hGLDBHQUFxRztBQUNyRyw4SEFBd0g7QUFFeEgsNElBQXFJO0FBNkRySTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBc0Isc0JBQXVCLFNBQVEsc0JBQVM7SUFnQjVEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSx5QkFBZSxFQUFFLENBQUM7UUFFcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsd0NBQThCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsd0NBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsd0NBQThCLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pHLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLHdDQUE4QixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDNUcsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksYUFBRyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUM1RSxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLDJCQUFhLENBQUMsT0FBTztTQUM1RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsdUNBQTJCLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpJLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLElBQUksSUFBSSxvQkFBSyxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUN6RyxZQUFZLEVBQUU7Z0JBQ1osSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSw0QkFBYSxDQUFDLE1BQU07YUFDM0I7WUFDRCxXQUFXLEVBQUUsMEJBQVcsQ0FBQyxlQUFlO1lBQ3hDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLDJCQUFhLENBQUMsT0FBTztZQUMzRCxnQ0FBZ0MsRUFBRTtnQkFDaEMsMEJBQTBCLEVBQUUsSUFBSTthQUNqQztZQUNELFVBQVUsRUFBRSw4QkFBZSxDQUFDLGdCQUFnQjtZQUM1QyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QiwrQkFBaUIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUM1QixJQUFJLHlGQUF5QyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUMxRSxJQUFJLDRFQUFtQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUNyRSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSx5REFBMEIsQ0FBQyx3QkFBd0IsQ0FBQztRQUNwRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixJQUFJLG9FQUErQixDQUFDLHFDQUFxQyxDQUFDO0lBQzVILENBQUM7SUFHUywwQkFBMEIsQ0FBQyxjQUFzQjtRQUN6RCx3RUFBd0U7UUFDeEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVuRCx3Q0FBd0M7UUFDeEMsbURBQW1EO1FBQ25ELE1BQU0sUUFBUSxHQUF5QztZQUNyRCxVQUFVLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlFLFdBQVcsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEYsT0FBTyxFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyw0QkFBUSxDQUFDLFlBQVksQ0FBQyw0QkFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQy9GLGNBQWMsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQzFELGtCQUFrQixFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyw0QkFBUSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQzFGLENBQUM7UUFFRix3RUFBd0U7UUFDeEUsNEZBQTRGO1FBQzVGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUU1QyxNQUFNLGlCQUFpQixHQUFHLElBQUksdUNBQWEsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDckUsS0FBSyxFQUFFLElBQUksQ0FBQyx1QkFBdUI7WUFDbkMsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FBQztRQUVILDZFQUE2RTtRQUM3RSxJQUFJLGtCQUE4QixDQUFDO1FBQ25DLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN0Qiw0REFBNEQ7WUFDNUQsa0JBQWtCLEdBQUcsaUJBQWlCO2lCQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7aUJBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sb0VBQW9FO1lBQ3BFLGtCQUFrQixHQUFHLGlCQUFpQjtpQkFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQ0FBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDMUQsY0FBYyxFQUFFLGtDQUFjLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDO1lBQ2hFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSTtZQUNKLHVCQUF1QixFQUFFLElBQUksMERBQXNDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUN4RixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpFLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDeEMsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDdkQsY0FBYyxFQUFFO2dCQUNkLDJCQUEyQixFQUFFLElBQUksd0JBQWMsQ0FBQztvQkFDOUMsVUFBVSxFQUFFO3dCQUNWLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTt3QkFDbkQsSUFBSSx5QkFBZSxDQUFDOzRCQUNsQixNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLOzRCQUNwQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQzs0QkFDcEQsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQzt5QkFDbkQsQ0FBQztxQkFDSDtpQkFDRixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsUUFBaUI7UUFDL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFMUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQzFELDRCQUE0QixFQUM1QjtnQkFDRSxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUM3QyxXQUFXLEVBQUUsNEJBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUMvQyxPQUFPLEVBQUUsNEJBQVEsQ0FBQyxZQUFZLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDL0QsQ0FDRixDQUFDO1lBRUYsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQWlCO1FBQ2xELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRTlFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLGNBQWMsQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUMxQywrQkFBK0IsRUFDL0I7Z0JBQ0UsVUFBVSxFQUFFLDRCQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztnQkFDN0MsV0FBVyxFQUFFLDRCQUFRLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDL0MsT0FBTyxFQUFFLDRCQUFRLENBQUMsWUFBWSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5RCxjQUFjLEVBQUUsNEJBQVEsQ0FBQyxRQUFRLENBQUMsK0NBQStDLENBQUM7YUFDbkYsQ0FDRixDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFrQkQ7Ozs7Ozs7Ozs7O09BV0c7SUFDTyxxQkFBcUI7UUFDN0Isa0NBQWtDO1FBQ2xDLDBFQUEwRTtRQUMxRSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFnQkQ7Ozs7Ozs7OztPQVNHO0lBQ08sZ0NBQWdDLENBQUMsUUFBaUI7UUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFckQsMkJBQTJCO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFOUMsTUFBTSxlQUFlLEdBQUcsY0FBYzthQUNuQyxRQUFRLENBQUMsSUFBSSwwQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLHlCQUF5QixFQUFFO1lBQ3ZFLEtBQUssRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQ25DLEdBQUcsRUFBRTtnQkFDSCxVQUFVLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsZ0JBQWdCLEVBQUUsaUNBQWlDO1lBQ25ELHlCQUF5QixFQUFFO2dCQUN6QixZQUFZLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2FBQ3BFO1lBQ0QsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3JCLFVBQVUsRUFBRSw0QkFBUSxDQUFDLE9BQU87U0FDN0IsQ0FBQzthQUNELElBQUksQ0FDSCxJQUFJLDBDQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0seUJBQXlCLEVBQUU7WUFDN0QsS0FBSyxFQUFFLElBQUksQ0FBQyx1QkFBdUI7WUFDbkMsR0FBRyxFQUFFO2dCQUNILFVBQVUsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDL0U7WUFDRCxnQkFBZ0IsRUFBRSx1RUFBdUU7WUFDekYseUJBQXlCLEVBQUU7Z0JBQ3pCLFlBQVksRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUM7Z0JBQ3BFLG1CQUFtQixFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyw0QkFBUSxDQUFDLFlBQVksQ0FBQyw0QkFBUSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7YUFDckg7WUFDRCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO1NBQzdCLENBQUMsQ0FDSCxDQUFDO1FBRUosb0RBQW9EO1FBQ3BELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsTUFBTSxlQUFlLEdBQUcsY0FBYztpQkFDbkMsUUFBUSxDQUFDLElBQUksMENBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSx5QkFBeUIsRUFBRTtnQkFDdkUsS0FBSyxFQUFFLElBQUksQ0FBQyx1QkFBdUI7Z0JBQ25DLEdBQUcsRUFBRTtvQkFDSCxVQUFVLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMvRTtnQkFDRCxnQkFBZ0IsRUFBRSxpQ0FBaUM7Z0JBQ25ELHlCQUF5QixFQUFFO29CQUN6QixZQUFZLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDO2lCQUNwRTtnQkFDRCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO2FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3JCLFVBQVUsRUFBRSw0QkFBUSxDQUFDLE9BQU87YUFDN0IsQ0FBQztpQkFDRCxJQUFJLENBQ0gsSUFBSSwwQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLHlCQUF5QixFQUFFO2dCQUM3RCxLQUFLLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtnQkFDbkMsR0FBRyxFQUFFO29CQUNILFVBQVUsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQy9FO2dCQUNELGdCQUFnQixFQUFFLHVFQUF1RTtnQkFDekYseUJBQXlCLEVBQUU7b0JBQ3pCLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsOENBQW9CLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7b0JBQ3ZJLG1CQUFtQixFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyw0QkFBUSxDQUFDLFlBQVksQ0FBQyw0QkFBUSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7aUJBQ25IO2dCQUNELFVBQVUsRUFBRSw0QkFBUSxDQUFDLE9BQU87YUFDN0IsQ0FBQyxDQUNILENBQUM7WUFFSixlQUFlLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRXRDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0I7cUJBQzNDLFFBQVEsQ0FBQyxJQUFJLDBDQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sNkJBQTZCLEVBQUU7b0JBQzNFLEtBQUssRUFBRSxJQUFJLENBQUMsdUJBQXVCO29CQUNuQyxHQUFHLEVBQUU7d0JBQ0gsVUFBVSxFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyw0QkFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDL0U7b0JBQ0QsZ0JBQWdCLEVBQUUsaUNBQWlDO29CQUNuRCx5QkFBeUIsRUFBRTt3QkFDekIsWUFBWSxFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQztxQkFDekU7b0JBQ0QsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztpQkFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDckIsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztpQkFDN0IsQ0FBQztxQkFDRCxJQUFJLENBQ0gsSUFBSSwwQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLDZCQUE2QixFQUFFO29CQUNqRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtvQkFDbkMsR0FBRyxFQUFFO3dCQUNILFVBQVUsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQy9FO29CQUNELGdCQUFnQixFQUFFLCtFQUErRTtvQkFDakcseUJBQXlCLEVBQUU7d0JBQ3pCLFlBQVksRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO3dCQUN6RCx1QkFBdUIsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxZQUFZLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO3FCQUM1SDtvQkFDRCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO2lCQUM3QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUN6QixDQUFDO2dCQUNKLGVBQWUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUM5QixNQUFNLG1CQUFtQixHQUFHLGtCQUFrQjtpQkFDM0MsUUFBUSxDQUFDLElBQUksMENBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSw4QkFBOEIsRUFBRTtnQkFDNUUsS0FBSyxFQUFFLElBQUksQ0FBQyx1QkFBdUI7Z0JBQ25DLEdBQUcsRUFBRTtvQkFDSCxVQUFVLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMvRTtnQkFDRCxnQkFBZ0IsRUFBRSxpQ0FBaUM7Z0JBQ25ELHlCQUF5QixFQUFFO29CQUN6QixZQUFZLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO2lCQUN6RTtnQkFDRCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO2FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3JCLFVBQVUsRUFBRSw0QkFBUSxDQUFDLE9BQU87YUFDN0IsQ0FBQztpQkFDRCxJQUFJLENBQ0gsSUFBSSwwQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLDhCQUE4QixFQUFFO2dCQUNsRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtnQkFDbkMsR0FBRyxFQUFFO29CQUNILFVBQVUsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQy9FO2dCQUNELGdCQUFnQixFQUFFLCtFQUErRTtnQkFDakcseUJBQXlCLEVBQUU7b0JBQ3pCLFlBQVksRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO29CQUN6RCx1QkFBdUIsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxZQUFZLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO2lCQUM1SDtnQkFDRCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO2FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3pCLENBQUM7WUFDSixlQUFlLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTix3REFBd0Q7WUFDeEQsZUFBZSxDQUFDLElBQUksQ0FDbEIsSUFBSSwwQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLHdCQUF3QixFQUFFO2dCQUM1RCxLQUFLLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtnQkFDbkMsR0FBRyxFQUFFO29CQUNILFVBQVUsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQy9FO2dCQUNELGdCQUFnQixFQUFFLGlDQUFpQztnQkFDbkQseUJBQXlCLEVBQUU7b0JBQ3pCLFlBQVksRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO2lCQUMxRDtnQkFDRCxVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO2FBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3pCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0I7YUFDM0MsUUFBUSxDQUFDLElBQUksMENBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSw2QkFBNkIsRUFBRTtZQUMzRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtZQUNuQyxHQUFHLEVBQUU7Z0JBQ0gsVUFBVSxFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyw0QkFBUSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMvRTtZQUNELGdCQUFnQixFQUFFLGlDQUFpQztZQUNuRCx5QkFBeUIsRUFBRTtnQkFDekIsWUFBWSxFQUFFLDhDQUFvQixDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQzthQUN4RTtZQUNELFVBQVUsRUFBRSw0QkFBUSxDQUFDLE9BQU87U0FDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNyQixVQUFVLEVBQUUsNEJBQVEsQ0FBQyxPQUFPO1NBQzdCLENBQUM7YUFDRCxJQUFJLENBQ0gsSUFBSSwwQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLDZCQUE2QixFQUFFO1lBQ2pFLEtBQUssRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQ25DLEdBQUcsRUFBRTtnQkFDSCxVQUFVLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLDRCQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQy9FO1lBQ0QsZ0JBQWdCLEVBQUUsK0VBQStFO1lBQ2pHLHlCQUF5QixFQUFFO2dCQUN6QixZQUFZLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO2dCQUN4RSx1QkFBdUIsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxZQUFZLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2FBQzdIO1lBQ0QsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekIsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDOztBQWhiSCx3REF5ZEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IER1cmF0aW9uLCBQcm9wZXJ0eUluamVjdG9ycywgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElNZXRyaWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVUeXBlLCBCaWxsaW5nTW9kZSwgVGFibGUsIFRhYmxlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5RG9jdW1lbnQsIFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBDdXN0b21lck1hbmFnZWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiwgRGVmaW5pdGlvbkJvZHksIElDaGFpbmFibGUsIEpzb25QYXRoLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBCZWRyb2NrSW52b2tlTW9kZWwsIER5bmFtb0F0dHJpYnV0ZVZhbHVlLCBEeW5hbW9QdXRJdGVtLCBEeW5hbW9VcGRhdGVJdGVtLCBMYW1iZGFJbnZva2UsIFN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSUFkYXB0ZXIsIFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcic7XG5pbXBvcnQgeyBEZWZhdWx0RG9jdW1lbnRQcm9jZXNzaW5nQ29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWRvY3VtZW50LXByb2Nlc3NpbmctY29uZmlnJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgRXZlbnRicmlkZ2VCcm9rZXIgfSBmcm9tICcuLi9mcmFtZXdvcmsvZm91bmRhdGlvbi9ldmVudGJyaWRnZS1icm9rZXInO1xuaW1wb3J0IHsgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9kZWZhdWx0LW9ic2VydmFiaWxpdHktY29uZmlnJztcbmltcG9ydCB7IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yIH0gZnJvbSAnLi4vdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuaW1wb3J0IHsgSU9ic2VydmFibGUsIE9ic2VydmFibGVQcm9wcyB9IGZyb20gJy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L29ic2VydmFibGUnO1xuaW1wb3J0IHsgU3RhdGVNYWNoaW5lT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9zdGF0ZS1tYWNoaW5lLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGV4dGVuZHMgT2JzZXJ2YWJsZVByb3BzIHtcblxuICAvKipcbiAgICogQWRhcHRlciB0aGF0IGRlZmluZXMgaG93IHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHdvcmtmbG93IGlzIHRyaWdnZXJlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBRdWV1ZWRTM0FkYXB0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGluZ3Jlc3NBZGFwdGVyPzogSUFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIER5bmFtb0RCIHRhYmxlIGZvciBzdG9yaW5nIGRvY3VtZW50IHByb2Nlc3NpbmcgbWV0YWRhdGEgYW5kIHdvcmtmbG93IHN0YXRlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IHRhYmxlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIERvY3VtZW50SWQgYXMgcGFydGl0aW9uIGtleS5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlPzogVGFibGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoZSBTdGVwIEZ1bmN0aW9ucyB3b3JrZmxvdy5cbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93VGltZW91dD86IER1cmF0aW9uO1xuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIGNyZWF0ZWQgcmVzb3VyY2VzIChidWNrZXQsIHRhYmxlLCBxdWV1ZSkuXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdmVudEJyaWRnZSBicm9rZXIgZm9yIHB1Ymxpc2hpbmcgY3VzdG9tIGV2ZW50cyBkdXJpbmcgcHJvY2Vzc2luZy5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBubyBjdXN0b20gZXZlbnRzIHdpbGwgYmUgc2VudCBvdXQuXG4gICAqL1xuICByZWFkb25seSBldmVudGJyaWRnZUJyb2tlcj86IEV2ZW50YnJpZGdlQnJva2VyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgbG9nZ2luZyBhbmQgdHJhY2luZyBmb3IgYWxsIHN1cHBvcnRpbmcgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBjYW4gcnVuIGluc2lkZSBhIFZQQyB3aWxsIGZvbGxvdyB0aGUgcHJvdmlkZWQgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IHJlc291cmNlcyB3aWxsIHJ1biBvdXRzaWRlIG9mIGEgVlBDXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29yaztcblxuICAvKipcbiAgICogS01TIGtleSB0byBiZSB1c2VkLlxuICAgKiBAZGVmYXVsdCBBIG5ldyBrZXkgd291bGQgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IEtleTtcbn1cblxuLyoqXG4gKiBVbmlvbiB0eXBlIGZvciBTdGVwIEZ1bmN0aW9ucyB0YXNrcyB0aGF0IGNhbiBiZSB1c2VkIGluIGRvY3VtZW50IHByb2Nlc3Npbmcgd29ya2Zsb3dzLlxuICogU3VwcG9ydHMgQmVkcm9jayBtb2RlbCBpbnZvY2F0aW9uLCBMYW1iZGEgZnVuY3Rpb24gaW52b2NhdGlvbiwgYW5kIG5lc3RlZCBTdGVwIEZ1bmN0aW9ucyBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlID0gQmVkcm9ja0ludm9rZU1vZGVsIHwgTGFtYmRhSW52b2tlIHwgU3RlcEZ1bmN0aW9uc1N0YXJ0RXhlY3V0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHNlcnZlcmxlc3MgZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd3MuXG4gKlxuICogUHJvdmlkZXMgYSBjb21wbGV0ZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lIHdpdGg6XG4gKiAtICoqUzMgU3RvcmFnZSoqOiBPcmdhbml6ZWQgd2l0aCBwcmVmaXhlcyAocmF3LywgcHJvY2Vzc2VkLywgZmFpbGVkLykgZm9yIGRvY3VtZW50IGxpZmVjeWNsZSBtYW5hZ2VtZW50XG4gKiAtICoqU1FTIFF1ZXVlKio6IFJlbGlhYmxlIG1lc3NhZ2UgcHJvY2Vzc2luZyB3aXRoIGNvbmZpZ3VyYWJsZSB2aXNpYmlsaXR5IHRpbWVvdXQgYW5kIGRlYWQgbGV0dGVyIHF1ZXVlXG4gKiAtICoqRHluYW1vREIgVGFibGUqKjogV29ya2Zsb3cgbWV0YWRhdGEgdHJhY2tpbmcgd2l0aCBEb2N1bWVudElkIGFzIHBhcnRpdGlvbiBrZXlcbiAqIC0gKipTdGVwIEZ1bmN0aW9ucyoqOiBPcmNoZXN0cmF0ZWQgd29ya2Zsb3cgd2l0aCBhdXRvbWF0aWMgZmlsZSBtb3ZlbWVudCBiYXNlZCBvbiBwcm9jZXNzaW5nIG91dGNvbWVcbiAqIC0gKipBdXRvLXRyaWdnZXJpbmcqKjogUzMgZXZlbnQgbm90aWZpY2F0aW9ucyBhdXRvbWF0aWNhbGx5IHN0YXJ0IHByb2Nlc3Npbmcgd2hlbiBmaWxlcyBhcmUgdXBsb2FkZWQgdG8gcmF3LyBwcmVmaXhcbiAqIC0gKipFcnJvciBIYW5kbGluZyoqOiBGYWlsZWQgZG9jdW1lbnRzIGFyZSBtb3ZlZCB0byBmYWlsZWQvIHByZWZpeCB3aXRoIGVycm9yIGRldGFpbHMgc3RvcmVkIGluIER5bmFtb0RCXG4gKiAtICoqRXZlbnRCcmlkZ2UgSW50ZWdyYXRpb24qKjogT3B0aW9uYWwgY3VzdG9tIGV2ZW50IHB1Ymxpc2hpbmcgZm9yIHdvcmtmbG93IHN0YXRlIGNoYW5nZXNcbiAqXG4gKiAjIyBBcmNoaXRlY3R1cmUgRmxvd1xuICogUzMgVXBsb2FkIChyYXcvKSDihpIgU1FTIOKGkiBMYW1iZGEgQ29uc3VtZXIg4oaSIFN0ZXAgRnVuY3Rpb25zIOKGkiBQcm9jZXNzaW5nIFN0ZXBzIOKGkiBTMyAocHJvY2Vzc2VkL2ZhaWxlZC8pXG4gKlxuICogIyMgSW1wbGVtZW50YXRpb24gUmVxdWlyZW1lbnRzXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IGZvdXIgYWJzdHJhY3QgbWV0aG9kcyB0byBkZWZpbmUgdGhlIHByb2Nlc3Npbmcgd29ya2Zsb3c6XG4gKiAtIGBjbGFzc2lmaWNhdGlvblN0ZXAoKWA6IERvY3VtZW50IHR5cGUgY2xhc3NpZmljYXRpb25cbiAqIC0gYGV4dHJhY3Rpb25TdGVwKClgOiBEYXRhIGV4dHJhY3Rpb24gZnJvbSBkb2N1bWVudHNcbiAqIC0gYGVucmljaG1lbnRTdGVwKClgOiBPcHRpb25hbCBkYXRhIGVucmljaG1lbnQgKHJldHVybiB1bmRlZmluZWQgdG8gc2tpcClcbiAqIC0gYHBvc3RQcm9jZXNzaW5nU3RlcCgpYDogT3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIChyZXR1cm4gdW5kZWZpbmVkIHRvIHNraXApXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU9ic2VydmFibGUge1xuICAvKiogQnVzaW5lc3MgbWV0cmljIHNlcnZpY2UgbmFtZS4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBpbml0aWFsIHNlcnZpY2UgZGltZW5zaW9uICovXG4gIHJlYWRvbmx5IG1ldHJpY1NlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBCdXNpbmVzcyBtZXRyaWMgbmFtZXNwYWNlLiAqL1xuICByZWFkb25seSBtZXRyaWNOYW1lc3BhY2U6IHN0cmluZztcbiAgLyoqIGxvZyBncm91cCBkYXRhIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBsb2dHcm91cERhdGFQcm90ZWN0aW9uOiBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHM7XG4gIC8qKiBEeW5hbW9EQiB0YWJsZSBmb3Igc3RvcmluZyBkb2N1bWVudCBwcm9jZXNzaW5nIG1ldGFkYXRhIGFuZCB3b3JrZmxvdyBzdGF0ZSAqL1xuICByZWFkb25seSBkb2N1bWVudFByb2Nlc3NpbmdUYWJsZTogVGFibGU7XG4gIC8qKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcztcbiAgLyoqIEtNUyBrZXkgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogS2V5O1xuICAvKiogSW5ncmVzcyBhZGFwdGVyLCByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB3b3JrZmxvdyAqL1xuICByZWFkb25seSBpbmdyZXNzQWRhcHRlcjogSUFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wbGV0ZSBkb2N1bWVudCBwcm9jZXNzaW5nIGluZnJhc3RydWN0dXJlIGluY2x1ZGluZyBTMyBidWNrZXQsXG4gICAqIFNRUyBxdWV1ZSwgRHluYW1vREIgdGFibGUsIGFuZCBzZXRzIHVwIFMzIGV2ZW50IG5vdGlmaWNhdGlvbnMgdG8gdHJpZ2dlciBwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5pbmdyZXNzQWRhcHRlciA9IHByb3BzLmluZ3Jlc3NBZGFwdGVyIHx8IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoKTtcblxuICAgIGlmIChwcm9wcy5uZXR3b3JrKSB7XG4gICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1zZm4nLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1RFUF9GVU5DVElPTlMpO1xuICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtZWInLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRVZFTlRCUklER0UpO1xuICAgICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtbG9ncycsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5DTE9VRFdBVENIX0xPR1MpO1xuICAgICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1tZXRyaWNzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfTU9OSVRPUklORyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbmdyZXNzQWRhcHRlci5pbml0KHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXkgfHwgbmV3IEtleSh0aGlzLCAnSURQRW5jcnlwdGlvbktleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24gPSBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMuaGFuZGxlRGVmYXVsdCh0aGlzLCBwcm9wcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLCBwcm9wcy5yZW1vdmFsUG9saWN5KTtcblxuICAgIHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUgPSBwcm9wcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSB8fCBuZXcgVGFibGUodGhpcywgJ0RvY3VtZW50UHJvY2Vzc2luZ1RhYmxlJywge1xuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIG5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICB9LFxuICAgICAgYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb246IHtcbiAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRUQsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgUHJvcGVydHlJbmplY3RvcnMub2YodGhpcykuYWRkKFxuICAgICAgICBuZXcgU3RhdGVNYWNoaW5lT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IodGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uKSxcbiAgICAgICAgbmV3IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yKHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICB0aGlzLm1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgaGFuZGxlU3RhdGVNYWNoaW5lQ3JlYXRpb24oc3RhdGVNYWNoaW5lSWQ6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHByZXByb2Nlc3NpbmcgaXMgbmVlZGVkIChlLmcuLCBmb3IgY2h1bmtpbmcgbGFyZ2UgZG9jdW1lbnRzKVxuICAgIGNvbnN0IHByZXByb2Nlc3NpbmdTdGVwID0gdGhpcy5wcmVwcm9jZXNzaW5nU3RlcCgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtZXRhZGF0YSBlbnRyeSBpbiBEeW5hbW9EQlxuICAgIC8vIEJhc2UgY2xhc3Mgb25seSBrbm93cyBhYm91dCBjb3JlIGRvY3VtZW50IGZpZWxkc1xuICAgIGNvbnN0IGJhc2VJdGVtOiBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9BdHRyaWJ1dGVWYWx1ZT4gPSB7XG4gICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICBDb250ZW50VHlwZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpKSxcbiAgICAgIENvbnRlbnQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLmNvbnRlbnQnKSkpLFxuICAgICAgV29ya2Zsb3dTdGF0dXM6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3BlbmRpbmcnKSxcbiAgICAgIFN0YXRlTWFjaGluZUV4ZWNJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJCQuRXhlY3V0aW9uLklkJykpLFxuICAgIH07XG5cbiAgICAvLyBBbGxvdyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWRkIHByZXByb2Nlc3Npbmctc3BlY2lmaWMgbWV0YWRhdGFcbiAgICAvLyBUaGlzIGlzIGEgaG9vayBmb3Igc3ViY2xhc3NlcyB0byBleHRlbmQgdGhlIHNjaGVtYSB3aXRob3V0IGJhc2UgY2xhc3Mga25vd2luZyB0aGUgZGV0YWlsc1xuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXRhZGF0YSA9IHRoaXMucHJlcHJvY2Vzc2luZ01ldGFkYXRhKCk7XG4gICAgT2JqZWN0LmFzc2lnbihiYXNlSXRlbSwgYWRkaXRpb25hbE1ldGFkYXRhKTtcblxuICAgIGNvbnN0IGluaXRNZXRhZGF0YUVudHJ5ID0gbmV3IER5bmFtb1B1dEl0ZW0odGhpcywgJ0luaXRNZXRhZGF0YUVudHJ5Jywge1xuICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICBpdGVtOiBiYXNlSXRlbSxcbiAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCB3b3JrZmxvdzogaWYgcHJlcHJvY2Vzc2luZyBleGlzdHMsIGNoYWluIGl0IGJlZm9yZSB0aGUgbWFpbiB3b3JrZmxvd1xuICAgIGxldCB3b3JrZmxvd0RlZmluaXRpb246IElDaGFpbmFibGU7XG4gICAgaWYgKHByZXByb2Nlc3NpbmdTdGVwKSB7XG4gICAgICAvLyBQcmVwcm9jZXNzaW5nIOKGkiBJbml0TWV0YWRhdGEg4oaSIEN1c3RvbSBQcm9jZXNzaW5nIFdvcmtmbG93XG4gICAgICB3b3JrZmxvd0RlZmluaXRpb24gPSBwcmVwcm9jZXNzaW5nU3RlcFxuICAgICAgICAubmV4dChpbml0TWV0YWRhdGFFbnRyeSlcbiAgICAgICAgLm5leHQodGhpcy5jcmVhdGVQcm9jZXNzaW5nV29ya2Zsb3coKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRNZXRhZGF0YSDihpIgU3RhbmRhcmQgUHJvY2Vzc2luZyBXb3JrZmxvdyAoYmFja3dhcmQgY29tcGF0aWJsZSlcbiAgICAgIHdvcmtmbG93RGVmaW5pdGlvbiA9IGluaXRNZXRhZGF0YUVudHJ5XG4gICAgICAgIC5uZXh0KHRoaXMuY3JlYXRlU3RhbmRhcmRQcm9jZXNzaW5nV29ya2Zsb3coKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZSA9IHRoaXMuY3JlYXRlU3RhdGVNYWNoaW5lUm9sZSgpO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KHJvbGUpO1xuXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCBzdGF0ZU1hY2hpbmVJZCwge1xuICAgICAgZGVmaW5pdGlvbkJvZHk6IERlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUod29ya2Zsb3dEZWZpbml0aW9uKSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMucHJvcHMud29ya2Zsb3dUaW1lb3V0IHx8IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgcm9sZSxcbiAgICAgIGVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBuZXcgQ3VzdG9tZXJNYW5hZ2VkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24odGhpcy5lbmNyeXB0aW9uS2V5KSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5ncmVzc0FkYXB0ZXIuY3JlYXRlSW5ncmVzc1RyaWdnZXIodGhpcywgc3RhdGVNYWNoaW5lLCB0aGlzLnByb3BzKTtcblxuICAgIHJldHVybiBzdGF0ZU1hY2hpbmU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0YXRlTWFjaGluZVJvbGUoKTogUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBSb2xlKHRoaXMsICdTdGF0ZU1hY2hpbmVSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnc3RhdGVzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFN0YXRlTWFjaGluZUV4ZWN1dGlvblBvbGljeTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAuLi50aGlzLmluZ3Jlc3NBZGFwdGVyLmdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKCksXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpVcGRhdGVJdGVtJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW3RoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUudGFibGVBcm5dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNb3ZlVG9GYWlsZWRDaGFpbihpZFByZWZpeD86IHN0cmluZykge1xuICAgIGNvbnN0IGZhaWxlZENoYWluID0gdGhpcy5pbmdyZXNzQWRhcHRlci5jcmVhdGVGYWlsZWRDaGFpbih0aGlzLCBpZFByZWZpeCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlcikge1xuICAgICAgY29uc3QgZWJDaGFpbiA9IHRoaXMucHJvcHMuZXZlbnRicmlkZ2VCcm9rZXIuc2VuZFZpYVNmbkNoYWluKFxuICAgICAgICAnZG9jdW1lbnQtcHJvY2Vzc2luZy1mYWlsZWQnLFxuICAgICAgICB7XG4gICAgICAgICAgZG9jdW1lbnRJZDogSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpLFxuICAgICAgICAgIGNvbnRlbnQ6IEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jb250ZW50JykpLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZmFpbGVkQ2hhaW4ubmV4dChlYkNoYWluKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFpbGVkQ2hhaW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vdmVUb1Byb2Nlc3NlZENoYWluKGlkUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkQ2hhaW4gPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmNyZWF0ZVN1Y2Nlc3NDaGFpbih0aGlzLCBpZFByZWZpeCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlcikge1xuICAgICAgcHJvY2Vzc2VkQ2hhaW4ubmV4dChcbiAgICAgICAgdGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlci5zZW5kVmlhU2ZuQ2hhaW4oXG4gICAgICAgICAgJ2RvY3VtZW50LXByb2Nlc3NlZC1zdWNjZXNzZnVsJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkb2N1bWVudElkOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJyksXG4gICAgICAgICAgICBjb250ZW50VHlwZTogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudFR5cGUnKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jb250ZW50JykpLFxuICAgICAgICAgICAgY2xhc3NpZmljYXRpb246IEpzb25QYXRoLnN0cmluZ0F0KCckLmNsYXNzaWZpY2F0aW9uUmVzdWx0LmRvY3VtZW50Q2xhc3NpZmljYXRpb24nKSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkQ2hhaW47XG4gIH1cblxuICBwdWJsaWMgbWV0cmljcygpOiBJTWV0cmljW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBvcHRpb25hbCBwcmVwcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgcnVucyBCRUZPUkUgSW5pdCBNZXRhZGF0YSBhbmQgY2FuIGJlIHVzZWQgZm9yOlxuICAgKiAtIERvY3VtZW50IGNodW5raW5nIGZvciBsYXJnZSBmaWxlc1xuICAgKiAtIERvY3VtZW50IHZhbGlkYXRpb25cbiAgICogLSBGb3JtYXQgY29udmVyc2lvblxuICAgKiAtIEFueSBvdGhlciBwcmVwcm9jZXNzaW5nIG5lZWRlZCBiZWZvcmUgY2xhc3NpZmljYXRpb25cbiAgICpcbiAgICogQ29uY3JldGUgaW1wbGVtZW50YXRpb25zIGNhbiByZXR1cm4gdW5kZWZpbmVkIHRvIHNraXAgcHJlcHJvY2Vzc2luZyxcbiAgICogbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHdvcmtmbG93cy5cbiAgICpcbiAgICogQHJldHVybnMgU3RlcCBGdW5jdGlvbnMgdGFzayBmb3IgcHJlcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJlcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgZm9yIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyB0byBhZGQgcHJlcHJvY2Vzc2luZy1zcGVjaWZpYyBtZXRhZGF0YSB0byBEeW5hbW9EQi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBJbml0TWV0YWRhdGEgY3JlYXRpb24gYW5kIGFsbG93cyBzdWJjbGFzc2VzIHRvIGV4dGVuZFxuICAgKiB0aGUgRHluYW1vREIgc2NoZW1hIHdpdGggdGhlaXIgb3duIGZpZWxkcyB3aXRob3V0IHRoZSBiYXNlIGNsYXNzIGtub3dpbmcgdGhlIGRldGFpbHMuXG4gICAqXG4gICAqIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzIHRoZSBjb3JlIGRvY3VtZW50IGZpZWxkcyAoRG9jdW1lbnRJZCwgQ29udGVudFR5cGUsIGV0Yy4pLFxuICAgKiBhbmQgc3ViY2xhc3NlcyBjYW4gYWRkIHRoZWlyIG93biBmaWVsZHMgKGUuZy4sIGNodW5raW5nIG1ldGFkYXRhKSBieSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2YgYWRkaXRpb25hbCBEeW5hbW9EQiBhdHRyaWJ1dGUgdmFsdWVzIHRvIGluY2x1ZGUgaW4gSW5pdE1ldGFkYXRhXG4gICAqIEBkZWZhdWx0IHt9IChubyBhZGRpdGlvbmFsIG1ldGFkYXRhKVxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9BdHRyaWJ1dGVWYWx1ZT4ge1xuICAgIC8vIERlZmF1bHQ6IG5vIGFkZGl0aW9uYWwgbWV0YWRhdGFcbiAgICAvLyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gYWRkIHRoZWlyIG93biBwcmVwcm9jZXNzaW5nLXNwZWNpZmljIGZpZWxkc1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcm9jZXNzaW5nIHdvcmtmbG93IGFmdGVyIHByZXByb2Nlc3NpbmcgYW5kIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgY2FuIGN1c3RvbWl6ZSB0aGlzIHRvIGhhbmRsZSBwcmVwcm9jZXNzaW5nIHJlc3VsdHMuXG4gICAqIEZvciBleGFtcGxlLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nIHVzZXMgdGhpcyB0byBhZGQgY29uZGl0aW9uYWwgYnJhbmNoaW5nXG4gICAqIGZvciBjaHVua2VkIHZzIG5vbi1jaHVua2VkIGRvY3VtZW50cy5cbiAgICpcbiAgICogSW1wbGVtZW50YXRpb25zIGNhbiBjYWxsIGBjcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdygpYCB0byByZXVzZSB0aGVcbiAgICogc3RhbmRhcmQgcHJvY2Vzc2luZyBmbG93IChDbGFzc2lmaWNhdGlvbiDihpIgUHJvY2Vzc2luZyDihpIgRW5yaWNobWVudCDihpIgUG9zdFByb2Nlc3NpbmcpLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyBjaGFpbiBmb3IgcHJvY2Vzc2luZyB0aGUgZG9jdW1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVQcm9jZXNzaW5nV29ya2Zsb3coKTogSUNoYWluYWJsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgc3RhbmRhcmQgcHJvY2Vzc2luZyB3b3JrZmxvdyAobm8gcHJlcHJvY2Vzc2luZyBjdXN0b21pemF0aW9uKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgZXhpc3Rpbmcgd29ya2Zsb3c6IENsYXNzaWZpY2F0aW9uIOKGkiBQcm9jZXNzaW5nIOKGkiBFbnJpY2htZW50IOKGkiBQb3N0UHJvY2Vzc2luZ1xuICAgKiBDb25jcmV0ZSBjbGFzc2VzIGNhbiBjYWxsIHRoaXMgbWV0aG9kIHRvIHJldXNlIHRoZSBzdGFuZGFyZCBmbG93IHdoZW4gdGhleSBkb24ndFxuICAgKiBuZWVkIGN1c3RvbSB3b3JrZmxvdyBicmFuY2hpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpZFByZWZpeCBPcHRpb25hbCBwcmVmaXggZm9yIGNvbnN0cnVjdCBJRHMgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICogQHJldHVybnMgU3RlcCBGdW5jdGlvbnMgY2hhaW4gZm9yIHN0YW5kYXJkIHByb2Nlc3NpbmdcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdyhpZFByZWZpeD86IHN0cmluZyk6IElDaGFpbmFibGUge1xuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uU3RlcCA9IHRoaXMuY2xhc3NpZmljYXRpb25TdGVwKCk7XG4gICAgY29uc3QgcHJvY2Vzc2luZ1N0ZXAgPSB0aGlzLnByb2Nlc3NpbmdTdGVwKCk7XG4gICAgY29uc3QgZW5yaWNobWVudFN0ZXAgPSB0aGlzLmVucmljaG1lbnRTdGVwKCk7XG4gICAgY29uc3QgcG9zdFByb2Nlc3NpbmdTdGVwID0gdGhpcy5wb3N0UHJvY2Vzc2luZ1N0ZXAoKTtcblxuICAgIC8vIEZpbGUgbW92ZW1lbnQgb3BlcmF0aW9uc1xuICAgIGNvbnN0IG1vdmVUb0ZhaWxlZCA9IHRoaXMuY3JlYXRlTW92ZVRvRmFpbGVkQ2hhaW4oaWRQcmVmaXgpO1xuICAgIGNvbnN0IG1vdmVUb1Byb2Nlc3NlZCA9IHRoaXMuY3JlYXRlTW92ZVRvUHJvY2Vzc2VkQ2hhaW4oaWRQcmVmaXgpO1xuXG4gICAgY29uc3QgcHJlZml4ID0gaWRQcmVmaXggPyBgJHtpZFByZWZpeH0tYCA6ICcnO1xuXG4gICAgY29uc3QgcHJvY2Vzc2luZ0NoYWluID0gcHJvY2Vzc2luZ1N0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICBrZXk6IHtcbiAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICc6bmV3U3RhdHVzJzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZygncHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVByb2Nlc3NpbmdTdWNjZXNzVXBkYXRlYCwge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFByb2Nlc3NpbmdSZXN1bHQgPSA6cHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwcm9jZXNzaW5nLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOnByb2Nlc3NpbmdSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5wcm9jZXNzaW5nUmVzdWx0JykpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBjb21wbGV0ZSBjaGFpbiBpbmNsdWRpbmcgb3B0aW9uYWwgc3RlcHNcbiAgICBpZiAoZW5yaWNobWVudFN0ZXApIHtcbiAgICAgIGNvbnN0IGVucmljaG1lbnRDaGFpbiA9IGVucmljaG1lbnRTdGVwXG4gICAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9RW5yaWNobWVudEZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWZhaWx1cmUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pXG4gICAgICAgIC5uZXh0KFxuICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1FbnJpY2htZW50U3VjY2Vzc1VwZGF0ZWAsIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cywgRW5yaWNobWVudFJlc3VsdCA9IDplbnJpY2htZW50UmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBwb3N0UHJvY2Vzc2luZ1N0ZXAgPyBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWNvbXBsZXRlJykgOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOmVucmljaG1lbnRSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5lbnJpY2hlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgcHJvY2Vzc2luZ0NoYWluLm5leHQoZW5yaWNobWVudENoYWluKTtcblxuICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc2luZ0NoYWluID0gcG9zdFByb2Nlc3NpbmdTdGVwXG4gICAgICAgICAgLmFkZENhdGNoKG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1Qb3N0UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3Bvc3QtcHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAubmV4dChcbiAgICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1Qb3N0UHJvY2Vzc2luZ1N1Y2Nlc3NVcGRhdGVgLCB7XG4gICAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzLCBQb3N0UHJvY2Vzc2luZ1Jlc3VsdCA9IDpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgICAgICAgJzpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLnBvc3RQcm9jZXNzZWRSZXN1bHQnKSkpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICAgICAgfSkubmV4dChtb3ZlVG9Qcm9jZXNzZWQpLFxuICAgICAgICAgICk7XG4gICAgICAgIGVucmljaG1lbnRDaGFpbi5uZXh0KHBvc3RQcm9jZXNzaW5nQ2hhaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5yaWNobWVudENoYWluLm5leHQobW92ZVRvUHJvY2Vzc2VkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NpbmdDaGFpbiA9IHBvc3RQcm9jZXNzaW5nU3RlcFxuICAgICAgICAuYWRkQ2F0Y2gobmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVBvc3RQcm9jZXNzaW5nRmFpbEREQlVwZGF0ZTJgLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwb3N0LXByb2Nlc3NpbmctZmFpbHVyZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSkubmV4dChtb3ZlVG9GYWlsZWQpLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSlcbiAgICAgICAgLm5leHQoXG4gICAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVBvc3RQcm9jZXNzaW5nU3VjY2Vzc1VwZGF0ZTJgLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFBvc3RQcm9jZXNzaW5nUmVzdWx0ID0gOnBvc3RQcm9jZXNzaW5nUmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOnBvc3RQcm9jZXNzaW5nUmVzdWx0JzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQucG9zdFByb2Nlc3NlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb1Byb2Nlc3NlZCksXG4gICAgICAgICk7XG4gICAgICBwcm9jZXNzaW5nQ2hhaW4ubmV4dChwb3N0UHJvY2Vzc2luZ0NoYWluKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gb3B0aW9uYWwgc3RlcHMgLSBtYXJrIGFzIGNvbXBsZXRlIGFmdGVyIGV4dHJhY3Rpb25cbiAgICAgIHByb2Nlc3NpbmdDaGFpbi5uZXh0KFxuICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9V29ya2Zsb3dDb21wbGV0ZVVwZGF0ZWAsIHtcbiAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KS5uZXh0KG1vdmVUb1Byb2Nlc3NlZCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uQ2hhaW4gPSBjbGFzc2lmaWNhdGlvblN0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9Q2xhc3NpZmljYXRpb25GYWlsRERCVXBkYXRlYCwge1xuICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAga2V5OiB7XG4gICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWZhaWx1cmUnKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfSlcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9Q2xhc3NpZmljYXRpb25TdWNjZXNzVXBkYXRlYCwge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIENsYXNzaWZpY2F0aW9uUmVzdWx0ID0gOmNsYXNzaWZpY2F0aW9uUmVzdWx0JyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOmNsYXNzaWZpY2F0aW9uUmVzdWx0JzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQuY2xhc3NpZmljYXRpb25SZXN1bHQnKSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAubmV4dChwcm9jZXNzaW5nQ2hhaW4pO1xuXG4gICAgcmV0dXJuIGNsYXNzaWZpY2F0aW9uQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgY2xhc3NpZmljYXRpb24gc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogTXVzdCBzZXQgYG91dHB1dFBhdGhgIHRvIHByZXNlcnZlIHdvcmtmbG93IHN0YXRlIGZvciBzdWJzZXF1ZW50IHN0ZXBzLlxuICAgKiBUaGUgY2xhc3NpZmljYXRpb24gcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuY2xhc3NpZmljYXRpb25SZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBjbGFzc2lmaWNhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNsYXNzaWZpY2F0aW9uU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZTtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgcHJvY2Vzc2luZyBzdGVwIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogKipDUklUSUNBTCoqOiBNdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUgZm9yIHN1YnNlcXVlbnQgc3RlcHMuXG4gICAqIFRoZSBleHRyYWN0aW9uIHJlc3VsdCBzaG91bGQgYmUgYXZhaWxhYmxlIGF0IGAkLnByb2Nlc3NpbmdSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBleHRyYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIG9wdGlvbmFsIGRvY3VtZW50IGVucmljaG1lbnQgc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogSWYgaW1wbGVtZW50ZWQsIG11c3Qgc2V0IGBvdXRwdXRQYXRoYCB0byBwcmVzZXJ2ZSB3b3JrZmxvdyBzdGF0ZS5cbiAgICogVGhlIGVucmljaG1lbnQgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuZW5yaWNoZWRSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBlbnJpY2htZW50LCBvciB1bmRlZmluZWQgdG8gc2tpcCB0aGlzIHN0ZXBcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgb3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiAqKkNSSVRJQ0FMKio6IElmIGltcGxlbWVudGVkLCBtdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUuXG4gICAqIFRoZSBwb3N0LXByb2Nlc3NpbmcgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQucG9zdFByb2Nlc3NlZFJlc3VsdGAgZm9yIER5bmFtb0RCIHN0b3JhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIFN0ZXAgRnVuY3Rpb25zIHRhc2sgZm9yIHBvc3QtcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkO1xufVxuIl19
@@ -846,7 +846,7 @@ class BedrockDocumentProcessing extends base_document_processing_1.BaseDocumentP
846
846
  }
847
847
  exports.BedrockDocumentProcessing = BedrockDocumentProcessing;
848
848
  _a = JSII_RTTI_SYMBOL_1;
849
- BedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockDocumentProcessing", version: "1.16.0" };
849
+ BedrockDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BedrockDocumentProcessing", version: "1.16.1" };
850
850
  BedrockDocumentProcessing.DEFAULT_CLASSIFICATION_PROMPT = `
851
851
  Analyze the document below, and classify the type of document it is (eg. INVOICE, IDENTITY_DOCUMENT, RECEIPT, etc). The result should be in JSON and should follow the following structure (only respond in JSON with the following structure and do not use markdown to indicate the json, just output plain old json with nothing else):
852
852
 
@@ -9,6 +9,6 @@ class DefaultDocumentProcessingConfig {
9
9
  }
10
10
  exports.DefaultDocumentProcessingConfig = DefaultDocumentProcessingConfig;
11
11
  _a = JSII_RTTI_SYMBOL_1;
12
- DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.16.0" };
12
+ DefaultDocumentProcessingConfig[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.DefaultDocumentProcessingConfig", version: "1.16.1" };
13
13
  DefaultDocumentProcessingConfig.DEFAULT_OBSERVABILITY_METRIC_SVC_NAME = 'document-processing';
14
14
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kb2N1bWVudC1wcm9jZXNzaW5nLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3VzZS1jYXNlcy9kb2N1bWVudC1wcm9jZXNzaW5nL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLE1BQWEsK0JBQStCOztBQUE1QywwRUFFQzs7O0FBRHdCLHFFQUFxQyxHQUFHLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRSA9ICdkb2N1bWVudC1wcm9jZXNzaW5nJztcbn0iXX0=
@@ -216,5 +216,5 @@ class BaseAgent extends constructs_1.Construct {
216
216
  }
217
217
  exports.BaseAgent = BaseAgent;
218
218
  _a = JSII_RTTI_SYMBOL_1;
219
- BaseAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseAgent", version: "1.16.0" };
219
+ BaseAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseAgent", version: "1.16.1" };
220
220
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hZ2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3VzZS1jYXNlcy9mcmFtZXdvcmsvYWdlbnRzL2Jhc2UtYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBcUU7QUFDckUsc0NBQXNDO0FBRXRDLDZDQUFzRTtBQUN0RSxpREFBOEY7QUFDOUYsaURBQTBDO0FBQzFDLHVEQUE4RjtBQUU5RiwyQ0FBdUM7QUFDdkMsK0NBQWlLO0FBQ2pLLHdDQUFrRTtBQUVsRSwrQ0FBMkM7QUFJbEMsMkZBSkEsd0JBQVUsT0FJQTtBQXdKbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFDSCxNQUFzQixTQUFVLFNBQVEsc0JBQVM7SUFvQy9DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLGFBQUcsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDOUUsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSwyQkFBYSxDQUFDLE9BQU87U0FDNUQsQ0FBQyxDQUFDO1FBR0gsTUFBTSxjQUFjLEdBQW1DLEVBQUUsQ0FBQztRQUUxRCxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsa0NBQWtDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEksY0FBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLHdCQUFjLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLGtDQUFrQzthQUNyRSxDQUFDLENB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c0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBQcm9wZXJ0eUluamVjdG9ycywgUmVtb3ZhbFBvbGljeSwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgSUZ1bmN0aW9uLCBJTGF5ZXJWZXJzaW9uLCBMYXllclZlcnNpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IEFzc2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhbWJkYUlhbVV0aWxzLCBMYW1iZGFPYnNlcnZhYmlsaXR5UHJvcGVydHlJbmplY3RvciwgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMsIE9ic2VydmFibGVQcm9wcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBCZWRyb2NrTW9kZWxQcm9wcywgQmVkcm9ja01vZGVsVXRpbHMgfSBmcm9tICcuLi9iZWRyb2NrJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mb3VuZGF0aW9uJztcbmltcG9ydCB7IEludm9rZVR5cGUgfSBmcm9tICcuL2ludm9rZS10eXBlJztcbmltcG9ydCB7IElLbm93bGVkZ2VCYXNlLCBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyB9IGZyb20gJy4va25vd2xlZGdlLWJhc2UnO1xuXG4vLyBSZS1leHBvcnQgSW52b2tlVHlwZSBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEludm9rZVR5cGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9uIHtcbiAgcmVhZG9ubHkgYnVja2V0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNGaWxlOiBib29sZWFuO1xuICByZWFkb25seSBpc1ppcEFyY2hpdmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyB0aGF0IGluZmx1ZW5jZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBhZ2VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50RGVmaW5pdGlvblByb3BzIHtcbiAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIEJlZHJvY2sgTW9kZWwgdG8gYmUgdXNlZFxuICAgICAqL1xuICByZWFkb25seSBiZWRyb2NrTW9kZWw6IEJlZHJvY2tNb2RlbFByb3BzO1xuXG4gIC8qKlxuICAgICAqIFRoZSBzeXN0ZW0gcHJvbXB0IG9mIHRoZSBhZ2VudFxuICAgICAqXG4gICAgICovXG4gIHJlYWRvbmx5IHN5c3RlbVByb21wdDogQXNzZXQ7XG5cbiAgLyoqXG4gICAgICogTGlzdCBvZiB0b29scyBkZWZpbmVkIGluIHB5dGhvbiBmaWxlcy4gVGhpcyB0b29scyB3b3VsZCBhdXRvbWF0aWNhbGx5XG4gICAgICogYmUgbG9hZGVkIGJ5IHRoZSBhZ2VudC4gWW91IGNhbiBhbHNvIHVzZSB0aGlzIHRvIGluY29ycG9yYXRlIG90aGVyIHNwZWNpYWxpemVkXG4gICAgICogYWdlbnRzIGFzIHRvb2xzLlxuICAgICAqL1xuICByZWFkb25seSB0b29scz86IEFzc2V0W107XG5cbiAgLyoqXG4gICAgICogQW55IGRlcGVuZGVuY2llcyBuZWVkZWQgYnkgdGhlIHByb3ZpZGVkIHRvb2xzXG4gICAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUxheWVycz86IExheWVyVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgICAqIElmIHRvb2xzIG5lZWQgYWRkaXRpb25hbCBJQU0gcGVybWlzc2lvbnMsIHRoZXNlIHN0YXRlbWVudHNcbiAgICAgKiB3b3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgQWdlbnQncyBJQU0gcm9sZVxuICAgICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsUG9saWN5U3RhdGVtZW50c0ZvclRvb2xzPzogUG9saWN5U3RhdGVtZW50W107XG5cbiAgLyoqXG4gICAqIEtub3dsZWRnZSBiYXNlcyBhdmFpbGFibGUgdG8gdGhlIGFnZW50IGZvciBSZXRyaWV2YWwtQXVnbWVudGVkIEdlbmVyYXRpb24gKFJBRykuXG4gICAqXG4gICAqIFdoZW4gY29uZmlndXJlZCwgdGhlIGFnZW50IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYSBidWlsdC1pbiByZXRyaWV2YWwgdG9vbFxuICAgKiB0aGF0IGNhbiBxdWVyeSB0aGVzZSBrbm93bGVkZ2UgYmFzZXMuIFRoZSBhZ2VudCdzIHN5c3RlbSBwcm9tcHQgd2lsbCBiZVxuICAgKiBhdXRvbWF0aWNhbGx5IGF1Z21lbnRlZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGF2YWlsYWJsZSBrbm93bGVkZ2UgYmFzZXMuXG4gICAqXG4gICAqIEVhY2gga25vd2xlZGdlIGJhc2UgbXVzdCBpbXBsZW1lbnQgdGhlIElLbm93bGVkZ2VCYXNlIGludGVyZmFjZSwgd2hpY2hcbiAgICogaGFuZGxlcyBJQU0gcGVybWlzc2lvbiBnZW5lcmF0aW9uIGFuZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8ga25vd2xlZGdlIGJhc2VzIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IGtub3dsZWRnZUJhc2VzPzogSUtub3dsZWRnZUJhc2VbXTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBJQU0gcG9saWN5IHN0YXRlbWVudHMgZm9yIGtub3dsZWRnZSBiYXNlIGFjY2Vzcy5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiBrbm93bGVkZ2UgYmFzZXMgcmVxdWlyZSBwZXJtaXNzaW9ucyBiZXlvbmQgd2hhdCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGUgSUtub3dsZWRnZUJhc2UgaW1wbGVtZW50YXRpb25zLlxuICAgKiBUaGVzZSBzdGF0ZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGFnZW50J3MgSUFNIHJvbGUgaW4gYWRkaXRpb25cbiAgICogdG8gdGhlIGF1dG8tZ2VuZXJhdGVkIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgYXV0by1nZW5lcmF0ZWQgcGVybWlzc2lvbnMgZnJvbSBrbm93bGVkZ2UgYmFzZXNcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yS25vd2xlZGdlQmFzZXM/OiBQb2xpY3lTdGF0ZW1lbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNlQWdlbnRQcm9wcyBleHRlbmRzIE9ic2VydmFibGVQcm9wcyB7XG5cbiAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgYWdlbnRcbiAgICAgKi9cbiAgcmVhZG9ubHkgYWdlbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gc2VydmljZSBwcmluY2lwYWwgZm9yIHRoZSBhZ2VudCByb2xlJ3MgdHJ1c3QgcG9saWN5LlxuICAgKlxuICAgKiBUaGlzIGlzIHR5cGljYWxseSBzZXQgYnkgdGhlIGhvc3RpbmcgYWRhcHRlciAoZS5nLiwgYGxhbWJkYS5hbWF6b25hd3MuY29tYFxuICAgKiBmb3IgTGFtYmRhIGhvc3RpbmcsIGBiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tYCBmb3IgQWdlbnRDb3JlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZVByaW5jaXBhbD86IFNlcnZpY2VQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAgICogQWdlbnQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgICovXG4gIHJlYWRvbmx5IGFnZW50RGVmaW5pdGlvbjogQWdlbnREZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvYnNlcnZhYmlsaXR5IGZvciB0aGUgYWdlbnRcbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCBjb25maWd1cmVzIGJvdGggTGFtYmRhIFBvd2VydG9vbHMgYW5kIEFXUyBCZWRyb2NrIEFnZW50Q29yZSBvYnNlcnZhYmlsaXR5OlxuICAgKiAtICoqTGFtYmRhIFBvd2VydG9vbHMqKjogUHJvdmlkZXMgZnVuY3Rpb24tbGV2ZWwgb2JzZXJ2YWJpbGl0eSBpbmNsdWRpbmcgc3RydWN0dXJlZCBsb2dnaW5nLFxuICAgKiAgIGRpc3RyaWJ1dGVkIHRyYWNpbmcgd2l0aCBYLVJheSwgYW5kIGN1c3RvbSBtZXRyaWNzXG4gICAqIC0gKipBZ2VudENvcmUgT2JzZXJ2YWJpbGl0eSoqOiBQcm92aWRlcyBhZ2VudC1zcGVjaWZpYyBvYnNlcnZhYmlsaXR5IGluY2x1ZGluZyBhZ2VudCBpbnZvY2F0aW9ucyxcbiAgICogICByZWFzb25pbmcgc3RlcHMsIHRvb2wgdXNhZ2UsIHRva2VuIGNvbnN1bXB0aW9uLCBhbmQgYWdlbnQgbGF0ZW5jeVxuICAgKlxuICAgKiBCb3RoIHN5c3RlbXMgcHVibGlzaCB0byBBbWF6b24gQ2xvdWRXYXRjaCBhbmQgdXNlIHRoZSBzYW1lIHNlcnZpY2UgbmFtZSBhbmQgbmFtZXNwYWNlXG4gICAqIGZvciBjb3JyZWxhdGlvbi4gVGhpcyBwcm92aWRlcyBjb21wbGV0ZSB2aXNpYmlsaXR5IGF0IGJvdGggZnVuY3Rpb24gYW5kIGFnZW50IGxldmVscy5cbiAgICpcbiAgICogKipFbnZpcm9ubWVudCBWYXJpYWJsZXMgU2V0KiogKEFnZW50Q29yZSk6XG4gICAqIC0gYEFHRU5UX09CU0VSVkFCSUxJVFlfRU5BQkxFRGA6IEVuYWJsZXMgQWdlbnRDb3JlIG9ic2VydmFiaWxpdHlcbiAgICogLSBgT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTYDogU2VydmljZSBpZGVudGlmaWNhdGlvbiBmb3IgT3BlblRlbGVtZXRyeVxuICAgKiAtIGBPVEVMX0VYUE9SVEVSX09UTFBfTE9HU19IRUFERVJTYDogQWdlbnQgaWRlbnRpZmljYXRpb24gaGVhZGVyc1xuICAgKiAtIGBBV1NfTEFNQkRBX0VYRUNfV1JBUFBFUmA6IEFET1Qgd3JhcHBlciBmb3IgYXV0b21hdGljIGluc3RydW1lbnRhdGlvblxuICAgKlxuICAgKiAqKklBTSBQZXJtaXNzaW9ucyBHcmFudGVkKiogKEFnZW50Q29yZSk6XG4gICAqIC0gQ2xvdWRXYXRjaCBMb2dzOiBgbG9nczpDcmVhdGVMb2dHcm91cGAsIGBsb2dzOkNyZWF0ZUxvZ1N0cmVhbWAsIGBsb2dzOlB1dExvZ0V2ZW50c2BcbiAgICogLSBYLVJheTogYHhyYXk6UHV0VHJhY2VTZWdtZW50c2AsIGB4cmF5OlB1dFRlbGVtZXRyeVJlY29yZHNgXG4gICAqXG4gICAqICoqQWRkaXRpb25hbCBSZXF1aXJlbWVudHMqKjpcbiAgICogLSBCYXRjaEFnZW50IGF1dG9tYXRpY2FsbHkgYWRkcyBBRE9UIChBV1MgRGlzdHJvIGZvciBPcGVuVGVsZW1ldHJ5KSBMYW1iZGEgTGF5ZXJcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHktY29uZmlndXJlLmh0bWxcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgICAqIElmIHRoZSBBZ2VudCB3b3VsZCBiZSBydW5uaW5nIGluc2lkZSBhIFZQQ1xuICAgICAqXG4gICAgICogQGRlZmF1bHQgQWdlbnQgd291bGQgbm90IGJlIGluIGEgVlBDXG4gICAgICovXG4gIHJlYWRvbmx5IG5ldHdvcms/OiBOZXR3b3JrO1xuXG4gIC8qKlxuICAgICAqIEVuY3J5cHRpb24ga2V5IHRvIGVuY3J5cHQgYWdlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBuZXcgS01TIEtleSB3b3VsZCBiZSBjcmVhdGVkXG4gICAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBLZXk7XG5cbiAgLyoqXG4gICAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIHJlc291cmNlcyBjcmVhdGVkIGJ5IHRoaXNcbiAgICAgKiBjb25zdHJ1Y3RcbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIGFyY2hpdGVjdHVyZSB1c2VkIGJ5IHRoZSBMYW1iZGEgZnVuY3Rpb24gd2hlcmUgdGhlXG4gICAqIGFnZW50IGlzIGhvc3RlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBBcmNoaXRlY3R1cmUuQVJNXzY0XG4gICAqL1xuICByZWFkb25seSBhZ2VudEFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYWdlbnQgdHlwZXMgaW4gdGhlIGZyYW1ld29ya1xuICpcbiAqIFByb3ZpZGVzIGNvbW1vbiBpbmZyYXN0cnVjdHVyZSBmb3IgQUkgYWdlbnRzIGluY2x1ZGluZzpcbiAqIC0gSUFNIHJvbGUgYW5kIHBlcm1pc3Npb25zIG1hbmFnZW1lbnRcbiAqIC0gRW5jcnlwdGlvbiBrZXkgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogLSBUb29sIGludGVncmF0aW9uIGFuZCBTMyBhc3NldCBtYW5hZ2VtZW50XG4gKiAtIEtub3dsZWRnZSBiYXNlIGludGVncmF0aW9uIGZvciBSQUcgKFJldHJpZXZhbC1BdWdtZW50ZWQgR2VuZXJhdGlvbilcbiAqIC0gT2JzZXJ2YWJpbGl0eSBjb25maWd1cmF0aW9uIChMYW1iZGEgUG93ZXJ0b29scyArIEFnZW50Q29yZSlcbiAqXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IHRoZSBhZ2VudC1zcGVjaWZpYyBMYW1iZGEgZnVuY3Rpb24gY3JlYXRpb24uXG4gKlxuICogKipPYnNlcnZhYmlsaXR5Kio6IFdoZW4gYGVuYWJsZU9ic2VydmFiaWxpdHk6IHRydWVgLCBCYXNlQWdlbnQgY29uZmlndXJlcyBib3RoXG4gKiBMYW1iZGEgUG93ZXJ0b29scyAoZnVuY3Rpb24tbGV2ZWwpIGFuZCBBV1MgQmVkcm9jayBBZ2VudENvcmUgKGFnZW50LWxldmVsKVxuICogb2JzZXJ2YWJpbGl0eS4gQm90aCBzeXN0ZW1zIHdvcmsgdG9nZXRoZXIgdG8gcHJvdmlkZSBjb21wbGV0ZSB2aXNpYmlsaXR5OlxuICogLSBMYW1iZGEgUG93ZXJ0b29scyBjYXB0dXJlcyBmdW5jdGlvbiBleGVjdXRpb24sIGxvZ3MsIGFuZCBjdXN0b20gbWV0cmljc1xuICogLSBBZ2VudENvcmUgY2FwdHVyZXMgYWdlbnQgcmVhc29uaW5nLCB0b29sIHVzYWdlLCBhbmQgdG9rZW4gY29uc3VtcHRpb25cbiAqIC0gQm90aCBwdWJsaXNoIHRvIENsb3VkV2F0Y2ggd2l0aCBjb3JyZWxhdGVkIHNlcnZpY2UgbmFtZXMgZm9yIHVuaWZpZWQgbW9uaXRvcmluZ1xuICpcbiAqIFRoZSBvYnNlcnZhYmlsaXR5IGludGVncmF0aW9uIGluY2x1ZGVzOlxuICogLSBBdXRvbWF0aWMgSUFNIHBlcm1pc3Npb24gZ3JhbnRzIGZvciBDbG91ZFdhdGNoIExvZ3MgYW5kIFgtUmF5XG4gKiAtIEVudmlyb25tZW50IHZhcmlhYmxlIGNvbmZpZ3VyYXRpb24gZm9yIE9wZW5UZWxlbWV0cnlcbiAqIC0gQURPVCBMYW1iZGEgTGF5ZXIgYXR0YWNobWVudCAoaGFuZGxlZCBieSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMpXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUvbGF0ZXN0L2Rldmd1aWRlL29ic2VydmFiaWxpdHktY29uZmlndXJlLmh0bWxcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VBZ2VudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGZvciB0aGUgYWdlbnQgKHdoZW4gdXNpbmcgTGFtYmRhIGhvc3RpbmcpLlxuICAgKiBNYXkgYmUgdW5kZWZpbmVkIGZvciBub24tTGFtYmRhIGhvc3RpbmcgYmFja2VuZHMgKGUuZy4gQWdlbnRDb3JlIFJ1bnRpbWUpLlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGFnZW50RnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBiZWRyb2NrTW9kZWw/OiBCZWRyb2NrTW9kZWxQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGFnZW50Um9sZTogUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk6IEtleTtcbiAgLyoqIGxvZyBncm91cCBkYXRhIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nR3JvdXBEYXRhUHJvdGVjdGlvbjogTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnM6IEFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25bXTtcbiAgLyoqXG4gICAqIEtub3dsZWRnZSBiYXNlIGNvbmZpZ3VyYXRpb25zIGZvciBydW50aW1lIHVzZS5cbiAgICpcbiAgICogVGhpcyBhcnJheSBjb250YWlucyB0aGUgZXhwb3J0ZWQgY29uZmlndXJhdGlvbnMgZnJvbSBhbGwgY29uZmlndXJlZFxuICAgKiBrbm93bGVkZ2UgYmFzZXMuIFN1YmNsYXNzZXMgdXNlIHRoaXMgdG8gc2V0IHRoZSBLTk9XTEVER0VfQkFTRVNfQ09ORklHXG4gICAqIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIHRoZSBhZ2VudCBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga25vd2xlZGdlQmFzZUNvbmZpZ3M6IEtub3dsZWRnZUJhc2VSdW50aW1lQ29uZmlnW107XG4gIC8qKlxuICAgKiBBc3NldCBjb250YWluaW5nIHRoZSBrbm93bGVkZ2UgYmFzZSByZXRyaWV2YWwgdG9vbC5cbiAgICpcbiAgICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBrbm93bGVkZ2UgYmFzZXMgYXJlIGNvbmZpZ3VyZWQuXG4gICAqIFRoZSBhc3NldCBpcyBhZGRlZCB0byB0aGUgYWdlbnQncyB0b29scyBhbmQgZ3JhbnRlZCByZWFkIGFjY2Vzcy5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBrbm93bGVkZ2VCYXNlVG9vbEFzc2V0PzogQXNzZXQ7XG4gIC8qKlxuICAgKiBMYW1iZGEgbGF5ZXJzIHJlcXVpcmVkIGJ5IGtub3dsZWRnZSBiYXNlIHJldHJpZXZhbCB0b29scy5cbiAgICpcbiAgICogVGhpcyBhcnJheSBjb250YWlucyBMYW1iZGEgbGF5ZXJzIGZyb20gYWxsIGNvbmZpZ3VyZWQga25vd2xlZGdlIGJhc2VzLlxuICAgKiBTdWJjbGFzc2VzIHNob3VsZCBhZGQgdGhlc2UgbGF5ZXJzIHRvIHRoZSBhZ2VudCBMYW1iZGEgZnVuY3Rpb24gdG9cbiAgICogZW5zdXJlIHJldHJpZXZhbCB0b29scyBoYXZlIGFjY2VzcyB0byByZXF1aXJlZCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga25vd2xlZGdlQmFzZUxheWVyczogTGF5ZXJWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJhc2VBZ2VudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmJlZHJvY2tNb2RlbCA9IHByb3BzLmFnZW50RGVmaW5pdGlvbi5iZWRyb2NrTW9kZWw7XG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gcHJvcHMuZW5jcnlwdGlvbktleSB8fCBuZXcgS2V5KHRoaXMsICdBZ2VudEVuY3J5cHRpb25LZXknLCB7XG4gICAgICBlbmFibGVLZXlSb3RhdGlvbjogdHJ1ZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG5cbiAgICBjb25zdCBpbmxpbmVQb2xpY2llczogUmVjb3JkPHN0cmluZywgUG9saWN5RG9jdW1lbnQ+ID0ge307XG5cbiAgICBpZiAocHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHMgJiYgcHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHMubGVuZ3RoID4gMCkge1xuICAgICAgaW5saW5lUG9saWNpZXMuVG9vbFBlcm1pc3Npb25zID0gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czogcHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yVG9vbHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBJQU0gcGVybWlzc2lvbnMgZnJvbSBrbm93bGVkZ2UgYmFzZXNcbiAgICBjb25zdCBrbm93bGVkZ2VCYXNlcyA9IHByb3BzLmFnZW50RGVmaW5pdGlvbi5rbm93bGVkZ2VCYXNlcyA/PyBbXTtcbiAgICBjb25zdCBrYlBvbGljeVN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtiIG9mIGtub3dsZWRnZUJhc2VzKSB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IGtiLmdlbmVyYXRlSWFtUGVybWlzc2lvbnMoKTtcbiAgICAgIGtiUG9saWN5U3RhdGVtZW50cy5wdXNoKC4uLnBlcm1pc3Npb25zKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgYWRkaXRpb25hbCBLQiBwb2xpY3kgc3RhdGVtZW50cyBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5hZ2VudERlZmluaXRpb24uYWRkaXRpb25hbFBvbGljeVN0YXRlbWVudHNGb3JLbm93bGVkZ2VCYXNlcykge1xuICAgICAga2JQb2xpY3lTdGF0ZW1lbnRzLnB1c2goLi4ucHJvcHMuYWdlbnREZWZpbml0aW9uLmFkZGl0aW9uYWxQb2xpY3lTdGF0ZW1lbnRzRm9yS25vd2xlZGdlQmFzZXMpO1xuICAgIH1cblxuICAgIC8vIEFkZCBLQiBwZXJtaXNzaW9ucyBhcyBpbmxpbmUgcG9saWN5IGlmIGFueSBleGlzdFxuICAgIGlmIChrYlBvbGljeVN0YXRlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaW5saW5lUG9saWNpZXMuS25vd2xlZGdlQmFzZVBlcm1pc3Npb25zID0gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czoga2JQb2xpY3lTdGF0ZW1lbnRzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VudFJvbGUgPSBuZXcgUm9sZSh0aGlzLCBgQWdlbnQtJHtwcm9wcy5hZ2VudE5hbWV9LVJvbGVgLCB7XG4gICAgICBhc3N1bWVkQnk6IHByb3BzLnNlcnZpY2VQcmluY2lwYWwgfHwgbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2xhbWJkYS5hbWF6b25hd3MuY29tJyksXG4gICAgICBpbmxpbmVQb2xpY2llcyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy5uZXR3b3JrKSB7XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShMYW1iZGFJYW1VdGlscy5nZW5lcmF0ZUxhbWJkYVZQQ1Blcm1pc3Npb25zKCkpO1xuICAgIH1cblxuICAgIHRoaXMuYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnMgPSBbXTtcblxuICAgIGlmIChwcm9wcy5hZ2VudERlZmluaXRpb24udG9vbHMpIHtcbiAgICAgIGZvciAoY29uc3QgdG9vbCBvZiBwcm9wcy5hZ2VudERlZmluaXRpb24udG9vbHMpIHtcbiAgICAgICAgdG9vbC5ncmFudFJlYWQodGhpcy5hZ2VudFJvbGUpO1xuXG4gICAgICAgIHRoaXMuYWdlbnRUb29sc0xvY2F0aW9uRGVmaW5pdGlvbnMucHVzaCh7XG4gICAgICAgICAgYnVja2V0TmFtZTogdG9vbC5zM0J1Y2tldE5hbWUsXG4gICAgICAgICAga2V5OiB0b29sLnMzT2JqZWN0S2V5LFxuICAgICAgICAgIGlzRmlsZTogdG9vbC5pc0ZpbGUsXG4gICAgICAgICAgaXNaaXBBcmNoaXZlOiB0b29sLmlzWmlwQXJjaGl2ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3RvcmUga25vd2xlZGdlIGJhc2UgY29uZmlndXJhdGlvbnMgZm9yIHN1YmNsYXNzIGFjY2Vzc1xuICAgIHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MgPSBrbm93bGVkZ2VCYXNlcy5tYXAoa2IgPT4ga2IuZXhwb3J0Q29uZmlndXJhdGlvbigpKTtcblxuICAgIC8vIEluaXRpYWxpemUga25vd2xlZGdlIGJhc2UgbGF5ZXJzIGFycmF5XG4gICAgdGhpcy5rbm93bGVkZ2VCYXNlTGF5ZXJzID0gW107XG5cbiAgICAvLyBHZXQgcmV0cmlldmFsIHRvb2wgYXNzZXRzIGZyb20ga25vd2xlZGdlIGJhc2VzXG4gICAgLy8gRWFjaCBLQiB0eXBlIHByb3ZpZGVzIGl0cyBvd24gcmV0cmlldmFsIHRvb2wgaW1wbGVtZW50YXRpb25cbiAgICBpZiAoa25vd2xlZGdlQmFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQ29sbGVjdCB1bmlxdWUgcmV0cmlldmFsIHRvb2wgYXNzZXRzIGZyb20ga25vd2xlZGdlIGJhc2VzXG4gICAgICAvLyBVc2UgYSBNYXAgdG8gZGVkdXBsaWNhdGUgYnkgYXNzZXQgcGF0aCAoc2FtZSBLQiB0eXBlID0gc2FtZSB0b29sKVxuICAgICAgY29uc3QgdG9vbEFzc2V0TWFwID0gbmV3IE1hcDxzdHJpbmcsIEFzc2V0PigpO1xuXG4gICAgICBmb3IgKGNvbnN0IGtiIG9mIGtub3dsZWRnZUJhc2VzKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBLQiBwcm92aWRlcyBhIHJldHJpZXZhbCB0b29sXG4gICAgICAgIGlmIChrYi5yZXRyaWV2YWxUb29sQXNzZXQpIHtcbiAgICAgICAgICBjb25zdCB0b29sQXNzZXQgPSBrYi5yZXRyaWV2YWxUb29sQXNzZXQoKTtcbiAgICAgICAgICBpZiAodG9vbEFzc2V0KSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIFMzIG9iamVjdCBrZXkgYXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgZGVkdXBsaWNhdGlvblxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdG9vbEFzc2V0LnMzT2JqZWN0S2V5O1xuICAgICAgICAgICAgaWYgKCF0b29sQXNzZXRNYXAuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgdG9vbEFzc2V0TWFwLnNldChrZXksIHRvb2xBc3NldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29sbGVjdCBMYW1iZGEgbGF5ZXJzIGZyb20ga25vd2xlZGdlIGJhc2VzXG4gICAgICAgIGlmIChrYi5yZXRyaWV2YWxUb29sTGF5ZXJzKSB7XG4gICAgICAgICAgY29uc3QgbGF5ZXJzID0ga2IucmV0cmlldmFsVG9vbExheWVycygpO1xuICAgICAgICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMua25vd2xlZGdlQmFzZUxheWVycy5wdXNoKC4uLmxheWVycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBlYWNoIHVuaXF1ZSByZXRyaWV2YWwgdG9vbCB0byB0aGUgYWdlbnRcbiAgICAgIGZvciAoY29uc3QgYXNzZXQgb2YgdG9vbEFzc2V0TWFwLnZhbHVlcygpKSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBmaXJzdCB0b29sIGFzc2V0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgIGlmICghdGhpcy5rbm93bGVkZ2VCYXNlVG9vbEFzc2V0KSB7XG4gICAgICAgICAgdGhpcy5rbm93bGVkZ2VCYXNlVG9vbEFzc2V0ID0gYXNzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHcmFudCByZWFkIGFjY2VzcyB0byB0aGUgcmV0cmlldmFsIHRvb2wgYXNzZXRcbiAgICAgICAgYXNzZXQuZ3JhbnRSZWFkKHRoaXMuYWdlbnRSb2xlKTtcblxuICAgICAgICAvLyBBZGQgcmV0cmlldmFsIHRvb2wgdG8gYWdlbnQgdG9vbHMgbG9jYXRpb24gZGVmaW5pdGlvbnNcbiAgICAgICAgdGhpcy5hZ2VudFRvb2xzTG9jYXRpb25EZWZpbml0aW9ucy5wdXNoKHtcbiAgICAgICAgICBidWNrZXROYW1lOiBhc3NldC5zM0J1Y2tldE5hbWUsXG4gICAgICAgICAga2V5OiBhc3NldC5zM09iamVjdEtleSxcbiAgICAgICAgICBpc0ZpbGU6IGFzc2V0LmlzRmlsZSxcbiAgICAgICAgICBpc1ppcEFyY2hpdmU6IGFzc2V0LmlzWmlwQXJjaGl2ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VudFJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koQmVkcm9ja01vZGVsVXRpbHMuZ2VuZXJhdGVNb2RlbElBTVBlcm1pc3Npb25zKHRoaXMsIHRoaXMuYmVkcm9ja01vZGVsKSk7XG4gICAgdGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uID0gTG9nR3JvdXBEYXRhUHJvdGVjdGlvblV0aWxzLmhhbmRsZURlZmF1bHQodGhpcywgcHJvcHMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiwgcHJvcHMucmVtb3ZhbFBvbGljeSk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgUHJvcGVydHlJbmplY3RvcnMub2YodGhpcykuYWRkKFxuICAgICAgICBuZXcgTGFtYmRhT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IodGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEFkZCBJQU0gcGVybWlzc2lvbnMgZm9yIEFnZW50Q29yZSBvYnNlcnZhYmlsaXR5XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAnbG9nczpDcmVhdGVMb2dTdHJlYW0nLFxuICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cycsXG4gICAgICAgICAgJ3hyYXk6UHV0VHJhY2VTZWdtZW50cycsXG4gICAgICAgICAgJ3hyYXk6UHV0VGVsZW1ldHJ5UmVjb3JkcycsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogWycqJ10sIC8vIENsb3VkV2F0Y2ggTG9ncyBhbmQgWC1SYXkgcmVxdWlyZSB3aWxkY2FyZCByZXNvdXJjZXNcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgQVdTIERpc3RybyBmb3IgT3BlblRlbGVtZXRyeSAoQURPVCkgTGFtYmRhIExheWVyLlxuICAgKlxuICAgKiBUaGUgQURPVCBsYXllciBwcm92aWRlcyBhdXRvbWF0aWMgaW5zdHJ1bWVudGF0aW9uIGZvciBvYnNlcnZhYmlsaXR5LlxuICAgKiBMYXllciB2ZXJzaW9ucyB2YXJ5IGJ5IHJlZ2lvbiAtIHNvbWUgcmVnaW9ucyBoYXZlIG5ld2VyIHZlcnNpb25zIHdpdGhcbiAgICogYmV0dGVyIFB5dGhvbiAzLjEzIHN1cHBvcnQuIElmIHlvdSBlbmNvdW50ZXIgY29tcGF0aWJpbGl0eSBpc3N1ZXMsXG4gICAqIHRoZSBsYXllciBBUk5zIGNhbiBiZSBmb3VuZCBhdDpcbiAgICogaHR0cHM6Ly9hd3Mtb3RlbC5naXRodWIuaW8vZG9jcy9nZXR0aW5nLXN0YXJ0ZWQvbGFtYmRhI2Fkb3QtbGFtYmRhLWxheWVyLWFybnNcbiAgICpcbiAgICogQHJldHVybnMgVGhlIEFET1QgTGFtYmRhIExheWVyIGZvciB0aGUgY3VycmVudCByZWdpb25cbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVnaW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVBRE9UTGF5ZXIoKTogSUxheWVyVmVyc2lvbiB7XG4gICAgY29uc3QgeyByZWdpb24gfSA9IFN0YWNrLm9mKHRoaXMpO1xuXG4gICAgLy8gQVdTIERpc3RybyBmb3IgT3BlblRlbGVtZXRyeSAoQURPVCkgTGFtYmRhIExheWVyIEFSTnMgYnkgcmVnaW9uXG4gICAgLy8gU291cmNlOiBodHRwczovL2F3cy1vdGVsLmdpdGh1Yi5pby9kb2NzL2dldHRpbmctc3RhcnRlZC9sYW1iZGEjYWRvdC1sYW1iZGEtbGF5ZXItYXJuc1xuICAgIGNvbnN0IGFkb3RMYXllckFybk1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdhZi1zb3V0aC0xJzogJ2Fybjphd3M6bGFtYmRhOmFmLXNvdXRoLTE6OTA0MjMzMDk2NjE2OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTcnLFxuICAgICAgJ2FwLWVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTphcC1lYXN0LTE6ODg4NTc3MDIwNTk2OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTcnLFxuICAgICAgJ2FwLW5vcnRoZWFzdC0xJzogJ2Fybjphd3M6bGFtYmRhOmFwLW5vcnRoZWFzdC0xOjYxNTI5OTc1MTA3MDpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjIwJyxcbiAgICAgICdhcC1ub3J0aGVhc3QtMic6ICdhcm46YXdzOmxhbWJkYTphcC1ub3J0aGVhc3QtMjo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnYXAtbm9ydGhlYXN0LTMnOiAnYXJuOmF3czpsYW1iZGE6YXAtbm9ydGhlYXN0LTM6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTknLFxuICAgICAgJ2FwLXNvdXRoLTEnOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGgtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnYXAtc291dGgtMic6ICdhcm46YXdzOmxhbWJkYTphcC1zb3V0aC0yOjc5Njk3MzUwNTQ5MjpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjE3JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTphcC1zb3V0aGVhc3QtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxOScsXG4gICAgICAnYXAtc291dGhlYXN0LTInOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGhlYXN0LTI6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjAnLFxuICAgICAgJ2FwLXNvdXRoZWFzdC0zJzogJ2Fybjphd3M6bGFtYmRhOmFwLXNvdXRoZWFzdC0zOjAzOTYxMjg3NzE4MDpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjE3JyxcbiAgICAgICdhcC1zb3V0aGVhc3QtNCc6ICdhcm46YXdzOmxhbWJkYTphcC1zb3V0aGVhc3QtNDo3MTM4ODE4MDU3NzE6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnYXAtc291dGhlYXN0LTUnOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGhlYXN0LTU6MTUyMDM0NzgyMzU5OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnYXAtc291dGhlYXN0LTcnOiAnYXJuOmF3czpsYW1iZGE6YXAtc291dGhlYXN0LTc6OTgwNDE2MDMxMTg4OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnY2EtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOmNhLWNlbnRyYWwtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnY2Etd2VzdC0xJzogJ2Fybjphd3M6bGFtYmRhOmNhLXdlc3QtMTo1OTU5NDQxMjcxNTI6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjo4JyxcbiAgICAgICdjbi1ub3J0aC0xJzogJ2Fybjphd3MtY246bGFtYmRhOmNuLW5vcnRoLTE6NDQwMTc5OTEyOTI0OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnY24tbm9ydGh3ZXN0LTEnOiAnYXJuOmF3cy1jbjpsYW1iZGE6Y24tbm9ydGh3ZXN0LTE6NDQwMTgwMDY3OTMxOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246OCcsXG4gICAgICAnZXUtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOmV1LWNlbnRyYWwtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnZXUtY2VudHJhbC0yJzogJ2Fybjphd3M6bGFtYmRhOmV1LWNlbnRyYWwtMjoxNTYwNDE0MDc5NTY6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnZXUtbm9ydGgtMSc6ICdhcm46YXdzOmxhbWJkYTpldS1ub3J0aC0xOjYxNTI5OTc1MTA3MDpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjIwJyxcbiAgICAgICdldS1zb3V0aC0xJzogJ2Fybjphd3M6bGFtYmRhOmV1LXNvdXRoLTE6MjU3Mzk0NDcxMTk0OmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MTcnLFxuICAgICAgJ2V1LXNvdXRoLTInOiAnYXJuOmF3czpsYW1iZGE6ZXUtc291dGgtMjo0OTAwMDQ2NTM3ODY6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnZXUtd2VzdC0xJzogJ2Fybjphd3M6bGFtYmRhOmV1LXdlc3QtMTo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnZXUtd2VzdC0yJzogJ2Fybjphd3M6bGFtYmRhOmV1LXdlc3QtMjo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnZXUtd2VzdC0zJzogJ2Fybjphd3M6bGFtYmRhOmV1LXdlc3QtMzo2MTUyOTk3NTEwNzA6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoyMCcsXG4gICAgICAnaWwtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOmlsLWNlbnRyYWwtMTo3NDY2NjkyMzkyMjY6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnbWUtY2VudHJhbC0xJzogJ2Fybjphd3M6bGFtYmRhOm1lLWNlbnRyYWwtMTo3MzkyNzU0NDExMzE6bGF5ZXI6QVdTT3BlblRlbGVtZXRyeURpc3Ryb1B5dGhvbjoxNycsXG4gICAgICAnbWUtc291dGgtMSc6ICdhcm46YXdzOmxhbWJkYTptZS1zb3V0aC0xOjk4MDkyMTc1MTc1ODpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjE3JyxcbiAgICAgICdteC1jZW50cmFsLTEnOiAnYXJuOmF3czpsYW1iZGE6bXgtY2VudHJhbC0xOjYxMDExODM3Mzg0NjpsYXllcjpBV1NPcGVuVGVsZW1ldHJ5RGlzdHJvUHl0aG9uOjgnLFxuICAgICAgJ3NhLWVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTpzYS1lYXN0LTE6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjAnLFxuICAgICAgJ3VzLWVhc3QtMSc6ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjMnLFxuICAgICAgJ3VzLWVhc3QtMic6ICdhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTI6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjAnLFxuICAgICAgJ3VzLXdlc3QtMSc6ICdhcm46YXdzOmxhbWJkYTp1cy13ZXN0LTE6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjcnLFxuICAgICAgJ3VzLXdlc3QtMic6ICdhcm46YXdzOmxhbWJkYTp1cy13ZXN0LTI6NjE1Mjk5NzUxMDcwOmxheWVyOkFXU09wZW5UZWxlbWV0cnlEaXN0cm9QeXRob246MjcnLFxuICAgIH07XG5cbiAgICBjb25zdCBhZG90TGF5ZXJBcm4gPSBhZG90TGF5ZXJBcm5NYXBbcmVnaW9uXTtcblxuICAgIGlmICghYWRvdExheWVyQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBRE9UIExhbWJkYSBMYXllciBub3QgYXZhaWxhYmxlIGluIHJlZ2lvbiAke3JlZ2lvbn0uIGAgK1xuICAgICAgICBgU3VwcG9ydGVkIHJlZ2lvbnM6ICR7T2JqZWN0LmtleXMoYWRvdExheWVyQXJuTWFwKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBMYXllclZlcnNpb24uZnJvbUxheWVyVmVyc2lvbkFybih0aGlzLCAnQWRvdExheWVyJywgYWRvdExheWVyQXJuKTtcbiAgfVxufSJdfQ==
@@ -131,5 +131,5 @@ class BatchAgent extends base_agent_1.BaseAgent {
131
131
  }
132
132
  exports.BatchAgent = BatchAgent;
133
133
  _a = JSII_RTTI_SYMBOL_1;
134
- BatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BatchAgent", version: "1.16.0" };
134
+ BatchAgent[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BatchAgent", version: "1.16.1" };
135
135
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZnJhbWV3b3JrL2FnZW50cy9iYXRjaC1hZ2VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBNENBLDhGQTJCQzs7QUF2RUQscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2QkFBNkI7QUFDN0IsOEVBQWtFO0FBQ2xFLDZDQUE4QztBQUM5QyxpREFBb0Q7QUFDcEQsdURBQWdGO0FBRWhGLDZDQUF5RDtBQUN6RCwrQ0FBMkM7QUFDM0MsK0NBQStGO0FBQy9GLHdDQUErQztBQUMvQyx3REFBcUQ7QUFDckQsaUVBQTREO0FBaUI1RDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQix5Q0FBeUMsQ0FDdkQsb0JBQWtEO0lBRWxELElBQUksb0JBQW9CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLG9CQUFvQjtTQUNoQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWQsT0FBTzs7Ozs7Ozs7Ozs7O0VBWVAsTUFBTTs7O0NBR1AsQ0FBQztBQUNGLENBQUM7QUFFRCxNQUFhLFVBQVcsU0FBUSxzQkFBUztJQUd2QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDhDQUE4QztRQUM5QyxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sT0FBTyxHQUFHLDJCQUFpQixDQUFDLG1CQUFt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LCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBQeXRob25GdW5jdGlvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7IER1cmF0aW9uLCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSwgSUZ1bmN0aW9uLCBJTGF5ZXJWZXJzaW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VBZ2VudCwgQmFzZUFnZW50UHJvcHMgfSBmcm9tICcuL2Jhc2UtYWdlbnQnO1xuaW1wb3J0IHsgSW52b2tlVHlwZSB9IGZyb20gJy4vaW52b2tlLXR5cGUnO1xuaW1wb3J0IHsgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcsIExhbWJkYUlhbVV0aWxzLCBQb3dlcnRvb2xzQ29uZmlnIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IEJlZHJvY2tNb2RlbFV0aWxzIH0gZnJvbSAnLi4vYmVkcm9jayc7XG5pbXBvcnQgeyBEZWZhdWx0UnVudGltZXMgfSBmcm9tICcuLi9jdXN0b20tcmVzb3VyY2UnO1xuaW1wb3J0IHsgRGVmYXVsdEFnZW50Q29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWFnZW50LWNvbmZpZyc7XG5pbXBvcnQgeyBLbm93bGVkZ2VCYXNlUnVudGltZUNvbmZpZyB9IGZyb20gJy4va25vd2xlZGdlLWJhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhdGNoQWdlbnRQcm9wcyBleHRlbmRzIEJhc2VBZ2VudFByb3BzIHtcbiAgcmVhZG9ubHkgcHJvbXB0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdEpzb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZ2VudCBpbnZvY2F0aW9uIHR5cGUuXG4gICAqXG4gICAqIERlZmluZXMgaG93IHRoZSBhZ2VudCBpcyBpbnZva2VkIGFuZCB3aGF0IHByb2Nlc3NpbmcgbW9kZSB0byB1c2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IEludm9rZVR5cGUuQkFUQ0hcbiAgICovXG4gIHJlYWRvbmx5IGludm9rZVR5cGU/OiBJbnZva2VUeXBlO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUga25vd2xlZGdlIGJhc2UgaW5mb3JtYXRpb24gdG8gYXBwZW5kIHRvIHRoZSBzeXN0ZW0gcHJvbXB0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIGZvcm1hdHRlZCBzdHJpbmcgY29udGFpbmluZzpcbiAqIC0gRGVzY3JpcHRpb24gb2YgdGhlIHJldHJpZXZhbCB0b29sIGFuZCBob3cgdG8gdXNlIGl0XG4gKiAtIExpc3Qgb2YgYXZhaWxhYmxlIGtub3dsZWRnZSBiYXNlcyB3aXRoIHRoZWlyIG5hbWVzIGFuZCBkZXNjcmlwdGlvbnNcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIHRleHQgaGVscHMgdGhlIGFnZW50IHVuZGVyc3RhbmQgd2hlbiBhbmQgaG93IHRvIHVzZVxuICogdGhlIGtub3dsZWRnZSBiYXNlIHJldHJpZXZhbCBjYXBhYmlsaXR5LlxuICpcbiAqIEBwYXJhbSBrbm93bGVkZ2VCYXNlQ29uZmlncyAtIEFycmF5IG9mIGtub3dsZWRnZSBiYXNlIHJ1bnRpbWUgY29uZmlndXJhdGlvbnNcbiAqIEByZXR1cm5zIEZvcm1hdHRlZCBzdHJpbmcgdG8gYXBwZW5kIHRvIHN5c3RlbSBwcm9tcHQsIG9yIGVtcHR5IHN0cmluZyBpZiBubyBLQnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS25vd2xlZGdlQmFzZVN5c3RlbVByb21wdEFkZGl0aW9uKFxuICBrbm93bGVkZ2VCYXNlQ29uZmlnczogS25vd2xlZGdlQmFzZVJ1bnRpbWVDb25maWdbXSxcbik6IHN0cmluZyB7XG4gIGlmIChrbm93bGVkZ2VCYXNlQ29uZmlncy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBrYkxpc3QgPSBrbm93bGVkZ2VCYXNlQ29uZmlnc1xuICAgIC5tYXAoKGtiKSA9PiBgLSAqKiR7a2IubmFtZX0qKjogJHtrYi5kZXNjcmlwdGlvbn1gKVxuICAgIC5qb2luKCdcXG4nKTtcblxuICByZXR1cm4gYFxuXG4jIyBLbm93bGVkZ2UgQmFzZSBSZXRyaWV2YWxcblxuWW91IGhhdmUgYWNjZXNzIHRvIGEga25vd2xlZGdlIGJhc2UgcmV0cmlldmFsIHRvb2wgY2FsbGVkIFxcYHJldHJpZXZlX2Zyb21fa25vd2xlZGdlX2Jhc2VcXGAuIFVzZSB0aGlzIHRvb2wgdG8gc2VhcmNoIGZvciByZWxldmFudCBpbmZvcm1hdGlvbiB3aGVuIGFuc3dlcmluZyBxdWVzdGlvbnMuXG5cbiMjIyBIb3cgdG8gdXNlIHRoZSByZXRyaWV2YWwgdG9vbDpcbi0gQ2FsbCB0aGUgdG9vbCB3aXRoIGEgc2VhcmNoIHF1ZXJ5IHRvIGZpbmQgcmVsZXZhbnQgaW5mb3JtYXRpb25cbi0gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYSBrbm93bGVkZ2VfYmFzZV9pZCB0byBzZWFyY2ggYSBzcGVjaWZpYyBrbm93bGVkZ2UgYmFzZVxuLSBJZiBubyBrbm93bGVkZ2VfYmFzZV9pZCBpcyBwcm92aWRlZCwgYWxsIGtub3dsZWRnZSBiYXNlcyB3aWxsIGJlIHNlYXJjaGVkXG5cbiMjIyBBdmFpbGFibGUgS25vd2xlZGdlIEJhc2VzOlxuJHtrYkxpc3R9XG5cbldoZW4gYSB1c2VyIGFza3MgYSBxdWVzdGlvbiB0aGF0IG1pZ2h0IGJlIGFuc3dlcmVkIGJ5IGluZm9ybWF0aW9uIGluIHRoZXNlIGtub3dsZWRnZSBiYXNlcywgdXNlIHRoZSByZXRyaWV2YWwgdG9vbCB0byBmaW5kIHJlbGV2YW50IGNvbnRleHQgYmVmb3JlIHJlc3BvbmRpbmcuXG5gO1xufVxuXG5leHBvcnQgY2xhc3MgQmF0Y2hBZ2VudCBleHRlbmRzIEJhc2VBZ2VudCB7XG4gIHB1YmxpYyByZWFkb25seSBhZ2VudEZ1bmN0aW9uPzogSUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCYXRjaEFnZW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIEdyYW50IHJlYWQgYWNjZXNzIHRvIHN5c3RlbSBwcm9tcHQgUzMgYXNzZXRcbiAgICBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LmdyYW50UmVhZCh0aGlzLmFnZW50Um9sZSk7XG5cbiAgICBjb25zdCBtb2RlbElkID0gQmVkcm9ja01vZGVsVXRpbHMuZGVyaXZlQWN0dWFsTW9kZWxJZCh0aGlzLmJlZHJvY2tNb2RlbCk7XG4gICAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICBjb25zdCBtZXRyaWNTZXJ2aWNlTmFtZSA9IHByb3BzLm1ldHJpY1NlcnZpY2VOYW1lIHx8IERlZmF1bHRBZ2VudENvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuXG4gICAgLy8gR2VuZXJhdGUga25vd2xlZGdlIGJhc2Ugc3lzdGVtIHByb21wdCBhZGRpdGlvbiBpZiBLQnMgYXJlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBrYlN5c3RlbVByb21wdEFkZGl0aW9uID0gZ2VuZXJhdGVLbm93bGVkZ2VCYXNlU3lzdGVtUHJvbXB0QWRkaXRpb24odGhpcy5rbm93bGVkZ2VCYXNlQ29uZmlncyk7XG5cbiAgICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBTWVNURU1fUFJPTVBUX1MzX0JVQ0tFVF9OQU1FOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzQnVja2V0TmFtZSxcbiAgICAgIFNZU1RFTV9QUk9NUFRfUzNfS0VZOiBwcm9wcy5hZ2VudERlZmluaXRpb24uc3lzdGVtUHJvbXB0LnMzT2JqZWN0S2V5LFxuICAgICAgVE9PTFNfQ09ORklHOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFnZW50VG9vbHNMb2NhdGlvbkRlZmluaXRpb25zKSxcbiAgICAgIE1PREVMX0lEOiBtb2RlbElkLFxuICAgICAgSU5WT0tFX1RZUEU6IHByb3BzLmludm9rZVR5cGUgfHwgSW52b2tlVHlwZS5CQVRDSCxcbiAgICAgIFBST01QVDogcHJvcHMucHJvbXB0LFxuICAgICAgRVhQRUNUX0pTT046IHByb3BzLmV4cGVjdEpzb24gPyAnVHJ1ZScgOiAnJyxcbiAgICAgIC4uLlBvd2VydG9vbHNDb25maWcuZ2VuZXJhdGVEZWZhdWx0TGFtYmRhQ29uZmlnKFxuICAgICAgICBwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LFxuICAgICAgICBtZXRyaWNOYW1lc3BhY2UsXG4gICAgICAgIG1ldHJpY1NlcnZpY2VOYW1lLFxuICAgICAgKSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGtub3dsZWRnZSBiYXNlIGNvbmZpZ3VyYXRpb24gaWYgS0JzIGFyZSBjb25maWd1cmVkXG4gICAgaWYgKHRoaXMua25vd2xlZGdlQmFzZUNvbmZpZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZW52LktOT1dMRURHRV9CQVNFU19DT05GSUcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmtub3dsZWRnZUJhc2VDb25maWdzKTtcbiAgICAgIGVudi5LTk9XTEVER0VfQkFTRV9TWVNURU1fUFJPTVBUX0FERElUSU9OID0ga2JTeXN0ZW1Qcm9tcHRBZGRpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBBZGQgQWdlbnRDb3JlIG9ic2VydmFiaWxpdHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoZW4gZW5hYmxlZFxuICAgIGlmIChwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5KSB7XG4gICAgICBlbnYuQUdFTlRfT0JTRVJWQUJJTElUWV9FTkFCTEVEID0gJ3RydWUnO1xuICAgICAgZW52Lk9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyA9IGBzZXJ2aWNlLm5hbWU9JHttZXRyaWNTZXJ2aWNlTmFtZX0sYXdzLmxvZy5ncm91cC5uYW1lcz0vYXdzL2JlZHJvY2stYWdlbnRjb3JlL3J1bnRpbWVzLyR7cHJvcHMuYWdlbnROYW1lfWA7XG4gICAgICBlbnYuT1RFTF9FWFBPUlRFUl9PVExQX0xPR1NfSEVBREVSUyA9IGB4LWF3cy1sb2ctZ3JvdXA9L2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ydW50aW1lcy8ke3Byb3BzLmFnZW50TmFtZX0seC1hd3MtbG9nLXN0cmVhbT1ydW50aW1lLWxvZ3MseC1hd3MtbWV0cmljLW5hbWVzcGFjZT1iZWRyb2NrLWFnZW50Y29yZWA7XG4gICAgICBlbnYuQVdTX0xBTUJEQV9FWEVDX1dSQVBQRVIgPSAnL29wdC9vdGVsLWluc3RydW1lbnQnO1xuICAgICAgZW52Lk9URUxfUFlUSE9OX0RJU1RSTyA9ICdhd3NfZGlzdHJvJztcbiAgICAgIGVudi5PVEVMX1BZVEhPTl9DT05GSUdVUkFUT1IgPSAnYXdzX2NvbmZpZ3VyYXRvcic7XG4gICAgICBlbnYuT1RFTF9FWFBPUlRFUl9PVExQX1BST1RPQ09MID0gJ2h0dHAvcHJvdG9idWYnO1xuICAgICAgZW52Lk9URUxfVFJBQ0VTX0VYUE9SVEVSID0gJ290bHAnO1xuXG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRNYW5hZ2VkUG9saWN5KE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdDbG91ZFdhdGNoTGFtYmRhQXBwbGljYXRpb25TaWduYWxzRXhlY3V0aW9uUm9sZVBvbGljeScpKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGFjY291bnQsIHJlZ2lvbiB9ID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdCA9IExhbWJkYUlhbVV0aWxzLmNyZWF0ZUxvZ3NQZXJtaXNzaW9ucyh7XG4gICAgICBhY2NvdW50LFxuICAgICAgcmVnaW9uLFxuICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICBmdW5jdGlvbk5hbWU6IHByb3BzLmFnZW50TmFtZSxcbiAgICAgIGVuYWJsZU9ic2VydmFiaWxpdHk6IHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHksXG4gICAgfSk7XG5cbiAgICAvLyBEZWZpbmUgTGFtYmRhIGFyY2hpdGVjdHVyZSAoY3VycmVudGx5IGhhcmRjb2RlZCwgYnV0IGNlbnRyYWxpemVkIGZvciBmdXR1cmUgY29uZmlndXJhYmlsaXR5KVxuICAgIGNvbnN0IGxhbWJkYUFyY2hpdGVjdHVyZSA9IHByb3BzLmFnZW50QXJjaGl0ZWN0dXJlIHx8IEFyY2hpdGVjdHVyZS5BUk1fNjQ7XG5cbiAgICAvLyBCdWlsZCBsYXllcnMgYXJyYXkgd2l0aCBBRE9UIGxheWVyIHdoZW4gb2JzZXJ2YWJpbGl0eSBpcyBlbmFibGVkXG4gICAgY29uc3QgbGF5ZXJzOiBJTGF5ZXJWZXJzaW9uW10gPSBbXG4gICAgICAuLi4ocHJvcHMuYWdlbnREZWZpbml0aW9uLmxhbWJkYUxheWVycyB8fCBbXSksXG4gICAgICAuLi50aGlzLmtub3dsZWRnZUJhc2VMYXllcnMsXG4gICAgXTtcblxuICAgIGlmIChwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5KSB7XG4gICAgICBsYXllcnMucHVzaCh0aGlzLmNyZWF0ZUFET1RMYXllcigpKTtcbiAgICB9XG5cbiAgICB0aGlzLmFnZW50RnVuY3Rpb24gPSBuZXcgUHl0aG9uRnVuY3Rpb24odGhpcywgJ0JhdGNoQWdlbnRGdW5jdGlvbicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC51bmlxdWVGdW5jdGlvbk5hbWUsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYUFyY2hpdGVjdHVyZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAncmVzb3VyY2VzL2RlZmF1bHQtc3RyYW5kcy1hZ2VudCcpLFxuICAgICAgcm9sZTogdGhpcy5hZ2VudFJvbGUsXG4gICAgICBpbmRleDogJ2JhdGNoLnB5JyxcbiAgICAgIHJ1bnRpbWU6IERlZmF1bHRSdW50aW1lcy5QWVRIT04sXG4gICAgICBsYXllcnMsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICBlbnZpcm9ubWVudDogZW52LFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgICB2cGM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLnZwYyA6IHVuZGVmaW5lZCxcbiAgICAgIHZwY1N1Ym5ldHM6IHByb3BzLm5ldHdvcmsgPyBwcm9wcy5uZXR3b3JrLmFwcGxpY2F0aW9uU3VibmV0U2VsZWN0aW9uKCkgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHMgb2YgYWdlbnRMYW1iZGFMb2dQZXJtaXNzaW9uc1Jlc3VsdC5wb2xpY3lTdGF0ZW1lbnRzKSB7XG4gICAgICB0aGlzLmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzKTtcbiAgICB9XG4gIH1cbn0iXX0=