@aws-cdk/aws-bedrock-agentcore-alpha 2.256.1-alpha.0 → 2.258.0-alpha.0

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 (122) hide show
  1. package/.jsii +2806 -2580
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +2135 -59
  4. package/lib/common/types.d.ts +2 -0
  5. package/lib/common/types.js +3 -1
  6. package/lib/evaluation/custom-evaluator.d.ts +1 -0
  7. package/lib/evaluation/custom-evaluator.js +37 -4
  8. package/lib/evaluation/data-source.d.ts +1 -0
  9. package/lib/evaluation/data-source.js +15 -2
  10. package/lib/evaluation/evaluator-base.d.ts +2 -0
  11. package/lib/evaluation/evaluator-base.js +65 -3
  12. package/lib/evaluation/evaluator-config.d.ts +4 -0
  13. package/lib/evaluation/evaluator-config.js +25 -3
  14. package/lib/evaluation/evaluator.d.ts +1 -0
  15. package/lib/evaluation/evaluator.js +14 -2
  16. package/lib/evaluation/online-evaluation-base.d.ts +2 -0
  17. package/lib/evaluation/online-evaluation-base.js +65 -3
  18. package/lib/evaluation/online-evaluation.d.ts +1 -0
  19. package/lib/evaluation/online-evaluation.js +37 -4
  20. package/lib/evaluation/perms.d.ts +5 -0
  21. package/lib/evaluation/perms.js +6 -1
  22. package/lib/evaluation/types.d.ts +15 -0
  23. package/lib/evaluation/types.js +75 -6
  24. package/lib/evaluation/validation-helpers.d.ts +22 -0
  25. package/lib/evaluation/validation-helpers.js +23 -1
  26. package/lib/gateway/gateway-base.d.ts +7 -0
  27. package/lib/gateway/gateway-base.js +178 -3
  28. package/lib/gateway/gateway.d.ts +9 -0
  29. package/lib/gateway/gateway.js +49 -6
  30. package/lib/gateway/inbound-auth/authorizer.d.ts +12 -0
  31. package/lib/gateway/inbound-auth/authorizer.js +31 -5
  32. package/lib/gateway/inbound-auth/custom-claim.d.ts +1 -0
  33. package/lib/gateway/inbound-auth/custom-claim.js +13 -2
  34. package/lib/gateway/interceptor.d.ts +5 -0
  35. package/lib/gateway/interceptor.js +7 -2
  36. package/lib/gateway/outbound-auth/api-key.d.ts +5 -0
  37. package/lib/gateway/outbound-auth/api-key.js +7 -2
  38. package/lib/gateway/outbound-auth/credential-provider.d.ts +5 -0
  39. package/lib/gateway/outbound-auth/credential-provider.js +17 -2
  40. package/lib/gateway/outbound-auth/iam-role.d.ts +1 -0
  41. package/lib/gateway/outbound-auth/iam-role.js +2 -1
  42. package/lib/gateway/outbound-auth/oauth.d.ts +2 -0
  43. package/lib/gateway/outbound-auth/oauth.js +2 -1
  44. package/lib/gateway/perms.d.ts +16 -0
  45. package/lib/gateway/perms.js +17 -1
  46. package/lib/gateway/protocol.d.ts +7 -0
  47. package/lib/gateway/protocol.js +10 -3
  48. package/lib/gateway/targets/schema/api-schema.d.ts +4 -0
  49. package/lib/gateway/targets/schema/api-schema.js +161 -6
  50. package/lib/gateway/targets/schema/base-schema.d.ts +1 -0
  51. package/lib/gateway/targets/schema/base-schema.js +2 -1
  52. package/lib/gateway/targets/schema/tool-schema.d.ts +12 -0
  53. package/lib/gateway/targets/schema/tool-schema.js +166 -6
  54. package/lib/gateway/targets/target-base.d.ts +5 -0
  55. package/lib/gateway/targets/target-base.js +76 -3
  56. package/lib/gateway/targets/target-configuration.d.ts +14 -0
  57. package/lib/gateway/targets/target-configuration.js +125 -9
  58. package/lib/gateway/targets/target.d.ts +8 -0
  59. package/lib/gateway/targets/target.js +37 -4
  60. package/lib/gateway/validation-helpers.d.ts +4 -0
  61. package/lib/gateway/validation-helpers.js +4 -1
  62. package/lib/identity/api-key-credential-provider.d.ts +4 -0
  63. package/lib/identity/api-key-credential-provider.js +36 -3
  64. package/lib/identity/grant-helpers.d.ts +7 -0
  65. package/lib/identity/grant-helpers.js +42 -2
  66. package/lib/identity/oauth2-credential-provider.d.ts +29 -0
  67. package/lib/identity/oauth2-credential-provider.js +37 -3
  68. package/lib/identity/perms.d.ts +5 -0
  69. package/lib/identity/perms.js +9 -4
  70. package/lib/identity/validation-helpers.d.ts +53 -0
  71. package/lib/identity/validation-helpers.js +54 -1
  72. package/lib/identity/workload-identity.d.ts +3 -0
  73. package/lib/identity/workload-identity.js +36 -3
  74. package/lib/memory/memory-strategy.d.ts +6 -0
  75. package/lib/memory/memory-strategy.js +47 -2
  76. package/lib/memory/memory.d.ts +4 -0
  77. package/lib/memory/memory.js +210 -5
  78. package/lib/memory/strategies/managed-strategy.d.ts +4 -0
  79. package/lib/memory/strategies/managed-strategy.js +22 -2
  80. package/lib/memory/strategies/self-managed-strategy.d.ts +4 -0
  81. package/lib/memory/strategies/self-managed-strategy.js +57 -4
  82. package/lib/memory/validation-helpers.d.ts +6 -0
  83. package/lib/memory/validation-helpers.js +7 -1
  84. package/lib/network/network-configuration.d.ts +5 -0
  85. package/lib/network/network-configuration.js +83 -6
  86. package/lib/policy/policy-base.js +36 -3
  87. package/lib/policy/policy-engine-base.js +36 -3
  88. package/lib/policy/policy-engine.js +37 -4
  89. package/lib/policy/policy-statement.js +5 -5
  90. package/lib/policy/policy-types.js +1 -1
  91. package/lib/policy/policy.js +36 -3
  92. package/lib/runtime/inbound-auth/custom-claim.d.ts +1 -0
  93. package/lib/runtime/inbound-auth/custom-claim.js +13 -2
  94. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.d.ts +1 -0
  95. package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +40 -2
  96. package/lib/runtime/observability.d.ts +5 -0
  97. package/lib/runtime/observability.js +79 -5
  98. package/lib/runtime/perms.d.ts +12 -0
  99. package/lib/runtime/perms.js +13 -1
  100. package/lib/runtime/runtime-artifact.d.ts +3 -0
  101. package/lib/runtime/runtime-artifact.js +69 -5
  102. package/lib/runtime/runtime-base.d.ts +3 -0
  103. package/lib/runtime/runtime-base.js +200 -3
  104. package/lib/runtime/runtime-endpoint-base.d.ts +3 -0
  105. package/lib/runtime/runtime-endpoint-base.js +22 -2
  106. package/lib/runtime/runtime-endpoint.d.ts +1 -0
  107. package/lib/runtime/runtime-endpoint.js +36 -3
  108. package/lib/runtime/runtime.d.ts +2 -0
  109. package/lib/runtime/runtime.js +38 -5
  110. package/lib/runtime/types.d.ts +3 -0
  111. package/lib/runtime/types.js +2 -1
  112. package/lib/runtime/validation-helpers.d.ts +6 -0
  113. package/lib/runtime/validation-helpers.js +7 -1
  114. package/lib/tools/browser.d.ts +6 -0
  115. package/lib/tools/browser.js +205 -8
  116. package/lib/tools/code-interpreter.d.ts +4 -0
  117. package/lib/tools/code-interpreter.js +185 -7
  118. package/lib/tools/perms.d.ts +12 -0
  119. package/lib/tools/perms.js +13 -1
  120. package/lib/tools/validation-helpers.d.ts +6 -0
  121. package/lib/tools/validation-helpers.js +7 -1
  122. package/package.json +10 -10
@@ -1,11 +1,44 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.ApiGatewayTargetConfiguration = exports.ApiGatewayHttpMethod = exports.McpServerTargetConfiguration = exports.SmithyTargetConfiguration = exports.OpenApiTargetConfiguration = exports.LambdaTargetConfiguration = exports.McpTargetConfiguration = void 0;
4
37
  const jsiiDeprecationWarnings = require("../../../.warnings.jsii.js");
5
38
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const fs = require("fs");
39
+ const fs = __importStar(require("fs"));
7
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
8
- const iam = require("aws-cdk-lib/aws-iam");
41
+ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
9
42
  const errors_1 = require("aws-cdk-lib/core/lib/errors");
10
43
  const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
11
44
  const validation_helpers_1 = require("../validation-helpers");
@@ -17,9 +50,10 @@ const target_base_1 = require("./target-base");
17
50
  /**
18
51
  * Abstract base class for MCP target configurations
19
52
  * Provides common functionality for all MCP target types
53
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
20
54
  */
21
55
  class McpTargetConfiguration {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpTargetConfiguration", version: "2.256.1-alpha.0" };
56
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpTargetConfiguration", version: "2.258.0-alpha.0" };
23
57
  /**
24
58
  * Renders the configuration as CloudFormation properties
25
59
  * @internal
@@ -39,9 +73,10 @@ exports.McpTargetConfiguration = McpTargetConfiguration;
39
73
  *
40
74
  * This configuration wraps a Lambda function as MCP tools,
41
75
  * allowing the gateway to invoke the function to provide tool capabilities.
76
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
42
77
  */
43
78
  class LambdaTargetConfiguration extends McpTargetConfiguration {
44
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration", version: "2.256.1-alpha.0" };
79
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration", version: "2.258.0-alpha.0" };
45
80
  /**
46
81
  * Create a Lambda target configuration
47
82
  *
@@ -51,6 +86,7 @@ class LambdaTargetConfiguration extends McpTargetConfiguration {
51
86
  */
52
87
  static create(lambdaFunction, toolSchema) {
53
88
  try {
89
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration#create", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
54
90
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ToolSchema(toolSchema);
55
91
  }
56
92
  catch (error) {
@@ -73,6 +109,7 @@ class LambdaTargetConfiguration extends McpTargetConfiguration {
73
109
  constructor(lambdaFunction, toolSchema) {
74
110
  super();
75
111
  try {
112
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
76
113
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ToolSchema(toolSchema);
77
114
  }
78
115
  catch (error) {
@@ -93,6 +130,7 @@ class LambdaTargetConfiguration extends McpTargetConfiguration {
93
130
  */
94
131
  bind(scope, gateway) {
95
132
  try {
133
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration#bind", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
96
134
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IGateway(gateway);
97
135
  }
98
136
  catch (error) {
@@ -112,6 +150,15 @@ class LambdaTargetConfiguration extends McpTargetConfiguration {
112
150
  * Renders the MCP-specific configuration
113
151
  */
114
152
  renderMcpConfiguration() {
153
+ try {
154
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.LambdaTargetConfiguration#renderMcpConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
155
+ }
156
+ catch (error) {
157
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
158
+ Error.captureStackTrace(error, this.renderMcpConfiguration);
159
+ }
160
+ throw error;
161
+ }
115
162
  return {
116
163
  lambda: {
117
164
  lambdaArn: this.lambdaFunction.functionArn,
@@ -129,9 +176,10 @@ exports.LambdaTargetConfiguration = LambdaTargetConfiguration;
129
176
  *
130
177
  * This configuration exposes an OpenAPI/REST API as MCP tools,
131
178
  * allowing the gateway to transform API operations into tool calls.
179
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
132
180
  */
133
181
  class OpenApiTargetConfiguration extends McpTargetConfiguration {
134
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration", version: "2.256.1-alpha.0" };
182
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration", version: "2.258.0-alpha.0" };
135
183
  /**
136
184
  * Create an OpenAPI target configuration
137
185
  *
@@ -141,6 +189,7 @@ class OpenApiTargetConfiguration extends McpTargetConfiguration {
141
189
  */
142
190
  static create(apiSchema, validateSchema) {
143
191
  try {
192
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration#create", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
144
193
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ApiSchema(apiSchema);
145
194
  }
146
195
  catch (error) {
@@ -163,6 +212,7 @@ class OpenApiTargetConfiguration extends McpTargetConfiguration {
163
212
  constructor(apiSchema, validateSchema) {
164
213
  super();
165
214
  try {
215
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
166
216
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ApiSchema(apiSchema);
167
217
  }
168
218
  catch (error) {
@@ -183,6 +233,7 @@ class OpenApiTargetConfiguration extends McpTargetConfiguration {
183
233
  */
184
234
  bind(scope, gateway) {
185
235
  try {
236
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration#bind", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
186
237
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IGateway(gateway);
187
238
  }
188
239
  catch (error) {
@@ -233,6 +284,15 @@ class OpenApiTargetConfiguration extends McpTargetConfiguration {
233
284
  * Renders the MCP-specific configuration
234
285
  */
235
286
  renderMcpConfiguration() {
287
+ try {
288
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.OpenApiTargetConfiguration#renderMcpConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
289
+ }
290
+ catch (error) {
291
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
292
+ Error.captureStackTrace(error, this.renderMcpConfiguration);
293
+ }
294
+ throw error;
295
+ }
236
296
  return {
237
297
  openApiSchema: this.apiSchema._render(),
238
298
  };
@@ -247,9 +307,10 @@ exports.OpenApiTargetConfiguration = OpenApiTargetConfiguration;
247
307
  *
248
308
  * This configuration exposes a Smithy-modeled API as MCP tools,
249
309
  * allowing the gateway to transform Smithy operations into tool calls.
310
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
250
311
  */
251
312
  class SmithyTargetConfiguration extends McpTargetConfiguration {
252
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration", version: "2.256.1-alpha.0" };
313
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration", version: "2.258.0-alpha.0" };
253
314
  /**
254
315
  * Create a Smithy target configuration
255
316
  *
@@ -258,6 +319,7 @@ class SmithyTargetConfiguration extends McpTargetConfiguration {
258
319
  */
259
320
  static create(smithyModel) {
260
321
  try {
322
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration#create", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
261
323
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ApiSchema(smithyModel);
262
324
  }
263
325
  catch (error) {
@@ -276,6 +338,7 @@ class SmithyTargetConfiguration extends McpTargetConfiguration {
276
338
  constructor(smithyModel) {
277
339
  super();
278
340
  try {
341
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
279
342
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ApiSchema(smithyModel);
280
343
  }
281
344
  catch (error) {
@@ -295,6 +358,7 @@ class SmithyTargetConfiguration extends McpTargetConfiguration {
295
358
  */
296
359
  bind(scope, gateway) {
297
360
  try {
361
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration#bind", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
298
362
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IGateway(gateway);
299
363
  }
300
364
  catch (error) {
@@ -313,6 +377,15 @@ class SmithyTargetConfiguration extends McpTargetConfiguration {
313
377
  * Renders the MCP-specific configuration
314
378
  */
315
379
  renderMcpConfiguration() {
380
+ try {
381
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.SmithyTargetConfiguration#renderMcpConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
382
+ }
383
+ catch (error) {
384
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
385
+ Error.captureStackTrace(error, this.renderMcpConfiguration);
386
+ }
387
+ throw error;
388
+ }
316
389
  return {
317
390
  smithyModel: this.smithyModel._render(),
318
391
  };
@@ -329,9 +402,10 @@ exports.SmithyTargetConfiguration = SmithyTargetConfiguration;
329
402
  * functions for AI agents. When you configure an MCP server as a gateway target,
330
403
  * the gateway automatically discovers and indexes available tools through
331
404
  * synchronization.
405
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
332
406
  */
333
407
  class McpServerTargetConfiguration extends McpTargetConfiguration {
334
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration", version: "2.256.1-alpha.0" };
408
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration", version: "2.258.0-alpha.0" };
335
409
  /**
336
410
  * Create an MCP server target configuration
337
411
  *
@@ -339,6 +413,15 @@ class McpServerTargetConfiguration extends McpTargetConfiguration {
339
413
  * @returns A new McpServerTargetConfiguration instance
340
414
  */
341
415
  static create(endpoint) {
416
+ try {
417
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration#create", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
418
+ }
419
+ catch (error) {
420
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
421
+ Error.captureStackTrace(error, this.create);
422
+ }
423
+ throw error;
424
+ }
342
425
  return new McpServerTargetConfiguration(endpoint);
343
426
  }
344
427
  targetType = target_base_1.McpTargetType.MCP_SERVER;
@@ -348,6 +431,15 @@ class McpServerTargetConfiguration extends McpTargetConfiguration {
348
431
  endpoint;
349
432
  constructor(endpoint) {
350
433
  super();
434
+ try {
435
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
436
+ }
437
+ catch (error) {
438
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
439
+ Error.captureStackTrace(error, McpServerTargetConfiguration);
440
+ }
441
+ throw error;
442
+ }
351
443
  this.endpoint = endpoint;
352
444
  this.validateEndpoint(endpoint);
353
445
  }
@@ -360,6 +452,7 @@ class McpServerTargetConfiguration extends McpTargetConfiguration {
360
452
  */
361
453
  bind(_scope, _gateway) {
362
454
  try {
455
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration#bind", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
363
456
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IGateway(_gateway);
364
457
  }
365
458
  catch (error) {
@@ -376,6 +469,15 @@ class McpServerTargetConfiguration extends McpTargetConfiguration {
376
469
  * Renders the MCP-specific configuration
377
470
  */
378
471
  renderMcpConfiguration() {
472
+ try {
473
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.McpServerTargetConfiguration#renderMcpConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
474
+ }
475
+ catch (error) {
476
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
477
+ Error.captureStackTrace(error, this.renderMcpConfiguration);
478
+ }
479
+ throw error;
480
+ }
379
481
  return {
380
482
  mcpServer: {
381
483
  endpoint: this.endpoint,
@@ -412,6 +514,7 @@ exports.McpServerTargetConfiguration = McpServerTargetConfiguration;
412
514
  *****************************************************************************/
413
515
  /**
414
516
  * HTTP methods supported by API Gateway
517
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
415
518
  */
416
519
  var ApiGatewayHttpMethod;
417
520
  (function (ApiGatewayHttpMethod) {
@@ -443,9 +546,10 @@ var ApiGatewayHttpMethod;
443
546
  * - API must use a public endpoint type
444
547
  * - Methods with both AWS_IAM authorization and API key requirements are not supported
445
548
  * - Proxy resources (e.g., `/pets/{proxy+}`) are not supported
549
+ * @deprecated Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.
446
550
  */
447
551
  class ApiGatewayTargetConfiguration extends McpTargetConfiguration {
448
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiGatewayTargetConfiguration", version: "2.256.1-alpha.0" };
552
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.ApiGatewayTargetConfiguration", version: "2.258.0-alpha.0" };
449
553
  /**
450
554
  * Create an API Gateway target configuration
451
555
  *
@@ -454,6 +558,7 @@ class ApiGatewayTargetConfiguration extends McpTargetConfiguration {
454
558
  */
455
559
  static create(props) {
456
560
  try {
561
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.ApiGatewayTargetConfiguration#create", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
457
562
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ApiGatewayTargetConfigurationProps(props);
458
563
  }
459
564
  catch (error) {
@@ -488,6 +593,7 @@ class ApiGatewayTargetConfiguration extends McpTargetConfiguration {
488
593
  constructor(props) {
489
594
  super();
490
595
  try {
596
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.ApiGatewayTargetConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
491
597
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_ApiGatewayTargetConfigurationProps(props);
492
598
  }
493
599
  catch (error) {
@@ -512,6 +618,7 @@ class ApiGatewayTargetConfiguration extends McpTargetConfiguration {
512
618
  */
513
619
  bind(_scope, gateway) {
514
620
  try {
621
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.ApiGatewayTargetConfiguration#bind", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
515
622
  jsiiDeprecationWarnings._aws_cdk_aws_bedrock_agentcore_alpha_IGateway(gateway);
516
623
  }
517
624
  catch (error) {
@@ -536,6 +643,15 @@ class ApiGatewayTargetConfiguration extends McpTargetConfiguration {
536
643
  * Renders the MCP-specific configuration
537
644
  */
538
645
  renderMcpConfiguration() {
646
+ try {
647
+ jsiiDeprecationWarnings.print("@aws-cdk/aws-bedrock-agentcore-alpha.ApiGatewayTargetConfiguration#renderMcpConfiguration", "Use the equivalent construct from `aws-cdk-lib/aws-bedrockagentcore` instead.");
648
+ }
649
+ catch (error) {
650
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
651
+ Error.captureStackTrace(error, this.renderMcpConfiguration);
652
+ }
653
+ throw error;
654
+ }
539
655
  return {
540
656
  apiGateway: {
541
657
  restApiId: this.restApiId,
@@ -742,4 +858,4 @@ class ApiGatewayTargetConfiguration extends McpTargetConfiguration {
742
858
  }
743
859
  }
744
860
  exports.ApiGatewayTargetConfiguration = ApiGatewayTargetConfiguration;
745
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YXJnZXQtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2Q0FBb0M7QUFFcEMsMkNBQTJDO0FBRTNDLHdEQUF1RjtBQUN2Riw0RUFBNEQ7QUFHNUQsOERBQXlHO0FBRXpHLG9EQUFxRDtBQUVyRCwrQ0FBOEM7QUFzQzlDOzsrRUFFK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBc0Isc0JBQXNCOztJQWlCMUM7OztPQUdHO0lBQ0ksT0FBTztRQUNaLE9BQU87WUFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1NBQ25DLENBQUM7S0FDSDs7QUF6Qkgsd0RBMEJDO0FBRUQ7OytFQUUrRTtBQUUvRTs7Ozs7R0FLRztBQUNILE1BQWEseUJBQTBCLFNBQVEsc0JBQXNCOztJQUNuRTs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUNsQixjQUF5QixFQUN6QixVQUFzQjs7Ozs7Ozs7OztRQUV0QixPQUFPLElBQUkseUJBQXlCLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ2xFO0lBRWUsVUFBVSxHQUFHLDJCQUFhLENBQUMsTUFBTSxDQUFDO0lBRWxEOztPQUVHO0lBQ2EsY0FBYyxDQUFZO0lBRTFDOztPQUVHO0lBQ2EsVUFBVSxDQUFhO0lBRXZDLFlBQVksY0FBeUIsRUFBRSxVQUFzQjtRQUMzRCxLQUFLLEVBQUUsQ0FBQzs7Ozs7OytDQTVCQyx5QkFBeUI7Ozs7UUE2QmxDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0tBQzlCO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksSUFBSSxDQUFDLEtBQWdCLEVBQUUsT0FBaUI7Ozs7Ozs7Ozs7UUFDN0MsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMs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RSxzQkFBc0I7Z0JBQ2pDLFNBQVMsRUFBRSxDQUFDO2dCQUNaLFNBQVMsRUFBRSxHQUFHO2FBQ2YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixNQUFNLElBQUksZ0NBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdDQUFnQyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRyxDQUFDO1FBQ0gsQ0FBQztLQUNGOztBQTFXSCxzRUEyV0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVJlc3RBcGkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSB7IElGdW5jdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IElHYXRld2F5IH0gZnJvbSAnLi4vZ2F0ZXdheS1iYXNlJztcbmltcG9ydCB7IHZhbGlkYXRlT3BlbkFwaVNjaGVtYSwgdmFsaWRhdGVGaWVsZFBhdHRlcm4sIHZhbGlkYXRlU3RyaW5nRmllbGQgfSBmcm9tICcuLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuaW1wb3J0IHR5cGUgeyBBcGlTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS9hcGktc2NoZW1hJztcbmltcG9ydCB7IEFzc2V0QXBpU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEvYXBpLXNjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFRvb2xTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS90b29sLXNjaGVtYSc7XG5pbXBvcnQgeyBNY3BUYXJnZXRUeXBlIH0gZnJvbSAnLi90YXJnZXQtYmFzZSc7XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHJldHVybmVkIGJ5IGJpbmRpbmcgYSB0YXJnZXQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldENvbmZpZ3VyYXRpb25Db25maWcge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGJvdW5kXG4gICAqL1xuICByZWFkb25seSBib3VuZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIHRhcmdldCB0eXBlXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRUeXBlOiBNY3BUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgY29uZmlndXJhdGlvbiB0byBhIGNvbnN0cnVjdCBzY29wZVxuICAgKiBTZXRzIHVwIHBlcm1pc3Npb25zIGFuZCBkZXBlbmRlbmNpZXNcbiAgICovXG4gIGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgZ2F0ZXdheTogSUdhdGV3YXkpOiBUYXJnZXRDb25maWd1cmF0aW9uQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBjb25maWd1cmF0aW9uIGFzIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfcmVuZGVyKCk6IGFueTtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICBNQ1AgVGFyZ2V0IENvbmZpZ3VyYXRpb24gQmFzZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIE1DUCB0YXJnZXQgY29uZmlndXJhdGlvbnNcbiAqIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBhbGwgTUNQIHRhcmdldCB0eXBlc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWNwVGFyZ2V0Q29uZmlndXJhdGlvbiBpbXBsZW1lbnRzIElUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgdHlwZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRhcmdldFR5cGU6IE1jcFRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBjb25maWd1cmF0aW9uIHRvIGEgY29uc3RydWN0IHNjb3BlXG4gICAqIFNldHMgdXAgcGVybWlzc2lvbnMgYW5kIGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgZ2F0ZXdheTogSUdhdGV3YXkpOiBUYXJnZXRDb25maWd1cmF0aW9uQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBNQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlbmRlck1jcENvbmZpZ3VyYXRpb24oKTogYW55O1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBjb25maWd1cmF0aW9uIGFzIENsb3VkRm9ybWF0aW9uIHByb3BlcnRpZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3JlbmRlcigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBtY3A6IHRoaXMucmVuZGVyTWNwQ29uZmlndXJhdGlvbigpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICBMYW1iZGEgVGFyZ2V0IENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBMYW1iZGEtYmFzZWQgTUNQIHRhcmdldHNcbiAqXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gd3JhcHMgYSBMYW1iZGEgZnVuY3Rpb24gYXMgTUNQIHRvb2xzLFxuICogYWxsb3dpbmcgdGhlIGdhdGV3YXkgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB0byBwcm92aWRlIHRvb2wgY2FwYWJpbGl0aWVzLlxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhVGFyZ2V0Q29uZmlndXJhdGlvbiBleHRlbmRzIE1jcFRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgTGFtYmRhIHRhcmdldCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBsYW1iZGFGdW5jdGlvbiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0gdG9vbFNjaGVtYSBUaGUgc2NoZW1hIGRlZmluaW5nIHRoZSB0b29sc1xuICAgKiBAcmV0dXJucyBBIG5ldyBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShcbiAgICBsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uLFxuICAgIHRvb2xTY2hlbWE6IFRvb2xTY2hlbWEsXG4gICk6IExhbWJkYVRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTGFtYmRhVGFyZ2V0Q29uZmlndXJhdGlvbihsYW1iZGFGdW5jdGlvbiwgdG9vbFNjaGVtYSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0VHlwZSA9IE1jcFRhcmdldFR5cGUuTEFNQkRBO1xuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgTUNQIHNlcnZlciBsb2dpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0b29sIHNjaGVtYSB0aGF0IGRlZmluZXMgdGhlIGF2YWlsYWJsZSB0b29sc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRvb2xTY2hlbWE6IFRvb2xTY2hlbWE7XG5cbiAgY29uc3RydWN0b3IobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbiwgdG9vbFNjaGVtYTogVG9vbFNjaGVtYSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbiA9IGxhbWJkYUZ1bmN0aW9uO1xuICAgIHRoaXMudG9vbFNjaGVtYSA9IHRvb2xTY2hlbWE7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgdGhpcyBjb25maWd1cmF0aW9uIHRvIGEgY29uc3RydWN0IHNjb3BlXG4gICAqIFNldHMgdXAgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIGZvciB0aGUgZ2F0ZXdheSB0byBpbnZva2UgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gZ2F0ZXdheSBUaGUgZ2F0ZXdheSB0aGF0IHdpbGwgdXNlIHRoaXMgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgYmluZChzY29wZTogQ29uc3RydWN0LCBnYXRld2F5OiBJR2F0ZXdheSk6IFRhcmdldENvbmZpZ3VyYXRpb25Db25maWcge1xuICAgIC8vIEJpbmQgdGhlIHRvb2wgc2NoZW1hXG4gICAgdGhpcy50b29sU2NoZW1hLmJpbmQoc2NvcGUpO1xuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIGdhdGV3YXkgcm9sZVxuICAgIHRoaXMudG9vbFNjaGVtYS5ncmFudFBlcm1pc3Npb25zVG9Sb2xlKGdhdGV3YXkucm9sZSk7XG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbi5ncmFudEludm9rZShnYXRld2F5LnJvbGUpO1xuXG4gICAgcmV0dXJuIHsgYm91bmQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBNQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbmRlck1jcENvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFtYmRhOiB7XG4gICAgICAgIGxhbWJkYUFybjogdGhpcy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgICAgdG9vbFNjaGVtYTogdGhpcy50b29sU2NoZW1hLl9yZW5kZXIoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgIE9wZW5BUEkgVGFyZ2V0IENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBPcGVuQVBJLWJhc2VkIE1DUCB0YXJnZXRzXG4gKlxuICogVGhpcyBjb25maWd1cmF0aW9uIGV4cG9zZXMgYW4gT3BlbkFQSS9SRVNUIEFQSSBhcyBNQ1AgdG9vbHMsXG4gKiBhbGxvd2luZyB0aGUgZ2F0ZXdheSB0byB0cmFuc2Zvcm0gQVBJIG9wZXJhdGlvbnMgaW50byB0b29sIGNhbGxzLlxuICovXG5leHBvcnQgY2xhc3MgT3BlbkFwaVRhcmdldENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNY3BUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBPcGVuQVBJIHRhcmdldCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBhcGlTY2hlbWEgVGhlIE9wZW5BUEkgc2NoZW1hXG4gICAqIEBwYXJhbSB2YWxpZGF0ZVNjaGVtYSBXaGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBPcGVuQVBJIHNjaGVtYSAob25seSBhcHBsaWVzIHRvIGlubGluZSBzY2hlbWFzKVxuICAgKiBAcmV0dXJucyBBIG5ldyBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUoYXBpU2NoZW1hOiBBcGlTY2hlbWEsIHZhbGlkYXRlU2NoZW1hPzogYm9vbGVhbik6IE9wZW5BcGlUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE9wZW5BcGlUYXJnZXRDb25maWd1cmF0aW9uKGFwaVNjaGVtYSwgdmFsaWRhdGVTY2hlbWEpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFR5cGUgPSBNY3BUYXJnZXRUeXBlLk9QRU5BUElfU0NIRU1BO1xuXG4gIC8qKlxuICAgKiBUaGUgT3BlbkFQSSBzY2hlbWEgdGhhdCBkZWZpbmVzIHRoZSBBUElcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlTY2hlbWE6IEFwaVNjaGVtYTtcblxuICAvKipcbiAgICogV2hldGhlciB0byB2YWxpZGF0ZSB0aGUgT3BlbkFQSSBzY2hlbWFcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvdWxkVmFsaWRhdGVTY2hlbWE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoYXBpU2NoZW1hOiBBcGlTY2hlbWEsIHZhbGlkYXRlU2NoZW1hPzogYm9vbGVhbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hcGlTY2hlbWEgPSBhcGlTY2hlbWE7XG4gICAgdGhpcy5zaG91bGRWYWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hID8/IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgdGhpcyBjb25maWd1cmF0aW9uIHRvIGEgY29uc3RydWN0IHNjb3BlXG4gICAqIFNldHMgdXAgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIGZvciB0aGUgZ2F0ZXdheSB0byBhY2Nlc3MgdGhlIEFQSSBzY2hlbWFcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGdhdGV3YXkgVGhlIGdhdGV3YXkgdGhhdCB3aWxsIHVzZSB0aGlzIHRhcmdldFxuICAgKi9cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgZ2F0ZXdheTogSUdhdGV3YXkpOiBUYXJnZXRDb25maWd1cmF0aW9uQ29uZmlnIHtcbiAgICBpZiAodGhpcy5zaG91bGRWYWxpZGF0ZVNjaGVtYSkge1xuICAgICAgLy8gRm9yIGlubGluZSBzY2hlbWFzXG4gICAgICBpZiAodGhpcy5hcGlTY2hlbWEuaW5saW5lU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlT3BlbkFwaVNjaGVtYSh7XG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmFwaVNjaGVtYS5pbmxpbmVTY2hlbWEsXG4gICAgICAgICAgc2NoZW1hTmFtZTogJ09wZW5BUEkgc2NoZW1hIGZvciB0YXJnZXQnLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBPcGVuQXBpU2NoZW1hVmFsaWRhdGlvbkZhaWxlZGAsIGBPcGVuQVBJIHNjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZDpcXG4ke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmFwaVNjaGVtYSBpbnN0YW5jZW9mIEFzc2V0QXBpU2NoZW1hKSB7XG4gICAgICAgIC8vIEZvciBhc3NldCBzY2hlbWFzIChsb2NhbCBmaWxlcylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHRoaXMuYXBpU2NoZW1hLl9nZXRGaWxlUGF0aCgpLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZU9wZW5BcGlTY2hlbWEoe1xuICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWFDb250ZW50LFxuICAgICAgICAgICAgc2NoZW1hTmFtZTogYE9wZW5BUEkgc2NoZW1hIGZyb20gZmlsZSAke3RoaXMuYXBpU2NoZW1hLl9nZXRGaWxlUGF0aCgpfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE9wZW5BcGlTY2hlbWFWYWxpZGF0aW9uRmFpbGVkYCwgYE9wZW5BUEkgc2NoZW1hIHZhbGlkYXRpb24gZmFpbGVkOlxcbiR7ZXJyb3JzLmpvaW4oJ1xcbicpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBsaXRgT3BlbkFwaVNjaGVtYUZpbGVSZWFkRmFpbGVkYCxcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gcmVhZCBPcGVuQVBJIHNjaGVtYSBmcm9tICR7dGhpcy5hcGlTY2hlbWEuX2dldEZpbGVQYXRoKCl9OiAke2UgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFMzIHNjaGVtYXMgY2Fubm90IGJlIHZhbGlkYXRlZCBhdCBzeW50aGVzaXMgdGltZVxuICAgIH1cblxuICAgIC8vIEJpbmQgdGhlIEFQSSBzY2hlbWFcbiAgICB0aGlzLmFwaVNjaGVtYS5iaW5kKHNjb3BlKTtcbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBnYXRld2F5IHJvbGUgaWYgc2NoZW1hIGlzIGluIFMzXG4gICAgdGhpcy5hcGlTY2hlbWEuZ3JhbnRQZXJtaXNzaW9uc1RvUm9sZShnYXRld2F5LnJvbGUpO1xuXG4gICAgcmV0dXJuIHsgYm91bmQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBNQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbmRlck1jcENvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbkFwaVNjaGVtYTogdGhpcy5hcGlTY2hlbWEuX3JlbmRlcigpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICBTbWl0aHkgVGFyZ2V0IENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBTbWl0aHktYmFzZWQgTUNQIHRhcmdldHNcbiAqXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gZXhwb3NlcyBhIFNtaXRoeS1tb2RlbGVkIEFQSSBhcyBNQ1AgdG9vbHMsXG4gKiBhbGxvd2luZyB0aGUgZ2F0ZXdheSB0byB0cmFuc2Zvcm0gU21pdGh5IG9wZXJhdGlvbnMgaW50byB0b29sIGNhbGxzLlxuICovXG5leHBvcnQgY2xhc3MgU21pdGh5VGFyZ2V0Q29uZmlndXJhdGlvbiBleHRlbmRzIE1jcFRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgU21pdGh5IHRhcmdldCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBzbWl0aHlNb2RlbCBUaGUgU21pdGh5IG1vZGVsIHNjaGVtYVxuICAgKiBAcmV0dXJucyBBIG5ldyBTbWl0aHlUYXJnZXRDb25maWd1cmF0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShzbWl0aHlNb2RlbDogQXBpU2NoZW1hKTogU21pdGh5VGFyZ2V0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTbWl0aHlUYXJnZXRDb25maWd1cmF0aW9uKHNtaXRoeU1vZGVsKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRUeXBlID0gTWNwVGFyZ2V0VHlwZS5TTUlUSFlfTU9ERUw7XG5cbiAgLyoqXG4gICAqIFRoZSBTbWl0aHkgbW9kZWwgdGhhdCBkZWZpbmVzIHRoZSBBUElcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzbWl0aHlNb2RlbDogQXBpU2NoZW1hO1xuXG4gIGNvbnN0cnVjdG9yKHNtaXRoeU1vZGVsOiBBcGlTY2hlbWEpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc21pdGh5TW9kZWwgPSBzbWl0aHlNb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gYSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogU2V0cyB1cCBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIHRoZSBnYXRld2F5IHRvIGFjY2VzcyB0aGUgU21pdGh5IG1vZGVsXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBnYXRld2F5IFRoZSBnYXRld2F5IHRoYXQgd2lsbCB1c2UgdGhpcyB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIGdhdGV3YXk6IElHYXRld2F5KTogVGFyZ2V0Q29uZmlndXJhdGlvbkNvbmZpZyB7XG4gICAgLy8gQmluZCB0aGUgU21pdGh5IG1vZGVsXG4gICAgdGhpcy5zbWl0aHlNb2RlbC5iaW5kKHNjb3BlKTtcbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBnYXRld2F5IHJvbGUgaWYgc2NoZW1hIGlzIGluIFMzXG4gICAgdGhpcy5zbWl0aHlNb2RlbC5ncmFudFBlcm1pc3Npb25zVG9Sb2xlKGdhdGV3YXkucm9sZSk7XG5cbiAgICByZXR1cm4geyBib3VuZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIE1DUC1zcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyTWNwQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBzbWl0aHlNb2RlbDogdGhpcy5zbWl0aHlNb2RlbC5fcmVuZGVyKCksXG4gICAgfTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgIE1DUCBTZXJ2ZXIgVGFyZ2V0IENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBNQ1AgU2VydmVyLWJhc2VkIHRhcmdldHNcbiAqXG4gKiBNQ1AgKE1vZGVsIENvbnRleHQgUHJvdG9jb2wpIHNlcnZlcnMgcHJvdmlkZSB0b29scywgZGF0YSBhY2Nlc3MsIGFuZCBjdXN0b21cbiAqIGZ1bmN0aW9ucyBmb3IgQUkgYWdlbnRzLiBXaGVuIHlvdSBjb25maWd1cmUgYW4gTUNQIHNlcnZlciBhcyBhIGdhdGV3YXkgdGFyZ2V0LFxuICogdGhlIGdhdGV3YXkgYXV0b21hdGljYWxseSBkaXNjb3ZlcnMgYW5kIGluZGV4ZXMgYXZhaWxhYmxlIHRvb2xzIHRocm91Z2hcbiAqIHN5bmNocm9uaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIE1jcFNlcnZlclRhcmdldENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNY3BUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNQ1Agc2VydmVyIHRhcmdldCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludCBUaGUgSFRUUFMgZW5kcG9pbnQgVVJMIG9mIHRoZSBNQ1Agc2VydmVyXG4gICAqIEByZXR1cm5zIEEgbmV3IE1jcFNlcnZlclRhcmdldENvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGVuZHBvaW50OiBzdHJpbmcpOiBNY3BTZXJ2ZXJUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1jcFNlcnZlclRhcmdldENvbmZpZ3VyYXRpb24oZW5kcG9pbnQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFR5cGUgPSBNY3BUYXJnZXRUeXBlLk1DUF9TRVJWRVI7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQUyBlbmRwb2ludCBVUkwgb2YgdGhlIE1DUCBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmRwb2ludDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGVuZHBvaW50OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDtcbiAgICB0aGlzLnZhbGlkYXRlRW5kcG9pbnQoZW5kcG9pbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoaXMgY29uZmlndXJhdGlvbiB0byBhIGNvbnN0cnVjdCBzY29wZVxuICAgKiBObyBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFyZSBuZWVkZWQgZm9yIE1DUCBzZXJ2ZXIgdGFyZ2V0c1xuICAgKlxuICAgKiBAcGFyYW0gX3Njb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIF9nYXRld2F5IFRoZSBnYXRld2F5IHRoYXQgd2lsbCB1c2UgdGhpcyB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0LCBfZ2F0ZXdheTogSUdhdGV3YXkpOiBUYXJnZXRDb25maWd1cmF0aW9uQ29uZmlnIHtcbiAgICAvLyBNQ1Agc2VydmVyIHRhcmdldHMgZG9uJ3QgcmVxdWlyZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIHNldHVwXG4gICAgLy8gQXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCB0aHJvdWdoIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbnNcbiAgICByZXR1cm4geyBib3VuZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIE1DUC1zcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyTWNwQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBtY3BTZXJ2ZXI6IHtcbiAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW5kcG9pbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBNQ1Agc2VydmVyIGVuZHBvaW50XG4gICAqIC0gTXVzdCB1c2UgSFRUUFMgcHJvdG9jb2xcbiAgICogLSBTaG91bGQgYmUgcHJvcGVybHkgVVJMIGVuY29kZWRcbiAgICpcbiAgICogQHBhcmFtIGVuZHBvaW50IFRoZSBlbmRwb2ludCBVUkwgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgdGhlIGVuZHBvaW50IGlzIGludmFsaWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZW5kcG9pbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBlbmRwb2ludCxcbiAgICAgICdNQ1Agc2VydmVyIGVuZHBvaW50JyxcbiAgICAgIC9eaHR0cHM6XFwvXFwvLisvLFxuICAgICAgJ01DUCBzZXJ2ZXIgZW5kcG9pbnQgbXVzdCB1c2UgSFRUUFMgcHJvdG9jb2wgKGUuZy4sIGh0dHBzOi8vbXktc2VydmVyLmV4YW1wbGUuY29tKS4gRW5zdXJlIHRoZSBVUkwgaXMgcHJvcGVybHkgZW5jb2RlZC4nLFxuICAgICk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTWNwU2VydmVyRW5kcG9pbnRJbnZhbGlkYCwgZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICAvLyBBZGRpdGlvbmFsIGhlbHBmdWwgdmFsaWRhdGlvbiBmb3IgY29tbW9uIFVSTCBlbmNvZGluZyBpc3N1ZXNcbiAgICBpZiAoZW5kcG9pbnQuaW5jbHVkZXMoJyAnKSB8fCBlbmRwb2ludC5pbmNsdWRlcygnPCcpIHx8IGVuZHBvaW50LmluY2x1ZGVzKCc+JykpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YE1jcFNlcnZlckVuZHBvaW50RW5jb2RpbmdJbnZhbGlkYCxcbiAgICAgICAgJ01DUCBzZXJ2ZXIgZW5kcG9pbnQgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBiZSBVUkwtZW5jb2RlZC4gJyArXG4gICAgICAgICdQbGVhc2UgZW5zdXJlIHRoZSBVUkwgaXMgcHJvcGVybHkgZW5jb2RlZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgY29uc3RydWN0LicsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgIEFQSSBHYXRld2F5IFRhcmdldCBDb25maWd1cmF0aW9uXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogSFRUUCBtZXRob2RzIHN1cHBvcnRlZCBieSBBUEkgR2F0ZXdheVxuICovXG5leHBvcnQgZW51bSBBcGlHYXRld2F5SHR0cE1ldGhvZCB7XG4gIC8qKiBHRVQgbWV0aG9kICovXG4gIEdFVCA9ICdHRVQnLFxuICAvKiogUE9TVCBtZXRob2QgKi9cbiAgUE9TVCA9ICdQT1NUJyxcbiAgLyoqIFBVVCBtZXRob2QgKi9cbiAgUFVUID0gJ1BVVCcsXG4gIC8qKiBERUxFVEUgbWV0aG9kICovXG4gIERFTEVURSA9ICdERUxFVEUnLFxuICAvKiogUEFUQ0ggbWV0aG9kICovXG4gIFBBVENIID0gJ1BBVENIJyxcbiAgLyoqIEhFQUQgbWV0aG9kICovXG4gIEhFQUQgPSAnSEVBRCcsXG4gIC8qKiBPUFRJT05TIG1ldGhvZCAqL1xuICBPUFRJT05TID0gJ09QVElPTlMnLFxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGZpbHRlcmluZyBBUEkgR2F0ZXdheSB0b29sc1xuICpcbiAqIFRvb2wgZmlsdGVycyBhbGxvdyB5b3UgdG8gc2VsZWN0IFJFU1QgQVBJIG9wZXJhdGlvbnMgdXNpbmcgcGF0aCBhbmQgbWV0aG9kIGNvbWJpbmF0aW9ucy5cbiAqIEVhY2ggZmlsdGVyIHN1cHBvcnRzIHR3byBwYXRoIG1hdGNoaW5nIHN0cmF0ZWdpZXM6XG4gKiAtICoqRXhwbGljaXQgcGF0aHMqKjogTWF0Y2hlcyBhIHNpbmdsZSBzcGVjaWZpYyBwYXRoLCBzdWNoIGFzIGAvcGV0cy97cGV0SWR9YFxuICogLSAqKldpbGRjYXJkIHBhdGhzKio6IE1hdGNoZXMgYWxsIHBhdGhzIHN0YXJ0aW5nIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIHN1Y2ggYXMgYC9wZXRzLypgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVRvb2xGaWx0ZXIge1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHBhdGggdG8gZmlsdGVyXG4gICAqIENhbiBiZSBhbiBleHBsaWNpdCBwYXRoIChlLmcuLCBgL3BldHMve3BldElkfWApIG9yIGEgd2lsZGNhcmQgcGF0aCAoZS5nLiwgYC9wZXRzLypgKVxuICAgKiBNdXN0IHN0YXJ0IHdpdGggYSBmb3J3YXJkIHNsYXNoXG4gICAqL1xuICByZWFkb25seSBmaWx0ZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgSFRUUCBtZXRob2RzIHRvIGluY2x1ZGUgZm9yIHRoaXMgcGF0aFxuICAgKiBFYWNoIGZpbHRlciBzcGVjaWZpZXMgYm90aCBhIHBhdGggYW5kIGEgbGlzdCBvZiBIVFRQIG1ldGhvZHNcbiAgICogTXVsdGlwbGUgZmlsdGVycyBjYW4gb3ZlcmxhcCBhbmQgZHVwbGljYXRlcyBhcmUgYXV0b21hdGljYWxseSBkZS1kdXBsaWNhdGVkXG4gICAqL1xuICByZWFkb25seSBtZXRob2RzOiBBcGlHYXRld2F5SHR0cE1ldGhvZFtdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIG92ZXJyaWRpbmcgQVBJIEdhdGV3YXkgdG9vbCBtZXRhZGF0YVxuICpcbiAqIFRvb2wgb3ZlcnJpZGVzIGFsbG93IHlvdSB0byBjdXN0b21pemUgdGhlIHRvb2wgbmFtZSBvciBkZXNjcmlwdGlvbiBmb3Igc3BlY2lmaWMgb3BlcmF0aW9uc1xuICogYWZ0ZXIgZmlsdGVyaW5nLiBFYWNoIG92ZXJyaWRlIG11c3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBwYXRoIGFuZCBhIHNpbmdsZSBIVFRQIG1ldGhvZC5cbiAqIFRoZSBvdmVycmlkZSBtdXN0IG1hdGNoIGFuIG9wZXJhdGlvbiB0aGF0IGV4aXN0cyBpbiB5b3VyIEFQSSBhbmQgbXVzdCBjb3JyZXNwb25kIHRvIG9uZVxuICogb2YgdGhlIG9wZXJhdGlvbnMgcmVzb2x2ZWQgYnkgeW91ciBmaWx0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUdhdGV3YXlUb29sT3ZlcnJpZGUge1xuICAvKipcbiAgICogVGhlIGV4cGxpY2l0IHJlc291cmNlIHBhdGggKG5vIHdpbGRjYXJkcylcbiAgICogTXVzdCBtYXRjaCBhbiBvcGVyYXRpb24gdGhhdCBleGlzdHMgaW4geW91ciBBUElcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEhUVFAgbWV0aG9kIGZvciB0aGlzIG92ZXJyaWRlXG4gICAqIE11c3QgYmUgYSBzaW5nbGUgbWV0aG9kIChubyB3aWxkY2FyZHMpXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IEFwaUdhdGV3YXlIdHRwTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHRvb2wgbmFtZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBvcGVyYXRpb25JZCBmcm9tIHRoZSBPcGVuQVBJIGRlZmluaXRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBkZXNjcmlwdGlvbiBmb3IgdGhlIHRvb2xcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHBhc3NpbmcgbWV0YWRhdGEgKGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnMpIHRvIHRoZSBBUEkgR2F0ZXdheSB0YXJnZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiBxdWVyeSBwYXJhbWV0ZXIgbmFtZXMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSB0YXJnZXRcbiAgICpcbiAgICogQ29uc3RyYWludHM6XG4gICAqIC0gQXJyYXkgbXVzdCBjb250YWluIDEtMTAgaXRlbXNcbiAgICogLSBFYWNoIHBhcmFtZXRlciBuYW1lIG11c3QgYmUgMS00MCBjaGFyYWN0ZXJzXG4gICAqIC0gQ2Fubm90IGJlIGFuIGVtcHR5IGFycmF5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcXVlcnkgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRocm91Z2hcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRRdWVyeVBhcmFtZXRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiByZXF1ZXN0IGhlYWRlciBuYW1lcyB0byBwYXNzIHRocm91Z2ggdG8gdGhlIHRhcmdldFxuICAgKlxuICAgKiBDb25zdHJhaW50czpcbiAgICogLSBBcnJheSBtdXN0IGNvbnRhaW4gMS0xMCBpdGVtc1xuICAgKiAtIEVhY2ggaGVhZGVyIG5hbWUgbXVzdCBiZSAxLTEwMCBjaGFyYWN0ZXJzXG4gICAqIC0gQ2Fubm90IGJlIGFuIGVtcHR5IGFycmF5XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVxdWVzdCBoZWFkZXJzIGFyZSBwYXNzZWQgdGhyb3VnaFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFJlcXVlc3RIZWFkZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcmVzcG9uc2UgaGVhZGVyIG5hbWVzIHRvIHBhc3MgdGhyb3VnaCBmcm9tIHRoZSB0YXJnZXRcbiAgICpcbiAgICogQ29uc3RyYWludHM6XG4gICAqIC0gQXJyYXkgbXVzdCBjb250YWluIDEtMTAgaXRlbXNcbiAgICogLSBFYWNoIGhlYWRlciBuYW1lIG11c3QgYmUgMS0xMDAgY2hhcmFjdGVyc1xuICAgKiAtIENhbm5vdCBiZSBhbiBlbXB0eSBhcnJheVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlc3BvbnNlIGhlYWRlcnMgYXJlIHBhc3NlZCB0aHJvdWdoXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkUmVzcG9uc2VIZWFkZXJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgQVBJIEdhdGV3YXkgdG9vbHNcbiAqXG4gKiBUaGUgQVBJIEdhdGV3YXkgdG9vbCBjb25maWd1cmF0aW9uIGRlZmluZXMgd2hpY2ggb3BlcmF0aW9ucyBmcm9tIHlvdXIgUkVTVCBBUElcbiAqIGFyZSBleHBvc2VkIGFzIHRvb2xzLiBJdCByZXF1aXJlcyBhIGxpc3Qgb2YgdG9vbCBmaWx0ZXJzIHRvIHNlbGVjdCBvcGVyYXRpb25zXG4gKiB0byBleHBvc2UsIGFuZCBvcHRpb25hbGx5IGFjY2VwdHMgdG9vbCBvdmVycmlkZXMgdG8gY3VzdG9taXplIHRvb2wgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdG9vbCBmaWx0ZXJzIHRvIHNlbGVjdCBvcGVyYXRpb25zXG4gICAqIEF0IGxlYXN0IG9uZSBmaWx0ZXIgaXMgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IHRvb2xGaWx0ZXJzOiBBcGlHYXRld2F5VG9vbEZpbHRlcltdO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBsaXN0IG9mIHRvb2wgb3ZlcnJpZGVzIHRvIGN1c3RvbWl6ZSB0b29sIG1ldGFkYXRhXG4gICAqIEVhY2ggb3ZlcnJpZGUgbXVzdCBjb3JyZXNwb25kIHRvIGFuIG9wZXJhdGlvbiBzZWxlY3RlZCBieSB0aGUgZmlsdGVyc1xuICAgKiBAZGVmYXVsdCAtIE5vIHRvb2wgb3ZlcnJpZGVzXG4gICAqL1xuICByZWFkb25seSB0b29sT3ZlcnJpZGVzPzogQXBpR2F0ZXdheVRvb2xPdmVycmlkZVtdO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEFQSSBHYXRld2F5IHRhcmdldCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgUkVTVCBBUEkgdG8gaW50ZWdyYXRlIHdpdGhcbiAgICogTXVzdCBiZSBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IHJlc3RBcGk6IElSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgbmFtZSBvZiB0aGUgUkVTVCBBUElcbiAgICogQGRlZmF1bHQgLSBVc2VzIHRoZSBkZXBsb3ltZW50IHN0YWdlIGZyb20gdGhlIFJlc3RBcGkgKHJlc3RBcGkuZGVwbG95bWVudFN0YWdlLnN0YWdlTmFtZSlcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb29sIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgd2hpY2ggb3BlcmF0aW9ucyB0byBleHBvc2VcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbjogQXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBjb25maWd1cmF0aW9uIGZvciBwYXNzaW5nIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQWxsb3dzIHlvdSB0byBwYXNzIGFkZGl0aW9uYWwgY29udGV4dCB0aHJvdWdoIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQGRlZmF1bHQgLSBObyBtZXRhZGF0YSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YUNvbmZpZ3VyYXRpb24/OiBNZXRhZGF0YUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgQVBJIEdhdGV3YXktYmFzZWQgTUNQIHRhcmdldHNcbiAqXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gY29ubmVjdHMgeW91ciBnYXRld2F5IHRvIGFuIEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSSBzdGFnZS5cbiAqIFRoZSBnYXRld2F5IHRyYW5zbGF0ZXMgaW5jb21pbmcgTUNQIHJlcXVlc3RzIGludG8gSFRUUCByZXF1ZXN0cyB0byB5b3VyIFJFU1QgQVBJXG4gKiBhbmQgaGFuZGxlcyByZXNwb25zZSBmb3JtYXR0aW5nLlxuICpcbiAqIEtleSBjb25zaWRlcmF0aW9uczpcbiAqIC0gQVBJIG11c3QgYmUgaW4gdGhlIHNhbWUgYWNjb3VudCBhbmQgcmVnaW9uIGFzIHRoZSBnYXRld2F5XG4gKiAtIE9ubHkgUkVTVCBBUElzIGFyZSBzdXBwb3J0ZWQgKG5vIEhUVFAgb3IgV2ViU29ja2V0IEFQSXMpXG4gKiAtIEFQSSBtdXN0IHVzZSBhIHB1YmxpYyBlbmRwb2ludCB0eXBlXG4gKiAtIE1ldGhvZHMgd2l0aCBib3RoIEFXU19JQU0gYXV0aG9yaXphdGlvbiBhbmQgQVBJIGtleSByZXF1aXJlbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAqIC0gUHJveHkgcmVzb3VyY2VzIChlLmcuLCBgL3BldHMve3Byb3h5K31gKSBhcmUgbm90IHN1cHBvcnRlZFxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNY3BUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBUEkgR2F0ZXdheSB0YXJnZXQgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBBIG5ldyBBcGlHYXRld2F5VGFyZ2V0Q29uZmlndXJhdGlvbiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUocHJvcHM6IEFwaUdhdGV3YXlUYXJnZXRDb25maWd1cmF0aW9uUHJvcHMpOiBBcGlHYXRld2F5VGFyZ2V0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBBcGlHYXRld2F5VGFyZ2V0Q29uZmlndXJhdGlvbihwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0VHlwZSA9IE1jcFRhcmdldFR5cGUuQVBJX0dBVEVXQVk7XG5cbiAgLyoqXG4gICAqIFRoZSBSRVNUIEFQSSByZWZlcmVuY2VcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3RBcGk6IElSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFJFU1QgQVBJXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzdEFwaUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFnZSBuYW1lIG9mIHRoZSBSRVNUIEFQSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvb2wgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFQSSBHYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbjogQXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBjb25maWd1cmF0aW9uIGZvciB0aGUgQVBJIEdhdGV3YXkgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWV0YWRhdGFDb25maWd1cmF0aW9uPzogTWV0YWRhdGFDb25maWd1cmF0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBcGlHYXRld2F5VGFyZ2V0Q29uZmlndXJhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9yZXN0QXBpID0gcHJvcHMucmVzdEFwaTtcbiAgICB0aGlzLnJlc3RBcGlJZCA9IHByb3BzLnJlc3RBcGkucmVzdEFwaUlkO1xuICAgIHRoaXMuc3RhZ2UgPSBwcm9wcy5zdGFnZSA/PyBwcm9wcy5yZXN0QXBpLmRlcGxveW1lbnRTdGFnZS5zdGFnZU5hbWU7XG4gICAgdGhpcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24gPSBwcm9wcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24gPSBwcm9wcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb247XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoaXMgY29uZmlndXJhdGlvbiB0byBhIGNvbnN0cnVjdCBzY29wZVxuICAgKiBTZXRzIHVwIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlIGdhdGV3YXkgdG8gYWNjZXNzIHRoZSBBUEkgR2F0ZXdheVxuICAgKlxuICAgKiBAcGFyYW0gX3Njb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGdhdGV3YXkgVGhlIGdhdGV3YXkgdGhhdCB3aWxsIHVzZSB0aGlzIHRhcmdldFxuICAgKi9cbiAgcHVibGljIGJpbmQoX3Njb3BlOiBDb25zdHJ1Y3QsIGdhdGV3YXk6IElHYXRld2F5KTogVGFyZ2V0Q29uZmlndXJhdGlvbkNvbmZpZyB7XG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbiB0byBpbnZva2UgdGhlIEFQSSBHYXRld2F5IFJFU1QgQVBJXG4gICAgLy8gVGhlIGdhdGV3YXkgcm9sZSBuZWVkcyB0aGlzIHBlcm1pc3Npb24gdG8gbWFrZSBBUEkgY2FsbHMgdG8gdGhlIFJFU1QgQVBJIGVuZHBvaW50c1xuICAgIC8vIEZvciBtb3JlIGluZm8gb24gZ3JhbnRpbmcgcGVybWlzc2lvbjogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlL2xhdGVzdC9kZXZndWlkZS9nYXRld2F5LXRhcmdldC1hcGktZ2F0ZXdheS5odG1sI2dhdGV3YXktdGFyZ2V0LWFwaS1nYXRld2F5LW91dGJvdW5kXG5cbiAgICBnYXRld2F5LnJvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydleGVjdXRlLWFwaTpJbnZva2UnXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgdGhpcy5fcmVzdEFwaS5hcm5Gb3JFeGVjdXRlQXBpKCcqJywgJy8qJywgdGhpcy5zdGFnZSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgYm91bmQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBNQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbmRlck1jcENvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBpR2F0ZXdheToge1xuICAgICAgICByZXN0QXBpSWQ6IHRoaXMucmVzdEFwaUlkLFxuICAgICAgICBzdGFnZTogdGhpcy5zdGFnZSxcbiAgICAgICAgYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgdG9vbEZpbHRlcnM6IHRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uLnRvb2xGaWx0ZXJzLm1hcChmaWx0ZXIgPT4gKHtcbiAgICAgICAgICAgIGZpbHRlclBhdGg6IGZpbHRlci5maWx0ZXJQYXRoLFxuICAgICAgICAgICAgbWV0aG9kczogZmlsdGVyLm1ldGhvZHMsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIC4uLih0aGlzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbi50b29sT3ZlcnJpZGVzICYmIHtcbiAgICAgICAgICAgIHRvb2xPdmVycmlkZXM6IHRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uLnRvb2xPdmVycmlkZXMubWFwKG92ZXJyaWRlID0+ICh7XG4gICAgICAgICAgICAgIHBhdGg6IG92ZXJyaWRlLnBhdGgsXG4gICAgICAgICAgICAgIG1ldGhvZDogb3ZlcnJpZGUubWV0aG9kLFxuICAgICAgICAgICAgICBuYW1lOiBvdmVycmlkZS5uYW1lLFxuICAgICAgICAgICAgICAuLi4ob3ZlcnJpZGUuZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbjogb3ZlcnJpZGUuZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0aGlzLm1ldGFkYXRhQ29uZmlndXJhdGlvbiAmJiB7XG4gICAgICAgICAgbWV0YWRhdGFDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAuLi4odGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24uYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyAmJiB7XG4gICAgICAgICAgICAgIGFsbG93ZWRRdWVyeVBhcmFtZXRlcnM6IHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLih0aGlzLm1ldGFkYXRhQ29uZmlndXJhdGlvbi5hbGxvd2VkUmVxdWVzdEhlYWRlcnMgJiYge1xuICAgICAgICAgICAgICBhbGxvd2VkUmVxdWVzdEhlYWRlcnM6IHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uLmFsbG93ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uLmFsbG93ZWRSZXNwb25zZUhlYWRlcnMgJiYge1xuICAgICAgICAgICAgICBhbGxvd2VkUmVzcG9uc2VIZWFkZXJzOiB0aGlzLm1ldGFkYXRhQ29uZmlndXJhdGlvbi5hbGxvd2VkUmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgUkVTVCBBUEkgSUQgKHNraXAgaWYgdG9rZW4pXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5yZXN0QXBpSWQpKSB7XG4gICAgICBjb25zdCByZXN0QXBpSWRFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IHRoaXMucmVzdEFwaUlkLFxuICAgICAgICBmaWVsZE5hbWU6ICdSRVNUIEFQSSBJRCcsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3RBcGlJZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgUmVzdEFwaUlkSW52YWxpZGAsIHJlc3RBcGlJZEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgc3RhZ2UgbmFtZSAoc2tpcCBpZiB0b2tlbilcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLnN0YWdlKSkge1xuICAgICAgY29uc3Qgc3RhZ2VFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhZ2UsXG4gICAgICAgIGZpZWxkTmFtZTogJ1N0YWdlIG5hbWUnLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGFnZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3RhZ2VOYW1lSW52YWxpZGAsIHN0YWdlRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0b29sIGZpbHRlcnNcbiAgICBpZiAoIXRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uLnRvb2xGaWx0ZXJzIHx8IHRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uLnRvb2xGaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBUb29sRmlsdGVyc1JlcXVpcmVkYCwgJ0F0IGxlYXN0IG9uZSB0b29sIGZpbHRlciBpcyByZXF1aXJlZCBmb3IgQVBJIEdhdGV3YXkgdGFyZ2V0IGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHRvb2wgZmlsdGVyXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdGhpcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24udG9vbEZpbHRlcnMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVUb29sRmlsdGVyKGZpbHRlcik7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdG9vbCBvdmVycmlkZXMgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24udG9vbE92ZXJyaWRlcykge1xuICAgICAgZm9yIChjb25zdCBvdmVycmlkZSBvZiB0aGlzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbi50b29sT3ZlcnJpZGVzKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVUb29sT3ZlcnJpZGUob3ZlcnJpZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb24gaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZXRhZGF0YUNvbmZpZ3VyYXRpb24odGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbWV0YWRhdGEgY29uZmlndXJhdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVNZXRhZGF0YUNvbmZpZ3VyYXRpb24oY29uZmlnOiBNZXRhZGF0YUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzXG4gICAgaWYgKGNvbmZpZy5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZXRhZGF0YUFycmF5KFxuICAgICAgICBjb25maWcuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgJ2FsbG93ZWRRdWVyeVBhcmFtZXRlcnMnLFxuICAgICAgICAxLFxuICAgICAgICAxMCxcbiAgICAgICAgMSxcbiAgICAgICAgNDAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGFsbG93ZWRSZXF1ZXN0SGVhZGVyc1xuICAgIGlmIChjb25maWcuYWxsb3dlZFJlcXVlc3RIZWFkZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVNZXRhZGF0YUFycmF5KFxuICAgICAgICBjb25maWcuYWxsb3dlZFJlcXVlc3RIZWFkZXJzLFxuICAgICAgICAnYWxsb3dlZFJlcXVlc3RIZWFkZXJzJyxcbiAgICAgICAgMSxcbiAgICAgICAgMTAsXG4gICAgICAgIDEsXG4gICAgICAgIDEwMCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYWxsb3dlZFJlc3BvbnNlSGVhZGVyc1xuICAgIGlmIChjb25maWcuYWxsb3dlZFJlc3BvbnNlSGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWV0YWRhdGFBcnJheShcbiAgICAgICAgY29uZmlnLmFsbG93ZWRSZXNwb25zZUhlYWRlcnMsXG4gICAgICAgICdhbGxvd2VkUmVzcG9uc2VIZWFkZXJzJyxcbiAgICAgICAgMSxcbiAgICAgICAgMTAsXG4gICAgICAgIDEsXG4gICAgICAgIDEwMCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb24gYXJyYXkgKHF1ZXJ5IHBhcmFtZXRlcnMgb3IgaGVhZGVycylcbiAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gZmllbGROYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBmb3IgZXJyb3IgbWVzc2FnZXNcbiAgICogQHBhcmFtIG1pbkl0ZW1zIE1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIGFsbG93ZWQgaW4gdGhlIGFycmF5XG4gICAqIEBwYXJhbSBtYXhJdGVtcyBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyBhbGxvd2VkIGluIHRoZSBhcnJheVxuICAgKiBAcGFyYW0gbWluU3RyaW5nTGVuZ3RoIE1pbmltdW0gbGVuZ3RoIGZvciBlYWNoIHN0cmluZyBpbiB0aGUgYXJyYXlcbiAgICogQHBhcmFtIG1heFN0cmluZ0xlbmd0aCBNYXhpbXVtIGxlbmd0aCBmb3IgZWFjaCBzdHJpbmcgaW4gdGhlIGFycmF5XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU1ldGFkYXRhQXJyYXkoXG4gICAgYXJyYXk6IHN0cmluZ1tdLFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIG1pbkl0ZW1zOiBudW1iZXIsXG4gICAgbWF4SXRlbXM6IG51bWJlcixcbiAgICBtaW5TdHJpbmdMZW5ndGg6IG51bWJlcixcbiAgICBtYXhTdHJpbmdMZW5ndGg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgLy8gU2tpcCB2YWxpZGF0aW9uIGlmIHRoZSBlbnRpcmUgYXJyYXkgaXMgYW4gdW5yZXNvbHZlZCB0b2tlblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoYXJyYXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYXJyYXkgaXMgZW1wdHlcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBNZXRhZGF0YUFycmF5RW1wdHlgLFxuICAgICAgICBgJHtmaWVsZE5hbWV9IGNhbm5vdCBiZSBhbiBlbXB0eSBhcnJheS4gSXQgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7bWluSXRlbXN9IGl0ZW0ocylgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBhcnJheSBzaXplIGNvbnN0cmFpbnRzXG4gICAgaWYgKGFycmF5Lmxlbmd0aCA8IG1pbkl0ZW1zKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBNZXRhZGF0YUFycmF5VG9vRmV3YCxcbiAgICAgICAgYCR7ZmllbGROYW1lfSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHttaW5JdGVtc30gaXRlbShzKS4gRm91bmQgJHthcnJheS5sZW5ndGh9IGl0ZW0ocylgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID4gbWF4SXRlbXMpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YE1ldGFkYXRhQXJyYXlUb29NYW55YCxcbiAgICAgICAgYCR7ZmllbGROYW1lfSBjYW5ub3QgZXhjZWVkICR7bWF4SXRlbXN9IGl0ZW1zLiBGb3VuZCAke2FycmF5Lmxlbmd0aH0gaXRlbXNgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBlYWNoIHN0cmluZyBpbiB0aGUgYXJyYXlcbiAgICBhcnJheS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChpdGVtKSkge1xuICAgICAgICByZXR1cm47IC8vIFNraXAgdmFsaWRhdGlvbiBmb3IgdW5yZXNvbHZlZCB0b2tlbnNcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBmaWVsZE5hbWU6IGAke2ZpZWxkTmFtZX1bJHtpbmRleH1dYCxcbiAgICAgICAgbWluTGVuZ3RoOiBtaW5TdHJpbmdMZW5ndGgsXG4gICAgICAgIG1heExlbmd0aDogbWF4U3RyaW5nTGVuZ3RoLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1ldGFkYXRhQXJyYXlJdGVtSW52YWxpZGAsIGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgdG9vbCBmaWx0ZXJcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVG9vbEZpbHRlcihmaWx0ZXI6IEFwaUdhdGV3YXlUb29sRmlsdGVyKTogdm9pZCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChmaWx0ZXIuZmlsdGVyUGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWx0ZXIgcGF0aFxuICAgIGNvbnN0IHBhdGhFcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIGZpbHRlci5maWx0ZXJQYXRoLFxuICAgICAgJ0ZpbHRlciBwYXRoJyxcbiAgICAgIC9eXFwvW1xcd1xcLXt9LypdKiQvLFxuICAgICAgJ0ZpbHRlciBwYXRoIG11c3Qgc3RhcnQgd2l0aCBhIGZvcndhcmQgc2xhc2ggYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGN1cmx5IGJyYWNlcywgZm9yd2FyZCBzbGFzaGVzLCBhbmQgYXN0ZXJpc2tzJyxcbiAgICApO1xuXG4gICAgaWYgKHBhdGhFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBUb29sRmlsdGVyUGF0aEludmFsaWRgLCBwYXRoRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtZXRob2RzXG4gICAgaWYgKCFmaWx0ZXIubWV0aG9kcyB8fCBmaWx0ZXIubWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVG9vbEZpbHRlck1ldGhvZHNSZXF1aXJlZGAsIGBBdCBsZWFzdCBvbmUgSFRUUCBtZXRob2QgaXMgcmVxdWlyZWQgZm9yIGZpbHRlciBwYXRoOiAke2ZpbHRlci5maWx0ZXJQYXRofWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSB0b29sIG92ZXJyaWRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRvb2xPdmVycmlkZShvdmVycmlkZTogQXBpR2F0ZXdheVRvb2xPdmVycmlkZSk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQob3ZlcnJpZGUucGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IG92ZXJyaWRlIHBhdGggaXMgZXhwbGljaXQgKG5vIHdpbGRjYXJkcylcbiAgICBpZiAob3ZlcnJpZGUucGF0aC5pbmNsdWRlcygnKicpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb29sT3ZlcnJpZGVQYXRoV2lsZGNhcmROb3RBbGxvd2VkYCxcbiAgICAgICAgYFRvb2wgb3ZlcnJpZGUgcGF0aCBjYW5ub3QgY29udGFpbiB3aWxkY2FyZHMuIFBhdGg6ICR7b3ZlcnJpZGUucGF0aH0uIGAgK1xuICAgICAgICAnVG9vbCBvdmVycmlkZXMgbXVzdCBzcGVjaWZ5IGFuIGV4cGxpY2l0IHBhdGggdGhhdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG9wZXJhdGlvbiBpbiB5b3VyIEFQSS4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBvdmVycmlkZSBwYXRoIGZvcm1hdFxuICAgIGNvbnN0IHBhdGhFcnJvcnMgPSB2YWxpZGF0ZUZpZWxkUGF0dGVybihcbiAgICAgIG92ZXJyaWRlLnBhdGgsXG4gICAgICAnT3ZlcnJpZGUgcGF0aCcsXG4gICAgICAvXlxcL1tcXHdcXC17fS9dKiQvLFxuICAgICAgJ092ZXJyaWRlIHBhdGggbXVzdCBzdGFydCB3aXRoIGEgZm9yd2FyZCBzbGFzaCBhbmQgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgY3VybHkgYnJhY2VzLCBhbmQgZm9yd2FyZCBzbGFzaGVzJyxcbiAgICApO1xuXG4gICAgaWYgKHBhdGhFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBUb29sT3ZlcnJpZGVQYXRoSW52YWxpZGAsIHBhdGhFcnJvcnMuam9pbignXFxuJykpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG92ZXJyaWRlIG5hbWVcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG92ZXJyaWRlLm5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgdmFsdWU6IG92ZXJyaWRlLm5hbWUsXG4gICAgICBmaWVsZE5hbWU6ICdPdmVycmlkZSB0b29sIG5hbWUnLFxuICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgbWF4TGVuZ3RoOiA2NCxcbiAgICB9KTtcblxuICAgIGlmIChuYW1lRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVG9vbE92ZXJyaWRlTmFtZUludmFsaWRgLCBuYW1lRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBvdmVycmlkZSBkZXNjcmlwdGlvbiBpZiBwcm92aWRlZFxuICAgIGlmIChvdmVycmlkZS5kZXNjcmlwdGlvbiAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKG92ZXJyaWRlLmRlc2NyaXB0aW9uKSkge1xuICAgICAgY29uc3QgZGVzY0Vycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogb3ZlcnJpZGUuZGVzY3JpcHRpb24sXG4gICAgICAgIGZpZWxkTmFtZTogJ092ZXJyaWRlIGRlc2NyaXB0aW9uJyxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDIwMCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZGVzY0Vycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVG9vbE92ZXJyaWRlRGVzY3JpcHRpb25JbnZhbGlkYCwgZGVzY0Vycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
861
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFyZ2V0LWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0YXJnZXQtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6Qiw2Q0FBb0M7QUFFcEMseURBQTJDO0FBRTNDLHdEQUF1RjtBQUN2Riw0RUFBNEQ7QUFHNUQsOERBQXlHO0FBRXpHLG9EQUFxRDtBQUVyRCwrQ0FBOEM7QUF3QzlDOzsrRUFFK0U7QUFFL0U7Ozs7R0FJRztBQUNILE1BQXNCLHNCQUFzQjs7SUFpQjFDOzs7T0FHRztJQUNJLE9BQU87UUFDWixPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUNuQyxDQUFDO0tBQ0g7O0FBekJILHdEQTBCQztBQUVEOzsrRUFFK0U7QUFFL0U7Ozs7OztHQU1HO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxzQkFBc0I7O0lBQ25FOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxNQUFNLENBQ2xCLGNBQXlCLEVBQ3pCLFVBQXNCOzs7Ozs7Ozs7OztRQUV0QixPQUFPLElBQUkseUJBQXlCLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ2xFO0lBRWUsVUFBVSxHQUFHLDJCQUFhLENBQUMsTUFBTSxDQUFDO0lBRWxEOztPQUVHO0lBQ2EsY0FBYyxDQUFZO0lBRTFDOztPQUVHO0lBQ2EsVUFBVSxDQUFhO0lBRXZDLFlBQVksY0FBeUIsRUFBRSxVQUFzQjtRQUMzRCxLQUFLLEVBQUUsQ0FBQzs7Ozs7OzsrQ0E1QkMseUJBQXlCOzs7O1FBNkJsQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztLQUM5QjtJQUVEOzs7Ozs7T0FNRztJQUNJLElBQUksQ0FBQyxLQUFnQixFQUFFLE9BQWlCOzs7Ozs7Ozs7OztR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LENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sVUFBVSxHQUFHLElBQUEsd0NBQW1CLEVBQUM7Z0JBQ3JDLEtBQUssRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDM0IsU0FBUyxFQUFFLHNCQUFzQjtnQkFDakMsU0FBUyxFQUFFLENBQUM7Z0JBQ1osU0FBUyxFQUFFLEdBQUc7YUFDZixDQUFDLENBQUM7WUFFSCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxnQ0FBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsZ0NBQWdDLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLENBQUM7UUFDSCxDQUFDO0tBQ0Y7O0FBMVdILHNFQTJXQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBJUmVzdEFwaSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5JztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlIHsgSUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvZXJyb3JzJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUdhdGV3YXkgfSBmcm9tICcuLi9nYXRld2F5LWJhc2UnO1xuaW1wb3J0IHsgdmFsaWRhdGVPcGVuQXBpU2NoZW1hLCB2YWxpZGF0ZUZpZWxkUGF0dGVybiwgdmFsaWRhdGVTdHJpbmdGaWVsZCB9IGZyb20gJy4uL3ZhbGlkYXRpb24taGVscGVycyc7XG5pbXBvcnQgdHlwZSB7IEFwaVNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL2FwaS1zY2hlbWEnO1xuaW1wb3J0IHsgQXNzZXRBcGlTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS9hcGktc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgVG9vbFNjaGVtYSB9IGZyb20gJy4vc2NoZW1hL3Rvb2wtc2NoZW1hJztcbmltcG9ydCB7IE1jcFRhcmdldFR5cGUgfSBmcm9tICcuL3RhcmdldC1iYXNlJztcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcmV0dXJuZWQgYnkgYmluZGluZyBhIHRhcmdldCBjb25maWd1cmF0aW9uXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhcmdldENvbmZpZ3VyYXRpb25Db25maWcge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGJvdW5kXG4gICAqL1xuICByZWFkb25seSBib3VuZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0VHlwZTogTWNwVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogQmluZHMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogU2V0cyB1cCBwZXJtaXNzaW9ucyBhbmQgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIGdhdGV3YXk6IElHYXRld2F5KTogVGFyZ2V0Q29uZmlndXJhdGlvbkNvbmZpZztcblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgY29uZmlndXJhdGlvbiBhcyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0aWVzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JlbmRlcigpOiBhbnk7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgTUNQIFRhcmdldCBDb25maWd1cmF0aW9uIEJhc2VcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBNQ1AgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYWxsIE1DUCB0YXJnZXQgdHlwZXNcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNY3BUYXJnZXRDb25maWd1cmF0aW9uIGltcGxlbWVudHMgSVRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIHRhcmdldCB0eXBlXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFyZ2V0VHlwZTogTWNwVGFyZ2V0VHlwZTtcblxuICAvKipcbiAgICogQmluZHMgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogU2V0cyB1cCBwZXJtaXNzaW9ucyBhbmQgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYmluZChzY29wZTogQ29uc3RydWN0LCBnYXRld2F5OiBJR2F0ZXdheSk6IFRhcmdldENvbmZpZ3VyYXRpb25Db25maWc7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIE1DUC1zcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVuZGVyTWNwQ29uZmlndXJhdGlvbigpOiBhbnk7XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGNvbmZpZ3VyYXRpb24gYXMgQ2xvdWRGb3JtYXRpb24gcHJvcGVydGllc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcmVuZGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1jcDogdGhpcy5yZW5kZXJNY3BDb25maWd1cmF0aW9uKCksXG4gICAgfTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgIExhbWJkYSBUYXJnZXQgQ29uZmlndXJhdGlvblxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIExhbWJkYS1iYXNlZCBNQ1AgdGFyZ2V0c1xuICpcbiAqIFRoaXMgY29uZmlndXJhdGlvbiB3cmFwcyBhIExhbWJkYSBmdW5jdGlvbiBhcyBNQ1AgdG9vbHMsXG4gKiBhbGxvd2luZyB0aGUgZ2F0ZXdheSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgdG9vbCBjYXBhYmlsaXRpZXMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY2xhc3MgTGFtYmRhVGFyZ2V0Q29uZmlndXJhdGlvbiBleHRlbmRzIE1jcFRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgTGFtYmRhIHRhcmdldCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBsYW1iZGFGdW5jdGlvbiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0gdG9vbFNjaGVtYSBUaGUgc2NoZW1hIGRlZmluaW5nIHRoZSB0b29sc1xuICAgKiBAcmV0dXJucyBBIG5ldyBMYW1iZGFUYXJnZXRDb25maWd1cmF0aW9uIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNyZWF0ZShcbiAgICBsYW1iZGFGdW5jdGlvbjogSUZ1bmN0aW9uLFxuICAgIHRvb2xTY2hlbWE6IFRvb2xTY2hlbWEsXG4gICk6IExhbWJkYVRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgTGFtYmRhVGFyZ2V0Q29uZmlndXJhdGlvbihsYW1iZGFGdW5jdGlvbiwgdG9vbFNjaGVtYSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0VHlwZSA9IE1jcFRhcmdldFR5cGUuTEFNQkRBO1xuXG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgTUNQIHNlcnZlciBsb2dpY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uOiBJRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0b29sIHNjaGVtYSB0aGF0IGRlZmluZXMgdGhlIGF2YWlsYWJsZSB0b29sc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRvb2xTY2hlbWE6IFRvb2xTY2hlbWE7XG5cbiAgY29uc3RydWN0b3IobGFtYmRhRnVuY3Rpb246IElGdW5jdGlvbiwgdG9vbFNjaGVtYTogVG9vbFNjaGVtYSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbiA9IGxhbWJkYUZ1bmN0aW9uO1xuICAgIHRoaXMudG9vbFNjaGVtYSA9IHRvb2xTY2hlbWE7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgdGhpcyBjb25maWd1cmF0aW9uIHRvIGEgY29uc3RydWN0IHNjb3BlXG4gICAqIFNldHMgdXAgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIGZvciB0aGUgZ2F0ZXdheSB0byBpbnZva2UgdGhlIExhbWJkYSBmdW5jdGlvblxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gZ2F0ZXdheSBUaGUgZ2F0ZXdheSB0aGF0IHdpbGwgdXNlIHRoaXMgdGFyZ2V0XG4gICAqL1xuICBwdWJsaWMgYmluZChzY29wZTogQ29uc3RydWN0LCBnYXRld2F5OiBJR2F0ZXdheSk6IFRhcmdldENvbmZpZ3VyYXRpb25Db25maWcge1xuICAgIC8vIEJpbmQgdGhlIHRvb2wgc2NoZW1hXG4gICAgdGhpcy50b29sU2NoZW1hLmJpbmQoc2NvcGUpO1xuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIGdhdGV3YXkgcm9sZVxuICAgIHRoaXMudG9vbFNjaGVtYS5ncmFudFBlcm1pc3Npb25zVG9Sb2xlKGdhdGV3YXkucm9sZSk7XG4gICAgdGhpcy5sYW1iZGFGdW5jdGlvbi5ncmFudEludm9rZShnYXRld2F5LnJvbGUpO1xuXG4gICAgcmV0dXJuIHsgYm91bmQ6IHRydWUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBNQ1Atc3BlY2lmaWMgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIHJlbmRlck1jcENvbmZpZ3VyYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFtYmRhOiB7XG4gICAgICAgIGxhbWJkYUFybjogdGhpcy5sYW1iZGFGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICAgICAgdG9vbFNjaGVtYTogdGhpcy50b29sU2NoZW1hLl9yZW5kZXIoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgIE9wZW5BUEkgVGFyZ2V0IENvbmZpZ3VyYXRpb25cbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBPcGVuQVBJLWJhc2VkIE1DUCB0YXJnZXRzXG4gKlxuICogVGhpcyBjb25maWd1cmF0aW9uIGV4cG9zZXMgYW4gT3BlbkFQSS9SRVNUIEFQSSBhcyBNQ1AgdG9vbHMsXG4gKiBhbGxvd2luZyB0aGUgZ2F0ZXdheSB0byB0cmFuc2Zvcm0gQVBJIG9wZXJhdGlvbnMgaW50byB0b29sIGNhbGxzLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE9wZW5BcGlUYXJnZXRDb25maWd1cmF0aW9uIGV4dGVuZHMgTWNwVGFyZ2V0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gT3BlbkFQSSB0YXJnZXQgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gYXBpU2NoZW1hIFRoZSBPcGVuQVBJIHNjaGVtYVxuICAgKiBAcGFyYW0gdmFsaWRhdGVTY2hlbWEgV2hldGhlciB0byB2YWxpZGF0ZSB0aGUgT3BlbkFQSSBzY2hlbWEgKG9ubHkgYXBwbGllcyB0byBpbmxpbmUgc2NoZW1hcylcbiAgICogQHJldHVybnMgQSBuZXcgT3BlbkFwaVRhcmdldENvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGFwaVNjaGVtYTogQXBpU2NoZW1hLCB2YWxpZGF0ZVNjaGVtYT86IGJvb2xlYW4pOiBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBPcGVuQXBpVGFyZ2V0Q29uZmlndXJhdGlvbihhcGlTY2hlbWEsIHZhbGlkYXRlU2NoZW1hKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRUeXBlID0gTWNwVGFyZ2V0VHlwZS5PUEVOQVBJX1NDSEVNQTtcblxuICAvKipcbiAgICogVGhlIE9wZW5BUEkgc2NoZW1hIHRoYXQgZGVmaW5lcyB0aGUgQVBJXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpU2NoZW1hOiBBcGlTY2hlbWE7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdmFsaWRhdGUgdGhlIE9wZW5BUEkgc2NoZW1hXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHNob3VsZFZhbGlkYXRlU2NoZW1hOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKGFwaVNjaGVtYTogQXBpU2NoZW1hLCB2YWxpZGF0ZVNjaGVtYT86IGJvb2xlYW4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBpU2NoZW1hID0gYXBpU2NoZW1hO1xuICAgIHRoaXMuc2hvdWxkVmFsaWRhdGVTY2hlbWEgPSB2YWxpZGF0ZVNjaGVtYSA/PyB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoaXMgY29uZmlndXJhdGlvbiB0byBhIGNvbnN0cnVjdCBzY29wZVxuICAgKiBTZXRzIHVwIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlIGdhdGV3YXkgdG8gYWNjZXNzIHRoZSBBUEkgc2NoZW1hXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBnYXRld2F5IFRoZSBnYXRld2F5IHRoYXQgd2lsbCB1c2UgdGhpcyB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBiaW5kKHNjb3BlOiBDb25zdHJ1Y3QsIGdhdGV3YXk6IElHYXRld2F5KTogVGFyZ2V0Q29uZmlndXJhdGlvbkNvbmZpZyB7XG4gICAgaWYgKHRoaXMuc2hvdWxkVmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgIC8vIEZvciBpbmxpbmUgc2NoZW1hc1xuICAgICAgaWYgKHRoaXMuYXBpU2NoZW1hLmlubGluZVNjaGVtYSkge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZU9wZW5BcGlTY2hlbWEoe1xuICAgICAgICAgIHNjaGVtYTogdGhpcy5hcGlTY2hlbWEuaW5saW5lU2NoZW1hLFxuICAgICAgICAgIHNjaGVtYU5hbWU6ICdPcGVuQVBJIHNjaGVtYSBmb3IgdGFyZ2V0JyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgT3BlbkFwaVNjaGVtYVZhbGlkYXRpb25GYWlsZWRgLCBgT3BlbkFQSSBzY2hlbWEgdmFsaWRhdGlvbiBmYWlsZWQ6XFxuJHtlcnJvcnMuam9pbignXFxuJyl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hcGlTY2hlbWEgaW5zdGFuY2VvZiBBc3NldEFwaVNjaGVtYSkge1xuICAgICAgICAvLyBGb3IgYXNzZXQgc2NoZW1hcyAobG9jYWwgZmlsZXMpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyh0aGlzLmFwaVNjaGVtYS5fZ2V0RmlsZVBhdGgoKSwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVPcGVuQXBpU2NoZW1hKHtcbiAgICAgICAgICAgIHNjaGVtYTogc2NoZW1hQ29udGVudCxcbiAgICAgICAgICAgIHNjaGVtYU5hbWU6IGBPcGVuQVBJIHNjaGVtYSBmcm9tIGZpbGUgJHt0aGlzLmFwaVNjaGVtYS5fZ2V0RmlsZVBhdGgoKX1gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBPcGVuQXBpU2NoZW1hVmFsaWRhdGlvbkZhaWxlZGAsIGBPcGVuQVBJIHNjaGVtYSB2YWxpZGF0aW9uIGZhaWxlZDpcXG4ke2Vycm9ycy5qb2luKCdcXG4nKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAgbGl0YE9wZW5BcGlTY2hlbWFGaWxlUmVhZEZhaWxlZGAsXG4gICAgICAgICAgICBgRmFpbGVkIHRvIHJlYWQgT3BlbkFQSSBzY2hlbWEgZnJvbSAke3RoaXMuYXBpU2NoZW1hLl9nZXRGaWxlUGF0aCgpfTogJHtlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSl9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTMyBzY2hlbWFzIGNhbm5vdCBiZSB2YWxpZGF0ZWQgYXQgc3ludGhlc2lzIHRpbWVcbiAgICB9XG5cbiAgICAvLyBCaW5kIHRoZSBBUEkgc2NoZW1hXG4gICAgdGhpcy5hcGlTY2hlbWEuYmluZChzY29wZSk7XG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gZ2F0ZXdheSByb2xlIGlmIHNjaGVtYSBpcyBpbiBTM1xuICAgIHRoaXMuYXBpU2NoZW1hLmdyYW50UGVybWlzc2lvbnNUb1JvbGUoZ2F0ZXdheS5yb2xlKTtcblxuICAgIHJldHVybiB7IGJvdW5kOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgTUNQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCByZW5kZXJNY3BDb25maWd1cmF0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5BcGlTY2hlbWE6IHRoaXMuYXBpU2NoZW1hLl9yZW5kZXIoKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgU21pdGh5IFRhcmdldCBDb25maWd1cmF0aW9uXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgU21pdGh5LWJhc2VkIE1DUCB0YXJnZXRzXG4gKlxuICogVGhpcyBjb25maWd1cmF0aW9uIGV4cG9zZXMgYSBTbWl0aHktbW9kZWxlZCBBUEkgYXMgTUNQIHRvb2xzLFxuICogYWxsb3dpbmcgdGhlIGdhdGV3YXkgdG8gdHJhbnNmb3JtIFNtaXRoeSBvcGVyYXRpb25zIGludG8gdG9vbCBjYWxscy5cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTbWl0aHlUYXJnZXRDb25maWd1cmF0aW9uIGV4dGVuZHMgTWNwVGFyZ2V0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBTbWl0aHkgdGFyZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNtaXRoeU1vZGVsIFRoZSBTbWl0aHkgbW9kZWwgc2NoZW1hXG4gICAqIEByZXR1cm5zIEEgbmV3IFNtaXRoeVRhcmdldENvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHNtaXRoeU1vZGVsOiBBcGlTY2hlbWEpOiBTbWl0aHlUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IFNtaXRoeVRhcmdldENvbmZpZ3VyYXRpb24oc21pdGh5TW9kZWwpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFR5cGUgPSBNY3BUYXJnZXRUeXBlLlNNSVRIWV9NT0RFTDtcblxuICAvKipcbiAgICogVGhlIFNtaXRoeSBtb2RlbCB0aGF0IGRlZmluZXMgdGhlIEFQSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNtaXRoeU1vZGVsOiBBcGlTY2hlbWE7XG5cbiAgY29uc3RydWN0b3Ioc21pdGh5TW9kZWw6IEFwaVNjaGVtYSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zbWl0aHlNb2RlbCA9IHNtaXRoeU1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoaXMgY29uZmlndXJhdGlvbiB0byBhIGNvbnN0cnVjdCBzY29wZVxuICAgKiBTZXRzIHVwIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlIGdhdGV3YXkgdG8gYWNjZXNzIHRoZSBTbWl0aHkgbW9kZWxcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGdhdGV3YXkgVGhlIGdhdGV3YXkgdGhhdCB3aWxsIHVzZSB0aGlzIHRhcmdldFxuICAgKi9cbiAgcHVibGljIGJpbmQoc2NvcGU6IENvbnN0cnVjdCwgZ2F0ZXdheTogSUdhdGV3YXkpOiBUYXJnZXRDb25maWd1cmF0aW9uQ29uZmlnIHtcbiAgICAvLyBCaW5kIHRoZSBTbWl0aHkgbW9kZWxcbiAgICB0aGlzLnNtaXRoeU1vZGVsLmJpbmQoc2NvcGUpO1xuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIGdhdGV3YXkgcm9sZSBpZiBzY2hlbWEgaXMgaW4gUzNcbiAgICB0aGlzLnNtaXRoeU1vZGVsLmdyYW50UGVybWlzc2lvbnNUb1JvbGUoZ2F0ZXdheS5yb2xlKTtcblxuICAgIHJldHVybiB7IGJvdW5kOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgTUNQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCByZW5kZXJNY3BDb25maWd1cmF0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNtaXRoeU1vZGVsOiB0aGlzLnNtaXRoeU1vZGVsLl9yZW5kZXIoKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqICAgICAgICAgICAgICAgICAgICAgTUNQIFNlcnZlciBUYXJnZXQgQ29uZmlndXJhdGlvblxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIE1DUCBTZXJ2ZXItYmFzZWQgdGFyZ2V0c1xuICpcbiAqIE1DUCAoTW9kZWwgQ29udGV4dCBQcm90b2NvbCkgc2VydmVycyBwcm92aWRlIHRvb2xzLCBkYXRhIGFjY2VzcywgYW5kIGN1c3RvbVxuICogZnVuY3Rpb25zIGZvciBBSSBhZ2VudHMuIFdoZW4geW91IGNvbmZpZ3VyZSBhbiBNQ1Agc2VydmVyIGFzIGEgZ2F0ZXdheSB0YXJnZXQsXG4gKiB0aGUgZ2F0ZXdheSBhdXRvbWF0aWNhbGx5IGRpc2NvdmVycyBhbmQgaW5kZXhlcyBhdmFpbGFibGUgdG9vbHMgdGhyb3VnaFxuICogc3luY2hyb25pemF0aW9uLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1jcFNlcnZlclRhcmdldENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNY3BUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBNQ1Agc2VydmVyIHRhcmdldCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludCBUaGUgSFRUUFMgZW5kcG9pbnQgVVJMIG9mIHRoZSBNQ1Agc2VydmVyXG4gICAqIEByZXR1cm5zIEEgbmV3IE1jcFNlcnZlclRhcmdldENvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGVuZHBvaW50OiBzdHJpbmcpOiBNY3BTZXJ2ZXJUYXJnZXRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IE1jcFNlcnZlclRhcmdldENvbmZpZ3VyYXRpb24oZW5kcG9pbnQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFR5cGUgPSBNY3BUYXJnZXRUeXBlLk1DUF9TRVJWRVI7XG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQUyBlbmRwb2ludCBVUkwgb2YgdGhlIE1DUCBzZXJ2ZXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmRwb2ludDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGVuZHBvaW50OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDtcbiAgICB0aGlzLnZhbGlkYXRlRW5kcG9pbnQoZW5kcG9pbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoaXMgY29uZmlndXJhdGlvbiB0byBhIGNvbnN0cnVjdCBzY29wZVxuICAgKiBObyBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFyZSBuZWVkZWQgZm9yIE1DUCBzZXJ2ZXIgdGFyZ2V0c1xuICAgKlxuICAgKiBAcGFyYW0gX3Njb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIF9nYXRld2F5IFRoZSBnYXRld2F5IHRoYXQgd2lsbCB1c2UgdGhpcyB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0LCBfZ2F0ZXdheTogSUdhdGV3YXkpOiBUYXJnZXRDb25maWd1cmF0aW9uQ29uZmlnIHtcbiAgICAvLyBNQ1Agc2VydmVyIHRhcmdldHMgZG9uJ3QgcmVxdWlyZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIHNldHVwXG4gICAgLy8gQXV0aGVudGljYXRpb24gaXMgaGFuZGxlZCB0aHJvdWdoIGNyZWRlbnRpYWwgcHJvdmlkZXIgY29uZmlndXJhdGlvbnNcbiAgICByZXR1cm4geyBib3VuZDogdHJ1ZSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIE1DUC1zcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVuZGVyTWNwQ29uZmlndXJhdGlvbigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBtY3BTZXJ2ZXI6IHtcbiAgICAgICAgZW5kcG9pbnQ6IHRoaXMuZW5kcG9pbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBNQ1Agc2VydmVyIGVuZHBvaW50XG4gICAqIC0gTXVzdCB1c2UgSFRUUFMgcHJvdG9jb2xcbiAgICogLSBTaG91bGQgYmUgcHJvcGVybHkgVVJMIGVuY29kZWRcbiAgICpcbiAgICogQHBhcmFtIGVuZHBvaW50IFRoZSBlbmRwb2ludCBVUkwgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyBWYWxpZGF0aW9uRXJyb3IgaWYgdGhlIGVuZHBvaW50IGlzIGludmFsaWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlRW5kcG9pbnQoZW5kcG9pbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZW5kcG9pbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBlbmRwb2ludCxcbiAgICAgICdNQ1Agc2VydmVyIGVuZHBvaW50JyxcbiAgICAgIC9eaHR0cHM6XFwvXFwvLisvLFxuICAgICAgJ01DUCBzZXJ2ZXIgZW5kcG9pbnQgbXVzdCB1c2UgSFRUUFMgcHJvdG9jb2wgKGUuZy4sIGh0dHBzOi8vbXktc2VydmVyLmV4YW1wbGUuY29tKS4gRW5zdXJlIHRoZSBVUkwgaXMgcHJvcGVybHkgZW5jb2RlZC4nLFxuICAgICk7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTWNwU2VydmVyRW5kcG9pbnRJbnZhbGlkYCwgZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICAvLyBBZGRpdGlvbmFsIGhlbHBmdWwgdmFsaWRhdGlvbiBmb3IgY29tbW9uIFVSTCBlbmNvZGluZyBpc3N1ZXNcbiAgICBpZiAoZW5kcG9pbnQuaW5jbHVkZXMoJyAnKSB8fCBlbmRwb2ludC5pbmNsdWRlcygnPCcpIHx8IGVuZHBvaW50LmluY2x1ZGVzKCc+JykpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YE1jcFNlcnZlckVuZHBvaW50RW5jb2RpbmdJbnZhbGlkYCxcbiAgICAgICAgJ01DUCBzZXJ2ZXIgZW5kcG9pbnQgY29udGFpbnMgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBiZSBVUkwtZW5jb2RlZC4gJyArXG4gICAgICAgICdQbGVhc2UgZW5zdXJlIHRoZSBVUkwgaXMgcHJvcGVybHkgZW5jb2RlZCBiZWZvcmUgcGFzc2luZyB0byB0aGUgY29uc3RydWN0LicsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiAgICAgICAgICAgICAgICAgICAgIEFQSSBHYXRld2F5IFRhcmdldCBDb25maWd1cmF0aW9uXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogSFRUUCBtZXRob2RzIHN1cHBvcnRlZCBieSBBUEkgR2F0ZXdheVxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGVudW0gQXBpR2F0ZXdheUh0dHBNZXRob2Qge1xuICAvKiogR0VUIG1ldGhvZCAqL1xuICBHRVQgPSAnR0VUJyxcbiAgLyoqIFBPU1QgbWV0aG9kICovXG4gIFBPU1QgPSAnUE9TVCcsXG4gIC8qKiBQVVQgbWV0aG9kICovXG4gIFBVVCA9ICdQVVQnLFxuICAvKiogREVMRVRFIG1ldGhvZCAqL1xuICBERUxFVEUgPSAnREVMRVRFJyxcbiAgLyoqIFBBVENIIG1ldGhvZCAqL1xuICBQQVRDSCA9ICdQQVRDSCcsXG4gIC8qKiBIRUFEIG1ldGhvZCAqL1xuICBIRUFEID0gJ0hFQUQnLFxuICAvKiogT1BUSU9OUyBtZXRob2QgKi9cbiAgT1BUSU9OUyA9ICdPUFRJT05TJyxcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBmaWx0ZXJpbmcgQVBJIEdhdGV3YXkgdG9vbHNcbiAqXG4gKiBUb29sIGZpbHRlcnMgYWxsb3cgeW91IHRvIHNlbGVjdCBSRVNUIEFQSSBvcGVyYXRpb25zIHVzaW5nIHBhdGggYW5kIG1ldGhvZCBjb21iaW5hdGlvbnMuXG4gKiBFYWNoIGZpbHRlciBzdXBwb3J0cyB0d28gcGF0aCBtYXRjaGluZyBzdHJhdGVnaWVzOlxuICogLSAqKkV4cGxpY2l0IHBhdGhzKio6IE1hdGNoZXMgYSBzaW5nbGUgc3BlY2lmaWMgcGF0aCwgc3VjaCBhcyBgL3BldHMve3BldElkfWBcbiAqIC0gKipXaWxkY2FyZCBwYXRocyoqOiBNYXRjaGVzIGFsbCBwYXRocyBzdGFydGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LCBzdWNoIGFzIGAvcGV0cy8qYFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlHYXRld2F5VG9vbEZpbHRlciB7XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgcGF0aCB0byBmaWx0ZXJcbiAgICogQ2FuIGJlIGFuIGV4cGxpY2l0IHBhdGggKGUuZy4sIGAvcGV0cy97cGV0SWR9YCkgb3IgYSB3aWxkY2FyZCBwYXRoIChlLmcuLCBgL3BldHMvKmApXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGZvcndhcmQgc2xhc2hcbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBIVFRQIG1ldGhvZHMgdG8gaW5jbHVkZSBmb3IgdGhpcyBwYXRoXG4gICAqIEVhY2ggZmlsdGVyIHNwZWNpZmllcyBib3RoIGEgcGF0aCBhbmQgYSBsaXN0IG9mIEhUVFAgbWV0aG9kc1xuICAgKiBNdWx0aXBsZSBmaWx0ZXJzIGNhbiBvdmVybGFwIGFuZCBkdXBsaWNhdGVzIGFyZSBhdXRvbWF0aWNhbGx5IGRlLWR1cGxpY2F0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZHM6IEFwaUdhdGV3YXlIdHRwTWV0aG9kW107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igb3ZlcnJpZGluZyBBUEkgR2F0ZXdheSB0b29sIG1ldGFkYXRhXG4gKlxuICogVG9vbCBvdmVycmlkZXMgYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSB0aGUgdG9vbCBuYW1lIG9yIGRlc2NyaXB0aW9uIGZvciBzcGVjaWZpYyBvcGVyYXRpb25zXG4gKiBhZnRlciBmaWx0ZXJpbmcuIEVhY2ggb3ZlcnJpZGUgbXVzdCBzcGVjaWZ5IGFuIGV4cGxpY2l0IHBhdGggYW5kIGEgc2luZ2xlIEhUVFAgbWV0aG9kLlxuICogVGhlIG92ZXJyaWRlIG11c3QgbWF0Y2ggYW4gb3BlcmF0aW9uIHRoYXQgZXhpc3RzIGluIHlvdXIgQVBJIGFuZCBtdXN0IGNvcnJlc3BvbmQgdG8gb25lXG4gKiBvZiB0aGUgb3BlcmF0aW9ucyByZXNvbHZlZCBieSB5b3VyIGZpbHRlcnMuXG4gKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGVxdWl2YWxlbnQgY29uc3RydWN0IGZyb20gYGF3cy1jZGstbGliL2F3cy1iZWRyb2NrYWdlbnRjb3JlYCBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwaUdhdGV3YXlUb29sT3ZlcnJpZGUge1xuICAvKipcbiAgICogVGhlIGV4cGxpY2l0IHJlc291cmNlIHBhdGggKG5vIHdpbGRjYXJkcylcbiAgICogTXVzdCBtYXRjaCBhbiBvcGVyYXRpb24gdGhhdCBleGlzdHMgaW4geW91ciBBUElcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEhUVFAgbWV0aG9kIGZvciB0aGlzIG92ZXJyaWRlXG4gICAqIE11c3QgYmUgYSBzaW5nbGUgbWV0aG9kIChubyB3aWxkY2FyZHMpXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IEFwaUdhdGV3YXlIdHRwTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHRvb2wgbmFtZVxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBvcGVyYXRpb25JZCBmcm9tIHRoZSBPcGVuQVBJIGRlZmluaXRpb24gd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBkZXNjcmlwdGlvbiBmb3IgdGhlIHRvb2xcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHBhc3NpbmcgbWV0YWRhdGEgKGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnMpIHRvIHRoZSBBUEkgR2F0ZXdheSB0YXJnZXRcbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgcXVlcnkgcGFyYW1ldGVyIG5hbWVzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgdGFyZ2V0XG4gICAqXG4gICAqIENvbnN0cmFpbnRzOlxuICAgKiAtIEFycmF5IG11c3QgY29udGFpbiAxLTEwIGl0ZW1zXG4gICAqIC0gRWFjaCBwYXJhbWV0ZXIgbmFtZSBtdXN0IGJlIDEtNDAgY2hhcmFjdGVyc1xuICAgKiAtIENhbm5vdCBiZSBhbiBlbXB0eSBhcnJheVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIHBhc3NlZCB0aHJvdWdoXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcmVxdWVzdCBoZWFkZXIgbmFtZXMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSB0YXJnZXRcbiAgICpcbiAgICogQ29uc3RyYWludHM6XG4gICAqIC0gQXJyYXkgbXVzdCBjb250YWluIDEtMTAgaXRlbXNcbiAgICogLSBFYWNoIGhlYWRlciBuYW1lIG11c3QgYmUgMS0xMDAgY2hhcmFjdGVyc1xuICAgKiAtIENhbm5vdCBiZSBhbiBlbXB0eSBhcnJheVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJlcXVlc3QgaGVhZGVycyBhcmUgcGFzc2VkIHRocm91Z2hcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRSZXF1ZXN0SGVhZGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHJlc3BvbnNlIGhlYWRlciBuYW1lcyB0byBwYXNzIHRocm91Z2ggZnJvbSB0aGUgdGFyZ2V0XG4gICAqXG4gICAqIENvbnN0cmFpbnRzOlxuICAgKiAtIEFycmF5IG11c3QgY29udGFpbiAxLTEwIGl0ZW1zXG4gICAqIC0gRWFjaCBoZWFkZXIgbmFtZSBtdXN0IGJlIDEtMTAwIGNoYXJhY3RlcnNcbiAgICogLSBDYW5ub3QgYmUgYW4gZW1wdHkgYXJyYXlcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyByZXNwb25zZSBoZWFkZXJzIGFyZSBwYXNzZWQgdGhyb3VnaFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFJlc3BvbnNlSGVhZGVycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEFQSSBHYXRld2F5IHRvb2xzXG4gKlxuICogVGhlIEFQSSBHYXRld2F5IHRvb2wgY29uZmlndXJhdGlvbiBkZWZpbmVzIHdoaWNoIG9wZXJhdGlvbnMgZnJvbSB5b3VyIFJFU1QgQVBJXG4gKiBhcmUgZXhwb3NlZCBhcyB0b29scy4gSXQgcmVxdWlyZXMgYSBsaXN0IG9mIHRvb2wgZmlsdGVycyB0byBzZWxlY3Qgb3BlcmF0aW9uc1xuICogdG8gZXhwb3NlLCBhbmQgb3B0aW9uYWxseSBhY2NlcHRzIHRvb2wgb3ZlcnJpZGVzIHRvIGN1c3RvbWl6ZSB0b29sIG1ldGFkYXRhLlxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogTGlzdCBvZiB0b29sIGZpbHRlcnMgdG8gc2VsZWN0IG9wZXJhdGlvbnNcbiAgICogQXQgbGVhc3Qgb25lIGZpbHRlciBpcyByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgdG9vbEZpbHRlcnM6IEFwaUdhdGV3YXlUb29sRmlsdGVyW107XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGxpc3Qgb2YgdG9vbCBvdmVycmlkZXMgdG8gY3VzdG9taXplIHRvb2wgbWV0YWRhdGFcbiAgICogRWFjaCBvdmVycmlkZSBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gb3BlcmF0aW9uIHNlbGVjdGVkIGJ5IHRoZSBmaWx0ZXJzXG4gICAqIEBkZWZhdWx0IC0gTm8gdG9vbCBvdmVycmlkZXNcbiAgICovXG4gIHJlYWRvbmx5IHRvb2xPdmVycmlkZXM/OiBBcGlHYXRld2F5VG9vbE92ZXJyaWRlW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gQVBJIEdhdGV3YXkgdGFyZ2V0IGNvbmZpZ3VyYXRpb25cbiAqIEBkZXByZWNhdGVkIFVzZSB0aGUgZXF1aXZhbGVudCBjb25zdHJ1Y3QgZnJvbSBgYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmVgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgUkVTVCBBUEkgdG8gaW50ZWdyYXRlIHdpdGhcbiAgICogTXVzdCBiZSBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIGdhdGV3YXlcbiAgICovXG4gIHJlYWRvbmx5IHJlc3RBcGk6IElSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgbmFtZSBvZiB0aGUgUkVTVCBBUElcbiAgICogQGRlZmF1bHQgLSBVc2VzIHRoZSBkZXBsb3ltZW50IHN0YWdlIGZyb20gdGhlIFJlc3RBcGkgKHJlc3RBcGkuZGVwbG95bWVudFN0YWdlLnN0YWdlTmFtZSlcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb29sIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgd2hpY2ggb3BlcmF0aW9ucyB0byBleHBvc2VcbiAgICovXG4gIHJlYWRvbmx5IGFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbjogQXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBjb25maWd1cmF0aW9uIGZvciBwYXNzaW5nIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQWxsb3dzIHlvdSB0byBwYXNzIGFkZGl0aW9uYWwgY29udGV4dCB0aHJvdWdoIGhlYWRlcnMgYW5kIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQGRlZmF1bHQgLSBObyBtZXRhZGF0YSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YUNvbmZpZ3VyYXRpb24/OiBNZXRhZGF0YUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgQVBJIEdhdGV3YXktYmFzZWQgTUNQIHRhcmdldHNcbiAqXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gY29ubmVjdHMgeW91ciBnYXRld2F5IHRvIGFuIEFtYXpvbiBBUEkgR2F0ZXdheSBSRVNUIEFQSSBzdGFnZS5cbiAqIFRoZSBnYXRld2F5IHRyYW5zbGF0ZXMgaW5jb21pbmcgTUNQIHJlcXVlc3RzIGludG8gSFRUUCByZXF1ZXN0cyB0byB5b3VyIFJFU1QgQVBJXG4gKiBhbmQgaGFuZGxlcyByZXNwb25zZSBmb3JtYXR0aW5nLlxuICpcbiAqIEtleSBjb25zaWRlcmF0aW9uczpcbiAqIC0gQVBJIG11c3QgYmUgaW4gdGhlIHNhbWUgYWNjb3VudCBhbmQgcmVnaW9uIGFzIHRoZSBnYXRld2F5XG4gKiAtIE9ubHkgUkVTVCBBUElzIGFyZSBzdXBwb3J0ZWQgKG5vIEhUVFAgb3IgV2ViU29ja2V0IEFQSXMpXG4gKiAtIEFQSSBtdXN0IHVzZSBhIHB1YmxpYyBlbmRwb2ludCB0eXBlXG4gKiAtIE1ldGhvZHMgd2l0aCBib3RoIEFXU19JQU0gYXV0aG9yaXphdGlvbiBhbmQgQVBJIGtleSByZXF1aXJlbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWRcbiAqIC0gUHJveHkgcmVzb3VyY2VzIChlLmcuLCBgL3BldHMve3Byb3h5K31gKSBhcmUgbm90IHN1cHBvcnRlZFxuICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBlcXVpdmFsZW50IGNvbnN0cnVjdCBmcm9tIGBhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXlUYXJnZXRDb25maWd1cmF0aW9uIGV4dGVuZHMgTWNwVGFyZ2V0Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQVBJIEdhdGV3YXkgdGFyZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMgQSBuZXcgQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb24gaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHByb3BzOiBBcGlHYXRld2F5VGFyZ2V0Q29uZmlndXJhdGlvblByb3BzKTogQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiBuZXcgQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb24ocHJvcHMpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFR5cGUgPSBNY3BUYXJnZXRUeXBlLkFQSV9HQVRFV0FZO1xuXG4gIC8qKlxuICAgKiBUaGUgUkVTVCBBUEkgcmVmZXJlbmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXN0QXBpOiBJUmVzdEFwaTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBSRVNUIEFQSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc3RBcGlJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgbmFtZSBvZiB0aGUgUkVTVCBBUElcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGFnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUb29sIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBBUEkgR2F0ZXdheSB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb246IEFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogTWV0YWRhdGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIEFQSSBHYXRld2F5IHRhcmdldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhQ29uZmlndXJhdGlvbj86IE1ldGFkYXRhQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQXBpR2F0ZXdheVRhcmdldENvbmZpZ3VyYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmVzdEFwaSA9IHByb3BzLnJlc3RBcGk7XG4gICAgdGhpcy5yZXN0QXBpSWQgPSBwcm9wcy5yZXN0QXBpLnJlc3RBcGlJZDtcbiAgICB0aGlzLnN0YWdlID0gcHJvcHMuc3RhZ2UgPz8gcHJvcHMucmVzdEFwaS5kZXBsb3ltZW50U3RhZ2Uuc3RhZ2VOYW1lO1xuICAgIHRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uID0gcHJvcHMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uO1xuICAgIHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uID0gcHJvcHMubWV0YWRhdGFDb25maWd1cmF0aW9uO1xuXG4gICAgdGhpcy52YWxpZGF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGlzIGNvbmZpZ3VyYXRpb24gdG8gYSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogU2V0cyB1cCBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIHRoZSBnYXRld2F5IHRvIGFjY2VzcyB0aGUgQVBJIEdhdGV3YXlcbiAgICpcbiAgICogQHBhcmFtIF9zY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBnYXRld2F5IFRoZSBnYXRld2F5IHRoYXQgd2lsbCB1c2UgdGhpcyB0YXJnZXRcbiAgICovXG4gIHB1YmxpYyBiaW5kKF9zY29wZTogQ29uc3RydWN0LCBnYXRld2F5OiBJR2F0ZXdheSk6IFRhcmdldENvbmZpZ3VyYXRpb25Db25maWcge1xuICAgIC8vIEdyYW50IHBlcm1pc3Npb24gdG8gaW52b2tlIHRoZSBBUEkgR2F0ZXdheSBSRVNUIEFQSVxuICAgIC8vIFRoZSBnYXRld2F5IHJvbGUgbmVlZHMgdGhpcyBwZXJtaXNzaW9uIHRvIG1ha2UgQVBJIGNhbGxzIHRvIHRoZSBSRVNUIEFQSSBlbmRwb2ludHNcbiAgICAvLyBGb3IgbW9yZSBpbmZvIG9uIGdyYW50aW5nIHBlcm1pc3Npb246IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS9sYXRlc3QvZGV2Z3VpZGUvZ2F0ZXdheS10YXJnZXQtYXBpLWdhdGV3YXkuaHRtbCNnYXRld2F5LXRhcmdldC1hcGktZ2F0ZXdheS1vdXRib3VuZFxuXG4gICAgZ2F0ZXdheS5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnZXhlY3V0ZS1hcGk6SW52b2tlJ10sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHRoaXMuX3Jlc3RBcGkuYXJuRm9yRXhlY3V0ZUFwaSgnKicsICcvKicsIHRoaXMuc3RhZ2UpLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7IGJvdW5kOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgTUNQLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCByZW5kZXJNY3BDb25maWd1cmF0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaUdhdGV3YXk6IHtcbiAgICAgICAgcmVzdEFwaUlkOiB0aGlzLnJlc3RBcGlJZCxcbiAgICAgICAgc3RhZ2U6IHRoaXMuc3RhZ2UsXG4gICAgICAgIGFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIHRvb2xGaWx0ZXJzOiB0aGlzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbi50b29sRmlsdGVycy5tYXAoZmlsdGVyID0+ICh7XG4gICAgICAgICAgICBmaWx0ZXJQYXRoOiBmaWx0ZXIuZmlsdGVyUGF0aCxcbiAgICAgICAgICAgIG1ldGhvZHM6IGZpbHRlci5tZXRob2RzLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgICAuLi4odGhpcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24udG9vbE92ZXJyaWRlcyAmJiB7XG4gICAgICAgICAgICB0b29sT3ZlcnJpZGVzOiB0aGlzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbi50b29sT3ZlcnJpZGVzLm1hcChvdmVycmlkZSA9PiAoe1xuICAgICAgICAgICAgICBwYXRoOiBvdmVycmlkZS5wYXRoLFxuICAgICAgICAgICAgICBtZXRob2Q6IG92ZXJyaWRlLm1ldGhvZCxcbiAgICAgICAgICAgICAgbmFtZTogb3ZlcnJpZGUubmFtZSxcbiAgICAgICAgICAgICAgLi4uKG92ZXJyaWRlLmRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb246IG92ZXJyaWRlLmRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24gJiYge1xuICAgICAgICAgIG1ldGFkYXRhQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgLi4uKHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMgJiYge1xuICAgICAgICAgICAgICBhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzOiB0aGlzLm1ldGFkYXRhQ29uZmlndXJhdGlvbi5hbGxvd2VkUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4odGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24uYWxsb3dlZFJlcXVlc3RIZWFkZXJzICYmIHtcbiAgICAgICAgICAgICAgYWxsb3dlZFJlcXVlc3RIZWFkZXJzOiB0aGlzLm1ldGFkYXRhQ29uZmlndXJhdGlvbi5hbGxvd2VkUmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLih0aGlzLm1ldGFkYXRhQ29uZmlndXJhdGlvbi5hbGxvd2VkUmVzcG9uc2VIZWFkZXJzICYmIHtcbiAgICAgICAgICAgICAgYWxsb3dlZFJlc3BvbnNlSGVhZGVyczogdGhpcy5tZXRhZGF0YUNvbmZpZ3VyYXRpb24uYWxsb3dlZFJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIC8vIFZhbGlkYXRlIFJFU1QgQVBJIElEIChza2lwIGlmIHRva2VuKVxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucmVzdEFwaUlkKSkge1xuICAgICAgY29uc3QgcmVzdEFwaUlkRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLnJlc3RBcGlJZCxcbiAgICAgICAgZmllbGROYW1lOiAnUkVTVCBBUEkgSUQnLFxuICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgIG1heExlbmd0aDogMjU2LFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN0QXBpSWRFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFJlc3RBcGlJZEludmFsaWRgLCByZXN0QXBpSWRFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHN0YWdlIG5hbWUgKHNraXAgaWYgdG9rZW4pXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5zdGFnZSkpIHtcbiAgICAgIGNvbnN0IHN0YWdlRXJyb3JzID0gdmFsaWRhdGVTdHJpbmdGaWVsZCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YWdlLFxuICAgICAgICBmaWVsZE5hbWU6ICdTdGFnZSBuYW1lJyxcbiAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICBtYXhMZW5ndGg6IDEyOCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhZ2VFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFN0YWdlTmFtZUludmFsaWRgLCBzdGFnZUVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdG9vbCBmaWx0ZXJzXG4gICAgaWYgKCF0aGlzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbi50b29sRmlsdGVycyB8fCB0aGlzLmFwaUdhdGV3YXlUb29sQ29uZmlndXJhdGlvbi50b29sRmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVG9vbEZpbHRlcnNSZXF1aXJlZGAsICdBdCBsZWFzdCBvbmUgdG9vbCBmaWx0ZXIgaXMgcmVxdWlyZWQgZm9yIEFQSSBHYXRld2F5IHRhcmdldCBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCB0b29sIGZpbHRlclxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIHRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uLnRvb2xGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlVG9vbEZpbHRlcihmaWx0ZXIpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHRvb2wgb3ZlcnJpZGVzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMuYXBpR2F0ZXdheVRvb2xDb25maWd1cmF0aW9uLnRvb2xPdmVycmlkZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgb3ZlcnJpZGUgb2YgdGhpcy5hcGlHYXRld2F5VG9vbENvbmZpZ3VyYXRpb24udG9vbE92ZXJyaWRlcykge1xuICAgICAgICB0aGlzLnZhbGlkYXRlVG9vbE92ZXJyaWRlKG92ZXJyaWRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtZXRhZGF0YSBjb25maWd1cmF0aW9uIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWV0YWRhdGFDb25maWd1cmF0aW9uKHRoaXMubWV0YWRhdGFDb25maWd1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTWV0YWRhdGFDb25maWd1cmF0aW9uKGNvbmZpZzogTWV0YWRhdGFDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgLy8gVmFsaWRhdGUgYWxsb3dlZFF1ZXJ5UGFyYW1ldGVyc1xuICAgIGlmIChjb25maWcuYWxsb3dlZFF1ZXJ5UGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWV0YWRhdGFBcnJheShcbiAgICAgICAgY29uZmlnLmFsbG93ZWRRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgICdhbGxvd2VkUXVlcnlQYXJhbWV0ZXJzJyxcbiAgICAgICAgMSxcbiAgICAgICAgMTAsXG4gICAgICAgIDEsXG4gICAgICAgIDQwLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhbGxvd2VkUmVxdWVzdEhlYWRlcnNcbiAgICBpZiAoY29uZmlnLmFsbG93ZWRSZXF1ZXN0SGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWV0YWRhdGFBcnJheShcbiAgICAgICAgY29uZmlnLmFsbG93ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgJ2FsbG93ZWRSZXF1ZXN0SGVhZGVycycsXG4gICAgICAgIDEsXG4gICAgICAgIDEwLFxuICAgICAgICAxLFxuICAgICAgICAxMDAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGFsbG93ZWRSZXNwb25zZUhlYWRlcnNcbiAgICBpZiAoY29uZmlnLmFsbG93ZWRSZXNwb25zZUhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52YWxpZGF0ZU1ldGFkYXRhQXJyYXkoXG4gICAgICAgIGNvbmZpZy5hbGxvd2VkUmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAnYWxsb3dlZFJlc3BvbnNlSGVhZGVycycsXG4gICAgICAgIDEsXG4gICAgICAgIDEwLFxuICAgICAgICAxLFxuICAgICAgICAxMDAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBtZXRhZGF0YSBjb25maWd1cmF0aW9uIGFycmF5IChxdWVyeSBwYXJhbWV0ZXJzIG9yIGhlYWRlcnMpXG4gICAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIGZpZWxkTmFtZSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgZm9yIGVycm9yIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSBtaW5JdGVtcyBNaW5pbXVtIG51bWJlciBvZiBpdGVtcyBhbGxvd2VkIGluIHRoZSBhcnJheVxuICAgKiBAcGFyYW0gbWF4SXRlbXMgTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgYXJyYXlcbiAgICogQHBhcmFtIG1pblN0cmluZ0xlbmd0aCBNaW5pbXVtIGxlbmd0aCBmb3IgZWFjaCBzdHJpbmcgaW4gdGhlIGFycmF5XG4gICAqIEBwYXJhbSBtYXhTdHJpbmdMZW5ndGggTWF4aW11bSBsZW5ndGggZm9yIGVhY2ggc3RyaW5nIGluIHRoZSBhcnJheVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVNZXRhZGF0YUFycmF5KFxuICAgIGFycmF5OiBzdHJpbmdbXSxcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICBtaW5JdGVtczogbnVtYmVyLFxuICAgIG1heEl0ZW1zOiBudW1iZXIsXG4gICAgbWluU3RyaW5nTGVuZ3RoOiBudW1iZXIsXG4gICAgbWF4U3RyaW5nTGVuZ3RoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIC8vIFNraXAgdmFsaWRhdGlvbiBpZiB0aGUgZW50aXJlIGFycmF5IGlzIGFuIHVucmVzb2x2ZWQgdG9rZW5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKGFycmF5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGFycmF5IGlzIGVtcHR5XG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgTWV0YWRhdGFBcnJheUVtcHR5YCxcbiAgICAgICAgYCR7ZmllbGROYW1lfSBjYW5ub3QgYmUgYW4gZW1wdHkgYXJyYXkuIEl0IG11c3QgY29udGFpbiBhdCBsZWFzdCAke21pbkl0ZW1zfSBpdGVtKHMpYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYXJyYXkgc2l6ZSBjb25zdHJhaW50c1xuICAgIGlmIChhcnJheS5sZW5ndGggPCBtaW5JdGVtcykge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgTWV0YWRhdGFBcnJheVRvb0Zld2AsXG4gICAgICAgIGAke2ZpZWxkTmFtZX0gbXVzdCBjb250YWluIGF0IGxlYXN0ICR7bWluSXRlbXN9IGl0ZW0ocykuIEZvdW5kICR7YXJyYXkubGVuZ3RofSBpdGVtKHMpYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFycmF5Lmxlbmd0aCA+IG1heEl0ZW1zKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBNZXRhZGF0YUFycmF5VG9vTWFueWAsXG4gICAgICAgIGAke2ZpZWxkTmFtZX0gY2Fubm90IGV4Y2VlZCAke21heEl0ZW1zfSBpdGVtcy4gRm91bmQgJHthcnJheS5sZW5ndGh9IGl0ZW1zYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCBzdHJpbmcgaW4gdGhlIGFycmF5XG4gICAgYXJyYXkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBTa2lwIHZhbGlkYXRpb24gZm9yIHVucmVzb2x2ZWQgdG9rZW5zXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlU3RyaW5nRmllbGQoe1xuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgZmllbGROYW1lOiBgJHtmaWVsZE5hbWV9WyR7aW5kZXh9XWAsXG4gICAgICAgIG1pbkxlbmd0aDogbWluU3RyaW5nTGVuZ3RoLFxuICAgICAgICBtYXhMZW5ndGg6IG1heFN0cmluZ0xlbmd0aCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBNZXRhZGF0YUFycmF5SXRlbUludmFsaWRgLCBlcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIHRvb2wgZmlsdGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRvb2xGaWx0ZXIoZmlsdGVyOiBBcGlHYXRld2F5VG9vbEZpbHRlcik6IHZvaWQge1xuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQoZmlsdGVyLmZpbHRlclBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsdGVyIHBhdGhcbiAgICBjb25zdCBwYXRoRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBmaWx0ZXIuZmlsdGVyUGF0aCxcbiAgICAgICdGaWx0ZXIgcGF0aCcsXG4gICAgICAvXlxcL1tcXHdcXC17fS8qXSokLyxcbiAgICAgICdGaWx0ZXIgcGF0aCBtdXN0IHN0YXJ0IHdpdGggYSBmb3J3YXJkIHNsYXNoIGFuZCBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBjdXJseSBicmFjZXMsIGZvcndhcmQgc2xhc2hlcywgYW5kIGFzdGVyaXNrcycsXG4gICAgKTtcblxuICAgIGlmIChwYXRoRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVG9vbEZpbHRlclBhdGhJbnZhbGlkYCwgcGF0aEVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWV0aG9kc1xuICAgIGlmICghZmlsdGVyLm1ldGhvZHMgfHwgZmlsdGVyLm1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFRvb2xGaWx0ZXJNZXRob2RzUmVxdWlyZWRgLCBgQXQgbGVhc3Qgb25lIEhUVFAgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBmaWx0ZXIgcGF0aDogJHtmaWx0ZXIuZmlsdGVyUGF0aH1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgdG9vbCBvdmVycmlkZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVUb29sT3ZlcnJpZGUob3ZlcnJpZGU6IEFwaUdhdGV3YXlUb29sT3ZlcnJpZGUpOiB2b2lkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG92ZXJyaWRlLnBhdGgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBvdmVycmlkZSBwYXRoIGlzIGV4cGxpY2l0IChubyB3aWxkY2FyZHMpXG4gICAgaWYgKG92ZXJyaWRlLnBhdGguaW5jbHVkZXMoJyonKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgVG9vbE92ZXJyaWRlUGF0aFdpbGRjYXJkTm90QWxsb3dlZGAsXG4gICAgICAgIGBUb29sIG92ZXJyaWRlIHBhdGggY2Fubm90IGNvbnRhaW4gd2lsZGNhcmRzLiBQYXRoOiAke292ZXJyaWRlLnBhdGh9LiBgICtcbiAgICAgICAgJ1Rvb2wgb3ZlcnJpZGVzIG11c3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBwYXRoIHRoYXQgbWF0Y2hlcyBhbiBleGlzdGluZyBvcGVyYXRpb24gaW4geW91ciBBUEkuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgb3ZlcnJpZGUgcGF0aCBmb3JtYXRcbiAgICBjb25zdCBwYXRoRXJyb3JzID0gdmFsaWRhdGVGaWVsZFBhdHRlcm4oXG4gICAgICBvdmVycmlkZS5wYXRoLFxuICAgICAgJ092ZXJyaWRlIHBhdGgnLFxuICAgICAgL15cXC9bXFx3XFwte30vXSokLyxcbiAgICAgICdPdmVycmlkZSBwYXRoIG11c3Qgc3RhcnQgd2l0aCBhIGZvcndhcmQgc2xhc2ggYW5kIGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGN1cmx5IGJyYWNlcywgYW5kIGZvcndhcmQgc2xhc2hlcycsXG4gICAgKTtcblxuICAgIGlmIChwYXRoRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVG9vbE92ZXJyaWRlUGF0aEludmFsaWRgLCBwYXRoRXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBvdmVycmlkZSBuYW1lXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChvdmVycmlkZS5uYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgIHZhbHVlOiBvdmVycmlkZS5uYW1lLFxuICAgICAgZmllbGROYW1lOiAnT3ZlcnJpZGUgdG9vbCBuYW1lJyxcbiAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgIG1heExlbmd0aDogNjQsXG4gICAgfSk7XG5cbiAgICBpZiAobmFtZUVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFRvb2xPdmVycmlkZU5hbWVJbnZhbGlkYCwgbmFtZUVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgb3ZlcnJpZGUgZGVzY3JpcHRpb24gaWYgcHJvdmlkZWRcbiAgICBpZiAob3ZlcnJpZGUuZGVzY3JpcHRpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChvdmVycmlkZS5kZXNjcmlwdGlvbikpIHtcbiAgICAgIGNvbnN0IGRlc2NFcnJvcnMgPSB2YWxpZGF0ZVN0cmluZ0ZpZWxkKHtcbiAgICAgICAgdmFsdWU6IG92ZXJyaWRlLmRlc2NyaXB0aW9uLFxuICAgICAgICBmaWVsZE5hbWU6ICdPdmVycmlkZSBkZXNjcmlwdGlvbicsXG4gICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgbWF4TGVuZ3RoOiAyMDAsXG4gICAgICB9KTtcblxuICAgICAgaWYgKGRlc2NFcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFRvb2xPdmVycmlkZURlc2NyaXB0aW9uSW52YWxpZGAsIGRlc2NFcnJvcnMuam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19