cdk-preflight 0.0.30 → 0.0.32
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.
- package/.jsii +2 -2
- package/AGENTS.md +2 -0
- package/docs/rules.md +21 -0
- package/lib/index.js +1 -1
- package/lib/rules.generated.js +240 -1
- package/package.json +1 -1
package/lib/rules.generated.js
CHANGED
|
@@ -2480,6 +2480,41 @@ exports.BUNDLED_RULES = [
|
|
|
2480
2480
|
],
|
|
2481
2481
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n# The engine's E3027 validates rate() bounds for AWS::Events::Rule but not\n# for AWS::Scheduler::Schedule — same constraint family, different resource.\n# Only the value bound is checked here; unit spellings differ between the two\n# services and were not measured for Scheduler.\nviolation contains make_diag_full(\"pf-scheduler-rate-positive\", \"ERROR\", name,\n\t\"Properties.ScheduleExpression\",\n\tsprintf(\"The rate value in '%s' is not positive; CreateSchedule fails with \\\"Invalid Schedule Expression %s.\\\"\", [expr, expr]),\n\t\"Use a rate of 1 or more (e.g. rate(5 minutes))\",\n\t\"https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html\") if {\n\tsome name in resources_of_type(\"AWS::Scheduler::Schedule\")\n\texpr := resolve(name, \"Properties.ScheduleExpression\")\n\tis_string(expr)\n\tt := trim_space(expr)\n\tstartswith(t, \"rate(\")\n\tendswith(t, \")\")\n\tinner := trim_space(substring(t, 5, count(t) - 6))\n\tparts := split(inner, \" \")\n\tn := to_number(parts[0])\n\tn <= 0\n}\n"
|
|
2482
2482
|
},
|
|
2483
|
+
{
|
|
2484
|
+
"id": "pf-sns-delivery-policy",
|
|
2485
|
+
"service": "sns",
|
|
2486
|
+
"severity": "ERROR",
|
|
2487
|
+
"title": "HTTP/S DeliveryPolicy retry values: minDelayTarget >= 1, maxDelayTarget <= 3600 and >= minDelayTarget, numRetries 0..100 and at least the sum of the phase retries, phase counts >= 0, backoffFunction one of arithmetic|exponential|geometric|linear, maxReceivesPerSecond >= 1 (subscription DeliveryPolicy and topic DeliveryPolicy.http)",
|
|
2488
|
+
"upstream": "none",
|
|
2489
|
+
"resourceTypes": [
|
|
2490
|
+
"AWS::SNS::Subscription",
|
|
2491
|
+
"AWS::SNS::Topic"
|
|
2492
|
+
],
|
|
2493
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsdp_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-message-delivery-retries.html\"\n\n_pf_snsdp_fix := \"Keep the retry policy inside the documented ranges (see the delivery policy table)\"\n\n# [name, path prefix, healthyRetryPolicy object, throttlePolicy object or null]\n_pf_snsdp_obj(v) := v if is_object(v)\n\n_pf_snsdp_obj(v) := o if {\n\tis_string(v)\n\to := json.unmarshal(v)\n\tis_object(o)\n}\n\n_pf_snsdp_pol contains [name, \"Properties.DeliveryPolicy\", dp] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tdp := _pf_snsdp_obj(object.get(input.resources[name].properties, \"DeliveryPolicy\", null))\n}\n\n_pf_snsdp_pol contains [name, \"Properties.DeliveryPolicy.http\", dp] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\ttop := _pf_snsdp_obj(object.get(input.resources[name].properties, \"DeliveryPolicy\", null))\n\tdp := object.get(top, \"http\", null)\n\tis_object(dp)\n}\n\n_pf_snsdp_retry contains [name, path, hr] if {\n\tsome [name, p, dp] in _pf_snsdp_pol\n\tsome key in [\"healthyRetryPolicy\", \"defaultHealthyRetryPolicy\"]\n\thr := object.get(dp, key, null)\n\tis_object(hr)\n\tpath := sprintf(\"%s.%s\", [p, key])\n}\n\n_pf_snsdp_min contains [\"minDelayTarget\", 1]\n\n_pf_snsdp_min contains [\"numRetries\", 0]\n\n_pf_snsdp_min contains [\"numNoDelayRetries\", 0]\n\n_pf_snsdp_min contains [\"numMinDelayRetries\", 0]\n\n_pf_snsdp_min contains [\"numMaxDelayRetries\", 0]\n\n_pf_snsdp_max contains [\"maxDelayTarget\", 3600]\n\n_pf_snsdp_max contains [\"numRetries\", 100]\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [path, f]),\n\tsprintf(\"%s %v is below %v; the create call fails with \\\"DeliveryPolicy: ...%s must be greater than or equal to %v\\\"\", [f, v, m, f, m]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tsome [f, m] in _pf_snsdp_min\n\tv := object.get(hr, f, null)\n\tis_number(v)\n\tv < m\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.%s\", [path, f]),\n\tsprintf(\"%s %v is above %v; the create call fails with \\\"DeliveryPolicy: ...%s must be less than or equal to %v\\\"\", [f, v, m, f, m]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tsome [f, m] in _pf_snsdp_max\n\tv := object.get(hr, f, null)\n\tis_number(v)\n\tv > m\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.maxDelayTarget\", [path]),\n\tsprintf(\"maxDelayTarget %v is below minDelayTarget %v; the create call fails with \\\"DeliveryPolicy: ...maxDelayTarget must be greater than or equal to minDelayTarget\\\"\", [mx, mn]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tmn := object.get(hr, \"minDelayTarget\", null)\n\tmx := object.get(hr, \"maxDelayTarget\", null)\n\tis_number(mn)\n\tis_number(mx)\n\tmx < mn\n}\n\n_pf_snsdp_phase(hr, f) := v if {\n\tv := object.get(hr, f, null)\n\tis_number(v)\n}\n\n_pf_snsdp_phase(hr, f) := 0 if not is_number(object.get(hr, f, null))\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.numRetries\", [path]),\n\tsprintf(\"numRetries %v is below the phase total %v (numNoDelayRetries + numMinDelayRetries + numMaxDelayRetries); the create call fails with \\\"DeliveryPolicy: ...numRetries must be greater than or equal to total of numMinDelayRetries, numNoDelayRetries and numMaxDelayRetries\\\"\", [n, total]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tn := object.get(hr, \"numRetries\", null)\n\tis_number(n)\n\ttotal := (_pf_snsdp_phase(hr, \"numNoDelayRetries\") + _pf_snsdp_phase(hr, \"numMinDelayRetries\")) + _pf_snsdp_phase(hr, \"numMaxDelayRetries\")\n\tn < total\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.backoffFunction\", [path]),\n\tsprintf(\"backoffFunction '%s' is not arithmetic, exponential, geometric or linear; the create call fails with \\\"DeliveryPolicy: ... the value [%s] is not a valid backoff function\\\"\", [b, b]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, path, hr] in _pf_snsdp_retry\n\tb := object.get(hr, \"backoffFunction\", null)\n\tis_string(b)\n\tnot b in {\"arithmetic\", \"exponential\", \"geometric\", \"linear\"}\n}\n\nviolation contains make_diag_full(\"pf-sns-delivery-policy\", \"ERROR\", name,\n\tsprintf(\"%s.%s.maxReceivesPerSecond\", [p, key]),\n\tsprintf(\"maxReceivesPerSecond %v is below 1; the create call fails with \\\"DeliveryPolicy: throttlePolicy.maxReceivesPerSecond must be >= 1\\\"\", [v]),\n\t_pf_snsdp_fix, _pf_snsdp_url) if {\n\tsome [name, p, dp] in _pf_snsdp_pol\n\tsome key in [\"throttlePolicy\", \"defaultThrottlePolicy\"]\n\ttp := object.get(dp, key, null)\n\tis_object(tp)\n\tv := object.get(tp, \"maxReceivesPerSecond\", null)\n\tis_number(v)\n\tv < 1\n}\n"
|
|
2494
|
+
},
|
|
2495
|
+
{
|
|
2496
|
+
"id": "pf-sns-fifo-only-attributes",
|
|
2497
|
+
"service": "sns",
|
|
2498
|
+
"severity": "ERROR",
|
|
2499
|
+
"title": "ContentBasedDeduplication, ArchivePolicy and FifoThroughputScope are FIFO-only topic attributes, and ArchivePolicy.MessageRetentionPeriod is 1..365 days",
|
|
2500
|
+
"upstream": "none",
|
|
2501
|
+
"resourceTypes": [
|
|
2502
|
+
"AWS::SNS::Topic"
|
|
2503
|
+
],
|
|
2504
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfo_url := \"https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html\"\n\n_pf_snsfo_fix := \"Set FifoTopic: true (with a *.fifo TopicName) or drop the FIFO-only attributes; keep the archive retention within 1-365 days\"\n\n_pf_snsfo_std(t) if {\n\tprops := input.resources[t].properties\n\tis_object(props)\n\tobject.get(props, \"FifoTopic\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_snsfo_std(t) if resolve(t, \"Properties.FifoTopic\") in {false, \"false\"}\n\nviolation contains make_diag_full(\"pf-sns-fifo-only-attributes\", \"ERROR\", name,\n\tsprintf(\"Properties.%s\", [attr]),\n\tsprintf(\"%s is set on a standard topic (FifoTopic is not true); CreateTopic fails with \\\"Invalid parameter: Attributes Reason: Unknown attribute %s\\\"\", [attr, attr]),\n\t_pf_snsfo_fix, _pf_snsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\t_pf_snsfo_std(name)\n\tsome attr in [\"ContentBasedDeduplication\", \"ArchivePolicy\", \"FifoThroughputScope\"]\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, attr, \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_snsfo_archive(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"ArchivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_snsfo_archive(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"ArchivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_snsfo_num(v) := v if is_number(v)\n\n_pf_snsfo_num(v) := to_number(v) if {\n\tis_string(v)\n\tregex.match(\"^[0-9]+$\", v)\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-only-attributes\", \"ERROR\", name,\n\t\"Properties.ArchivePolicy.MessageRetentionPeriod\",\n\tsprintf(\"ArchivePolicy.MessageRetentionPeriod %v is outside 1..365 days; CreateTopic fails with \\\"Invalid parameter: Attributes Reason: ArchivePolicy: MessageRetentionPeriod value is invalid\\\"\", [n]),\n\t_pf_snsfo_fix, _pf_snsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tn := _pf_snsfo_num(object.get(_pf_snsfo_archive(name), \"MessageRetentionPeriod\", null))\n\t_pf_snsfo_out(n)\n}\n\n_pf_snsfo_out(n) if n < 1\n\n_pf_snsfo_out(n) if n > 365\n"
|
|
2505
|
+
},
|
|
2506
|
+
{
|
|
2507
|
+
"id": "pf-sns-fifo-queue-on-standard-topic",
|
|
2508
|
+
"service": "sns",
|
|
2509
|
+
"severity": "ERROR",
|
|
2510
|
+
"title": "A FIFO SQS queue cannot subscribe to a standard topic (a FIFO topic may fan out to standard queues, not the reverse)",
|
|
2511
|
+
"upstream": "none",
|
|
2512
|
+
"resourceTypes": [
|
|
2513
|
+
"AWS::SNS::Subscription",
|
|
2514
|
+
"AWS::SNS::Topic"
|
|
2515
|
+
],
|
|
2516
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfqs_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\"\n\n_pf_snsfqs_fix := \"Subscribe the FIFO queue to a FIFO topic, or use a standard queue\"\n\n_pf_snsfqs_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsfqs_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsfqs_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n# topic is FIFO: an in-template topic with FifoTopic true, or a literal ARN ending in .fifo\n_pf_snsfqs_tfifo(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {true, \"true\"}\n}\n\n_pf_snsfqs_tfifo(t) if {\n\tstartswith(t, \"arn:\")\n\tendswith(t, \".fifo\")\n}\n\n_pf_snsfqs_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tprops := input.resources[t].properties\n\tis_object(props)\n\tobject.get(props, \"FifoTopic\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_snsfqs_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {false, \"false\"}\n}\n\n_pf_snsfqs_tstd(t) if {\n\tstartswith(t, \"arn:\")\n\tnot endswith(t, \".fifo\")\n}\n\n_pf_snsfqs_qfifo(ep) if {\n\tep in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(ep, \"Properties.FifoQueue\") in {true, \"true\"}\n}\n\n_pf_snsfqs_qfifo(ep) if {\n\tstartswith(ep, \"arn:\")\n\tendswith(ep, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-queue-on-standard-topic\", \"ERROR\", name,\n\tsprintf(\"%s.Endpoint\", [path]),\n\t\"a FIFO queue is subscribed to a standard topic; Subscribe fails with \\\"Invalid parameter: Endpoint Reason: FIFO SQS Queues can not be subscribed to standard SNS topics\\\"\",\n\t_pf_snsfqs_fix, _pf_snsfqs_url) if {\n\tsome [name, path, sub, topic] in _pf_snsfqs_sub\n\t_pf_snsfqs_tstd(topic)\n\t_pf_snsfqs_proto(name, path) == \"sqs\"\n\tep := resolve(name, sprintf(\"%s.Endpoint\", [path]))\n\tis_string(ep)\n\t_pf_snsfqs_qfifo(ep)\n}\n"
|
|
2517
|
+
},
|
|
2483
2518
|
{
|
|
2484
2519
|
"id": "pf-sns-fifo-topic-name",
|
|
2485
2520
|
"service": "sns",
|
|
@@ -2491,6 +2526,100 @@ exports.BUNDLED_RULES = [
|
|
|
2491
2526
|
],
|
|
2492
2527
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfifo_fix := \"Give FIFO topics a TopicName ending in '.fifo' (or drop TopicName to let CloudFormation generate one), and set FifoTopic: true whenever the name ends in '.fifo'\"\n\n_pf_snsfifo_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-create-fifo-topic.html\"\n\n_pf_snsfifo_true(name) if resolve(name, \"Properties.FifoTopic\") in {true, \"true\"}\n\n# FifoTopic が存在し、リテラル false 以外(true やトークン)なら「FIFO かもしれない」扱い\n_pf_snsfifo_maybe_fifo(name) if {\n\tv := resolve(name, \"Properties.FifoTopic\")\n\tnot v in {false, \"false\"}\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-topic-name\", \"ERROR\", name,\n\t\"Properties.TopicName\",\n\tsprintf(\"FifoTopic is true but TopicName '%s' does not end with '.fifo'; SNS rejects the topic at deploy time\", [tn]),\n\t_pf_snsfifo_fix, _pf_snsfifo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\t_pf_snsfifo_true(name)\n\ttn := resolve(name, \"Properties.TopicName\")\n\tis_string(tn)\n\tnot endswith(tn, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-topic-name\", \"ERROR\", name,\n\t\"Properties.TopicName\",\n\tsprintf(\"TopicName '%s' ends with '.fifo' but FifoTopic is not true; SNS rejects the topic name at deploy time\", [tn]),\n\t_pf_snsfifo_fix, _pf_snsfifo_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\ttn := resolve(name, \"Properties.TopicName\")\n\tis_string(tn)\n\tendswith(tn, \".fifo\")\n\tnot _pf_snsfifo_maybe_fifo(name)\n}\n"
|
|
2493
2528
|
},
|
|
2529
|
+
{
|
|
2530
|
+
"id": "pf-sns-fifo-topic-protocol",
|
|
2531
|
+
"service": "sns",
|
|
2532
|
+
"severity": "ERROR",
|
|
2533
|
+
"title": "A FIFO topic only accepts sqs subscriptions (lambda, http/https, email, email-json, sms, firehose are rejected)",
|
|
2534
|
+
"upstream": "none",
|
|
2535
|
+
"resourceTypes": [
|
|
2536
|
+
"AWS::SNS::Subscription",
|
|
2537
|
+
"AWS::SNS::Topic"
|
|
2538
|
+
],
|
|
2539
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsftp_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html\"\n\n_pf_snsftp_fix := \"Subscribe an SQS queue (FIFO or standard) to the FIFO topic, or use a standard topic for other protocols\"\n\n_pf_snsftp_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsftp_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsftp_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n# topic is FIFO: an in-template topic with FifoTopic true, or a literal ARN ending in .fifo\n_pf_snsftp_tfifo(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {true, \"true\"}\n}\n\n_pf_snsftp_tfifo(t) if {\n\tstartswith(t, \"arn:\")\n\tendswith(t, \".fifo\")\n}\n\n_pf_snsftp_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tprops := input.resources[t].properties\n\tis_object(props)\n\tobject.get(props, \"FifoTopic\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_snsftp_tstd(t) if {\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\tresolve(t, \"Properties.FifoTopic\") in {false, \"false\"}\n}\n\n_pf_snsftp_tstd(t) if {\n\tstartswith(t, \"arn:\")\n\tnot endswith(t, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sns-fifo-topic-protocol\", \"ERROR\", name,\n\tsprintf(\"%s.Protocol\", [path]),\n\tsprintf(\"a FIFO topic is subscribed with protocol %s; Subscribe fails with \\\"Invalid parameter: Invalid protocol type: %s\\\"\", [proto, proto]),\n\t_pf_snsftp_fix, _pf_snsftp_url) if {\n\tsome [name, path, sub, topic] in _pf_snsftp_sub\n\t_pf_snsftp_tfifo(topic)\n\tproto := _pf_snsftp_proto(name, path)\n\tproto != \"sqs\"\n}\n"
|
|
2540
|
+
},
|
|
2541
|
+
{
|
|
2542
|
+
"id": "pf-sns-filter-policy",
|
|
2543
|
+
"service": "sns",
|
|
2544
|
+
"severity": "ERROR",
|
|
2545
|
+
"title": "FilterPolicy shape: at most 5 keys, every value an array or object, no empty arrays, no arrays inside arrays, nesting only with FilterPolicyScope MessageBody, and FilterPolicyScope is MessageAttributes or MessageBody",
|
|
2546
|
+
"upstream": "none",
|
|
2547
|
+
"resourceTypes": [
|
|
2548
|
+
"AWS::SNS::Subscription",
|
|
2549
|
+
"AWS::SNS::Topic"
|
|
2550
|
+
],
|
|
2551
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfp_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html\"\n\n_pf_snsfp_fix := \"Keep the filter policy to 5 keys of non-empty arrays (or nested objects with FilterPolicyScope: MessageBody)\"\n\n_pf_snsfp_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsfp_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsfp_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n_pf_snsfp_pol(sub) := pol if {\n\tpol := object.get(sub, \"FilterPolicy\", null)\n\tis_object(pol)\n}\n\n_pf_snsfp_pol(sub) := pol if {\n\traw := object.get(sub, \"FilterPolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_snsfp_err := \"Invalid parameter: Attributes Reason: FilterPolicy: \"\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy\", [path]),\n\tsprintf(\"FilterPolicy has %d keys (maximum 5); Subscribe fails with \\\"%sFilter policy can not have more than 5 keys\\\"\", [n, _pf_snsfp_err]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tn := count(object.keys(_pf_snsfp_pol(sub)))\n\tn > 5\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' has a scalar value; each key takes an array of match values (or an object with FilterPolicyScope MessageBody), and Subscribe fails with \\\"%s\\\\\\\"%s\\\\\\\" must be an object or an array\\\"\", [k, _pf_snsfp_err, k]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tsome k, v in _pf_snsfp_pol(sub)\n\tnot is_array(v)\n\tnot is_object(v)\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' is an empty array; Subscribe fails with \\\"%sEmpty arrays are not allowed\\\"\", [k, _pf_snsfp_err]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tsome k, v in _pf_snsfp_pol(sub)\n\tis_array(v)\n\tcount(v) == 0\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' has an array inside its array; Subscribe fails with \\\"%sMatch value must be String, number, true, false, or null\\\"\", [k, _pf_snsfp_err]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\tsome k, v in _pf_snsfp_pol(sub)\n\tis_array(v)\n\tsome e in v\n\tis_array(e)\n}\n\n_pf_snsfp_attr_scope(sub) if object.get(sub, \"FilterPolicyScope\", \"MessageAttributes\") == \"MessageAttributes\"\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicy.%s\", [path, k]),\n\tsprintf(\"FilterPolicy key '%s' nests an object while FilterPolicyScope is MessageAttributes; Subscribe fails with \\\"Invalid parameter: Attributes Reason: Filter policy scope MessageAttributes does not support nested filter policy\\\"\", [k]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\t_pf_snsfp_attr_scope(sub)\n\tsome k, v in _pf_snsfp_pol(sub)\n\tis_object(v)\n}\n\nviolation contains make_diag_full(\"pf-sns-filter-policy\", \"ERROR\", name,\n\tsprintf(\"%s.FilterPolicyScope\", [path]),\n\tsprintf(\"FilterPolicyScope '%s' is not MessageAttributes or MessageBody; Subscribe fails with \\\"Invalid parameter: Attributes Reason: FilterPolicyScope: Invalid value [%s]. Please use either MessageBody or MessageAttributes\\\"\", [s, s]),\n\t_pf_snsfp_fix, _pf_snsfp_url) if {\n\tsome [name, path, sub, _] in _pf_snsfp_sub\n\ts := resolve(name, sprintf(\"%s.FilterPolicyScope\", [path]))\n\tis_string(s)\n\tnot s in {\"MessageAttributes\", \"MessageBody\"}\n}\n"
|
|
2552
|
+
},
|
|
2553
|
+
{
|
|
2554
|
+
"id": "pf-sns-firehose-subscription-role",
|
|
2555
|
+
"service": "sns",
|
|
2556
|
+
"severity": "ERROR",
|
|
2557
|
+
"title": "A firehose subscription requires SubscriptionRoleArn",
|
|
2558
|
+
"upstream": "none",
|
|
2559
|
+
"resourceTypes": [
|
|
2560
|
+
"AWS::SNS::Subscription",
|
|
2561
|
+
"AWS::SNS::Topic"
|
|
2562
|
+
],
|
|
2563
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsfh_url := \"https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html\"\n\n_pf_snsfh_fix := \"Set SubscriptionRoleArn to a role SNS can assume that may write to the delivery stream\"\n\n_pf_snsfh_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsfh_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsfh_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\nviolation contains make_diag_full(\"pf-sns-firehose-subscription-role\", \"ERROR\", name,\n\tsprintf(\"%s.SubscriptionRoleArn\", [path]),\n\t\"Protocol firehose has no SubscriptionRoleArn; Subscribe fails with \\\"Invalid parameter: Delivery protocol firehose can only be subscribed with subscription role arn\\\"\",\n\t_pf_snsfh_fix, _pf_snsfh_url) if {\n\tsome [name, path, sub, _] in _pf_snsfh_sub\n\t_pf_snsfh_proto(name, path) == \"firehose\"\n\tobject.get(sub, \"SubscriptionRoleArn\", \"__pf_absent\") == \"__pf_absent\"\n}\n"
|
|
2564
|
+
},
|
|
2565
|
+
{
|
|
2566
|
+
"id": "pf-sns-raw-message-delivery",
|
|
2567
|
+
"service": "sns",
|
|
2568
|
+
"severity": "ERROR",
|
|
2569
|
+
"title": "RawMessageDelivery is only supported for sqs, http, https and firehose subscriptions",
|
|
2570
|
+
"upstream": "none",
|
|
2571
|
+
"resourceTypes": [
|
|
2572
|
+
"AWS::SNS::Subscription",
|
|
2573
|
+
"AWS::SNS::Topic"
|
|
2574
|
+
],
|
|
2575
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsraw_url := \"https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html\"\n\n_pf_snsraw_fix := \"Drop RawMessageDelivery for email / email-json / sms / lambda / application subscriptions\"\n\n_pf_snsraw_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsraw_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsraw_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\nviolation contains make_diag_full(\"pf-sns-raw-message-delivery\", \"ERROR\", name,\n\tsprintf(\"%s.RawMessageDelivery\", [path]),\n\tsprintf(\"RawMessageDelivery is true on a %s subscription; Subscribe fails with \\\"Invalid parameter: Attributes Reason: Delivery protocol [%s] does not support raw message delivery.\\\"\", [proto, proto]),\n\t_pf_snsraw_fix, _pf_snsraw_url) if {\n\tsome [name, path, sub, _] in _pf_snsraw_sub\n\tresolve(name, sprintf(\"%s.RawMessageDelivery\", [path])) in {true, \"true\"}\n\tproto := _pf_snsraw_proto(name, path)\n\tnot proto in {\"sqs\", \"http\", \"https\", \"firehose\"}\n}\n"
|
|
2576
|
+
},
|
|
2577
|
+
{
|
|
2578
|
+
"id": "pf-sns-subscription-endpoint",
|
|
2579
|
+
"service": "sns",
|
|
2580
|
+
"severity": "ERROR",
|
|
2581
|
+
"title": "Subscription Protocol is one of the nine SNS protocols and the Endpoint matches it: an ARN of the right service for sqs/lambda/firehose/application, an email address, a URL with the same scheme for http/https, a phone number for sms",
|
|
2582
|
+
"upstream": "none",
|
|
2583
|
+
"resourceTypes": [
|
|
2584
|
+
"AWS::SNS::Subscription",
|
|
2585
|
+
"AWS::SNS::Topic"
|
|
2586
|
+
],
|
|
2587
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsep_url := \"https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html\"\n\n_pf_snsep_fix := \"Give the subscription the endpoint form its protocol expects (Fn::GetAtt Queue.Arn for sqs, https:// URL for https, ...)\"\n\n_pf_snsep_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snsep_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snsep_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n_pf_snsep_protocols := {\"http\", \"https\", \"email\", \"email-json\", \"sms\", \"sqs\", \"application\", \"lambda\", \"firehose\"}\n\nviolation contains make_diag_full(\"pf-sns-subscription-endpoint\", \"ERROR\", name,\n\tsprintf(\"%s.Protocol\", [path]),\n\tsprintf(\"Protocol '%s' is not an SNS protocol; Subscribe fails with \\\"Invalid parameter: Amazon SNS does not support this protocol string: %s\\\"\", [proto, proto]),\n\t_pf_snsep_fix, _pf_snsep_url) if {\n\tsome [name, path, sub, _] in _pf_snsep_sub\n\tproto := _pf_snsep_proto(name, path)\n\tnot proto in _pf_snsep_protocols\n}\n\n# [protocol, endpoint pattern, service error]\n_pf_snsep_shape contains [\"sqs\", \"^arn:[^:]+:sqs:\", \"Invalid parameter: SQS endpoint ARN\"]\n\n_pf_snsep_shape contains [\"lambda\", \"^arn:[^:]+:lambda:\", \"Invalid parameter: Lambda endpoint ARN\"]\n\n_pf_snsep_shape contains [\"firehose\", \"^arn:[^:]+:firehose:\", \"Invalid parameter: Firehose endpoint ARN\"]\n\n_pf_snsep_shape contains [\"application\", \"^arn:[^:]+:sns:[^:]*:[^:]*:endpoint/\", \"Invalid parameter: Application endpoint arn invalid\"]\n\n_pf_snsep_shape contains [\"email\", \"^[^@ ]+@[^@ ]+$\", \"Invalid parameter: Email address\"]\n\n_pf_snsep_shape contains [\"email-json\", \"^[^@ ]+@[^@ ]+$\", \"Invalid parameter: Email address\"]\n\n_pf_snsep_shape contains [\"http\", \"^http://\", \"Invalid parameter: Endpoint must match the specified protocol\"]\n\n_pf_snsep_shape contains [\"https\", \"^https://\", \"Invalid parameter: Endpoint must match the specified protocol\"]\n\n_pf_snsep_shape contains [\"sms\", \"^[+]?[0-9][0-9 -]*$\", \"Invalid SMS endpoint\"]\n\n# Only literal endpoints are judged: a Ref / Fn::GetAtt to a resource in the\n# template resolves to that resource's logical ID and is skipped.\nviolation contains make_diag_full(\"pf-sns-subscription-endpoint\", \"ERROR\", name,\n\tsprintf(\"%s.Endpoint\", [path]),\n\tsprintf(\"Endpoint '%s' does not have the form the %s protocol expects; Subscribe fails with \\\"%s\\\"\", [ep, proto, err]),\n\t_pf_snsep_fix, _pf_snsep_url) if {\n\tsome [name, path, sub, _] in _pf_snsep_sub\n\tproto := _pf_snsep_proto(name, path)\n\tsome [p2, pattern, err] in _pf_snsep_shape\n\tp2 == proto\n\tep := resolve(name, sprintf(\"%s.Endpoint\", [path]))\n\tis_string(ep)\n\tnot ep in object.keys(input.resources)\n\tnot contains(ep, \"${\")\n\tnot regex.match(pattern, ep)\n}\n"
|
|
2588
|
+
},
|
|
2589
|
+
{
|
|
2590
|
+
"id": "pf-sns-subscription-redrive",
|
|
2591
|
+
"service": "sns",
|
|
2592
|
+
"severity": "ERROR",
|
|
2593
|
+
"title": "Subscription RedrivePolicy needs deadLetterTargetArn, which must be an SQS queue ARN in the deploy region",
|
|
2594
|
+
"upstream": "none",
|
|
2595
|
+
"resourceTypes": [
|
|
2596
|
+
"AWS::SNS::Subscription",
|
|
2597
|
+
"AWS::SNS::Topic"
|
|
2598
|
+
],
|
|
2599
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snssrd_url := \"https://docs.aws.amazon.com/sns/latest/dg/sns-dead-letter-queues.html\"\n\n_pf_snssrd_fix := \"Set deadLetterTargetArn to Fn::GetAtt Queue.Arn of a queue in this stack\"\n\n_pf_snssrd_sub contains [name, \"Properties\", sub, topic] if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\tsub := input.resources[name].properties\n\tis_object(sub)\n\ttopic := resolve(name, \"Properties.TopicArn\")\n\tis_string(topic)\n}\n\n_pf_snssrd_sub contains [name, path, sub, name] if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tsome s in flatten_list(name, \"Properties.Subscription\")\n\tsub := s.value\n\tis_object(sub)\n\tpath := sprintf(\"Properties.Subscription.%d\", [s.index])\n}\n\n_pf_snssrd_proto(name, path) := p if {\n\tp := resolve(name, sprintf(\"%s.Protocol\", [path]))\n\tis_string(p)\n}\n\n_pf_snssrd_pol(sub) := pol if {\n\tpol := object.get(sub, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_snssrd_pol(sub) := pol if {\n\traw := object.get(sub, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\nviolation contains make_diag_full(\"pf-sns-subscription-redrive\", \"ERROR\", name,\n\tsprintf(\"%s.RedrivePolicy\", [path]),\n\t\"RedrivePolicy has no deadLetterTargetArn; Subscribe fails with \\\"Invalid parameter: Attributes Reason: RedrivePolicy: Missing deadLetterTargetArn attribute\\\"\",\n\t_pf_snssrd_fix, _pf_snssrd_url) if {\n\tsome [name, path, sub, _] in _pf_snssrd_sub\n\tpol := _pf_snssrd_pol(sub)\n\tobject.get(pol, \"deadLetterTargetArn\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-sns-subscription-redrive\", \"ERROR\", name,\n\tsprintf(\"%s.RedrivePolicy.deadLetterTargetArn\", [path]),\n\tsprintf(\"deadLetterTargetArn '%s' is not an SQS queue ARN; Subscribe fails with \\\"Invalid parameter: Attributes Reason: RedrivePolicy: deadLetterTargetArn must be a SQS queue\\\"\", [arn]),\n\t_pf_snssrd_fix, _pf_snssrd_url) if {\n\tsome [name, path, sub, _] in _pf_snssrd_sub\n\tarn := object.get(_pf_snssrd_pol(sub), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tnot contains(arn, \"${\")\n\tnot regex.match(\"^arn:[^:]+:sqs:\", arn)\n}\n\n# Region comparison needs the deploy region (enforce mode only; see AGENTS.md).\nviolation contains make_diag_full(\"pf-sns-subscription-redrive\", \"ERROR\", name,\n\tsprintf(\"%s.RedrivePolicy.deadLetterTargetArn\", [path]),\n\tsprintf(\"deadLetterTargetArn is in '%s' but the subscription deploys to '%s'; Subscribe fails with \\\"Invalid parameter: Attributes Reason: RedrivePolicy: deadLetterTargetArn must be in the same region as the subscription\\\"\", [parts[3], region]),\n\t_pf_snssrd_fix, _pf_snssrd_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome [name, path, sub, _] in _pf_snssrd_sub\n\tarn := object.get(_pf_snssrd_pol(sub), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tparts := split(arn, \":\")\n\tcount(parts) >= 6\n\tparts[2] == \"sqs\"\n\tparts[3] != region\n}\n"
|
|
2600
|
+
},
|
|
2601
|
+
{
|
|
2602
|
+
"id": "pf-sns-subscription-region",
|
|
2603
|
+
"service": "sns",
|
|
2604
|
+
"severity": "ERROR",
|
|
2605
|
+
"title": "Subscription.Region must be the topic's region (the region in a literal TopicArn, or the deploy region for a topic in this template)",
|
|
2606
|
+
"upstream": "none",
|
|
2607
|
+
"resourceTypes": [
|
|
2608
|
+
"AWS::SNS::Subscription"
|
|
2609
|
+
],
|
|
2610
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snssrg_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-subscription.html\"\n\n_pf_snssrg_fix := \"Set Region to the topic's own region, or drop it for a topic in this stack\"\n\nviolation contains make_diag_full(\"pf-sns-subscription-region\", \"ERROR\", name,\n\t\"Properties.Region\",\n\tsprintf(\"Region '%s' differs from the topic's region '%s' in TopicArn; the resource handler fails with \\\"Invalid parameter: TopicArn\\\"\", [reg, parts[3]]),\n\t_pf_snssrg_fix, _pf_snssrg_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\treg := resolve(name, \"Properties.Region\")\n\tis_string(reg)\n\tt := resolve(name, \"Properties.TopicArn\")\n\tis_string(t)\n\tstartswith(t, \"arn:\")\n\tparts := split(t, \":\")\n\tcount(parts) >= 6\n\tparts[3] != reg\n}\n\n# A topic created in this template lives in the deploy region (enforce mode only; see AGENTS.md).\nviolation contains make_diag_full(\"pf-sns-subscription-region\", \"ERROR\", name,\n\t\"Properties.Region\",\n\tsprintf(\"Region '%s' differs from the deploy region '%s' of the topic in this template; the resource handler fails with \\\"Invalid parameter: TopicArn\\\"\", [reg, region]),\n\t_pf_snssrg_fix, _pf_snssrg_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome name in resources_of_type(\"AWS::SNS::Subscription\")\n\treg := resolve(name, \"Properties.Region\")\n\tis_string(reg)\n\tt := resolve(name, \"Properties.TopicArn\")\n\tt in resources_of_type(\"AWS::SNS::Topic\")\n\treg != region\n}\n"
|
|
2611
|
+
},
|
|
2612
|
+
{
|
|
2613
|
+
"id": "pf-sns-topic-attribute-values",
|
|
2614
|
+
"service": "sns",
|
|
2615
|
+
"severity": "ERROR",
|
|
2616
|
+
"title": "Topic DisplayName is at most 100 characters, SignatureVersion is 1 or 2, and TracingConfig is PassThrough or Active",
|
|
2617
|
+
"upstream": "none",
|
|
2618
|
+
"resourceTypes": [
|
|
2619
|
+
"AWS::SNS::Topic"
|
|
2620
|
+
],
|
|
2621
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snstav_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topic.html\"\n\n_pf_snstav_fix := \"Shorten DisplayName to 100 characters; use SignatureVersion \\\"1\\\"/\\\"2\\\" and TracingConfig PassThrough/Active\"\n\nviolation contains make_diag_full(\"pf-sns-topic-attribute-values\", \"ERROR\", name,\n\t\"Properties.DisplayName\",\n\tsprintf(\"DisplayName is %d characters long (maximum 100); CreateTopic fails with \\\"Invalid parameter: Attributes Reason: DisplayName\\\"\", [count(v)]),\n\t_pf_snstav_fix, _pf_snstav_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tv := resolve(name, \"Properties.DisplayName\")\n\tis_string(v)\n\tcount(v) > 100\n}\n\nviolation contains make_diag_full(\"pf-sns-topic-attribute-values\", \"ERROR\", name,\n\t\"Properties.SignatureVersion\",\n\tsprintf(\"SignatureVersion '%v' is not 1 or 2; CreateTopic fails with \\\"Invalid parameter: Attributes Reason: SignatureVersion: Invalid value. Must be 1 or 2.\\\"\", [v]),\n\t_pf_snstav_fix, _pf_snstav_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tv := resolve(name, \"Properties.SignatureVersion\")\n\t_pf_snstav_scalar(v)\n\tnot sprintf(\"%v\", [v]) in {\"1\", \"2\"}\n}\n\n_pf_snstav_scalar(v) if is_string(v)\n\n_pf_snstav_scalar(v) if is_number(v)\n\nviolation contains make_diag_full(\"pf-sns-topic-attribute-values\", \"ERROR\", name,\n\t\"Properties.TracingConfig\",\n\tsprintf(\"TracingConfig '%s' is not PassThrough or Active; CreateTopic fails with \\\"Invalid parameter: Attributes Reason: Invalid tracing config value: %s\\\"\", [v, v]),\n\t_pf_snstav_fix, _pf_snstav_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tv := resolve(name, \"Properties.TracingConfig\")\n\tis_string(v)\n\tnot v in {\"PassThrough\", \"Active\"}\n}\n"
|
|
2622
|
+
},
|
|
2494
2623
|
{
|
|
2495
2624
|
"id": "pf-sns-topic-name-format",
|
|
2496
2625
|
"service": "sns",
|
|
@@ -2502,6 +2631,61 @@ exports.BUNDLED_RULES = [
|
|
|
2502
2631
|
],
|
|
2503
2632
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,256}$`, n)\n\n_pf_snsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,251}\\.fifo$`, n)\n\nviolation contains make_diag_full(\"pf-sns-topic-name-format\", \"ERROR\", name,\n\t\"Properties.TopicName\",\n\tsprintf(\"TopicName '%s' is rejected with \\\"Invalid parameter: Topic Name\\\": SNS accepts only letters, numbers, hyphen and underscore (a FIFO topic adds the .fifo suffix)\", [n]),\n\t\"Rename the topic using [a-zA-Z0-9_-] (append .fifo only for FIFO topics)\",\n\t\"https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html\") if {\n\tsome name in resources_of_type(\"AWS::SNS::Topic\")\n\tn := resolve(name, \"Properties.TopicName\")\n\tis_string(n)\n\tnot _pf_snsname_ok(n)\n}\n"
|
|
2504
2633
|
},
|
|
2634
|
+
{
|
|
2635
|
+
"id": "pf-sns-topic-policy-topics",
|
|
2636
|
+
"service": "sns",
|
|
2637
|
+
"severity": "ERROR",
|
|
2638
|
+
"title": "TopicPolicy.Topics takes topic ARNs (Ref Topic), not topic names",
|
|
2639
|
+
"upstream": "none",
|
|
2640
|
+
"resourceTypes": [
|
|
2641
|
+
"AWS::SNS::TopicPolicy"
|
|
2642
|
+
],
|
|
2643
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_snstp_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topicpolicy.html\"\n\n_pf_snstp_fix := \"List topics with Ref (the ARN), not Fn::GetAtt Topic.TopicName or a bare name\"\n\nviolation contains make_diag_full(\"pf-sns-topic-policy-topics\", \"ERROR\", name,\n\tsprintf(\"Properties.Topics.%d\", [i]),\n\t\"Topics entry is the topic name (Fn::GetAtt Topic.TopicName) but TopicPolicy expects the topic ARN; the resource handler fails with \\\"Invalid parameter: TopicArn Reason: An ARN must have at least 6 elements, not 1\\\"\",\n\t_pf_snstp_fix, _pf_snstp_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::TopicPolicy\")\n\tts := object.get(input.resources[name].properties, \"Topics\", null)\n\tis_array(ts)\n\tsome i, t in ts\n\tis_object(t)\n\tobject.get(t, \"__kind\", null) == \"getatt:TopicName\"\n}\n\nviolation contains make_diag_full(\"pf-sns-topic-policy-topics\", \"ERROR\", name,\n\tsprintf(\"Properties.Topics.%d\", [i]),\n\tsprintf(\"Topics entry '%s' is not an ARN; the resource handler fails with \\\"Invalid parameter: TopicArn Reason: An ARN must have at least 6 elements\\\"\", [t]),\n\t_pf_snstp_fix, _pf_snstp_url) if {\n\tsome name in resources_of_type(\"AWS::SNS::TopicPolicy\")\n\tts := object.get(input.resources[name].properties, \"Topics\", null)\n\tis_array(ts)\n\tsome i, t in ts\n\tis_string(t)\n\tnot startswith(t, \"arn:\")\n\tnot contains(t, \"${\")\n}\n"
|
|
2644
|
+
},
|
|
2645
|
+
{
|
|
2646
|
+
"id": "pf-sqs-dlq-same-type",
|
|
2647
|
+
"service": "sqs",
|
|
2648
|
+
"severity": "ERROR",
|
|
2649
|
+
"title": "A dead-letter queue named by a literal ARN must be the same type as its source (FIFO for FIFO, standard for standard); Fn::GetAtt wiring is covered by engine rule E3502",
|
|
2650
|
+
"upstream": "none",
|
|
2651
|
+
"resourceTypes": [
|
|
2652
|
+
"AWS::SQS::Queue"
|
|
2653
|
+
],
|
|
2654
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsdlq_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsdlq_fix := \"Point a FIFO queue at a FIFO dead-letter queue (*.fifo) and a standard queue at a standard one\"\n\n_pf_sqsdlq_fifo(q) if resolve(q, \"Properties.FifoQueue\") in {true, \"true\"}\n\n# Standard queue: FifoQueue absent or literally false (an unresolvable value is neither).\n_pf_sqsdlq_std(q) if {\n\tprops := input.resources[q].properties\n\tis_object(props)\n\tobject.get(props, \"FifoQueue\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqsdlq_std(q) if resolve(q, \"Properties.FifoQueue\") in {false, \"false\"}\n\n# RedrivePolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsdlq_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsdlq_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n# The engine's E3502 (CFN_LINT) already compares the types when\n# deadLetterTargetArn is Fn::GetAtt of a queue in the template (verified\n# against 1.7.0-beta on 2026-09-05). Only a literal ARN — an imported queue —\n# escapes it, and the .fifo suffix tells the type.\n_pf_sqsdlq_literal(name) := arn if {\n\tarn := object.get(_pf_sqsdlq_pol(name), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tregex.match(\"^arn:[^:]+:sqs:\", arn)\n\tnot contains(arn, \"${\")\n}\n\nviolation contains make_diag_full(\"pf-sqs-dlq-same-type\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"a FIFO queue points at the standard dead-letter queue '%s'; CreateQueue fails with \\\"Dead-letter queue must be same type of queue as the source.\\\"\", [arn]),\n\t_pf_sqsdlq_fix, _pf_sqsdlq_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\t_pf_sqsdlq_fifo(name)\n\tarn := _pf_sqsdlq_literal(name)\n\tnot endswith(arn, \".fifo\")\n}\n\nviolation contains make_diag_full(\"pf-sqs-dlq-same-type\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"a standard queue points at the FIFO dead-letter queue '%s'; CreateQueue fails with \\\"Dead-letter queue must be same type of queue as the source.\\\"\", [arn]),\n\t_pf_sqsdlq_fix, _pf_sqsdlq_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\t_pf_sqsdlq_std(name)\n\tarn := _pf_sqsdlq_literal(name)\n\tendswith(arn, \".fifo\")\n}\n"
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
"id": "pf-sqs-fifo-name-suffix",
|
|
2658
|
+
"service": "sqs",
|
|
2659
|
+
"severity": "ERROR",
|
|
2660
|
+
"title": "A QueueName ending in .fifo requires FifoQueue: true (a FIFO queue without the suffix is engine rule E2504)",
|
|
2661
|
+
"upstream": "none",
|
|
2662
|
+
"resourceTypes": [
|
|
2663
|
+
"AWS::SQS::Queue"
|
|
2664
|
+
],
|
|
2665
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqssfx_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqssfx_fix := \"Set FifoQueue: true or drop the .fifo suffix\"\n\n_pf_sqssfx_fifo(q) if resolve(q, \"Properties.FifoQueue\") in {true, \"true\"}\n\n# Standard queue: FifoQueue absent or literally false (an unresolvable value is neither).\n_pf_sqssfx_std(q) if {\n\tprops := input.resources[q].properties\n\tis_object(props)\n\tobject.get(props, \"FifoQueue\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqssfx_std(q) if resolve(q, \"Properties.FifoQueue\") in {false, \"false\"}\n\n# The opposite direction (FifoQueue true, name without .fifo) is the engine's\n# E2504 / E3501; verified against 1.7.0-beta on 2026-09-05.\nviolation contains make_diag_full(\"pf-sqs-fifo-name-suffix\", \"ERROR\", name,\n\t\"Properties.QueueName\",\n\tsprintf(\"QueueName '%s' ends with .fifo but the queue is standard (FifoQueue is not true); CreateQueue fails with \\\"Can only include alphanumeric characters, hyphens, or underscores. 1 to 80 in length\\\"\", [n]),\n\t_pf_sqssfx_fix, _pf_sqssfx_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tn := resolve(name, \"Properties.QueueName\")\n\tis_string(n)\n\tendswith(n, \".fifo\")\n\t_pf_sqssfx_std(name)\n}\n"
|
|
2666
|
+
},
|
|
2667
|
+
{
|
|
2668
|
+
"id": "pf-sqs-fifo-only-attributes",
|
|
2669
|
+
"service": "sqs",
|
|
2670
|
+
"severity": "ERROR",
|
|
2671
|
+
"title": "ContentBasedDeduplication, DeduplicationScope and FifoThroughputLimit are FIFO-only queue attributes (and the two enums are messageGroup|queue and perQueue|perMessageGroupId)",
|
|
2672
|
+
"upstream": "none",
|
|
2673
|
+
"resourceTypes": [
|
|
2674
|
+
"AWS::SQS::Queue"
|
|
2675
|
+
],
|
|
2676
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsfo_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsfo_fix := \"Set FifoQueue: true (and name the queue *.fifo) or drop the FIFO-only attributes\"\n\n_pf_sqsfo_fifo(q) if resolve(q, \"Properties.FifoQueue\") in {true, \"true\"}\n\n# Standard queue: FifoQueue absent or literally false (an unresolvable value is neither).\n_pf_sqsfo_std(q) if {\n\tprops := input.resources[q].properties\n\tis_object(props)\n\tobject.get(props, \"FifoQueue\", \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqsfo_std(q) if resolve(q, \"Properties.FifoQueue\") in {false, \"false\"}\n\n_pf_sqsfo_msg := {\n\t\"ContentBasedDeduplication\": \"Unknown Attribute ContentBasedDeduplication.\",\n\t\"DeduplicationScope\": \"You can specify the DeduplicationScope only when FifoQueue is set to true.\",\n\t\"FifoThroughputLimit\": \"You can specify the FifoThroughputLimit only when FifoQueue is set to true.\",\n}\n\nviolation contains make_diag_full(\"pf-sqs-fifo-only-attributes\", \"ERROR\", name,\n\tsprintf(\"Properties.%s\", [attr]),\n\tsprintf(\"%s is set on a standard queue (FifoQueue is not true); CreateQueue fails with \\\"%s\\\"\", [attr, _pf_sqsfo_msg[attr]]),\n\t_pf_sqsfo_fix, _pf_sqsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\t_pf_sqsfo_std(name)\n\tsome attr, _ in _pf_sqsfo_msg\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, attr, \"__pf_absent\") != \"__pf_absent\"\n}\n\n_pf_sqsfo_enum contains [\"DeduplicationScope\", {\"messageGroup\", \"queue\"}]\n\n_pf_sqsfo_enum contains [\"FifoThroughputLimit\", {\"perQueue\", \"perMessageGroupId\"}]\n\nviolation contains make_diag_full(\"pf-sqs-fifo-only-attributes\", \"ERROR\", name,\n\tsprintf(\"Properties.%s\", [attr]),\n\tsprintf(\"%s '%s' is not one of %v; CreateQueue fails with \\\"Invalid value for the parameter %s. Reason: not a supported value.\\\"\", [attr, v, allowed, attr]),\n\t_pf_sqsfo_fix, _pf_sqsfo_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tsome [attr, allowed] in _pf_sqsfo_enum\n\tv := resolve(name, sprintf(\"Properties.%s\", [attr]))\n\tis_string(v)\n\tnot v in allowed\n}\n"
|
|
2677
|
+
},
|
|
2678
|
+
{
|
|
2679
|
+
"id": "pf-sqs-high-throughput-pairing",
|
|
2680
|
+
"service": "sqs",
|
|
2681
|
+
"severity": "ERROR",
|
|
2682
|
+
"title": "FifoThroughputLimit perMessageGroupId requires DeduplicationScope messageGroup",
|
|
2683
|
+
"upstream": "none",
|
|
2684
|
+
"resourceTypes": [
|
|
2685
|
+
"AWS::SQS::Queue"
|
|
2686
|
+
],
|
|
2687
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsht_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html\"\n\n_pf_sqsht_fix := \"Set DeduplicationScope: messageGroup together with FifoThroughputLimit: perMessageGroupId (both are needed for high throughput)\"\n\nviolation contains make_diag_full(\"pf-sqs-high-throughput-pairing\", \"ERROR\", name,\n\t\"Properties.FifoThroughputLimit\",\n\tsprintf(\"FifoThroughputLimit is perMessageGroupId but DeduplicationScope is %s; CreateQueue fails with \\\"Invalid value for the parameter FifoThroughputLimit. Reason: To set FifoThroughputLimit to perMessageGroupId, the DeduplicationScope must be messageGroup.\\\"\", [shown]),\n\t_pf_sqsht_fix, _pf_sqsht_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(name, \"Properties.FifoThroughputLimit\") == \"perMessageGroupId\"\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tscope := object.get(props, \"DeduplicationScope\", null)\n\t_pf_sqsht_bad(scope)\n\tshown := _pf_sqsht_show(scope)\n}\n\n_pf_sqsht_bad(scope) if scope == null\n\n_pf_sqsht_bad(scope) if {\n\tis_string(scope)\n\tscope != \"messageGroup\"\n}\n\n_pf_sqsht_show(scope) := \"absent\" if scope == null\n\n_pf_sqsht_show(scope) := sprintf(\"'%s'\", [scope]) if is_string(scope)\n"
|
|
2688
|
+
},
|
|
2505
2689
|
{
|
|
2506
2690
|
"id": "pf-sqs-queue-name-format",
|
|
2507
2691
|
"service": "sqs",
|
|
@@ -2513,6 +2697,61 @@ exports.BUNDLED_RULES = [
|
|
|
2513
2697
|
],
|
|
2514
2698
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,80}$`, n)\n\n_pf_sqsname_ok(n) if regex.match(`^[a-zA-Z0-9_-]{1,75}\\.fifo$`, n)\n\nviolation contains make_diag_full(\"pf-sqs-queue-name-format\", \"ERROR\", name,\n\t\"Properties.QueueName\",\n\tsprintf(\"QueueName '%s' is rejected: SQS accepts 1-80 characters of letters, numbers, hyphen and underscore (a FIFO queue adds the .fifo suffix)\", [n]),\n\t\"Rename the queue using [a-zA-Z0-9_-] within 80 characters (append .fifo only for FIFO queues)\",\n\t\"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\") if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tn := resolve(name, \"Properties.QueueName\")\n\tis_string(n)\n\tnot _pf_sqsname_ok(n)\n}\n"
|
|
2515
2699
|
},
|
|
2700
|
+
{
|
|
2701
|
+
"id": "pf-sqs-queue-policy-queues",
|
|
2702
|
+
"service": "sqs",
|
|
2703
|
+
"severity": "ERROR",
|
|
2704
|
+
"title": "QueuePolicy.Queues takes queue URLs (Ref Queue), never ARNs (Fn::GetAtt Queue.Arn), and must not be empty",
|
|
2705
|
+
"upstream": "none",
|
|
2706
|
+
"resourceTypes": [
|
|
2707
|
+
"AWS::SQS::QueuePolicy"
|
|
2708
|
+
],
|
|
2709
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsqp_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sqs-queuepolicy.html\"\n\n_pf_sqsqp_fix := \"List the queues with Ref (the queue URL), not Fn::GetAtt Queue.Arn\"\n\nviolation contains make_diag_full(\"pf-sqs-queue-policy-queues\", \"ERROR\", name,\n\t\"Properties.Queues\",\n\t\"Queues is empty; the resource handler fails with \\\"Queues are required\\\"\",\n\t_pf_sqsqp_fix, _pf_sqsqp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::QueuePolicy\")\n\tqs := object.get(input.resources[name].properties, \"Queues\", null)\n\tis_array(qs)\n\tcount(qs) == 0\n}\n\n# Fn::GetAtt appears in the preprocessed document as a marker object whose\n# __kind names the attribute; Ref (the URL) is \"resource\". Literal ARNs are\n# strings.\nviolation contains make_diag_full(\"pf-sqs-queue-policy-queues\", \"ERROR\", name,\n\tsprintf(\"Properties.Queues.%d\", [i]),\n\t\"Queues entry is the queue ARN (Fn::GetAtt Queue.Arn) but QueuePolicy expects the queue URL; the resource handler fails with \\\"The address arn:aws:sqs:... is not valid for this endpoint.\\\"\",\n\t_pf_sqsqp_fix, _pf_sqsqp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::QueuePolicy\")\n\tqs := object.get(input.resources[name].properties, \"Queues\", null)\n\tis_array(qs)\n\tsome i, q in qs\n\tis_object(q)\n\tobject.get(q, \"__kind\", null) == \"getatt:Arn\"\n}\n\nviolation contains make_diag_full(\"pf-sqs-queue-policy-queues\", \"ERROR\", name,\n\tsprintf(\"Properties.Queues.%d\", [i]),\n\tsprintf(\"Queues entry '%s' is an ARN but QueuePolicy expects the queue URL (https://sqs.<region>.amazonaws.com/<account>/<name>); the resource handler fails with \\\"The address ... is not valid for this endpoint.\\\"\", [q]),\n\t_pf_sqsqp_fix, _pf_sqsqp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::QueuePolicy\")\n\tqs := object.get(input.resources[name].properties, \"Queues\", null)\n\tis_array(qs)\n\tsome i, q in qs\n\tis_string(q)\n\tstartswith(q, \"arn:\")\n}\n"
|
|
2710
|
+
},
|
|
2711
|
+
{
|
|
2712
|
+
"id": "pf-sqs-redrive-allow-policy",
|
|
2713
|
+
"service": "sqs",
|
|
2714
|
+
"severity": "ERROR",
|
|
2715
|
+
"title": "RedriveAllowPolicy: redrivePermission is required (allowAll|denyAll|byQueue); byQueue needs 1..10 sourceQueueArns and the other two forbid them",
|
|
2716
|
+
"upstream": "none",
|
|
2717
|
+
"resourceTypes": [
|
|
2718
|
+
"AWS::SQS::Queue"
|
|
2719
|
+
],
|
|
2720
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsrap_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsrap_fix := \"Use byQueue with 1-10 sourceQueueArns, or allowAll / denyAll without sourceQueueArns\"\n\n# RedriveAllowPolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsrap_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrap_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_sqsrap_msg := \"Amazon SQS can't create the redrive allow policy\"\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.redrivePermission\",\n\tsprintf(\"RedriveAllowPolicy has no redrivePermission; CreateQueue fails with \\\"%s, as it's in an unsupported format.\\\"\", [_pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrap_pol(name)\n\tobject.get(pol, \"redrivePermission\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.redrivePermission\",\n\tsprintf(\"redrivePermission '%s' is not allowAll, denyAll or byQueue; CreateQueue fails with \\\"%s, as it's in an unsupported format.\\\"\", [perm, _pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tperm := object.get(_pf_sqsrap_pol(name), \"redrivePermission\", null)\n\tis_string(perm)\n\tnot perm in {\"allowAll\", \"denyAll\", \"byQueue\"}\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.sourceQueueArns\",\n\tsprintf(\"redrivePermission byQueue has %d sourceQueueArns (1 to 10 required); CreateQueue fails with \\\"%s. When you specify the byQueue permission type, you must also specify between 1 and 10 source queue ARNs.\\\"\", [n, _pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrap_pol(name)\n\tobject.get(pol, \"redrivePermission\", null) == \"byQueue\"\n\tn := _pf_sqsrap_count(object.get(pol, \"sourceQueueArns\", null))\n\t_pf_sqsrap_out(n)\n}\n\n_pf_sqsrap_count(v) := 0 if v == null\n\n_pf_sqsrap_count(v) := count(v) if is_array(v)\n\n_pf_sqsrap_out(n) if n < 1\n\n_pf_sqsrap_out(n) if n > 10\n\nviolation contains make_diag_full(\"pf-sqs-redrive-allow-policy\", \"ERROR\", name,\n\t\"Properties.RedriveAllowPolicy.sourceQueueArns\",\n\tsprintf(\"redrivePermission %s does not take sourceQueueArns; CreateQueue fails with \\\"%s. You can specify source queue ARNs only when the permission type is byQueue.\\\"\", [perm, _pf_sqsrap_msg]),\n\t_pf_sqsrap_fix, _pf_sqsrap_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrap_pol(name)\n\tperm := object.get(pol, \"redrivePermission\", null)\n\tperm in {\"allowAll\", \"denyAll\"}\n\tobject.get(pol, \"sourceQueueArns\", \"__pf_absent\") != \"__pf_absent\"\n}\n"
|
|
2721
|
+
},
|
|
2722
|
+
{
|
|
2723
|
+
"id": "pf-sqs-redrive-arn-region",
|
|
2724
|
+
"service": "sqs",
|
|
2725
|
+
"severity": "ERROR",
|
|
2726
|
+
"title": "The dead-letter target and every RedriveAllowPolicy source queue must sit in the deploy region",
|
|
2727
|
+
"upstream": "none",
|
|
2728
|
+
"resourceTypes": [
|
|
2729
|
+
"AWS::SQS::Queue"
|
|
2730
|
+
],
|
|
2731
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsrr_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html\"\n\n_pf_sqsrr_fix := \"Reference queues in the same region (Fn::GetAtt Queue.Arn of queues in this stack)\"\n\n# RedrivePolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsrr_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrr_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_sqsrr_allow(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrr_allow(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedriveAllowPolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\n_pf_sqsrr_region(arn) := parts[3] if {\n\tstartswith(arn, \"arn:\")\n\tparts := split(arn, \":\")\n\tcount(parts) >= 6\n\tparts[2] == \"sqs\"\n}\n\n# Region comparison needs the deploy region, which only this pack sees\n# (data.cdk_preflight.deploy_region is defined in enforce mode; the rule\n# skips without it).\nviolation contains make_diag_full(\"pf-sqs-redrive-arn-region\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"deadLetterTargetArn is in '%s' but the queue deploys to '%s'; CreateQueue fails with \\\"Dead-letter target must be in same region as the source.\\\"\", [r, region]),\n\t_pf_sqsrr_fix, _pf_sqsrr_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tarn := object.get(_pf_sqsrr_pol(name), \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tr := _pf_sqsrr_region(arn)\n\tr != region\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-arn-region\", \"ERROR\", name,\n\tsprintf(\"Properties.RedriveAllowPolicy.sourceQueueArns.%d\", [i]),\n\tsprintf(\"source queue '%s' is in '%s' but the queue deploys to '%s'; CreateQueue fails with \\\"All source queue ARNs must be in the same region as the current SQS queue.\\\"\", [arn, r, region]),\n\t_pf_sqsrr_fix, _pf_sqsrr_url) if {\n\tregion := data.cdk_preflight.deploy_region\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tarns := object.get(_pf_sqsrr_allow(name), \"sourceQueueArns\", null)\n\tis_array(arns)\n\tsome i, arn in arns\n\tis_string(arn)\n\tr := _pf_sqsrr_region(arn)\n\tr != region\n}\n"
|
|
2732
|
+
},
|
|
2733
|
+
{
|
|
2734
|
+
"id": "pf-sqs-redrive-policy",
|
|
2735
|
+
"service": "sqs",
|
|
2736
|
+
"severity": "ERROR",
|
|
2737
|
+
"title": "RedrivePolicy needs deadLetterTargetArn (an SQS queue ARN) and maxReceiveCount in 1..1000",
|
|
2738
|
+
"upstream": "none",
|
|
2739
|
+
"resourceTypes": [
|
|
2740
|
+
"AWS::SQS::Queue"
|
|
2741
|
+
],
|
|
2742
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqsrp_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqsrp_fix := \"Set both deadLetterTargetArn (Fn::GetAtt Queue.Arn) and maxReceiveCount between 1 and 1000\"\n\n# RedrivePolicy arrives as a JSON object or as a JSON string (both are valid CloudFormation).\n_pf_sqsrp_pol(name) := pol if {\n\tpol := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_object(pol)\n}\n\n_pf_sqsrp_pol(name) := pol if {\n\traw := object.get(input.resources[name].properties, \"RedrivePolicy\", null)\n\tis_string(raw)\n\tpol := json.unmarshal(raw)\n\tis_object(pol)\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-policy\", \"ERROR\", name,\n\tsprintf(\"Properties.RedrivePolicy.%s\", [key]),\n\tsprintf(\"RedrivePolicy has no %s; CreateQueue fails with \\\"Redrive policy does not contain mandatory attribute: %s.\\\"\", [key, key]),\n\t_pf_sqsrp_fix, _pf_sqsrp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrp_pol(name)\n\tsome key in [\"deadLetterTargetArn\", \"maxReceiveCount\"]\n\tobject.get(pol, key, \"__pf_absent\") == \"__pf_absent\"\n}\n\n_pf_sqsrp_num(v) := v if is_number(v)\n\n_pf_sqsrp_num(v) := to_number(v) if {\n\tis_string(v)\n\tregex.match(\"^[0-9]+$\", v)\n}\n\nviolation contains make_diag_full(\"pf-sqs-redrive-policy\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.maxReceiveCount\",\n\tsprintf(\"maxReceiveCount %v is outside 1..1000; CreateQueue fails with \\\"Invalid value for maxReceiveCount: %v, valid values are from 1 to 1000 both inclusive.\\\"\", [n, n]),\n\t_pf_sqsrp_fix, _pf_sqsrp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrp_pol(name)\n\tn := _pf_sqsrp_num(object.get(pol, \"maxReceiveCount\", null))\n\t_pf_sqsrp_out(n)\n}\n\n_pf_sqsrp_out(n) if n < 1\n\n_pf_sqsrp_out(n) if n > 1000\n\nviolation contains make_diag_full(\"pf-sqs-redrive-policy\", \"ERROR\", name,\n\t\"Properties.RedrivePolicy.deadLetterTargetArn\",\n\tsprintf(\"deadLetterTargetArn '%s' is not an SQS queue ARN; CreateQueue fails with \\\"Only SQS queues are valid resources for deadLetterTargetArn\\\"\", [arn]),\n\t_pf_sqsrp_fix, _pf_sqsrp_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tpol := _pf_sqsrp_pol(name)\n\tarn := object.get(pol, \"deadLetterTargetArn\", null)\n\tis_string(arn)\n\tnot contains(arn, \"${\")\n\tnot regex.match(\"^arn:[^:]+:sqs:\", arn)\n}\n"
|
|
2743
|
+
},
|
|
2744
|
+
{
|
|
2745
|
+
"id": "pf-sqs-sse-exclusive",
|
|
2746
|
+
"service": "sqs",
|
|
2747
|
+
"severity": "ERROR",
|
|
2748
|
+
"title": "SqsManagedSseEnabled: true and KmsMasterKeyId are mutually exclusive (one SSE type per queue)",
|
|
2749
|
+
"upstream": "none",
|
|
2750
|
+
"resourceTypes": [
|
|
2751
|
+
"AWS::SQS::Queue"
|
|
2752
|
+
],
|
|
2753
|
+
"rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sqssse_url := \"https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_CreateQueue.html\"\n\n_pf_sqssse_fix := \"Keep either SqsManagedSseEnabled: true (SSE-SQS) or KmsMasterKeyId (SSE-KMS); SqsManagedSseEnabled: false with a key is fine\"\n\nviolation contains make_diag_full(\"pf-sqs-sse-exclusive\", \"ERROR\", name,\n\t\"Properties.KmsMasterKeyId\",\n\t\"SqsManagedSseEnabled is true and KmsMasterKeyId is set; CreateQueue fails with \\\"You can use one type of server-side encryption (SSE) at one time. You can either enable KMS SSE or SQS SSE.\\\"\",\n\t_pf_sqssse_fix, _pf_sqssse_url) if {\n\tsome name in resources_of_type(\"AWS::SQS::Queue\")\n\tresolve(name, \"Properties.SqsManagedSseEnabled\") in {true, \"true\"}\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"KmsMasterKeyId\", \"__pf_absent\") != \"__pf_absent\"\n}\n"
|
|
2754
|
+
},
|
|
2516
2755
|
{
|
|
2517
2756
|
"id": "pf-sfn-asl-missing-state",
|
|
2518
2757
|
"service": "stepfunctions",
|
|
@@ -2547,4 +2786,4 @@ exports.BUNDLED_RULES = [
|
|
|
2547
2786
|
"rego": "package cdk_preflight\n\nimport rego.v1\n\n# The AWS-wide limit is 50 user tags per resource. Counted on the rendered\n# template, which is the only place the merged Tags.of() result exists.\n_pf_tagcount_bad contains [name, n] if {\n\tsome name in object.keys(input.resources)\n\ttags := flatten_list(name, \"Properties.Tags\")\n\tn := count(tags)\n\tn > 50\n}\n\nviolation contains make_diag_full(\"pf-tags-count-max\", \"ERROR\", name,\n\t\"Properties.Tags\",\n\tsprintf(\"%d tags are attached to this resource; AWS allows at most 50 per resource and rejects the create call (\\\"More than 50 tags specified.\\\")\", [n]),\n\t\"Reduce the tag set to 50 or fewer - remember that Tags.of() adds tags from every enclosing scope\",\n\t\"https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html\") if {\n\tsome [name, n] in _pf_tagcount_bad\n}\n"
|
|
2548
2787
|
}
|
|
2549
2788
|
];
|
|
2550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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QUUsS0FBSztRQUNoQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsOEZBQThGO1FBQ3ZHLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLGlCQUFpQjtTQUNsQjtRQUNELE1BQU0sRUFBRSxreUJBQWt5QjtLQUMzeUI7SUFDRDtRQUNFLElBQUksRUFBRSwwQkFBMEI7UUFDaEMsU0FBUyxFQUFFLGVBQWU7UUFDMUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGdJQUFnSTtRQUN6SSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixrQ0FBa0M7U0FDbkM7UUFDRCxNQUFNLEVBQUUsMitEQUEyK0Q7S0FDcC9EO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwrQ0FBK0M7UUFDeEQsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsR0FBRztTQUNKO1FBQ0QsTUFBTSxFQUFFLGdpQ0FBZ2lDO0tBQ3ppQztJQUNEO1FBQ0UsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixTQUFTLEVBQUUsTUFBTTtRQUNqQixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsc0NBQXNDO1FBQy9DLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLEdBQUc7U0FDSjtRQUNELE1BQU0sRUFBRSx5MUJBQXkxQjtLQUNsMkI7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHNjcmlwdHMvYnVuZGxlLXJ1bGVzLnRzIGZyb20gcnVsZXMvKiouIERvIG5vdCBlZGl0IGJ5IGhhbmQuXG4vLyB+fiBSZWdlbmVyYXRlIHdpdGg6IG5weCBwcm9qZW4gYnVuZGxlLXJ1bGVzXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVkUnVsZURhdGEge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwc3RyZWFtOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWdvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCVU5ETEVEX1JVTEVTOiBCdW5kbGVkUnVsZURhdGFbXSA9IFtcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY2Nlc3MgbG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgYSByZXF1ZXN0IGlkIHZhcmlhYmxlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZm9ybWF0IHN0cmluZyBpcyBvcGFxdWUgdG8gZXZlcnkgc2NoZW1hIGxheWVyOyB0aGUgc2VydmljZSByZXF1aXJlcyBhXFxuIyByZXF1ZXN0IGlkIHZhcmlhYmxlIHNvbWV3aGVyZSBpbnNpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1hY2Nlc3MtbG9nLWZvcm1hdC1yZXF1ZXN0LWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIsXFxuXFx0XFxcIkFjY2VzcyBsb2cgZm9ybWF0IGhhcyBubyByZXF1ZXN0IGlkIHZhcmlhYmxlOyB0aGUgc3RhZ2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgTG9nIGZvcm1hdCBtdXN0IGluY2x1ZGUgZWl0aGVyICRjb250ZXh0LnJlcXVlc3RJZCBvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkICRjb250ZXh0LnJlcXVlc3RJZCAob3IgJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWQpIHRvIHRoZSBhY2Nlc3MgbG9nIGZvcm1hdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZXQtdXAtbG9nZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0Zm10IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZXNzTG9nU2V0dGluZy5Gb3JtYXRcXFwiKVxcblxcdGlzX3N0cmluZyhmbXQpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LnJlcXVlc3RJZFxcXCIpXFxuXFx0bm90IGNvbnRhaW5zKGZtdCwgXFxcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1hdXRob3JpemVyLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kcyB0b3BzIG91dCBhdCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgdGhlIFRUTCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIDM2MDAgY2VpbGluZyBpc1xcbiMgb25seSBpbiB0aGUgc2VydmljZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBdXRob3JpemVyIHJlc3VsdCBUVEwgb3V0c2lkZSBhbGxvd2FibGUgcmFuZ2UuIFRUTCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzLlxcXFxcXFwiXFxcIiwgW3R0bF0pLFxcblxcdFxcXCJVc2UgYSBUVEwgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0dHRsIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiKSlcXG5cXHR0dGwgPiAzNjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVycyBuZWVkIFByb3ZpZGVyQVJOc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIENvZ25pdG8gYXV0aG9yaXplciB2YWxpZGF0ZXMgdG9rZW5zIGFnYWluc3QgdGhlIHVzZXIgcG9vbHMgbGlzdGVkIGluXFxuIyBQcm92aWRlckFSTnM7IHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnY3BhX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm92aWRlckFSTnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctY29nbml0by1hdXRob3JpemVyLXByb3ZpZGVyLWFybnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3ZpZGVyQVJOc1xcXCIsXFxuXFx0XFxcIkNPR05JVE9fVVNFUl9QT09MUyBhdXRob3JpemVyIGhhcyBubyBQcm92aWRlckFSTnM7IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvdmlkZXJBUk5zIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFByb3ZpZGVyQVJOcyB0byB0aGUgQ29nbml0byB1c2VyIHBvb2wgQVJOKHMpIHRoaXMgYXV0aG9yaXplciBzaG91bGQgdXNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwiXFxuXFx0X3BmX2FwZ2NwYV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctZGVwbG95bWVudC1uby1tZXRob2RzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIERlcGxveW1lbnQgbmVlZHMgYXQgbGVhc3Qgb25lIE1ldGhvZCBvbiBpdHMgUkVTVCBBUElcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVwbG95aW5nIGFuIEFQSSB3aXRoIHplcm8gbWV0aG9kcyBmYWlscy4gSnVkZ2VkIG9ubHkgd2hlbiB0aGUgd2hvbGVcXG4jIHBpY3R1cmUgaXMgaW4gdGhpcyB0ZW1wbGF0ZTogdGhlIGFwaSBpcyBhIHNpYmxpbmcgcmVzb3VyY2UgYW5kIGl0IGhhcyBub1xcbiMgT3BlbkFQSSBib2R5ICh3aGljaCB3b3VsZCBkZWZpbmUgbWV0aG9kcyBpbnZpc2libHkpLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnZG5tX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2FwZ2RubV9zZXJ2ZWQoYXBpKSBpZiB7XFxuXFx0c29tZSBtIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0cmVzb2x2ZShtLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKSA9PSBhcGlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUkVTVCBBUEkgJyVzJyBoYXMgbm8gQVdTOjpBcGlHYXRld2F5OjpNZXRob2QgaW4gdGhpcyB0ZW1wbGF0ZTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSRVNUIEFQSSBkb2Vzbid0IGNvbnRhaW4gYW55IG1ldGhvZHNcXFxcXFxcIlxcXCIsIFthcGldKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCB0byB0aGUgQVBJIGJlZm9yZSBkZXBsb3lpbmcgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWRlcGxveW1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6RGVwbG95bWVudFxcXCIpXFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6UmVzdEFwaVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FwZ2RubV9hYnNlbnQoYXBpLCBcXFwiQm9keVMzTG9jYXRpb25cXFwiKVxcblxcdG5vdCBfcGZfYXBnZG5tX3NlcnZlZChhcGkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbi1NT0NLIGludGVncmF0aW9ucyBuZWVkIEludGVncmF0aW9uSHR0cE1ldGhvZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IGludGVncmF0aW9uIHR5cGUgZXhjZXB0IE1PQ0sgY2FsbHMgYSBiYWNrZW5kIGFuZCBuZWVkcyB0aGUgSFRUUFxcbiMgbWV0aG9kIHRvIGNhbGwgaXQgd2l0aC4gVmVyaWZpZWQgZm9yIGFsbCBmb3VyIG5vbi1NT0NLIHR5cGVzLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnaWhtX3R5cGVzIDo9IHtcXFwiQVdTXFxcIiwgXFxcIkFXU19QUk9YWVxcXCIsIFxcXCJIVFRQXFxcIiwgXFxcIkhUVFBfUFJPWFlcXFwifVxcblxcbl9wZl9hcGdpaG1fbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0aW50ZWcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkludGVncmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGludGVnKVxcblxcdG9iamVjdC5nZXQoaW50ZWcsIFxcXCJJbnRlZ3JhdGlvbkh0dHBNZXRob2RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctaW50ZWdyYXRpb24taHR0cC1tZXRob2RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW50ZWdyYXRpb24gdHlwZSAnJXMnIGhhcyBubyBJbnRlZ3JhdGlvbkh0dHBNZXRob2Q7IHRoZSBtZXRob2QgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFbnVtZXJhdGlvbiB2YWx1ZSBmb3IgSHR0cE1ldGhvZCBtdXN0IGJlIG5vbi1lbXB0eVxcXFxcXFwiXFxcIiwgW3RdKSxcXG5cXHRcXFwiU2V0IEludGVncmF0aW9uLkludGVncmF0aW9uSHR0cE1ldGhvZCAoUE9TVCBmb3IgQVdTL0FXU19QUk9YWSBMYW1iZGEgYmFja2VuZHMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uVHlwZVxcXCIpXFxuXFx0dCBpbiBfcGZfYXBnaWhtX3R5cGVzXFxuXFx0X3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbWV0aG9kLWF1dGhvcml6ZXItaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNVU1RPTSBhbmQgQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6YXRpb24gbmVlZCBBdXRob3JpemVySWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGF1dGhvcml6ZXItYmFja2VkIGF1dGhvcml6YXRpb24gdHlwZXMgcG9pbnQgYXQgYW4gQXV0aG9yaXplcjsgdGhlXFxuIyBtZXRob2QgY3JlYXRlIHJlamVjdHMgdGhlbSB3aXRob3V0IG9uZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FwZ21haWRfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplcklkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBdXRob3JpemF0aW9uVHlwZSAnJXMnIGlzIHNldCBidXQgQXV0aG9yaXplcklkIGlzIG5vdDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgYXV0aG9yaXplciBJRCBzcGVjaWZpZWQuIFNldHRpbmcgdGhlIGF1dGhvcml6YXRpb24gdHlwZSB0byBDVVNUT00gb3IgQ09HTklUT19VU0VSX1BPT0xTIHJlcXVpcmVzIGEgdmFsaWQgYXV0aG9yaXplci5cXFxcXFxcIlxcXCIsIFthdF0pLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplcklkIHRvIHRoZSBhdXRob3JpemVyIHRoaXMgbWV0aG9kIHNob3VsZCB1c2UsIG9yIGNoYW5nZSBBdXRob3JpemF0aW9uVHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktbWV0aG9kLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFxcXCIpXFxuXFx0YXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemF0aW9uVHlwZVxcXCIpXFxuXFx0YXQgaW4ge1xcXCJDVVNUT01cXFwiLCBcXFwiQ09HTklUT19VU0VSX1BPT0xTXFxcIn1cXG5cXHRfcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctbW9kZWwtc2NoZW1hLXR5cGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1vZGVsIHNjaGVtYSAndHlwZScgbXVzdCBiZSBhIEpTT04gU2NoZW1hIGRyYWZ0LTQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIFNjaGVtYSBib2R5IGlzIG9wYXF1ZSBKU09OIHRvIGV2ZXJ5IHNjaGVtYSBsYXllci4gRnVsbCBkcmFmdC00XFxuIyB2YWxpZGF0aW9uIGlzIG91dCBvZiBzY29wZTsgYSBsaXRlcmFsIHRvcC1sZXZlbCBcXFwidHlwZVxcXCIgb3V0c2lkZSB0aGVcXG4jIGRyYWZ0LTQgc2V0IChhIGNvbW1vbiB0eXBvIGxpa2UgXFxcIlN0cmluZ1xcXCIpIGlzIHByb3ZhYmx5IGZhdGFsLlxcbl9wZl9hcGdtc3RfdHlwZXMgOj0ge1xcXCJhcnJheVxcXCIsIFxcXCJib29sZWFuXFxcIiwgXFxcImludGVnZXJcXFwiLCBcXFwibnVsbFxcXCIsIFxcXCJudW1iZXJcXFwiLCBcXFwib2JqZWN0XFxcIiwgXFxcInN0cmluZ1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZW1hLnR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIk1vZGVsIHNjaGVtYSB0eXBlICclcycgaXMgbm90IGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlOyB0aGUgbW9kZWwgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIG1vZGVsIHNwZWNpZmllZDogVmFsaWRhdGlvbiBSZXN1bHQ6IHdhcm5pbmdzIDogW10sIGVycm9ycyA6IFtJbnZhbGlkIG1vZGVsIHNjaGVtYSBzcGVjaWZpZWRdXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIGFycmF5LCBib29sZWFuLCBpbnRlZ2VyLCBudWxsLCBudW1iZXIsIG9iamVjdCwgc3RyaW5nIChsb3dlcmNhc2UpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tb2RlbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNb2RlbFxcXCIpXFxuXFx0c2NoIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZW1hXFxcIilcXG5cXHRpc19vYmplY3Qoc2NoKVxcblxcdHQgOj0gb2JqZWN0LmdldChzY2gsIFxcXCJ0eXBlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHR0ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRub3QgdCBpbiBfcGZfYXBnbXN0X3R5cGVzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXRoUGFydCBhbGxvd3MgYS16QS1aMC05Ll8tOiBvciBvbmUgY3VybHktYnJhY2UgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6UmVzb3VyY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFZhbGlkIGZvcm1zIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IHBsYWluIFthLXpBLVowLTkuXzotXSssIG9yIGFcXG4jIHdob2xlLXBhcnQgdmFyaWFibGUge25hbWV9IC8gZ3JlZWR5IHtuYW1lK30uXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Ll86LV0rJGAsIHBwKVxcblxcbl9wZl9hcGdycHBfb2socHApIGlmIHJlZ2V4Lm1hdGNoKGBeXFxcXHtbYS16QS1aMC05Ll8tXStcXFxcKz9cXFxcfSRgLCBwcClcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXJlc291cmNlLXBhdGgtcGFydFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF0aFBhcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBhdGhQYXJ0ICclcycgaGFzIGNoYXJhY3RlcnMgdGhlIHNlcnZpY2UgcmVqZWN0czsgdGhlIHJlc291cmNlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUmVzb3VyY2UncyBwYXRoIHBhcnQgb25seSBhbGxvdyBhLXpBLVowLTkuXy06IG9yIGEgdmFsaWQgZ3JlZWR5IHBhdGggdmFyaWFibGUgYW5kIGN1cmx5IGJyYWNlcyBhdCB0aGUgYmVnaW5uaW5nIGFuZCB0aGUgZW5kLlxcXFxcXFwiXFxcIiwgW3BwXSksXFxuXFx0XFxcIlVzZSBvbmx5IGEtekEtWjAtOS5fLTogaW4gdGhlIHBhdGggcGFydCwgb3IgYSBzaW5nbGUge3ZhcmlhYmxlfSAvIHtncmVlZHkrfSBmb3JtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1yZXNvdXJjZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVxcXCIpXFxuXFx0cHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIpXFxuXFx0aXNfc3RyaW5nKHBwKVxcblxcdG5vdCBfcGZfYXBncnBwX29rKHBwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFnZSB2YXJpYWJsZSB2YWx1ZXMgaGF2ZSBhIHJlc3RyaWN0ZWQgY2hhcmFjdGVyIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3dlZCBwZXIgdGhlIHNlcnZpY2UgZXJyb3IgaXRzZWxmOiBhbHBoYW51bWVyaWNzIHBsdXMgc3BhY2UgYW5kXFxuIyAtIC4gXyA6IC8gPyAmID0gLCAobm90ZTogc3BhY2UgSVMgbGVnYWwpLlxcbl9wZl9hcGdzdnZfb2sodikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fOi8/Jj0sLV0qJGAsIHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1zdGFnZS12YXJpYWJsZS12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5WYXJpYWJsZXMuJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIlN0YWdlIHZhcmlhYmxlICclcycgaGFzIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgYWxsb3dlZCBzZXQ7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgc3RhZ2UgdmFyaWFibGUgdmFsdWUgb2Yga2V5ICVzLiAgUGxlYXNlIHVzZSB2YWx1ZXMgd2l0aCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgdGhlIHN5bWJvbHMgJyAnLCAtJywgJy4nLCAnXycsICc6JywgJy8nLCAnPycsICcmJywgJz0nLCBhbmQgJywnLlxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiUmVzdHJpY3QgdGhlIHZhbHVlIHRvIGFscGhhbnVtZXJpY3MgYW5kICcgJywgLSwgLiwgXywgOiwgLywgPywgJiwgPSwgLFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdGFnZS12YXJpYWJsZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcXFwiKVxcblxcdHZhcnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WYXJpYWJsZXNcXFwiKVxcblxcdGlzX29iamVjdCh2YXJzKVxcblxcdHNvbWUgaywgdiBpbiB2YXJzXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IF9wZl9hcGdzdnZfb2sodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVE9LRU4gYXV0aG9yaXplcnMgbmVlZCBJZGVudGl0eVNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUT0tFTiBhdXRob3JpemVycyByZWFkIHRoZSB0b2tlbiBmcm9tIHRoZSBoZWFkZXIgbmFtZWQgYnkgSWRlbnRpdHlTb3VyY2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gUkVRVUVTVCBhdXRob3JpemVycyBhcmUgb3V0IG9mXFxuIyBzY29wZTogdGhleSBuZWVkIGl0IG9ubHkgd2l0aCBjYWNoaW5nIGVuYWJsZWQgKHVubWVhc3VyZWQpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBndGlzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJZGVudGl0eVNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy10b2tlbi1hdXRob3JpemVyLWlkZW50aXR5LXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRlbnRpdHlTb3VyY2VcXFwiLFxcblxcdFxcXCJUT0tFTiBhdXRob3JpemVyIGhhcyBubyBJZGVudGl0eVNvdXJjZTsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJZGVudGl0eVNvdXJjZSBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBJZGVudGl0eVNvdXJjZSwgZS5nLiBtZXRob2QucmVxdWVzdC5oZWFkZXIuQXV0aG9yaXphdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVE9LRU5cXFwiXFxuXFx0X3BmX2FwZ3Rpc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBcGkgbmVlZHMgYSBOYW1lIHVubGVzcyBhbiBPcGVuQVBJIGJvZHkgcHJvdmlkZXMgb25lXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNaXJyb3JzIGNmbi1saW50IEUzNjYwIGZvciBSRVNUIEFQSXMsIHdoaWNoIGhhcyBubyBBcGlHYXRld2F5VjJcXG4jIGNvdW50ZXJwYXJ0OiB3aXRob3V0IGEgQm9keSB0byBjYXJyeSBpbmZvLnRpdGxlLCBOYW1lIGlzIG1hbmRhdG9yeS5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItYXBpLW5hbWUtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdFxcXCJBcGkgaGFzIG5vIE5hbWUgYW5kIG5vIE9wZW5BUEkgYm9keSB0byB0YWtlIG9uZSBmcm9tOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBBUEkgbmFtZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBOYW1lLCBvciBwcm92aWRlIHRoZSBkZWZpbml0aW9uIHZpYSBCb2R5IC8gQm9keVMzTG9jYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXBpLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIk5hbWVcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiQm9keVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFXU19QUk9YWSBpbnRlZ3JhdGlvbnMgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjAgb3IgMi4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNjb3BlZCB0byBpbnRlZ3JhdGlvbnMgd2hvc2UgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUCAodGhlIGJlbmNoZWRcXG4jIHNoYXBlKTsgV2ViU29ja2V0IGludGVncmF0aW9ucyBhcmUgb3V0IG9mIHNjb3BlLlxcbl9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hd3MtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF5bG9hZEZvcm1hdFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIGludGVncmF0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVW5zdXBwb3J0ZWQgUGF5bG9hZEZvcm1hdFZlcnNpb246ICVzXFxcXFxcXCJcXFwiLCBbcHYsIHB2XSksXFxuXFx0XFxcIlVzZSAxLjAgb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkFXU19QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmFwcF9odHRwX2FwaShuYW1lKVxcblxcdHB2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKVxcblxcdGlzX3N0cmluZyhwdilcXG5cXHRub3QgcHYgaW4ge1xcXCIxLjBcXFwiLCBcXFwiMi4wXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWNvcnMtY3JlZGVudGlhbHMtd2lsZGNhcmRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09SUyBBbGxvd0NyZWRlbnRpYWxzIGNhbm5vdCBwYWlyIHdpdGggYSB3aWxkY2FyZCBvcmlnaW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBDT1JTIHNwZWMgZm9yYmlkcyBjcmVkZW50aWFsZWQgcmVxdWVzdHMgYWdhaW5zdCBhIHdpbGRjYXJkIG9yaWdpbixcXG4jIGFuZCB0aGUgQVBJIGNyZWF0ZSBlbmZvcmNlcyBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnMuJWRcXFwiLCBbby5pbmRleF0pLFxcblxcdFxcXCJDb3JzQ29uZmlndXJhdGlvbiBzZXRzIEFsbG93Q3JlZGVudGlhbHMgd2l0aCBhICcqJyBvcmlnaW47IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJhbGxvdy1jcmVkZW50aWFscyBpcyBub3Qgc3VwcG9ydGVkIGlmICdhbGxvdy1vcmlnaW4nIGlzICpcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkxpc3QgZXhwbGljaXQgb3JpZ2lucywgb3IgZHJvcCBBbGxvd0NyZWRlbnRpYWxzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWNvcnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29yc0NvbmZpZ3VyYXRpb24uQWxsb3dDcmVkZW50aWFsc1xcXCIpKSA9PSB0cnVlXFxuXFx0c29tZSBvIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd09yaWdpbnNcXFwiKVxcblxcdG8udmFsdWUgPT0gXFxcIipcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHRha2UgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAyLjAgZXZlbnQgZm9ybWF0IGlzIExhbWJkYS1vbmx5OyBIVFRQX1BST1hZIGJhY2tlbmRzIG11c3Qgc3RheSBvblxcbiMgMS4wLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgc2hhcGUgKEFwaSBzaWJsaW5nIHByb3ZhYmx5IEhUVFApLlxcbl9wZl9hZ3YyaHBwX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXByb3h5LXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiLFxcblxcdFxcXCJIVFRQX1BST1hZIGludGVncmF0aW9ucyBvbmx5IHN1cHBvcnQgUGF5bG9hZEZvcm1hdFZlcnNpb24gMS4wOyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAyLjAgaXMgbm90IHN1cHBvcnRlZCBmb3IgaW50ZWdyYXRpb24gb2YgdHlwZSBIVFRQX1BST1hZXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIChvciBvbWl0IGl0KSwgb3Igc3dpdGNoIHRvIGFuIEFXU19QUk9YWSBpbnRlZ3JhdGlvbiBmb3IgMi4wXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6SW50ZWdyYXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb25UeXBlXFxcIikgPT0gXFxcIkhUVFBfUFJPWFlcXFwiXFxuXFx0X3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSlcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIikgPT0gXFxcIjIuMFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJIHJvdXRlIGtleXMgYXJlIFxcXCJNRVRIT0QgL3BhdGhcXFwiIG9yICRkZWZhdWx0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCByb3V0ZSBrZXlzIGFyZSBmcmVlLWZvcm0sIHNvIHRoaXMgb25seSBqdWRnZXMgcm91dGVzIHdob3NlIEFwaVxcbiMgc2libGluZyBpcyBwcm92YWJseSBIVFRQLiBUUkFDRSBpcyBkZXBsb3ktdmVyaWZpZWQgYXMgcmVqZWN0ZWQ7IHBhdGhzIHdpdGhcXG4jIHNwYWNlcyBhcmUgbGVmdCBhbG9uZSAodW5tZWFzdXJlZCkuXFxuX3BmX2FndjJya19tZXRob2RzIDo9IHtcXFwiR0VUXFxcIiwgXFxcIlBPU1RcXFwiLCBcXFwiUFVUXFxcIiwgXFxcIlBBVENIXFxcIiwgXFxcIkRFTEVURVxcXCIsIFxcXCJIRUFEXFxcIiwgXFxcIk9QVElPTlNcXFwiLCBcXFwiQU5ZXFxcIn1cXG5cXG5fcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpIGlmIHtcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BcGlJZFxcXCIpXFxuXFx0YXBpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXBpXFxcIilcXG5cXHRyZXNvbHZlKGFwaSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxufVxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHJrID09IFxcXCIkZGVmYXVsdFxcXCJcXG5cXG5fcGZfYWd2MnJrX29rKHJrKSBpZiB7XFxuXFx0cGFydHMgOj0gc3BsaXQocmssIFxcXCIgXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gMlxcblxcdHBhcnRzWzBdIGluIF9wZl9hZ3YycmtfbWV0aG9kc1xcblxcdHN0YXJ0c3dpdGgocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUta2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUm91dGVLZXkgJyVzJyBpcyBtYWxmb3JtZWQgZm9yIGFuIEhUVFAgQVBJOyB0aGUgcm91dGUgY3JlYXRlIGZhaWxzIHdpdGggJ1RoZSBwcm92aWRlZCByb3V0ZSBrZXkgaXMgbm90IGZvcm1hdHRlZCBwcm9wZXJseSBmb3IgSFRUUCBwcm90b2NvbC4gRm9ybWF0IHNob3VsZCBiZSBcXFxcXFxcIltIVFRQIE1FVEhPRF0gL1tSRVNPVVJDRSBQQVRIXVxcXFxcXFwiIG9yIFxcXFxcXFwiJGRlZmF1bHRcXFxcXFxcIidcXFwiLCBbcmtdKSxcXG5cXHRcXFwiVXNlIFxcXFxcXFwiTUVUSE9EIC9wYXRoXFxcXFxcXCIgd2l0aCBNRVRIT0Qgb25lIG9mIEdFVCBQT1NUIFBVVCBQQVRDSCBERUxFVEUgSEVBRCBPUFRJT05TIEFOWSwgb3IgJGRlZmF1bHRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1yb3V0ZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVxcXCIpXFxuXFx0X3BmX2FndjJya19odHRwX2FwaShuYW1lKVxcblxcdHJrIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVLZXlcXFwiKVxcblxcdGlzX3N0cmluZyhyaylcXG5cXHRub3QgX3BmX2FndjJya19vayhyaylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcm91dGUtc2VsZWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFAgQVBJcyBhY2NlcHQgb25seSB0aGUgbWV0aG9kLXBhdGggcm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggc3BlbGxpbmdzIGRlcGxveS12ZXJpZmllZCBhcyBhY2NlcHRlZDogdGhlIGRvY3VtZW50ZWRcXG4jIFxcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIgYW5kIHRoZSBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIlxcbiMgZm9ybSB0aGUgc2VydmljZSBlcnJvciBpdHNlbGYgcHJpbnRzIChiZW5jaCB2MDJiKS5cXG5fcGZfYWd2Mmhyc19hbGxvd2VkIDo9IHtcXFwiJHJlcXVlc3QubWV0aG9kICRyZXF1ZXN0LnBhdGhcXFwiLCBcXFwiJHtyZXF1ZXN0Lm1ldGhvZH0gJHtyZXF1ZXN0LnBhdGh9XFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSFRUUCBBUEkgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uICclcycgaXMgbm90IHN1cHBvcnRlZDsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCAnUm91dGUgc2VsZWN0aW9uIGV4cHJlc3Npb24gaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gXFxcXFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFxcXFxcIidcXFwiLCBbcnNlXSksXFxuXFx0XFxcIlVzZSAkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aCwgb3Igb21pdCB0aGUgcHJvcGVydHkgKEhUVFAgQVBJcyBkZWZhdWx0IHRvIGl0KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIkhUVFBcXFwiXFxuXFx0cnNlIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocnNlKVxcblxcdG5vdCByc2UgaW4gX3BmX2FndjJocnNfYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkpXVCBhdXRob3JpemVycyBuZWVkIEp3dENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEpXVCBhdXRob3JpemVyIGlzIG5vdGhpbmcgYnV0IGl0cyBpc3N1ZXIvYXVkaWVuY2UgY29uZmlnLCBzbyB0aGVcXG4jIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJKd3RDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItand0LWF1dGhvcml6ZXItY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Kd3RDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSldUIGF1dGhvcml6ZXIgaGFzIG5vIEp3dENvbmZpZ3VyYXRpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSnd0Q29uZmlndXJhdGlvbiBtdXN0IG5vdCBiZSBudWxsIGZvciBKV1QgQXV0aG9yaXplclxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEp3dENvbmZpZ3VyYXRpb24gd2l0aCBJc3N1ZXIgYW5kIEF1ZGllbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkpXVFxcXCJcXG5cXHRfcGZfYWd2MmphY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1yZXF1ZXN0LWF1dGhvcml6ZXItcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJFUVVFU1QgYXV0aG9yaXplcnMgb24gSFRUUCBBUElzIG5lZWQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVxdWlyZWQgb24gSFRUUCBBUElzIG9ubHkgLSBXZWJTb2NrZXQgUkVRVUVTVCBhdXRob3JpemVycyBtdXN0IE5PVCBzZXRcXG4jIGl0LCBzbyB0aGUgcnVsZSBmaXJlcyBzb2xlbHkgd2hlbiB0aGUgQXBpIHNpYmxpbmcgaXMgcHJvdmFibHkgSFRUUC5cXG4jIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJyYXBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIlJFUVVFU1QgYXV0aG9yaXplciBvbiBhbiBIVFRQIEFQSSBoYXMgbm8gQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXJQYXlsb2FkRm9ybWF0VmVyc2lvbiBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgUkVRVUVTVCBhdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIHRvIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiUkVRVUVTVFxcXCJcXG5cXHRfcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKVxcblxcdF9wZl9hZ3YycmFwX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2ViU29ja2V0IEFQSXMgbmVlZCBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdlYlNvY2tldCBBUElzIHJvdXRlIGJ5IGV2YWx1YXRpbmcgdGhpcyBleHByZXNzaW9uIGFnYWluc3QgZWFjaCBtZXNzYWdlLFxcbiMgc28gdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi13ZWJzb2NrZXQtcm91dGUtc2VsZWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiLFxcblxcdFxcXCJXZWJTb2NrZXQgQVBJIGhhcyBubyBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb247IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbiwgZS5nLiAkcmVxdWVzdC5ib2R5LmFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xUeXBlXFxcIikgPT0gXFxcIldFQlNPQ0tFVFxcXCJcXG5cXHRfcGZfYWd2Mndyc19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvb2xkb3duIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ29vbGRvd24gaXMgYSBzdHJpbmcgaW4gdGhlIHNjaGVtYTsgb25seSB0aGUgc2VydmljZSBrbm93cyBpdCBpcyBhXFxuIyBub24tbmVnYXRpdmUgaW50ZWdlci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1jb29sZG93bi1ub24tbmVnYXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvb2xkb3duXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb29sZG93biAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMFxcXFxcXFwiXFxcIiwgW2NdKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiKSlcXG5cXHRjIDwgMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVzaXJlZENhcGFjaXR5IG11c3Qgc2l0IGJldHdlZW4gTWluU2l6ZSBhbmQgTWF4U2l6ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNpemVzIGFyZSBzdHJpbmctdHlwZWQgaW4gdGhlIHNjaGVtYTsgdGhlIGJldHdlZW4tcmVsYXRpb25zaGlwIGlzXFxuIyBhIHRocmVlLXdheSBjcm9zcy1wcm9wZXJ0eSBjaGVjay4gVGhlIG1pbj5tYXggcGFpciBpdHNlbGYgaXMgZW5naW5lXFxuIyB0ZXJyaXRvcnkgKEUzNzA2KSBhbmQgbm90IHJlcGVhdGVkIGhlcmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctZGVzaXJlZC1jYXBhY2l0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZXNpcmVkQ2FwYWNpdHkgJXYgaXMgb3V0c2lkZSBbJXYsICV2XTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVzaXJlZCBjYXBhY2l0eToldiBtdXN0IGJlIGJldHdlZW4gdGhlIHNwZWNpZmllZCBtaW4gc2l6ZToldiBhbmQgbWF4IHNpemU6JXZcXFxcXFxcIlxcXCIsIFtkYywgbW4sIG14LCBkYywgbW4sIG14XSksXFxuXFx0XFxcIktlZXAgTWluU2l6ZSA8PSBEZXNpcmVkQ2FwYWNpdHkgPD0gTWF4U2l6ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGRjIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2lyZWRDYXBhY2l0eVxcXCIpKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1pblNpemVcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhTaXplXFxcIikpXFxuXFx0bW4gPD0gbXhcXG5cXHRfcGZfYXNnZGNyX291dChkYywgbW4sIG14KVxcbn1cXG5cXG5fcGZfYXNnZGNyX291dChkYywgbW4sIF8pIGlmIGRjIDwgbW5cXG5cXG5fcGZfYXNnZGNyX291dChkYywgXywgbXgpIGlmIGRjID4gbXhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCBjYW5ub3QgYmUgbmVnYXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgaXQgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBubyBmbG9vcjsgemVybyBpcyB0aGVcXG4jIHNlcnZpY2UgZGVmYXVsdCwgc28gb25seSBuZWdhdGl2ZXMgYXJlIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctaGVhbHRoLWNoZWNrLWdyYWNlLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZCAldiBpcyBuZWdhdGl2ZTsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiR3JhY2UgcGVyaW9kIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxcXFxcXFwiXFxcIiwgW2ddKSxcXG5cXHRcXFwiVXNlIHplcm8gb3IgYSBwb3NpdGl2ZSBudW1iZXIgb2Ygc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdGcgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tHcmFjZVBlcmlvZFxcXCIpKVxcblxcdGcgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLW9uZGVtYW5kLXBlcmNlbnRhZ2UtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgdG9wcyBvdXQgYXQgMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHBlcmNlbnRhZ2Ugc3BsaXQgY2Fubm90IGV4Y2VlZCAxMDA7IHRoZSBzY2hlbWEgaGFzIG5vIG1heGltdW0uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1peGVkSW5zdGFuY2VzUG9saWN5Lkluc3RhbmNlc0Rpc3RyaWJ1dGlvbi5PbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHkgJXYgaXMgb3ZlciAxMDA7IHRoZSBncm91cCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGFnZSBiZXR3ZWVuIDAgYW5kIDEwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC1pbnN0YW5jZXNkaXN0cmlidXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIikpXFxuXFx0cCA+IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy10YXJnZXQtdmFsdWUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgdHJhY2tpbmcgbmVlZHMgYSBwb3NpdGl2ZSBUYXJnZXRWYWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZmxvb3IgaXMgZWZmZWN0aXZlbHkgXFxcInBvc2l0aXZlXFxcIiAoOC41ZS0xMik7IHplcm8gYW5kXFxuIyBuZWdhdGl2ZXMgYXJlIHJlamVjdGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFyZ2V0VHJhY2tpbmdDb25maWd1cmF0aW9uLlRhcmdldFZhbHVlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYXJnZXRWYWx1ZSAldiBpcyBub3QgcG9zaXRpdmU7IHRoZSBwb2xpY3kgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJUYXJnZXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDguNTE1OTJFLTEyIGFuZCAxLjE3NDI3MUUxN1xcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIGEgcG9zaXRpdmUgdGFyZ2V0IHZhbHVlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctc2NhbGluZ3BvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6U2NhbGluZ1BvbGljeVxcXCIpXFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiKSlcXG5cXHR2IDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGdyb3VwIG5lZWRzIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQbGFjZW1lbnQgbXVzdCBjb21lIGZyb20gc29tZXdoZXJlLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXNnenNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctem9uZS1vci1zdWJuZXQtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZQQ1pvbmVJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiTmVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgbm9yIFZQQ1pvbmVJZGVudGlmaWVyIGlzIHNldDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiWW91IG11c3Qgc3BlY2lmeSAxIG9mIGVpdGhlciBBdmFpbGFiaWxpdHlab25lcywgQXZhaWxhYmlsaXR5Wm9uZUlkcywgb3IgU3VibmV0c1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZQQ1pvbmVJZGVudGlmaWVyIHdpdGggdGhlIHRhcmdldCBzdWJuZXRzIChvciBBdmFpbGFiaWxpdHlab25lcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiQXZhaWxhYmlsaXR5Wm9uZXNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lSWRzXFxcIilcXG5cXHRfcGZfYXNnenNyX2Fic2VudChuYW1lLCBcXFwiVlBDWm9uZUlkZW50aWZpZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWNlLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb21wdXRlIGVudmlyb25tZW50IG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWNlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVFbnZpcm9ubWVudE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXB1dGVFbnZpcm9ubWVudE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDEyOCBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZUVudmlyb25tZW50TmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDEyOH0kYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1jZS12Y3B1cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1heHZDcHVzIG11c3QgYmUgYXQgbGVhc3QgTWludkNwdXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtY2UtdmNwdXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuTWF4dkNwdXNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heHZDcHVzICV2IGlzIGJlbG93IE1pbnZDcHVzICV2IChcXFxcXFxcIm1heHZDcHVzIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWludkNwdXMuXFxcXFxcXCIpXFxcIiwgW214LCBtbl0pLFxcblxcdFxcXCJLZWVwIE1pbnZDcHVzIDw9IE1heHZDcHVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRtbiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLk1pbnZDcHVzXFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5NYXh2Q3B1c1xcXCIpKVxcblxcdG14IDwgbW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgY29tcHV0ZSBlbnZpcm9ubWVudHMgY2Fubm90IHRha2UgQWxsb2NhdGlvblN0cmF0ZWd5IG9yIEluc3RhbmNlVHlwZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZjZl9jcihuYW1lKSA6PSBjciBpZiB7XFxuXFx0Y3IgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLlR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhjcilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLiVzXFxcIiwgW2ZpZWxkXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgbm90IGFwcGxpY2FibGUgZm9yICVzIGNvbXB1dGUgZW52aXJvbm1lbnRzOyBCYXRjaCByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtmaWVsZCwgY3JdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBFQzItb25seSBmaWVsZCwgb3Igc3dpdGNoIENvbXB1dGVSZXNvdXJjZXMuVHlwZSB0byBFQzIvU1BPVFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDb21wdXRlRW52aXJvbm1lbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFxcXCIpXFxuXFx0Y3IgOj0gX3BmX2JhdGNoZmNmX2NyKG5hbWUpXFxuXFx0Y3IgaW4ge1xcXCJGQVJHQVRFXFxcIiwgXFxcIkZBUkdBVEVfU1BPVFxcXCJ9XFxuXFx0Y3JlcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzXFxuXFx0aXNfb2JqZWN0KGNyZXMpXFxuXFx0c29tZSBmaWVsZCBpbiB7XFxcIkFsbG9jYXRpb25TdHJhdGVneVxcXCIsIFxcXCJJbnN0YW5jZVR5cGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGNyZXMsIGZpZWxkLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBqb2IgZGVmaW5pdGlvbnMgbXVzdCB1c2UgYSBzdXBwb3J0ZWQgdkNQVS9tZW1vcnkgY29tYmluYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2hmY21fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9mYXJnYXRlLmh0bWxcXFwiXFxuXFxuIyBNZW1vcnkgc3BlYyBwZXIgdkNQVSB0aWVyOiAwLjI1IGlzIGFuIGV4cGxpY2l0IHNldDsgdGhlIHJlc3QgYXJlXFxuIyBbbWluLCBtYXgsIHN0ZXBdIGFyaXRobWV0aWMgcmFuZ2VzLiBLZXlzIGFyZSBudW1iZXJzIHNvIFxcXCIxLjBcXFwiIGFuZFxcbiMgXFxcIjFcXFwiIGJvdGggbGFuZCBvbiB0aGUgc2FtZSB0aWVyIGFmdGVyIHRvX251bWJlci5cXG5fcGZfYmF0Y2hmY21fc2V0IDo9IHs1MTIsIDEwMjQsIDIwNDh9XFxuXFxuX3BmX2JhdGNoZmNtX3JhbmdlIDo9IHswLjU6IFsxMDI0LCA0MDk2LCAxMDI0XSwgMTogWzIwNDgsIDgxOTIsIDEwMjRdLCAyOiBbNDA5NiwgMTYzODQsIDEwMjRdLCA0OiBbODE5MiwgMzA3MjAsIDEwMjRdLCA4OiBbMTYzODQsIDYxNDQwLCA0MDk2XSwgMTY6IFszMjc2OCwgMTIyODgwLCA4MTkyXX1cXG5cXG5fcGZfYmF0Y2hmY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSBwYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhdGZvcm1DYXBhYmlsaXRpZXNcXFwiKVxcblxcdHBjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fcmVxKG5hbWUsIHJ0eXBlKSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0b2JqZWN0LmdldChlbnRyeSwgXFxcIlR5cGVcXFwiLCBcXFwiXFxcIikgPT0gcnR5cGVcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHYgOj0gdG9fbnVtYmVyKHJhdylcXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0diA9PSAwLjI1XFxuXFx0bm90IG0gaW4gX3BmX2JhdGNoZmNtX3NldFxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHRzcGVjIDo9IF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcdG0gPCBzcGVjWzBdXFxufVxcblxcbl9wZl9iYXRjaGZjbV9iYWQodiwgbSkgaWYge1xcblxcdHNwZWMgOj0gX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFx0bSA+IHNwZWNbMV1cXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0c3BlYyA6PSBfcGZfYmF0Y2hmY21fcmFuZ2Vbdl1cXG5cXHQobSAtIHNwZWNbMF0pICUgc3BlY1syXSAhPSAwXFxufVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIHYgPT0gMC4yNVxcblxcbl9wZl9iYXRjaGZjbV90aWVyKHYpIGlmIF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzLlJlc291cmNlUmVxdWlyZW1lbnRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJWQ1BVICV2IGlzIG5vdCBhIEZhcmdhdGUgdGllciAoMC4yNSwgMC41LCAxLCAyLCA0LCA4LCAxNik7IEJhdGNoIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIC4uLiBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2Ugb25lIG9mIHRoZSBGYXJnYXRlIHZDUFUgdGllcnNcXFwiLFxcblxcdF9wZl9iYXRjaGZjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdF9wZl9iYXRjaGZjbV9mYXJnYXRlKG5hbWUpXFxuXFx0diA6PSBfcGZfYmF0Y2hmY21fcmVxKG5hbWUsIFxcXCJWQ1BVXFxcIilcXG5cXHRub3QgX3BmX2JhdGNoZmNtX3RpZXIodilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiLFxcblxcdHNwcmludGYoXFxcIk1FTU9SWSAldiBNaUIgaXMgbm90IHZhbGlkIGZvciBWQ1BVICV2OyBCYXRjaCByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlc291cmNlIHJlcXVpcmVtZW50cyAoJXYgdkNQVSwgJXYgTWlCKSBub3QgdmFsaWQuXFxcXFxcXCJcXFwiLCBbbSwgdiwgdiwgbV0pLFxcblxcdFxcXCJQaWNrIGEgbWVtb3J5IHZhbHVlIGZyb20gdGhlIHRpZXIncyBzdXBwb3J0ZWQgbGlzdFxcXCIsXFxuXFx0X3BmX2JhdGNoZmNtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmNtX2ZhcmdhdGUobmFtZSlcXG5cXHR2IDo9IF9wZl9iYXRjaGZjbV9yZXEobmFtZSwgXFxcIlZDUFVcXFwiKVxcblxcdG0gOj0gX3BmX2JhdGNoZmNtX3JlcShuYW1lLCBcXFwiTUVNT1JZXFxcIilcXG5cXHRfcGZfYmF0Y2hmY21fYmFkKHYsIG0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZhcmdhdGUgam9iIGRlZmluaXRpb25zIHJlcXVpcmUgRXhlY3V0aW9uUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZlcl9mYXJnYXRlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIpXFxuXFx0cGMudmFsdWUgPT0gXFxcIkZBUkdBVEVcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1leGVjdXRpb24tcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiUGxhdGZvcm1DYXBhYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgRXhlY3V0aW9uUm9sZUFybiBpcyBtaXNzaW5nIChcXFxcXFxcImV4ZWN1dGlvblJvbGVBcm4gaXMgcmVxdWlyZWQgZm9yIEZhcmdhdGUgam9icy5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJTZXQgQ29udGFpbmVyUHJvcGVydGllcy5FeGVjdXRpb25Sb2xlQXJuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVySm9iRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmVyX2ZhcmdhdGUobmFtZSlcXG5cXHRjcCA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KGNwKVxcblxcdG9iamVjdC5nZXQoY3AsIFxcXCJFeGVjdXRpb25Sb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEZhcmdhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtbXVsdGlub2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIsXFxuXFx0XFxcIlR5cGUgbXVsdGlub2RlIGNhbm5vdCBydW4gb24gRmFyZ2F0ZSAoXFxcXFxcXCJGYXJnYXRlIGRvZXMgbm90IHN1cHBvcnQgTU5QIGpvYnNcXFxcXFxcIilcXFwiLFxcblxcdFxcXCJVc2UgRUMyIHBsYXRmb3JtIGNhcGFiaWxpdGllcyBmb3IgbXVsdGktbm9kZSBwYXJhbGxlbCBqb2JzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC91c2VyZ3VpZGUvbXVsdGktbm9kZS1wYXJhbGxlbC1qb2JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwibXVsdGlub2RlXFxcIlxcblxcdHNvbWUgcGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIilcXG5cXHRwYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1qZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSm9iIGRlZmluaXRpb24gbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWpkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkpvYkRlZmluaXRpb25OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJKb2JEZWZpbml0aW9uTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSm9iRGVmaW5pdGlvbk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwxMjh9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtbWFuYWdlZC1jb21wdXRlLXJlc291cmNlc1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1BTkFHRUQgY29tcHV0ZSBlbnZpcm9ubWVudHMgcmVxdWlyZSBDb21wdXRlUmVzb3VyY2VzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLW1hbmFnZWQtY29tcHV0ZS1yZXNvdXJjZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXNcXFwiLFxcblxcdFxcXCJUeXBlIE1BTkFHRUQgcmVxdWlyZXMgQ29tcHV0ZVJlc291cmNlcyAoXFxcXFxcXCJjb21wdXRlUmVzb3VyY2VzIG11c3QgYmUgcHJvdmlkZWQgZm9yIGEgTUFOQUdFRCBjb21wdXRlIGVudmlyb25tZW50XFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWRkIGEgQ29tcHV0ZVJlc291cmNlcyBibG9jaywgb3IgdXNlIFR5cGUgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTUFOQUdFRFxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZVJlc291cmNlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1xdWV1ZS1vcmRlci1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIG1heSBub3QgYmUgZW1wdHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGFjY2VwdHMgYW4gZW1wdHkgbGlzdDsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdC4gVHJ1ZVxcbiMgYWJzZW5jZSBpcyBzY2hlbWEgdGVycml0b3J5LCBzbyBvbmx5IHRoZSBwcmVzZW50LWFuZC1lbXB0eSBzaGFwZVxcbiMgaXMgY2xhaW1lZCAoaW5wdXQucmVzb3VyY2VzIHNlZXMgdGhlIHJhdyBsaXN0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXF1ZXVlLW9yZGVyLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db21wdXRlRW52aXJvbm1lbnRPcmRlclxcXCIsXFxuXFx0XFxcIkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIGVtcHR5IChcXFxcXFxcImNvbXB1dGVFbnZpcm9ubWVudE9yZGVyIGlzIHJlcXVpcmVkLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkxpc3QgYXQgbGVhc3Qgb25lIGNvbXB1dGUgZW52aXJvbm1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlSm9iUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYlF1ZXVlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvcmRlciA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KG9yZGVyKVxcblxcdGNvdW50KG9yZGVyKSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtcmV0cnktYXR0ZW1wdHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXRyeVN0cmF0ZWd5LkF0dGVtcHRzIG1heSBub3QgZXhjZWVkIDEwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1yZXRyeS1hdHRlbXB0c1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmV0cnlTdHJhdGVneS5BdHRlbXB0cyAldiBpcyBhYm92ZSB0aGUgbWF4aW11bSAoXFxcXFxcXCJSZXRyeUF0dGVtcHRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMC5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAxMCBhdHRlbXB0c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmV0cnlTdHJhdGVneS5BdHRlbXB0c1xcXCIpKVxcblxcdG4gPiAxMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXRpbWVvdXQtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kcyBtdXN0IGJlIGF0IGxlYXN0IDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC10aW1lb3V0LW1pbmltdW1cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGltZW91dCAldiBzZWNvbmRzIGlzIGJlbG93IHRoZSBtaW5pbXVtIChcXFxcXFxcIkF0dGVtcHREdXJhdGlvblNlY29uZHMgaW4gVGltZW91dCBtdXN0IGJlIGF0IGxlYXN0IDYwIHNlY29uZHMuXFxcXFxcXCIpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IGxlYXN0IDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXQuQXR0ZW1wdER1cmF0aW9uU2Vjb25kc1xcXCIpKVxcblxcdG4gPCA2MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXVubWFuYWdlZC1mYXJnYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVU5NQU5BR0VEIGNvbXB1dGUgZW52aXJvbm1lbnRzIGNhbm5vdCBiZSBGYXJnYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfYmF0Y2h1bWZfY3IobmFtZSkgOj0gY3IgaWYge1xcblxcdGNyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5UeXBlXFxcIilcXG5cXHRpc19zdHJpbmcoY3IpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtdW5tYW5hZ2VkLWZhcmdhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHlwZSBVTk1BTkFHRUQgY2Fubm90IHBhaXIgd2l0aCBDb21wdXRlUmVzb3VyY2VzLlR5cGUgJXMgKFxcXFxcXFwiQ2Fubm90IGNyZWF0ZSBhbiBVTk1BTkFHRUQgRmFyZ2F0ZSBDb21wdXRlIEVudmlyb25tZW50LlxcXFxcXFwiKVxcXCIsIFtjcl0pLFxcblxcdFxcXCJVc2UgTUFOQUdFRCBmb3IgRmFyZ2F0ZSwgb3IgRUMyIHJlc291cmNlcyBmb3IgVU5NQU5BR0VEXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiVU5NQU5BR0VEXFxcIlxcblxcdGNyIDo9IF9wZl9iYXRjaHVtZl9jcihuYW1lKVxcblxcdGNyIGluIHtcXFwiRkFSR0FURVxcXCIsIFxcXCJGQVJHQVRFX1NQT1RcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheXMgd2l0aCBBdXRob3JpemVyVHlwZSBDVVNUT01fSldUIHJlcXVpcmUgQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIikpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBdXRob3JpemVyVHlwZSBpcyBDVVNUT01fSldUIGJ1dCBBdXRob3JpemVyQ29uZmlndXJhdGlvbiBpcyBtaXNzaW5nOyB0aGUgQ3JlYXRlR2F0ZXdheSBBUEkgcmVxdWlyZXMgaXQgYW5kIHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggYSBWYWxpZGF0aW9uRXhjZXB0aW9uXFxcIixcXG5cXHRcXFwiQWRkIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uLkN1c3RvbUpXVEF1dGhvcml6ZXIgKGRpc2NvdmVyeVVybCBhbmQgYWxsb3dlZEF1ZGllbmNlL2FsbG93ZWRDbGllbnRzKSwgb3Igc3dpdGNoIEF1dGhvcml6ZXJUeXBlIHRvIEFXU19JQU1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVHYXRld2F5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiQ1VTVE9NX0pXVFxcXCJcXG5cXHRub3QgX3BmX2d3and0X2hhc19jb25maWcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmVkcm9jay1hZ2VudGNvcmVcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWdlbnRDb3JlIFJ1bnRpbWUgbmFtZXMgbXVzdCBtYXRjaCBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSAobm8gaHlwaGVucylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIOOCueOCreODvOODnuOBryBBZ2VudFJ1bnRpbWVOYW1lIOOBruODkeOCv+ODvOODs+OCkuaMgeOBn+OBquOBhO+8iOOCqOODs+OCuOODs+e0oOmAmuOCiuOAgVxcbiMgMjAyNi0wOS0wMSDjgasgMS43LjAtYmV0YSDjgafnorroqo3vvInjgYzjgIFDcmVhdGVBZ2VudFJ1bnRpbWUgQVBJIOOBr1xcbiMgW2EtekEtWl1bYS16QS1aMC05X117MCw0N30g44KS5by35Yi244GZ44KL44CC44OP44Kk44OV44Oz5YWl44KK44GuIENESyDpoqjlkb3lkI3jgYzlrprnlarjga7mrbvlm6DjgIJcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFnZW50UnVudGltZU5hbWUgJyVzJyBpcyBpbnZhbGlkOiBpdCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIgYW5kIGNvbnRhaW4gb25seSBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcyAobWF4IDQ4IGNoYXJhY3RlcnMsIGh5cGhlbnMgYXJlIG5vdCBhbGxvd2VkKTsgQ3JlYXRlQWdlbnRSdW50aW1lIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGFuIHVuZGVyc2NvcmUtc2VwYXJhdGVkIG5hbWUgc3VjaCBhcyAnbXlfYWdlbnRfcnVudGltZSdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmVkcm9jay1hZ2VudGNvcmUtY29udHJvbC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBZ2VudFJ1bnRpbWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFnZW50UnVudGltZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNsb3VkRnJvbnQgdmlld2VyIGNlcnRpZmljYXRlcyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hY20tY2VydC1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgQUNNIGNlcnRpZmljYXRlIHRvIGJlIGluIHVzLWVhc3QtMSwgYnV0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRcXFwiSXNzdWUgb3IgaW1wb3J0IHRoZSBjZXJ0aWZpY2F0ZSBpbiB1cy1lYXN0LTEgKGUuZy4gYSBkZWRpY2F0ZWQgdXMtZWFzdC0xIHN0YWNrKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2NuYW1lcy1hbmQtaHR0cHMtcmVxdWlyZW1lbnRzLmh0bWwjaHR0cHMtcmVxdWlyZW1lbnRzLWNlcnRpZmljYXRlLWlzc3VlclxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzJdID09IFxcXCJhY21cXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9hbGlhc2NlcnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLXZpZXdlcmNlcnRpZmljYXRlLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9maXggOj0gXFxcIkF0dGFjaCBhbiBBQ00gY2VydGlmaWNhdGUgKEFjbUNlcnRpZmljYXRlQXJuLCB1cy1lYXN0LTEpIG9yIGFuIElBTSBjZXJ0aWZpY2F0ZSwgdG9nZXRoZXIgd2l0aCBTc2xTdXBwb3J0TWV0aG9kIGFuZCBNaW5pbXVtUHJvdG9jb2xWZXJzaW9uXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgOj0gY291bnQoWzEgfFxcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkFsaWFzZXNcXFwiKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0XFxcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcXFwiLFxcblxcdF9wZl9jZl9hbGlhc2NlcnRfZml4LCBfcGZfY2ZfYWxpYXNjZXJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdF9wZl9jZl9hbGlhc2NlcnRfY291bnQobmFtZSkgPiAwXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQ2xvdWRGcm9udERlZmF1bHRDZXJ0aWZpY2F0ZVxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBwb2xpY3kgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkNhY2hlUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlLXBvbGljeS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZVBvbGljeUNvbmZpZy5OYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ2FjaGVQb2xpY3kuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DYWNoZVBvbGljeUNvbmZpZy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1hbGFybS1wZXJpb2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBQZXJpb2QgYXMgYSBiYXJlIGludGVnZXI7IHRoZSB2YWxpZCB2YWx1ZXMgYXJlXFxuIyBvbmx5IGluIHRoZSBzZXJ2aWNlIChcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcIikuXFxuIyBUaGUgc2FtZSBjb25zdHJhaW50IGFwcGxpZXMgaW5zaWRlIE1ldHJpY1N0YXQgKGJlbmNoIHcxMSwgMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQZXJpb2QgJXYgaXMgaW52YWxpZDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIDEwLCAyMCwgMzAsIG9yIGEgbXVsdGlwbGUgb2YgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGVyaW9kXFxcIikpXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzIChNZXRyaWNTdGF0LlBlcmlvZCBvZiBxdWVyeSAlZClcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIk1ldHJpY1N0YXQgUGVyaW9kICV2IGlzIGludmFsaWQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFxcXFxcIlxcXCIsIFtwXSksXFxuXFx0XFxcIlVzZSAxMCwgMjAsIDMwLCBvciBhIG11bHRpcGxlIG9mIDYwIHNlY29uZHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGkgOj0gaXRlbS5pbmRleFxcblxcdHEgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChxKVxcblxcdHAgOj0gb2JqZWN0LmdldChxLCBbXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiUGVyaW9kXFxcIl0sIG51bGwpXFxuXFx0aXNfbnVtYmVyKHApXFxuXFx0bm90IHAgaW4gezEwLCAyMCwgMzB9XFxuXFx0cCAlIDYwICE9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhbmRhcmQgb3BlcmF0b3JzIG5lZWQgVGhyZXNob2xkLCByYW5nZSBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGRNZXRyaWNJZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jd2F0aF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCJcXG5cXG4jIFRoZSB0d28gcmFuZ2Ugb3BlcmF0b3JzIGFuY2hvciB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBiYW5kIHZpYVxcbiMgVGhyZXNob2xkTWV0cmljSWQ7IGV2ZXJ5IG90aGVyIG9wZXJhdG9yIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZC4gQWJzZW5jZVxcbiMgaXMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2N3YXRoX3JhbmdlX29wcyA6PSB7XFxcIkxlc3NUaGFuTG93ZXJPckdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwiLCBcXFwiTGVzc1RoYW5Mb3dlclRocmVzaG9sZFxcXCIsIFxcXCJHcmVhdGVyVGhhblVwcGVyVGhyZXNob2xkXFxcIn1cXG5cXG5fcGZfY3dhdGhfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIG5lZWRzIGEgc3RhdGljIFRocmVzaG9sZCBidXQgbm9uZSBpcyBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJQdXRNZXRyaWNBbGFybSByZXF1ZXN0IHNob3VsZCBoYXZlIHZhbGlkIFRocmVzaG9sZCBwYXJhbWV0ZXJcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJTZXQgVGhyZXNob2xkLCBvciBzd2l0Y2ggdG8gYW4gYW5vbWFseS1kZXRlY3Rpb24gb3BlcmF0b3Igd2l0aCBUaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3Qgb3AgaW4gX3BmX2N3YXRoX3JhbmdlX29wc1xcblxcdF9wZl9jd2F0aF9hYnNlbnQobmFtZSwgXFxcIlRocmVzaG9sZFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDb21wYXJpc29uT3BlcmF0b3IgJyVzJyBpcyBhIHJhbmdlIG9wZXJhdG9yIGJ1dCBUaHJlc2hvbGRNZXRyaWNJZCBpcyBub3Qgc2V0OyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiQ29tcGFyaXNvbk9wZXJhdG9ycyBmb3IgcmFuZ2VzIHJlcXVpcmUgVGhyZXNob2xkTWV0cmljSWQgdG8gYmUgc2V0XFxcXFxcXCJcXFwiLCBbb3BdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgdGhlIEFOT01BTFlfREVURUNUSU9OX0JBTkQgcXVlcnkgaWQsIG9yIHVzZSBhIHN0YXRpYy10aHJlc2hvbGQgb3BlcmF0b3JcXFwiLFxcblxcdF9wZl9jd2F0aF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG9wIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29tcGFyaXNvbk9wZXJhdG9yXFxcIilcXG5cXHRvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBBbGFybVJ1bGUgbXVzdCBzdGFydCB3aXRoIGEgdmFsaWQgZXhwcmVzc2lvbiB0b2tlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpDb21wb3NpdGVBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgbmFtZXMgdGhlIG9ubHkgdG9rZW5zIGEgcnVsZSBleHByZXNzaW9uIG1heSBzdGFydCB3aXRoOyB0aGlzXFxuIyBjaGVja3MganVzdCB0aGF0IGZpcnN0IHRva2VuIOKAlCBhIGZ1bGwgZ3JhbW1hciBpcyBvdXQgb2Ygc2NvcGUuIEZ1bmN0aW9uXFxuIyB0b2tlbnMgdGFrZSBhbiBhcmd1bWVudCBsaXN0LCBrZXl3b3JkcyBzdGFuZCBhbG9uZS5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiKFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVCBcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJOT1QoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQVRfTEVBU1RcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJUUlVFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiB0ID09IFxcXCJGQUxTRVxcXCJcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiQUxBUk0oXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiT0soXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiSU5TVUZGSUNJRU5UX0RBVEEoXFxcIilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtY29tcG9zaXRlLWFsYXJtLXJ1bGUtc3ludGF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsYXJtUnVsZSAnJXMnIGRvZXMgbm90IHN0YXJ0IHdpdGggYSB2YWxpZCB0b2tlbjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiRXJyb3IgaW4gQWxhcm1SdWxlIFtVbnN1cHBvcnRlZCB0b2tlbiAuLi4gbXVzdCBiZTogJygnLCAnTk9UJywgQVRfTEVBU1QsIFRSVUUgb3IgRkFMU0UsIEFMQVJNLCBPSywgb3IgSU5TVUZGSUNJRU5UX0RBVEFdXFxcXFxcXCJcXFwiLCBbZXhwcl0pLFxcblxcdFxcXCJTdGFydCB0aGUgcnVsZSB3aXRoIEFMQVJNKC4uLiksIE9LKC4uLiksIElOU1VGRklDSUVOVF9EQVRBKC4uLiksIE5PVCwgQVRfTEVBU1QsIFRSVUUsIEZBTFNFLCBvciBhIHBhcmVudGhlc2l6ZWQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9DcmVhdGVfQ29tcG9zaXRlX0FsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXFxcIilcXG5cXHRleHByIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxhcm1SdWxlXFxcIilcXG5cXHRpc19zdHJpbmcoZXhwcilcXG5cXHR0IDo9IHRyaW1fc3BhY2UoZXhwcilcXG5cXHR0ICE9IFxcXCJcXFwiXFxuXFx0bm90IF9wZl9jd2Nhc192YWxpZF9zdGFydCh0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLWJvZHktanNvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkQm9keSBtdXN0IGJlIHZhbGlkIEpTT05cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1ib2R5LWpzb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGRvZXMgbm90IHBhcnNlIGFzIEpTT047IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGZpZWxkIERhc2hib2FyZEJvZHkgbXVzdCBiZSBhIHZhbGlkIEpTT04gb2JqZWN0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJGaXggdGhlIEpTT04gc3ludGF4IG9mIHRoZSBkYXNoYm9hcmQgYm9keVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0bm90IGpzb24uaXNfdmFsaWQoYm9keSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmQgbmFtZXMgYWxsb3cgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXh0cmEgcGFpbmZ1bCBhdCBkZXBsb3kgdGltZTogdGhlIGludmFsaWQgbmFtZSBhbHNvIGJyZWFrcyB0aGUgcm9sbGJhY2tcXG4jIERFTEVURSwgbGVhdmluZyB0aGUgc3RhY2sgaW4gUk9MTEJBQ0tfRkFJTEVEIChiZW5jaGVkKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRhc2hib2FyZE5hbWUgJyVzJyBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM7IFB1dERhc2hib2FyZCBhbGxvd3Mgb25seSBhbHBoYW51bWVyaWNzLCBkYXNoICgtKSBhbmQgdW5kZXJzY29yZSAoXyksIGFuZCB0aGUgZmFpbGVkIHN0YWNrIGNhbm5vdCBldmVuIHJvbGwgYmFjayBjbGVhbmx5XFxcIiwgW2RuXSksXFxuXFx0XFxcIlVzZSBvbmx5IGxldHRlcnMsIGRpZ2l0cywgZGFzaCBhbmQgdW5kZXJzY29yZSBpbiB0aGUgZGFzaGJvYXJkIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXREYXNoYm9hcmQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05Xy1dKyRgLCBkbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXQtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBkYXNoYm9hcmQgd2lkZ2V0IHJlcXVpcmVzIHR5cGUgYW5kIHByb3BlcnRpZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGtleSBwcmVzZW5jZSBpcyBjaGVja2VkOiB0aGUgc2VydmljZSBhY2NlcHRzIGFyYml0cmFyeSB0eXBlIHZhbHVlc1xcbiMgKGJlbmNoIGR3MDQsIHR5cGUgXFxcIm1ldHJpY2NcXFwiIGRlcGxveWVkIGNsZWFuKSwgc28gbm8gZW51bSB2YWxpZGF0aW9uLlxcbl9wZl9jd2R3Zl93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1maWVsZHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keSAod2lkZ2V0c1slZF0pXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJEYXNoYm9hcmQgd2lkZ2V0ICVkIGlzIG1pc3NpbmcgJyVzJzsgUHV0RGFzaGJvYXJkIGZhaWxzIHdpdGggXFxcXFxcXCJTaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnJXMnXFxcXFxcXCJcXFwiLCBbaSwga2V5LCBrZXldKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSB3aWRnZXQgYSB0eXBlIGFuZCBhIHByb3BlcnRpZXMgb2JqZWN0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9DbG91ZFdhdGNoLURhc2hib2FyZC1Cb2R5LVN0cnVjdHVyZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdHNvbWUgaSwgdyBpbiBfcGZfY3dkd2Zfd2lkZ2V0cyhuYW1lKVxcblxcdGlzX29iamVjdCh3KVxcblxcdHNvbWUga2V5IGluIHtcXFwidHlwZVxcXCIsIFxcXCJwcm9wZXJ0aWVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHcsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGFzaGJvYXJkIHdpZGdldCB4IHRvcHMgb3V0IGF0IDIzIGFuZCB3aWR0aCBhdCAyNFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIHR3byBiZW5jaGVkIG1heGltYSBhcmUgY2xhaW1lZCAoeCA8PSAyMywgd2lkdGggPD0gMjQpLlxcbl9wZl9jd2R3cF93aWRnZXRzKG5hbWUpIDo9IHdzIGlmIHtcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdHdzIDo9IG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHdzKVxcbn1cXG5cXG5fcGZfY3dkd3BfbWF4IDo9IHtcXFwieFxcXCI6IDIzLCBcXFwid2lkdGhcXFwiOiAyNH1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1wb3NpdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5ICh3aWRnZXRzWyVkXS4lcylcXFwiLCBbaSwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwiRGFzaGJvYXJkIHdpZGdldCAlZCBoYXMgJXM9JXYsIGFib3ZlIHRoZSBtYXhpbXVtICV2OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBiZSA8PSAldlxcXFxcXFwiXFxcIiwgW2ksIGtleSwgdiwgbSwgbV0pLFxcblxcdFxcXCJLZWVwIHggd2l0aGluIDAtMjMgYW5kIHdpZHRoIHdpdGhpbiAxLTI0ICgyNC1jb2x1bW4gZ3JpZClcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0c29tZSBpLCB3IGluIF9wZl9jd2R3cF93aWRnZXRzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KHcpXFxuXFx0c29tZSBrZXksIG0gaW4gX3BmX2N3ZHdwX21heFxcblxcdHYgOj0gb2JqZWN0LmdldCh3LCBrZXksIDApXFxuXFx0aXNfbnVtYmVyKHYpXFxuXFx0diA+IG1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhc2hib2FyZC13aWRnZXRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmRCb2R5IHJlcXVpcmVzIGEgd2lkZ2V0cyBhcnJheVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiLFxcblxcdFxcXCJEYXNoYm9hcmRCb2R5IGhhcyBubyAnd2lkZ2V0cycga2V5OyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICd3aWRnZXRzJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgd2lkZ2V0cyBhcnJheSB0byB0aGUgZGFzaGJvYXJkIGJvZHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0Ym9keSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHlcXFwiKVxcblxcdGlzX3N0cmluZyhib2R5KVxcblxcdGpzb24uaXNfdmFsaWQoYm9keSlcXG5cXHRvYmogOj0ganNvbi51bm1hcnNoYWwoYm9keSlcXG5cXHRpc19vYmplY3Qob2JqKVxcblxcdG9iamVjdC5nZXQob2JqLCBcXFwid2lkZ2V0c1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBub3QgZXhjZWVkIEV2YWx1YXRpb25QZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWRhdGFwb2ludHMtZXZhbHVhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiLFxcblxcdHNwcmludGYoXFxcIkRhdGFwb2ludHNUb0FsYXJtICgldikgZXhjZWVkcyBFdmFsdWF0aW9uUGVyaW9kcyAoJXYpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRGF0YXBvaW50c1RvQWxhcm0gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRXZhbHVhdGlvblBlcmlvZHNcXFxcXFxcIlxcXCIsIFtkLCBldl0pLFxcblxcdFxcXCJMb3dlciBEYXRhcG9pbnRzVG9BbGFybSB0byBhdCBtb3N0IEV2YWx1YXRpb25QZXJpb2RzLCBvciByYWlzZSBFdmFsdWF0aW9uUGVyaW9kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdGQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGF0YXBvaW50c1RvQWxhcm1cXFwiKSlcXG5cXHRldiA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmFsdWF0aW9uUGVyaW9kc1xcXCIpKVxcblxcdGQgPiBldlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZXh0ZW5kZWQtc3RhdGlzdGljXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHBlcmNlbnRpbGUgc3RhdGlzdGljIGNhbm5vdCBleGNlZWQgcDEwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGVyY2VudGlsZSBzdGF0aXN0aWNzIHJ1biBwMC4wIHRvIHAxMDAuIE9ubHkgdGhlIHBOIGZvcm0gaXMgY2hlY2tlZDsgb3RoZXJcXG4jIGV4dGVuZGVkIGZvcm1zICh0bSwgd20sIHRjLCB0cywgLi4uKSBoYXZlIHRoZWlyIG93biBncmFtbWFycyBhbmQgd2VyZSBub3RcXG4jIG1lYXN1cmVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFeHRlbmRlZFN0YXRpc3RpYyAnJXMnIGlzIGJleW9uZCBwMTAwOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHZhbHVlICVzIGZvciBwYXJhbWV0ZXIgRXh0ZW5kZWRTdGF0aXN0aWMgaXMgbm90IHN1cHBvcnRlZC5cXFxcXFxcIlxcXCIsIFtzLCBzXSksXFxuXFx0XFxcIlVzZSBhIHBlcmNlbnRpbGUgYmV0d2VlbiBwMC4wIGFuZCBwMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvY2xvdWR3YXRjaF9jb25jZXB0cy5odG1sI1BlcmNlbnRpbGVzXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkU3RhdGlzdGljXFxcIilcXG5cXHRpc19zdHJpbmcocylcXG5cXHRzdGFydHN3aXRoKHMsIFxcXCJwXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihzdWJzdHJpbmcocywgMSwgY291bnQocykgLSAxKSlcXG5cXHRuID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtbmFtZXNwYWNlLWFzY2lpXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZXRyaWMgbmFtZXNwYWNlcyBtdXN0IG5vdCBjb250YWluIG5vbi1BU0NJSSBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1uYW1lc3BhY2UtYXNjaWlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVzcGFjZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmFtZXNwYWNlICclcycgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnM7IENsb3VkV2F0Y2ggcmVqZWN0cyB0aGUgYWxhcm0gd2l0aCBcXFxcXFxcIk5hbWVzcGFjZSBtdXN0IG5vdCBjb250YWluIE5vbi1BU0NJSSBjaGFyYWN0ZXJzLlxcXFxcXFwiXFxcIiwgW25zXSksXFxuXFx0XFxcIlVzZSBBU0NJSSBvbmx5IGluIHRoZSBtZXRyaWMgbmFtZXNwYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0TWV0cmljQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZXNwYWNlXFxcIilcXG5cXHRpc19zdHJpbmcobnMpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW1xcXFx4MDAtXFxcXHg3Zl0qJGAsIG5zKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHBlciBxdWVyeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIHF1ZXJ5IGVudHJ5IGlzIGVpdGhlciBhIG1hdGggZXhwcmVzc2lvbiBvciBhIG1ldHJpYyBmZXRjaCwgbmV2ZXIgYm90aC5cXG4jIFRoZSBzcGVjaWZ5LW5laXRoZXIgc2hhcGUgZmFpbHMgdG9vLCBidXQgd2l0aCBhbiB1bnJlbGF0ZWQgZXJyb3IgKFxcXCJQZXJpb2RcXG4jIG11c3Qgbm90IGJlIG51bGxcXFwiLCBiZW5jaCB3MDNiKSDigJQgc28gb25seSB0aGUgYm90aC1zZXQgZGlyZWN0aW9uIGlzIGNsYWltZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljcy4lZFxcXCIsIFtxLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljIHF1ZXJ5ICclcycgc2V0cyBib3RoIEV4cHJlc3Npb24gYW5kIE1ldHJpY1N0YXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVycyBNZXRyaWNEYXRhUXVlcnkgRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIGFuZCB5b3UgaGF2ZSBzcGVjaWZpZWQgYm90aC5cXFxcXFxcIlxcXCIsIFtxaWRdKSxcXG5cXHRcXFwiS2VlcCB0aGUgRXhwcmVzc2lvbiBhbmQgZHJvcCBNZXRyaWNTdGF0IChmZXRjaCB0aGUgaW5wdXRzIGluIHNlcGFyYXRlIHF1ZXJpZXMpLCBvciB2aWNlIHZlcnNhXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0c29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIilcXG5cXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJFeHByZXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIk1ldHJpY1N0YXRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cWlkIDo9IG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgXFxcIjxxdWVyeT5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LXJldHVybmRhdGFcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4YWN0bHkgb25lIG1ldHJpYyBxdWVyeSBtdXN0IHJldHVybiBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBhbGFybSBvbiBhIE1ldHJpY3MgYXJyYXkgbmVlZHMgZXhhY3RseSBvbmUgcXVlcnkgcmV0dXJuaW5nIGRhdGEuXFxuIyBSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUgd2hlbiBhYnNlbnQgKGJlbmNoIHcwNGIpLCBhbmQgZXhwbGljaXQgZmFsc2VcXG4jIGV2ZXJ5d2hlcmUgaXMgcmVqZWN0ZWQgdG9vICh3MDRjKS4gQSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIG1ha2VzIHRoZSBjb3VudCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2N3bXFyX2NvdW50YWJsZShxKSBpZiBpc19ib29sZWFuKG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCBudWxsKSlcXG5cXG5fcGZfY3dtcXJfcmV0dXJucyhxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgb2YgdGhlIG1ldHJpYyBxdWVyaWVzIHJldHVybiBkYXRhIChSZXR1cm5EYXRhIGRlZmF1bHRzIHRvIHRydWUpOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiRXhhY3RseSBvbmUgZWxlbWVudCBvZiB0aGUgbWV0cmljcyBsaXN0IHNob3VsZCByZXR1cm4gZGF0YS5cXFxcXFxcIlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBSZXR1cm5EYXRhOiBmYWxzZSBvbiBldmVyeSBxdWVyeSBleGNlcHQgdGhlIG9uZSB0aGUgYWxhcm0gc2hvdWxkIHdhdGNoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZHdhdGNoLWFsYXJtLW1ldHJpY2RhdGFxdWVyeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0X3BmX2N3bXFyX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRuIDo9IGNvdW50KFtxIHwgc29tZSBxIGluIGl0ZW1zOyBfcGZfY3dtcXJfcmV0dXJucyhxLnZhbHVlKV0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC10aHJlc2hvbGQtbWV0cmljLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaHJlc2hvbGRNZXRyaWNJZCBtdXN0IG1hdGNoIGEgbWV0cmljIHF1ZXJ5IHRoYXQgcmV0dXJucyBkYXRhXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYXRjaGluZyBtZWFucyBJZCBlcXVhbGl0eSBBTkQgZWZmZWN0aXZlIFJldHVybkRhdGEgdHJ1ZSAoZGVmYXVsdCB0cnVlLFxcbiMgYmVuY2ggdzA0Yik7IHcxMiBwcm92ZWQgYW4gSWQgbWF0Y2ggd2l0aCBSZXR1cm5EYXRhIGZhbHNlIGRvZXMgbm90IGNvdW50LlxcbiMgT25seSBuID09IDAgZmlyZXMgLSB0aGUgZHVwbGljYXRlLW1hdGNoIHNpZGUgaXMgdW5iZW5jaGVkLiBRdWVyaWVzIHdpdGhcXG4jIHVucmVzb2x2YWJsZSBJZC9SZXR1cm5EYXRhIG1ha2UgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd3RtaV9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3d0bWlfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd3RtaV9tYXRjaGVzKHEsIHRtaWQpIGlmIHtcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJJZFxcXCIsIG51bGwpID09IHRtaWRcXG5cXHRvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgdHJ1ZSkgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtdGhyZXNob2xkLW1ldHJpYy1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIk5vIG1ldHJpYyBxdWVyeSB3aXRoIElkICclcycgcmV0dXJucyBkYXRhOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiTWV0cmljcyBsaXN0IG11c3QgY29udGFpbiBleGFjdGx5IG9uZSBtZXRyaWMgbWF0Y2hpbmcgdGhlIFRocmVzaG9sZE1ldHJpY0lkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW3RtaWRdKSxcXG5cXHRcXFwiUG9pbnQgVGhyZXNob2xkTWV0cmljSWQgYXQgYSBxdWVyeSB3aG9zZSBSZXR1cm5EYXRhIGlzIHRydWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jbG91ZHdhdGNoLWFsYXJtLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHR0bWlkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiKVxcblxcdGlzX3N0cmluZyh0bWlkKVxcblxcdGl0ZW1zIDo9IFtxIHwgc29tZSBxIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IHEgaW4gaXRlbXMge1xcblxcdFxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KHEudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpKVxcblxcdFxcdF9wZl9jd3RtaV9jb3VudGFibGUocS52YWx1ZSlcXG5cXHR9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd3RtaV9tYXRjaGVzKHEudmFsdWUsIHRtaWQpXSkgPT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbGlhc0F0dHJpYnV0ZXMgYW5kIFVzZXJuYW1lQXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBLZXkgcHJlc2VuY2UgaXMgdGhlIHZpb2xhdGlvbiByZWdhcmRsZXNzIG9mIHZhbHVlcywgc28gdGhpcyBjaGVja3MgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgZGlyZWN0bHkgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dhdWVfc2V0KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tYWxpYXMtdXNlcm5hbWUtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Vc2VybmFtZUF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJCb3RoIEFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBzZXQ7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiT25seSBvbmUgb2YgdGhlIGFsaWFzQXR0cmlidXRlcyBvciB1c2VybmFtZUF0dHJpYnV0ZXMgY2FuIGJlIHNldCBpbiBhIFVzZXIgcG9vbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIktlZXAgb25lOiBhbGlhc2VzIGZvciBzaWduLWluIGFsdGVybmF0aXZlcywgb3IgdXNlcm5hbWUgYXR0cmlidXRlcyB0byByZXBsYWNlIHVzZXJuYW1lc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJBbGlhc0F0dHJpYnV0ZXNcXFwiKVxcblxcdF9wZl9jb2dhdWVfc2V0KG5hbWUsIFxcXCJVc2VybmFtZUF0dHJpYnV0ZXNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LWNyZWRlbnRpYWxzLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY2xpZW50X2NyZWRlbnRpYWxzIGNhbm5vdCBjb21iaW5lIHdpdGggY29kZSBvciBpbXBsaWNpdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWFjaGluZS10by1tYWNoaW5lIGFuZCB1c2VyLWZhY2luZyBncmFudHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBvbiBvbmVcXG4jIGNsaWVudC5cXG5fcGZfY29nY2NlX2Zsb3dzKG5hbWUpIDo9IHtmLnZhbHVlIHwgc29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgY29tYmluZXMgY2xpZW50X2NyZWRlbnRpYWxzIHdpdGggJyVzJzsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdy5cXFxcXFxcIlxcXCIsIFtvdGhlcl0pLFxcblxcdFxcXCJTcGxpdCB0aGUgZmxvd3MgYWNyb3NzIHNlcGFyYXRlIHVzZXIgcG9vbCBjbGllbnRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Zmxvd3MgOj0gX3BmX2NvZ2NjZV9mbG93cyhuYW1lKVxcblxcdFxcXCJjbGllbnRfY3JlZGVudGlhbHNcXFwiIGluIGZsb3dzXFxuXFx0c29tZSBvdGhlciBpbiB7XFxcImNvZGVcXFwiLCBcXFwiaW1wbGljaXRcXFwifVxcblxcdG90aGVyIGluIGZsb3dzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgbmVlZHMgYSBjbGllbnQgc2VjcmV0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYXV0aCBpcyBzZWNyZXQtYmFzZWQuIEdlbmVyYXRlU2VjcmV0IGRlZmF1bHRzIHRvXFxuIyBmYWxzZSwgc28gYm90aCB0aGUgbGl0ZXJhbCBmYWxzZSBhbmQgdGhlIGFic2VudCBrZXkgbGVhdmUgdGhlIGNsaWVudFxcbiMgc2VjcmV0bGVzcy4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWVcXG4jIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJHZW5lcmF0ZVNlY3JldFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ2Njc19ub19zZWNyZXQobmFtZSkgaWYgY29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIpKSA9PSBmYWxzZVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtc2VjcmV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW5lcmF0ZVNlY3JldFxcXCIsXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IG9uIGEgY2xpZW50IHdpdGhvdXQgYSBzZWNyZXQ7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJjbGllbnRfY3JlZGVudGlhbHMgZmxvdyBjYW4gbm90IGJlIHNlbGVjdGVkIGlmIGNsaWVudCBkb2VzIG5vdCBoYXZlIGEgY2xpZW50IHNlY3JldC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBHZW5lcmF0ZVNlY3JldDogdHJ1ZSBvbiB0aGlzIGNsaWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgPT0gXFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCJcXG5cXHRfcGZfY29nY2NzX25vX3NlY3JldChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tY2xpZW50LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlVzZXIgcG9vbCBjbGllbnQgbmFtZXMgYWxsb3cgb25seSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKz0sLkAtXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbGllbnROYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArID0gLCAuIEAgLVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvLXVzZXItaWRlbnRpdHktcG9vbHMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVXNlclBvb2xDbGllbnQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DbGllbnROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XyBcXFxcdCs9LC5ALV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRG9tYWluIHByZWZpeGVzIGNhbm5vdCBjb250YWluIHJlc2VydmVkIHdvcmRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSByZWZ1c2VzIHByZWZpeGVzIHdpdGggYSByZXNlcnZlZCB3b3JkIGFzIGEgaHlwaGVuLWRlbGltaXRlZFxcbiMgdG9rZW4sIHdpdGggb25seSBhIGdlbmVyaWMgZXJyb3IuIFBpbm5lZCBieSBjb250cm9sbGVkIHBhaXJzOiAtYXdzLSAvXFxuIyAtYW1hem9uLSAvIC1jb2duaXRvLSBmYWlsIHdoaWxlIC1hd3NvbWUtIGRlcGxveXMgKGJlbmNoIGMwNy1jMDdlKSwgc29cXG4jIGEgdG9rZW4gbWVyZWx5IGNvbnRhaW5pbmcgYSB3b3JkIHN0YXlzIGxlZ2FsLlxcbl9wZl9jb2dkcndfd29yZHMgOj0ge1xcXCJhd3NcXFwiLCBcXFwiYW1hem9uXFxcIiwgXFxcImNvZ25pdG9cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1kb21haW4tcmVzZXJ2ZWQtd29yZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEb21haW4gcHJlZml4ICclcycgaGFzIHRoZSByZXNlcnZlZCB3b3JkICclcycgYXMgYSBzZWdtZW50OyB0aGUgZG9tYWluIGNyZWF0ZSBmYWlscyB3aXRoIHRoZSBnZW5lcmljIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcXFxcXCJcXFwiLCBbZCwgd10pLFxcblxcdFxcXCJSZW5hbWUgb3IgbWVyZ2UgdGhhdCBzZWdtZW50IChlLmcuIG15YXBwLWF1dGgpOyB3b3JkcyBtZXJlbHkgaW5zaWRlIGEgbG9uZ2VyIHNlZ21lbnQgYXJlIGZpbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by11c2VyLXBvb2xzLWFzc2lnbi1kb21haW4tcHJlZml4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sRG9tYWluXFxcIilcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRG9tYWluXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRzb21lIHcgaW4gX3BmX2NvZ2Ryd193b3Jkc1xcblxcdHcgaW4gc3BsaXQoZCwgXFxcIi1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1GQSB3aXRob3V0IGFueSBmYWN0b3IgY29uZmlndXJhdGlvbiBjYW5ub3QgZGVwbG95XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBXaXRoIE1GQSBvbiBhbmQgbm8gRW5hYmxlZE1mYXMsIENvZ25pdG8gZmFsbHMgYmFjayB0byBTTVMgTUZBLCB3aGljaFxcbiMgbmVlZHMgU21zQ29uZmlndXJhdGlvbi4gQSBwb29sIGRlY2xhcmluZyBFbmFibGVkTWZhcyAoZS5nLiBUT1RQIG9ubHksXFxuIyBiZW5jaCBjMDViKSBpcyB2YWxpZCB3aXRob3V0IFNNUywgc28gaXRzIHByZXNlbmNlIG11dGVzIHRoZSBydWxlLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nbXNjX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW1mYS1zbXMtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZmFDb25maWd1cmF0aW9uICclcycgd2l0aCBubyBTbXNDb25maWd1cmF0aW9uIGFuZCBubyBFbmFibGVkTWZhczsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTTVMgY29uZmlndXJhdGlvbiBhbmQgQXV0byB2ZXJpZmljYXRpb24gZm9yIHBob25lX251bWJlciBhcmUgcmVxdWlyZWQgd2hlbiBNRkEgaXMgcmVxdWlyZWQvb3B0aW9uYWxcXFxcXFxcIlxcXCIsIFttZmFdKSxcXG5cXHRcXFwiQ29uZmlndXJlIFNtc0NvbmZpZ3VyYXRpb24gKFNNUyBNRkEpLCBvciBwaWNrIGZhY3RvcnMgdmlhIEVuYWJsZWRNZmFzIChlLmcuIFNPRlRXQVJFX1RPS0VOX01GQSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtZmEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZmFDb25maWd1cmF0aW9uXFxcIilcXG5cXHRtZmEgaW4ge1xcXCJPTlxcXCIsIFxcXCJPUFRJT05BTFxcXCJ9XFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIlNtc0NvbmZpZ3VyYXRpb25cXFwiKVxcblxcdF9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIFxcXCJFbmFibGVkTWZhc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1jYWxsYmFjay1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiY29kZSBhbmQgaW1wbGljaXQgT0F1dGggZmxvd3MgbmVlZCBDYWxsYmFja1VSTHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0LWJhc2VkIGZsb3dzIG5lZWQgc29tZXdoZXJlIHRvIHJlZGlyZWN0IHRvLiBBYnNlbmNlIGlzIHByb3ZlblxcbiMgYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2NyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYWxsYmFja1VSTHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGhhcyAnJXMnIGJ1dCBDYWxsYmFja1VSTHMgaXMgbm90IHNldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbGxiYWNrVXJscyBjYW4gbm90IGJlIGVtcHR5IHdoZW4gY29kZSBmbG93IG9yIGltcGxpY2l0IGZsb3cgaXMgc2VsZWN0ZWRcXFxcXFxcIlxcXCIsIFtmLnZhbHVlXSksXFxuXFx0XFxcIkFkZCBhdCBsZWFzdCBvbmUgY2FsbGJhY2sgVVJMXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIilcXG5cXHRmLnZhbHVlIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0X3BmX2NvZ29jcl9hYnNlbnQobmFtZSwgXFxcIkNhbGxiYWNrVVJMc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIE9BdXRoIHJlcXVpcmVzIGJvdGggQWxsb3dlZE9BdXRoRmxvd3MgYW5kIEFsbG93ZWRPQXV0aFNjb3Blc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBkaXJlY3Rpb25zIGRlcGxveS12ZXJpZmllZC4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ29mc19hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2dvZnNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxuX3BmX2NvZ29mc19tc2cgOj0gXFxcInRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzIGFyZSByZXF1aXJlZCBpZiB1c2VyIHBvb2wgY2xpZW50IGlzIGFsbG93ZWQgdG8gdXNlIE9BdXRoIGZsb3dzLlxcXFxcXFwiXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50IGlzIHRydWUgYnV0IEFsbG93ZWRPQXV0aEZsb3dzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhGbG93cywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtZmxvd3Mtc2NvcGVzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhTY29wZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoU2NvcGVzIGlzIG5vdCBzZXQ7ICVzXFxcIiwgW19wZl9jb2dvZnNfbXNnXSksXFxuXFx0XFxcIlNldCBBbGxvd2VkT0F1dGhTY29wZXMsIG9yIGRyb3AgQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIsXFxuXFx0X3BmX2NvZ29mc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudFxcXCIpKSA9PSB0cnVlXFxuXFx0X3BmX2NvZ29mc19hYnNlbnQobmFtZSwgXFxcIkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQYXNzd29yZFBvbGljeSBNaW5pbXVtTGVuZ3RoIHJ1bnMgNiB0byA5OVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBNaW5pbXVtTGVuZ3RoIGFzIGEgYmFyZSBpbnRlZ2VyOyBib3RoIGJvdW5kc1xcbiMgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ncG1sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXBhc3N3b3JkcG9saWN5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLlBhc3N3b3JkUG9saWN5Lk1pbmltdW1MZW5ndGhcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1MZW5ndGggJXYgaXMgdW5kZXIgdGhlIGZsb29yOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDZcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sIDwgNlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTlcXFxcXFxcIlxcXCIsIFttbF0pLFxcblxcdFxcXCJVc2UgYSBtaW5pbXVtIHBhc3N3b3JkIGxlbmd0aCBiZXR3ZWVuIDYgYW5kIDk5XFxcIixcXG5cXHRfcGZfY29ncG1sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0bWwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIpKVxcblxcdG1sID4gOTlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyBjYW5ub3QgcmVwZWF0IHByaW9yaXRpZXMgb3IgbmFtZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIGR1cGxpY2F0ZSBjaGVjayBvbiB0aGUgbWVjaGFuaXNtIGxpc3Q7IHRoZSBzZXJ2aWNlIGVycm9yIG5hbWVzXFxuIyBib3RoIGR1cGxpY2F0ZSBwcmlvcml0aWVzIGFuZCBkdXBsaWNhdGUgbWVjaGFuaXNtIG5hbWVzLlxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRwYSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhLCBcXFwiUHJpb3JpdHlcXFwiLCAtMSkpXFxuXFx0cGIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYiwgXFxcIlByaW9yaXR5XFxcIiwgLTIpKVxcblxcdHBhID09IHBiXFxufVxcblxcbl9wZl9jb2dyZHBfZHVwKGEsIGIpIGlmIHtcXG5cXHRuIDo9IG9iamVjdC5nZXQoYSwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9hXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRuID09IG9iamVjdC5nZXQoYiwgXFxcIk5hbWVcXFwiLCBcXFwiX19wZl9iXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXJlY292ZXJ5LWR1cGxpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtcy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0XFxcIlJlY292ZXJ5IG1lY2hhbmlzbXMgcmVwZWF0IGEgcHJpb3JpdHkgb3IgbmFtZTsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2NvdW50IFJlY292ZXJ5IFNldHRpbmcgY2Fubm90IGhhdmUgZHVwbGljYXRlIHByaW9yaXRpZXMgb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgZWFjaCByZWNvdmVyeSBtZWNoYW5pc20gYSBkaXN0aW5jdCBwcmlvcml0eSBhbmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1yZWNvdmVyeW9wdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NvdW50UmVjb3ZlcnlTZXR0aW5nLlJlY292ZXJ5TWVjaGFuaXNtc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpc19vYmplY3QoYS52YWx1ZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRfcGZfY29ncmRwX2R1cChhLnZhbHVlLCBiLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTY2hlbWEgYXR0cmlidXRlIE1heExlbmd0aCBjYW5ub3QgdW5kZXJjdXQgTWluTGVuZ3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgY29uc3RyYWludHMgYXJlIHR5cGVkIGFzIHN0cmluZ3MsIHNvIG5vIHNjaGVtYSBsYXllciBjYW4gY29tcGFyZVxcbiMgdGhlbSBudW1lcmljYWxseS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tc2NoZW1hLWF0dHItbGVuZ3RoLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlNjaGVtYS4lZC5TdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIFthdHQuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBoYXMgTWluTGVuZ3RoICV2IG92ZXIgTWF4TGVuZ3RoICV2OyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNhbm5vdCBoYXZlIGEgbWF4IGxlbmd0aCBzaG9ydGVyIHRoYW4gaXQncyBtaW4gbGVuZ3RoXFxcXFxcXCJcXFwiLCBbb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjxhdHRyPlxcXCIpLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5MZW5ndGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heExlbmd0aFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY29nbml0by11c2VycG9vbC1zY2hlbWFhdHRyaWJ1dGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdHNvbWUgYXR0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChhdHQudmFsdWUpXFxuXFx0c2FjIDo9IG9iamVjdC5nZXQoYXR0LnZhbHVlLCBcXFwiU3RyaW5nQXR0cmlidXRlQ29uc3RyYWludHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc2FjKVxcblxcdG1uX3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1pbkxlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bW5fcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRteF9yYXcgOj0gb2JqZWN0LmdldChzYWMsIFxcXCJNYXhMZW5ndGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdG14X3JhdyAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG1uX3JhdylcXG5cXHRteCA6PSB0b19udW1iZXIobXhfcmF3KVxcblxcdG1uID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBhbmQgaWQgdG9rZW5zIGNhbm5vdCBvdXRsaXZlIHRoZSByZWZyZXNoIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1wcm9wZXJ0eSBpbmVxdWFsaXR5IGJldHdlZW4gZGlmZmVyZW50bHktdW5pdGVkIGR1cmF0aW9ucyAtIG9ubHlcXG4jIGNvbXBhcmFibGUgYWZ0ZXIgbm9ybWFsaXppbmcgdG8gc2Vjb25kcy4gVW5pdCBkZWZhdWx0cyBhcmUgdGhlXFxuIyBkZXBsb3ktdmVyaWZpZWQgaG91cnMvaG91cnMvZGF5cy5cXG5fcGZfY29ndGVvX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0ZW9fc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndGVvX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndGVvX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndGVvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi1leHBpcmF0aW9uLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3MgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2EsIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IG9yIGxlbmd0aGVuIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5XFxcIixcXG5cXHRfcGZfY29ndGVvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0YSA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0YSA+IHJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWQgdG9rZW4gdmFsaWRpdHkgKCV2IHMpIGV4Y2VlZHMgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eSAoJXYgcyk7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJBY2Nlc3MgYW5kIElkIFRva2VuIGV4cGlyYXRpb24gdGltZXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmVmcmVzaCB0b2tlbiBleHBpcmF0aW9uIHRpbWVzLlxcXFxcXFwiXFxcIiwgW2ksIHJdKSxcXG5cXHRcXFwiU2hvcnRlbiB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRpIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdHIgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0aSA+IHJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb2tlbiB2YWxpZGl0eSByYW5nZXMgZGVwZW5kIG9uIHRva2VuIHR5cGUgYW5kIHVuaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgdHlwZXMgdGhlIHZhbGlkaXRpZXMgYXMgYmFyZSBpbnRlZ2VyczsgdGhlIHJlYWwgcmFuZ2VzIGFyZVxcbiMgcGVyIHRva2VuIHR5cGUgQU5EIHVuaXQgKGFjY2Vzcy9pZDogNSBtaW51dGVzLTEgZGF5LCByZWZyZXNoOiA2MFxcbiMgbWludXRlcy0xMCB5ZWFycykuIFVuaXQgZGVmYXVsdHMgKGhvdXJzL2hvdXJzL2RheXMpIGFyZSBkZXBsb3ktdmVyaWZpZWQuXFxuX3BmX2NvZ3R2cl91bml0X3NlY3MgOj0ge1xcXCJzZWNvbmRzXFxcIjogMSwgXFxcIm1pbnV0ZXNcXFwiOiA2MCwgXFxcImhvdXJzXFxcIjogMzYwMCwgXFxcImRheXNcXFwiOiA4NjQwMH1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgXykgOj0gdSBpZiB7XFxuXFx0dSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9rZW5WYWxpZGl0eVVuaXRzLiVzXFxcIiwgW3VuaXRLZXldKSlcXG5cXHRpc19zdHJpbmcodSlcXG59XFxuXFxuX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpIDo9IGRlZlVuaXQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHR2dSA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVG9rZW5WYWxpZGl0eVVuaXRzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHR2dSlcXG5cXHRvYmplY3QuZ2V0KHR2dSwgdW5pdEtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29ndHZyX3NlY3MobmFtZSwgdmFsS2V5LCB1bml0S2V5LCBkZWZVbml0KSA6PSBzIGlmIHtcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbdmFsS2V5XSkpKVxcblxcdHUgOj0gX3BmX2NvZ3R2cl91bml0KG5hbWUsIHVuaXRLZXksIGRlZlVuaXQpXFxuXFx0cyA6PSB2ICogX3BmX2NvZ3R2cl91bml0X3NlY3NbdV1cXG59XFxuXFxuX3BmX2NvZ3R2cl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzIDwgMzAwXFxuXFxuX3BmX2NvZ3R2cl9haV9iYWQocykgaWYgcyA+IDg2NDAwXFxuXFxuX3BmX2NvZ3R2cl9ydF9iYWQocykgaWYgcyA8IDM2MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzID4gMzE1MzYwMDAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLXZhbGlkaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2Nlc3NUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgYWNjZXNzIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNSBtaW51dGVzIGFuZCAxIGRheVxcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJBY2Nlc3NUb2tlblZhbGlkaXR5XFxcIiwgXFxcIkFjY2Vzc1Rva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklkVG9rZW5WYWxpZGl0eVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSWRUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDUgbWludXRlcy0xIGRheTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmFuZ2UgZm9yIHRva2VuIHZhbGlkaXR5LlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaWQgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIklkVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJJZFRva2VuXFxcIiwgXFxcImhvdXJzXFxcIilcXG5cXHRfcGZfY29ndHZyX2FpX2JhZChzKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eSB3b3JrcyBvdXQgdG8gJXYgc2Vjb25kcywgb3V0c2lkZSA2MCBtaW51dGVzLTEwIHllYXJzOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSByZWZyZXNoIHRva2VuIHZhbGlkaXR5IGJldHdlZW4gNjAgbWludXRlcyBhbmQgMTAgeWVhcnNcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiUmVmcmVzaFRva2VuXFxcIiwgXFxcImRheXNcXFwiKVxcblxcdF9wZl9jb2d0dnJfcnRfYmFkKHMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVXNlciBwb29sIG5hbWVzIGFsbG93IG9ubHkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICs9LC5ALVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by11c2VyLXBvb2wtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVXNlclBvb2xOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJVc2VyUG9vbE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8tdXNlci1pZGVudGl0eS1wb29scy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVVc2VyUG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlVzZXJQb29sTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV8gXFxcXHQrPSwuQC1dKyRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZXJ5IEF0dHJpYnV0ZURlZmluaXRpb25zIGVudHJ5IG11c3QgYmUgdXNlZCBieSBhIGtleSBzY2hlbWFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaDogZXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZVxcbiMgdXNlZCBieSB0aGUgdGFibGUga2V5IHNjaGVtYSBvciBhbiBpbmRleCBrZXkgc2NoZW1hLiBUaGUgZW5naW5lJ3MgRTMwMzlcXG4jIGNoZWNrcyB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9ubHkgKGtleSBhdHRyaWJ1dGUgbm90IGRlZmluZWQpLCBzbyB0aGVcXG4jIGNsYXNzaWMgXFxcInJlbW92ZWQgYSBHU0ksIGxlZnQgdGhlIGF0dHJpYnV0ZSBkZWZpbml0aW9uXFxcIiBtaXN0YWtlIHNhaWxzIHRocm91Z2guXFxuXFxuX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGEgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgcHJvcCkgOj0ge2EgfFxcblxcdHNvbWUgaXggaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGl4LnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX2RkYmFkdV91c2VkKG5hbWUpIDo9ICgoX3BmX2RkYmFkdV90YWJsZV9rZXlzKG5hbWUpIHxcXG5cXHRfcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIikpXFxuXFxuIyBBbnkgdW5yZXNvbHZhYmxlIEF0dHJpYnV0ZU5hbWUgaW4gYSBrZXkgc2NoZW1hIG1lYW5zIHRoZSB1c2VkLXNldCBpc1xcbiMgaW5jb21wbGV0ZSwgc28gdGhlIHJ1bGUgbXVzdCBzdGF5IHNpbGVudCByYXRoZXIgdGhhbiBndWVzcy5cXG5fcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxufVxcblxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRub3QgaXNfc3RyaW5nKG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1hdHRyaWJ1dGUtZGVmaW5pdGlvbnMtdXNhZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbZC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGlzIGRlZmluZWQgYnV0IHVzZWQgYnkgbm8ga2V5IHNjaGVtYTsgRHluYW1vREIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggYW5kIGZhaWxzIHdpdGggXFxcXFxcXCJOdW1iZXIgb2YgYXR0cmlidXRlcyBpbiBLZXlTY2hlbWEgZG9lcyBub3QgZXhhY3RseSBtYXRjaCBudW1iZXIgb2YgYXR0cmlidXRlcyBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIHVudXNlZCBkZWZpbml0aW9uIChub24ta2V5IGF0dHJpYnV0ZXMgc3VjaCBhcyBhIFRUTCBhdHRyaWJ1dGUgbXVzdCBOT1QgYmUgZGVjbGFyZWQpLCBvciBhZGQgdGhlIGluZGV4IHRoYXQgdXNlcyBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0bm90IF9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRiYWR1X3VzZWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCBCaWxsaW5nTW9kZSAocmVxdWlyZWQgZm9yIFBST1ZJU0lPTkVELCBmb3JiaWRkZW4gZm9yIFBBWV9QRVJfUkVRVUVTVClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmJ0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbl9wZl9kZGJidF9oYXNfcHQobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIikpXFxuXFxuX3BmX2RkYmJ0X2JpbGxpbmdfcHJlc2VudChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIilcXG5cXG4jIEJpbGxpbmdNb2RlIOOBjOODquODhuODqeODqyBcXFwiUFJPVklTSU9ORURcXFwi44CB44G+44Gf44Gv5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIFBST1ZJU0lPTkVE77yJ44CCXFxuIyDjg4jjg7zjgq/jg7PlgKTvvIhSZWYg562J77yJ44Gv5Yik5a6a44Gr5L2/44KP44Gq44GE77yI6Kqk5qSc55+l6Ziy5q2i77yJ44CCXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUFJPVklTSU9ORURcXFwiXFxuXFxuX3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdoZW4gQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm92aXNpb25lZFRocm91Z2hwdXQsIG9yIHN3aXRjaCBCaWxsaW5nTW9kZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsXFxuXFx0XFxcIkJpbGxpbmdNb2RlIGlzIFBST1ZJU0lPTkVEICh0aGUgZGVmYXVsdCkgYnV0IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBpcyBtaXNzaW5nOyBDcmVhdGVUYWJsZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgKFJlYWRDYXBhY2l0eVVuaXRzIC8gV3JpdGVDYXBhY2l0eVVuaXRzKSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmJ0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdF9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKVxcblxcdG5vdCBfcGZfZGRiYnRfaGFzX3B0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZHVwbGljYXRlLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkF0dHJpYnV0ZURlZmluaXRpb25zIG11c3Qgbm90IGRlZmluZSB0aGUgc2FtZSBhdHRyaWJ1dGUgdHdpY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIEF0dHJpYnV0ZURlZmluaXRpb25zOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiQW4gYXR0cmlidXRlIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthbl0pLFxcblxcdFxcXCJLZWVwIGEgc2luZ2xlIGRlZmluaXRpb24gcGVyIGF0dHJpYnV0ZSBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGFuIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhbilcXG5cXHRvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkgPT0gYW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY29uZGFyeSBpbmRleCBuYW1lcyBtdXN0IGJlIHVuaXF1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZGluX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCJcXG5cXG4jIER1cGxpY2F0ZXMgd2l0aGluIHRoZSBzYW1lIGluZGV4IGxpc3Qgb25seTsgYSBHU0kvTFNJIGNyb3NzLWxpc3QgY2xhc2ggd2FzXFxuIyBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtaW5kZXgtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5JbmRleE5hbWVcXFwiLCBbcHJvcCwgYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkluZGV4IG5hbWUgJyVzJyBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiRHVwbGljYXRlIGluZGV4IG5hbWVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHNlY29uZGFyeSBpbmRleCBhIHVuaXF1ZSBJbmRleE5hbWVcXFwiLFxcblxcdF9wZl9kZGJkaW5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBwcm9wIGluIFtcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiXVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGluYW1lKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIG51bGwpID09IGluYW1lXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ2xvYmFsLXRhYmxlLXJlcGxpY2EtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2xvYmFsVGFibGUgUmVwbGljYXMgbXVzdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSB3aGVuIHRoZSBlbmZvcmNlIHBsdWdpblxcbiMga25vd3MgdGhlIGFwcCdzIGNvbmNyZXRlIHJlZ2lvbiAoc2VlIHNyYy9wcml2YXRlL2VuZm9yY2UudHMpOyB3aXRob3V0IGl0IHRoZVxcbiMgcmVmZXJlbmNlIGlzIHVuZGVmaW5lZCBhbmQgdGhpcyBydWxlIHNraXBzLiBSZXBsaWNhcyB3aXRoIHVucmVzb2x2YWJsZVxcbiMgUmVnaW9uIHZhbHVlcyBhbHNvIG1ha2UgdGhlIHJ1bGUgc2tpcCDigJQgYWJzZW5jZSBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgUmVwbGljYXMgbGlzdCAldiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBkZXBsb3ltZW50IHJlZ2lvbiAnJXMnOyBDcmVhdGVHbG9iYWxUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIFJlcGxpY2FzIHNlY3Rpb24gbXVzdCBjb250YWluIGFuIGVudHJ5IGZvciB0aGUgY3VycmVudCByZWdpb25cXFxcXFxcIlxcXCIsIFtyZXBsaWNhcywgcmVnaW9uXSksXFxuXFx0XFxcIkFkZCBhIHJlcGxpY2EgZW50cnkgZm9yIHRoZSByZWdpb24gdGhlIHN0YWNrIGRlcGxveXMgdG8gKENESyBUYWJsZVYyIGRvZXMgdGhpcyBhdXRvbWF0aWNhbGx5KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLWdsb2JhbHRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVxcXCIpXFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0aXNfc3RyaW5nKHJlZ2lvbilcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBpdCBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKSlcXG5cXHR9XFxuXFx0cmVwbGljYXMgOj0gW3IgfCBzb21lIGl0IGluIGl0ZW1zOyByIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJSZWdpb25cXFwiLCBudWxsKV1cXG5cXHRub3QgcmVnaW9uIGluIHJlcGxpY2FzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdTSSBQcm92aXNpb25lZFRocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdGFibGUgQmlsbGluZ01vZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbFxcXCJcXG5cXG4jIEdTSS1sZXZlbCBjb3VudGVycGFydCBvZiBwZi1keW5hbW9kYi1iaWxsaW5nLXRocm91Z2hwdXQgKHdoaWNoIGNvdmVycyB0aGVcXG4jIHRhYmxlLWxldmVsIHBhaXIgb25seSkuIFNhbWUgdG9rZW4gc2FmZXR5OiBsaXRlcmFsIEJpbGxpbmdNb2RlIG9yIGFic2VudFxcbiMgKGRlZmF1bHQgUFJPVklTSU9ORUQpOyB0b2tlbiB2YWx1ZXMgbmV2ZXIganVkZ2VkLlxcbl9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIG5vdCBfcGZfZGRiZ2J0X2JpbGxpbmdfcHJlc2VudChuYW1lKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgc3BlY2lmaWVzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBidXQgQmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNUOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbid0IGJlIHVzZWQgd2l0aCBQQVlfUEVSX1JFUVVFU1QgQmlsbGluZ01vZGVcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIEdTSSdzIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIHRoZSB0YWJsZSB0byBQUk9WSVNJT05FRFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBBWV9QRVJfUkVRVUVTVFxcXCJcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBpcyBtaXNzaW5nIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB3aGlsZSB0aGUgdGFibGUgYmlsbHMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW5ub3QgYmUgZW1wdHlcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJBZGQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHRvIHRoZSBHU0ksIG9yIHNldCBCaWxsaW5nTW9kZSB0byBQQVlfUEVSX1JFUVVFU1RcXFwiLFxcblxcdF9wZl9kZGJnYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0bm90IGlzX29iamVjdChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBudWxsKSlcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb25LZXlBdHRyaWJ1dGVzIGdvZXMgd2l0aCBJTkNMVURFLCBhbmQgb25seSB3aXRoIElOQ0xVREVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmdwbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtcHJvamVjdGlvbi5odG1sXFxcIlxcblxcbiMgR1NJIHByb2plY3Rpb25zIG9ubHk6IHRoZSBMU0kgc2hhcGUgYW5kIHRoZSBLRVlTX09OTFkrTm9uS2V5QXR0cmlidXRlcyBjb21ib1xcbiMgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm9qZWN0aW9uXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyB1c2VzIFByb2plY3Rpb25UeXBlIElOQ0xVREUgd2l0aG91dCBOb25LZXlBdHRyaWJ1dGVzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvamVjdGlvblR5cGUgaXMgSU5DTFVERSwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgbm90IHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkxpc3QgdGhlIHByb2plY3RlZCBhdHRyaWJ1dGVzIGluIE5vbktleUF0dHJpYnV0ZXMsIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBBTEwgLyBLRVlTX09OTFlcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIklOQ0xVREVcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPT0gMFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGNvbWJpbmVzIFByb2plY3Rpb25UeXBlIEFMTCB3aXRoIE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBBTEwsIGJ1dCBOb25LZXlBdHRyaWJ1dGVzIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkRyb3AgTm9uS2V5QXR0cmlidXRlcyAoQUxMIGFscmVhZHkgcHJvamVjdHMgZXZlcnl0aGluZyksIG9yIHN3aXRjaCBQcm9qZWN0aW9uVHlwZSB0byBJTkNMVURFXFxcIixcXG5cXHRfcGZfZGRiZ3BuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0cHJvaiA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm9qZWN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvailcXG5cXHRvYmplY3QuZ2V0KHByb2osIFxcXCJQcm9qZWN0aW9uVHlwZVxcXCIsIG51bGwpID09IFxcXCJBTExcXFwiXFxuXFx0Y291bnQob2JqZWN0LmdldChwcm9qLCBcXFwiTm9uS2V5QXR0cmlidXRlc1xcXCIsIFtdKSkgPiAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIktleVNjaGVtYSBtdXN0IGJlIFtIQVNIXSBvciBbSEFTSCwgUkFOR0VdXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJrc2hfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgVGFibGUtbGV2ZWwga2V5IHNjaGVtYSBvbmx5OiBpbmRleCBrZXkgc2NoZW1hcyBwcm9kdWNlIGRpZmZlcmVudCBzZXJ2aWNlXFxuIyBlcnJvcnMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbl9wZl9kZGJrc2hfdHlwZShuYW1lLCBpKSA6PSBrdCBpZiB7XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRpdC5pbmRleCA9PSBpXFxuXFx0a3QgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIktleVR5cGVcXFwiLCBudWxsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYS4wLktleVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBmaXJzdCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIEhBU0gsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBmaXJzdCBLZXlTY2hlbWFFbGVtZW50IGlzIG5vdCBhIEhBU0gga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJQdXQgdGhlIHBhcnRpdGlvbiBrZXkgKEtleVR5cGUgSEFTSCkgZmlyc3QgYW5kIHRoZSBvcHRpb25hbCBzb3J0IGtleSAoUkFOR0UpIHNlY29uZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRrdCA6PSBfcGZfZGRia3NoX3R5cGUobmFtZSwgMClcXG5cXHRpc19zdHJpbmcoa3QpXFxuXFx0a3QgIT0gXFxcIkhBU0hcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjEuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHNlY29uZCBLZXlTY2hlbWEgZWxlbWVudCBtdXN0IGJlIFJBTkdFLCBnb3QgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgS2V5U2NoZW1hOiBUaGUgc2Vjb25kIEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgUkFOR0Uga2V5IHR5cGVcXFxcXFxcIlxcXCIsIFtrdF0pLFxcblxcdFxcXCJVc2UgZXhhY3RseSBvbmUgSEFTSCBlbGVtZW50LCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IG9uZSBSQU5HRSBlbGVtZW50XFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAxKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiUkFOR0VcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJLZXlTY2hlbWEgY2FuIGhvbGQgYXQgbW9zdCAyIGVsZW1lbnRzIChIQVNIICsgb3B0aW9uYWwgUkFOR0UpLCBnb3QgJWRcXFwiLCBbbl0pLFxcblxcdFxcXCJNb2RlbCBleHRyYSBhY2Nlc3MgcGF0dGVybnMgYXMgZ2xvYmFsIG9yIGxvY2FsIHNlY29uZGFyeSBpbmRleGVzIGluc3RlYWRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0biA6PSBjb3VudChbMSB8IHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIildKVxcblxcdG4gPiAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBtdXN0IGJlIGluIHRoZSB0YWJsZSdzIHJlZ2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgS2luZXNpcyBEYXRhIFN0cmVhbXMgZGVzdGluYXRpb24gbXVzdCBsaXZlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGVcXG4jIHRhYmxlLiBUaGUgZGVwbG95LXRpbWUgZmFpbHVyZSBtb2RlIGlzIHVnbHk6IHRoZSB0YWJsZSBpcyBjcmVhdGVkLCB0aGVcXG4jIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBuZXZlciBzdGFiaWxpemVzLCBhbmQgQ2xvdWRGb3JtYXRpb24gcm9sbHMgYmFjayBvblxcbiMgTm90U3RhYmlsaXplZCBtaW51dGVzIGxhdGVyIOKAlCBub3RoaW5nIG5hbWVzIHRoZSByZWdpb24gbWlzbWF0Y2guXFxuIyBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIG9ubHkgaW4gZW5mb3JjZSBtb2RlIHdpdGggYVxcbiMgY29uY3JldGUgcmVnaW9uOyBvdGhlcndpc2UgdGhpcyBydWxlIHNraXBzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2luZXNpcy1zdHJlYW0tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBLaW5lc2lzIHN0cmVhbSBsaXZlcyBpbiAnJXMnIGJ1dCB0aGUgdGFibGUgZGVwbG95cyB0byAnJXMnOyB0aGUgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMgYW5kIHRoZSBzdGFjayByb2xscyBiYWNrXFxcIiwgW3N0cmVhbVJlZ2lvbiwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IEtpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFybiBhdCBhIHN0cmVhbSBpbiB0aGUgdGFibGUncyBvd24gcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9rZHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gNlxcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImtpbmVzaXNcXFwiXFxuXFx0c3RyZWFtUmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0c3RyZWFtUmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0c3RyZWFtUmVnaW9uICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMU0kga2V5IGF0dHJpYnV0ZXMgbXVzdCBiZSBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDM5IGNoZWNrcyB0YWJsZSBhbmQgR1NJIGtleSBzY2hlbWFzIGFnYWluc3RcXG4jIEF0dHJpYnV0ZURlZmluaXRpb25zIGJ1dCBpcyBibGluZCB0byBMb2NhbFNlY29uZGFyeUluZGV4ZXMgKG1lYXN1cmVkXFxuIyAyMDI2LTA5LTAyLCAxLjcuMC1iZXRhKS4gVGhpcyBydWxlIGNvdmVycyBleGFjdGx5IHRoYXQgZ2FwLlxcblxcbl9wZl9kZGJsYWRfZGVmcyhuYW1lKSA6PSB7YSB8XFxuXFx0c29tZSBkIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuIyBJZiBhbnkgZGVmaW5pdGlvbidzIG5hbWUgaXMgdW5yZXNvbHZhYmxlIHRoZSBzZXQgaXMgaW5jb21wbGV0ZSDigJQgc3RheSBzaWxlbnQuXFxuX3BmX2RkYmxhZF9kZWZzX3Jlc29sdmFibGUobmFtZSkgaWYge1xcblxcdGV2ZXJ5IGQgaW4gW3ggfCBzb21lIHggaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIildIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktYXR0cmlidXRlLWRlZmluaXRpb25zXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxTSSBrZXkgYXR0cmlidXRlICclcycgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgcmVmZXJlbmNlZCBpbiBhIEtleVNjaGVtYSBlbGVtZW50IGlzIG5vdCBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYXR0cl0pLFxcblxcdFxcXCJBZGQgdGhlIGF0dHJpYnV0ZSB0byBBdHRyaWJ1dGVEZWZpbml0aW9ucyAoYW5kIG5vd2hlcmUgZWxzZTogb25seSBrZXkgYXR0cmlidXRlcyBiZWxvbmcgdGhlcmUpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0Y291bnQoX3BmX2RkYmxhZF9kZWZzKG5hbWUpKSA+IDBcXG5cXHRfcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0YXR0ciA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXR0cilcXG5cXHRub3QgYXR0ciBpbiBfcGZfZGRibGFkX2RlZnMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBMU0kgbmVlZHMgYSBSQU5HRSBrZXkgYW5kIHRoZSB0YWJsZSdzIGxlYWRpbmcgaGFzaCBrZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmxzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtbG9jYWxzZWNvbmRhcnlpbmRleC5odG1sXFxcIlxcblxcbl9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpIDo9IHtrdCB8XFxuXFx0c29tZSBrIGluIGtzXFxuXFx0a3QgOj0gb2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGt0KVxcbn1cXG5cXG4jIE9ubHkganVkZ2UgYSBrZXkgc2NoZW1hIHdob3NlIEtleVR5cGVzIGFyZSBhbGwgbGl0ZXJhbCBzdHJpbmdzLlxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZShrcykgaWYgY291bnQoX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykpID4gMFxcblxcbl9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpIGlmIHtcXG5cXHRldmVyeSBrIGluIGtzIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgaGFzIG5vIFJBTkdFIGtleTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkluZGV4IEtleVNjaGVtYSBkb2VzIG5vdCBoYXZlIGEgcmFuZ2Uga2V5IGZvciBpbmRleFxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgdGhlIExTSSBhIHNvcnQga2V5OiBbdGFibGUgSEFTSCBrZXksIGl0cyBvd24gUkFOR0Uga2V5XVxcXCIsXFxuXFx0X3BmX2RkYmxzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0Y291bnQoa3MpID4gMFxcblxcdF9wZl9kZGJsc2hfcmVzb2x2YWJsZV9hbGwoa3MpXFxuXFx0bm90IFxcXCJSQU5HRVxcXCIgaW4gX3BmX2RkYmxzaF9rZXl0eXBlcyhrcylcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1sc2ktc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTG9jYWwgc2Vjb25kYXJ5IGluZGV4ICclcycgdXNlcyBoYXNoIGtleSAnJXMnIGJ1dCB0aGUgdGFibGUncyBoYXNoIGtleSBpcyAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgbGVhZGluZyBoYXNoIGtleSBhcyB0YWJsZSBLZXlTY2hlbWFcXFxcXFxcIlxcXCIsIFtpbmFtZSwgbHNpSGFzaCwgdGFibGVIYXNoXSksXFxuXFx0XFxcIkFuIExTSSBtdXN0IHJldXNlIHRoZSB0YWJsZSdzIHBhcnRpdGlvbiBrZXk7IHVzZSBhIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXggZm9yIGEgZGlmZmVyZW50IGhhc2gga2V5XFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHR0LmluZGV4ID09IDBcXG5cXHR0YWJsZUhhc2ggOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhYmxlSGFzaClcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0a3MgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0c29tZSBrIGluIGtzXFxuXFx0b2JqZWN0LmdldChrLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpID09IFxcXCJIQVNIXFxcIlxcblxcdGxzaUhhc2ggOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGxzaUhhc2gpXFxuXFx0bHNpSGFzaCAhPSB0YWJsZUhhc2hcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhYmxlIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG90IGFuZCBoeXBoZW4gKG1heCAyNTUpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiLFxuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbl0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIiwgXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy4tXXsxLDI1NX0kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRHluYW1vREIgYWNjZXB0cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmUsIGRvdCBhbmQgaHlwaGVuLCB1cCB0byAyNTUgY2hhcmFjdGVyc1xcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFibGUgdXNpbmcgW2EtekEtWjAtOV8uLV0gd2l0aGluIDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbl0gaW4gX3BmX2RkYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWJsZU5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgKG1pbmltdW0gMyBjaGFyYWN0ZXJzKSBpcyBlbmZvcmNlZC4gVGhlIDI1NS1jaGFyXFxuIyBtYXhpbXVtIGFuZCB0aGUgY2hhcmFjdGVyIHBhdHRlcm4gd2VyZSBub3QgbWVhc3VyZWQuIE5vdGUgcmVzb2x2ZSgpIHR1cm5zIGFcXG4jIFJlZi10by1yZXNvdXJjZSBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElEOyBhIGxvZ2ljYWwgSUQgc2hvcnQgZW5vdWdoIHRvXFxuIyB0cmlwIHRoaXMgcnVsZSB3aGlsZSBmZWVkaW5nIGEgVGFibGVOYW1lIGlzIHRyZWF0ZWQgYXMgdGhlIGJ1ZyBpdCBhbG1vc3RcXG4jIGNlcnRhaW5seSBpcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gM1xcXFxcXFwiXFxcIiwgW3RuXSksXFxuXFx0XFxcIlVzZSBhIHRhYmxlIG5hbWUgb2YgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLCBvciBvbWl0IFRhYmxlTmFtZSBhbmQgbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0Y291bnQodG4pIDwgM1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1pbnN0YW5jZS1hbWktYXJjaFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnN0YW5jZSB0eXBlIGFyY2hpdGVjdHVyZSBtdXN0IG1hdGNoIHRoZSBTU00gcHVibGljLXBhcmFtZXRlciBBTUkgYXJjaGl0ZWN0dXJlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyaWFhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlLXR5cGVzLmh0bWxcXFwiXFxuXFxuIyBHcmF2aXRvbiBuYW1pbmcgY29udmVudGlvbjogYSBcXFwiZ1xcXCIgYW1vbmcgdGhlIGxldHRlcnMgYWZ0ZXIgdGhlXFxuIyBnZW5lcmF0aW9uIGRpZ2l0ICh0NGcsIGM3Z24sIGltNGduLCBnNWcpLCBwbHVzIHRoZSBwcmUtY29udmVudGlvbiBhMS5cXG4jIG1hYyogZmFtaWxpZXMgYXJlIGV4Y2x1ZGVkIGZyb20ganVkZ21lbnQgZW50aXJlbHkuXFxuX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSkgaWYgcmVnZXgubWF0Y2goYF5bYS16XStbMC05XStbYS16MC05XSpnW2EtejAtOV0qJGAsIGZhbSlcXG5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiBmYW0gPT0gXFxcImExXFxcIlxcblxcbl9wZl9lYzJpYWFfZmFtKG5hbWUpIDo9IGZhbSBpZiB7XFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRmYW0gOj0gc3BsaXQoaXQsIFxcXCIuXFxcIilbMF1cXG5cXHRub3Qgc3RhcnRzd2l0aChmYW0sIFxcXCJtYWNcXFwiKVxcbn1cXG5cXG4jIHt7cmVzb2x2ZTpzc206Li4ufX0gc3RyaW5ncyBzdXJmYWNlIGFzIHtcXFwiX19keW5hbWljXFxcIjogXFxcImR5bmFtaWNcXG4jIHJlZmVyZW5jZToge3tyZXNvbHZlOnNzbTo8cGF0aD59fVxcXCJ9IG1hcmtlciBvYmplY3RzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMyk7IHRoZSByZWZlcmVuY2UgdGV4dCBpcyByZWFkIGZyb20gdGhlIG1hcmtlci5cXG5fcGZfZWMyaWFhX2ltZyhuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkltYWdlSWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChyYXcpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHJhdywgXFxcIl9fZHluYW1pY1xcXCIsIFxcXCJcXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGNvbnRhaW5zKGQsIFxcXCJ7e3Jlc29sdmU6c3NtOlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgeDg2XzY0IGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIGFybTY0OyB0aGUgbGF1bmNoIGZhaWxzIHdpdGggYW4gYXJjaGl0ZWN0dXJlIG1pc21hdGNoXFxcIiwgW3Jlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIildKSxcXG5cXHRcXFwiVXNlIGFuIGFybTY0IChHcmF2aXRvbikgaW5zdGFuY2UgdHlwZSBvciB0aGUgeDg2XzY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRub3QgX3BmX2VjMmlhYV9hcm1fZmFtKGZhbSlcXG5cXHRpbWcgOj0gX3BmX2VjMmlhYV9pbWcobmFtZSlcXG5cXHRjb250YWlucyhpbWcsIFxcXCJhcm02NFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbWFnZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnN0YW5jZSB0eXBlICclcycgaXMgYXJtNjQgKEdyYXZpdG9uKSBidXQgdGhlIEFNSSBwYXJhbWV0ZXIgcGF0aCBuYW1lcyB4ODZfNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4geDg2XzY0IGluc3RhbmNlIHR5cGUgb3IgdGhlIGFybTY0IEFNSSBwYXRoXFxcIixcXG5cXHRfcGZfZWMyaWFhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRmYW0gOj0gX3BmX2VjMmlhYV9mYW0obmFtZSlcXG5cXHRfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcIng4Nl82NFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLWxhdW5jaC10ZW1wbGF0ZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhdW5jaCB0ZW1wbGF0ZSBuYW1lcyBhcmUgMy0xMjggY2hhcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSgpLi9fXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1sYXVuY2gtdGVtcGxhdGUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUZW1wbGF0ZU5hbWUgJyVzJyBpcyByZWplY3RlZDogRUMyIHJlcXVpcmVzIDMtMTI4IGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycyBhbmQgLSAoICkgLiAvIF9cXFwiLCBbbl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB1c2luZyBvbmx5IGxldHRlcnMsIG51bWJlcnMgYW5kIC0gKCApIC4gLyBfICgzLTEyOCBjaGFyYWN0ZXJzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGF1bmNoVGVtcGxhdGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOSgpLi9fLV17MywxMjh9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLW5hdGd3LWFsbG9jYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTkFUIGdhdGV3YXkgQWxsb2NhdGlvbklkIGlzIHJlcXVpcmVkIGZvciBwdWJsaWMgY29ubmVjdGl2aXR5IGFuZCBmb3JiaWRkZW4gZm9yIHByaXZhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpOYXRHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMm5nYV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1uYXRnYXRld2F5Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbiMgQ29ubmVjdGl2aXR5VHlwZSBkZWZhdWx0cyB0byBwdWJsaWM7IGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBza2lwcyBib3RoIGRpcmVjdGlvbnMuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgX3BmX2VjMm5nYV9hYnNlbnQobmFtZSwgXFxcIkNvbm5lY3Rpdml0eVR5cGVcXFwiKVxcblxcbl9wZl9lYzJuZ2FfcHVibGljKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwdWJsaWNcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwcml2YXRlIE5BVCBnYXRld2F5IGNhbm5vdCB0YWtlIEFsbG9jYXRpb25JZCAoXFxcXFxcXCJBbGxvY2F0aW9uSWQgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBOQVQgR2F0ZXdheSB3aXRoIENvbm5lY3Rpdml0eSBUeXBlIHByaXZhdGUuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEFsbG9jYXRpb25JZCwgb3Igc3dpdGNoIENvbm5lY3Rpdml0eVR5cGUgdG8gcHVibGljXFxcIixcXG5cXHRfcGZfZWMybmdhX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29ubmVjdGl2aXR5VHlwZVxcXCIpID09IFxcXCJwcml2YXRlXFxcIlxcblxcdG5vdCBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb2NhdGlvbklkXFxcIixcXG5cXHRcXFwiQSBwdWJsaWMgTkFUIGdhdGV3YXkgcmVxdWlyZXMgQWxsb2NhdGlvbklkIChcXFxcXFxcIlRoZSByZXF1ZXN0IG11c3QgaW5jbHVkZSB0aGUgQWxsb2NhdGlvbklkIHBhcmFtZXRlci5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBbGxvY2F0ZSBhbiBFSVAgYW5kIHBhc3MgaXRzIEFsbG9jYXRpb25JZCwgb3Igc2V0IENvbm5lY3Rpdml0eVR5cGU6IHByaXZhdGVcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0X3BmX2VjMm5nYV9wdWJsaWMobmFtZSlcXG5cXHRfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQWxsb2NhdGlvbklkXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcGctY2x1c3Rlci1idXJzdGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGNsdXN0ZXIgcGxhY2VtZW50IGdyb3Vwc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ3Jvc3MtcmVzb3VyY2U6IG9ubHkgZmlyZXMgd2hlbiB0aGUgcmVmZXJlbmNlZCBwbGFjZW1lbnQgZ3JvdXAgaXMgaW5cXG4jIHRoZSB0ZW1wbGF0ZSB3aXRoIFN0cmF0ZWd5IGNsdXN0ZXIuIEEgbGl0ZXJhbCAocHJlLWV4aXN0aW5nKSBncm91cFxcbiMgbmFtZSBjYXJyaWVzIG5vIHN0cmF0ZWd5IGluZm9ybWF0aW9uIGFuZCBzdGF5cyBzaWxlbnQuXFxuX3BmX2VjMnBnYl9idXJzdGFibGUoZmFtKSBpZiBmYW0gaW4ge1xcXCJ0MlxcXCIsIFxcXCJ0M1xcXCIsIFxcXCJ0M2FcXFwiLCBcXFwidDRnXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW5zdGFuY2VUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyIHBsYWNlbWVudCBncm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICclcycgaW5zdGFuY2UgdHlwZTsgdGhlIGxhdW5jaCBmYWlscyBhdCBkZXBsb3lcXFwiLCBbaXRdKSxcXG5cXHRcXFwiVXNlIGEgbm9uLWJ1cnN0YWJsZSB0eXBlLCBvciBhIHNwcmVhZC9wYXJ0aXRpb24gcGxhY2VtZW50IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL3BsYWNlbWVudC1ncm91cHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCIpXFxuXFx0aXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhpdClcXG5cXHRfcGZfZWMycGdiX2J1cnN0YWJsZShzcGxpdChpdCwgXFxcIi5cXFwiKVswXSlcXG5cXHRwZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYWNlbWVudEdyb3VwTmFtZVxcXCIpXFxuXFx0cGcgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpQbGFjZW1lbnRHcm91cFxcXCIpXFxuXFx0cmVzb2x2ZShwZywgXFxcIlByb3BlcnRpZXMuU3RyYXRlZ3lcXFwiKSA9PSBcXFwiY2x1c3RlclxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItcm91dGUtdGFyZ2V0LWV4YWN0bHktb25lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcm91dGUgbXVzdCBuYW1lIGV4YWN0bHkgb25lIHRhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlJvdXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgMTEgdGFyZ2V0IHByb3BlcnRpZXMsIHN0cmFpZ2h0IGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlLlxcbl9wZl9lYzJydGVfdGFyZ2V0cyA6PSBbXFxcIkdhdGV3YXlJZFxcXCIsIFxcXCJMb2NhbEdhdGV3YXlJZFxcXCIsIFxcXCJDYXJyaWVyR2F0ZXdheUlkXFxcIiwgXFxcIk5hdEdhdGV3YXlJZFxcXCIsIFxcXCJOZXR3b3JrSW50ZXJmYWNlSWRcXFwiLCBcXFwiVnBjUGVlcmluZ0Nvbm5lY3Rpb25JZFxcXCIsIFxcXCJFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWRcXFwiLCBcXFwiVHJhbnNpdEdhdGV3YXlJZFxcXCIsIFxcXCJWcGNFbmRwb2ludElkXFxcIiwgXFxcIkNvcmVOZXR3b3JrQXJuXFxcIiwgXFxcIkluc3RhbmNlSWRcXFwiXVxcblxcbl9wZl9lYzJydGVfY291bnQobmFtZSkgOj0gbiBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMycnRlX3RhcmdldHM7IG9iamVjdC5nZXQocHJvcHMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcm91dGUgbmFtZXMgJXYgdGFyZ2V0czsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9mIEdhdGV3YXlJZCwgTG9jYWxHYXRld2F5SWQsIENhcnJpZXJHYXRld2F5SWQsIE5hdEdhdGV3YXlJZCwgTmV0d29ya0ludGVyZmFjZUlkLCBWcGNQZWVyaW5nQ29ubmVjdGlvbklkLCBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQsIFRyYW5zaXRHYXRld2F5SWQsIFZwY0VuZHBvaW50SWQsIENvcmVOZXR3b3JrQXJuIG9yIEluc3RhbmNlSWRcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgdGFyZ2V0IHByb3BlcnR5IG9uIHRoZSByb3V0ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjMi1yb3V0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlJvdXRlXFxcIilcXG5cXHRuIDo9IF9wZl9lYzJydGVfY291bnQobmFtZSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctY2lkci12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIENpZHJJcCBtdXN0IGJlIGEgd2VsbC1mb3JtZWQgSVB2NCBDSURSXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMyc2N2X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHR0b19udW1iZXIoc3BsaXQoYywgXFxcIi9cXFwiKVsxXSkgPiAzMlxcbn1cXG5cXG5fcGZfZWMyc2N2X21hbGZvcm1lZChjKSBpZiB7XFxuXFx0cmVnZXgubWF0Y2goYF5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XSsvWzAtOV0rJGAsIGMpXFxuXFx0c29tZSBvIGluIHNwbGl0KHNwbGl0KGMsIFxcXCIvXFxcIilbMF0sIFxcXCIuXFxcIilcXG5cXHR0b19udW1iZXIobykgPiAyNTVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5DaWRySXBcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ2lkcklwICclcycgaXMgbWFsZm9ybWVkIChvY3RldHMgbXVzdCBiZSAwLTI1NSwgcHJlZml4IDAtMzIpOyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQ0lEUiBibG9jayAlcyBpcyBtYWxmb3JtZWRcXFxcXFxcIlxcXCIsIFtjLCBjXSksXFxuXFx0XFxcIkZpeCB0aGUgQ0lEUiBub3RhdGlvblxcXCIsXFxuXFx0X3BmX2VjMnNjdl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGRpciBpbiB7XFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtkaXJdKSlcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdGMgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIkNpZHJJcFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0X3BmX2VjMnNjdl9tYWxmb3JtZWQoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctY2lkci12YWxpZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkcklwXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIG5hbWVzIG1heSBub3Qgc3RhcnQgd2l0aCBzZy1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJHcm91cE5hbWUgJyVzJyBzdGFydHMgd2l0aCB0aGUgcmVzZXJ2ZWQgcHJlZml4OyBFQzIgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiR3JvdXAgbmFtZXMgbWF5IG5vdCBiZSBpbiB0aGUgZm9ybWF0IHNnLSpcXFxcXFxcIlxcXCIsIFtnbl0pLFxcblxcdFxcXCJQaWNrIGEgbmFtZSB0aGF0IGRvZXMgbm90IHN0YXJ0IHdpdGggc2ctXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZWN1cml0eUdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0Z24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhnbilcXG5cXHRzdGFydHN3aXRoKGduLCBcXFwic2ctXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcnVsZS1kZXNjcmlwdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBydWxlIGRlc2NyaXB0aW9ucyBhcmUgbGltaXRlZCB0byAyNTUgY2hhcnMgb2YgYSByZXN0cmljdGVkIEFTQ0lJIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnZGVzY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfc2dkZXNjX3BhdCA6PSBgXlthLXpBLVowLTkuXyA6LygpIyxAXFxcXFtcXFxcXSs9Jjt7fSEkKi1dezAsMjU1fSRgXFxuXFxuIyBpbmxpbmUgcnVsZSBsaXN0cyBvbiBhIHNlY3VyaXR5IGdyb3VwXFxuX3BmX3NnZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIGRlc2NdIGlmIHtcXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRzb21lIGtleSBpbiBbXFxcIlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiXVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3Qobiwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtrZXldKSlcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRkZXNjIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkRlc2NyaXB0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZGVzYylcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX3NnZGVzY19wYXQsIGRlc2MpXFxuXFx0bmFtZSA6PSBuXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkRlc2NyaXB0aW9uXFxcIiwgW2tleSwgci5pbmRleF0pXFxufVxcblxcbiMgc3RhbmRhbG9uZSBydWxlIHJlc291cmNlc1xcbl9wZl9zZ2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkZXNjXSBpZiB7XFxuXFx0c29tZSB0IGluIFtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIl1cXG5cXHRzb21lIG4gaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRkZXNjIDo9IHJlc29sdmUobiwgXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyhkZXNjKVxcblxcdG5vdCByZWdleC5tYXRjaChfcGZfc2dkZXNjX3BhdCwgZGVzYylcXG5cXHRuYW1lIDo9IG5cXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1ydWxlLWRlc2NyaXB0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRwYXRoLFxcblxcdHNwcmludGYoXFxcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgZGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogRUMyIGFsbG93cyBmZXdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldCBhLXpBLVowLTkuIF8tOi8oKSMsQFtdKz0mO3t9ISQqIChub24tQVNDSUkgdGV4dCBzdWNoIGFzIEphcGFuZXNlIGlzIHJlamVjdGVkKVxcXCIsIFtkZXNjXSksXFxuXFx0XFxcIldyaXRlIHRoZSBydWxlIGRlc2NyaXB0aW9uIGluIHRoZSBhbGxvd2VkIEFTQ0lJIHNldCBhbmQga2VlcCBpdCB1bmRlciAyNTYgY2hhcmFjdGVyc1xcXCIsXFxuXFx0X3BmX3NnZGVzY191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkZXNjXSBpbiBfcGZfc2dkZXNjX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgc2VjdXJpdHkgZ3JvdXAgcnVsZSB0YWtlcyBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJzc2VfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuIyBUaGUgbWVtYmVyIHNldHMgY29tZSB2ZXJiYXRpbSBmcm9tIHRoZSBFQzIgZXJyb3IgbWVzc2FnZXMuXFxuX3BmX2VjMnNzZV9zZXRzIDo9IHtcXFwiaW5cXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJTb3VyY2VTZWN1cml0eUdyb3VwSWRcXFwiLCBcXFwiU291cmNlUHJlZml4TGlzdElkXFxcIl0sIFxcXCJvdXRcXFwiOiBbXFxcIkNpZHJJcFxcXCIsIFxcXCJDaWRySXB2NlxcXCIsIFxcXCJEZXN0aW5hdGlvblByZWZpeExpc3RJZFxcXCIsIFxcXCJEZXN0aW5hdGlvblNlY3VyaXR5R3JvdXBJZFxcXCJdfVxcblxcbl9wZl9lYzJzc2VfZGlya2V5IDo9IHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiOiBcXFwiaW5cXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfcmtleSA6PSB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCI6IFxcXCJvdXRcXFwifVxcblxcbl9wZl9lYzJzc2VfY291bnQoZW50cnksIHNldGtleSkgOj0gbiBpZiB7XFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG4gOj0gY291bnQoW2sgfCBzb21lIGsgaW4gX3BmX2VjMnNzZV9zZXRzW3NldGtleV07IG9iamVjdC5nZXQoZW50cnksIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJdKVxcbn1cXG5cXG4jIEVtYmVkZGVkIHJ1bGVzOiB0d28gb3IgbW9yZSBtZW1iZXJzIGlzIGFuIGVycm9yOyB6ZXJvIGlzIHRvbGVyYXRlZFxcbiMgKGEgc291cmNlLWxlc3MgZW1iZWRkZWQgaW5ncmVzcyBkZXBsb3llZCBjbGVhbiBvbiAyMDI2LTA5LTAzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkXFxcIiwgW2RpciwgaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRoZSBydWxlIHNldHMgJXYgb2YgJXY7IEVDMiBhbGxvd3Mgb25seSBvbmUgKFxcXFxcXFwiT25seSBvbmUgb2YgJXMgY2FuIGJlIHNwZWNpZmllZFxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9kaXJrZXlbZGlyXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpdGVtLnZhbHVlLCBrKVxcblxcdG4gPj0gMlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1zb3VyY2UtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIHJlcXVpcmVzIGV4YWN0bHkgb25lIChcXFxcXFxcIkV4YWN0bHkgb25lIG9mICVzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBub3QgZW1wdHlcXFxcXFxcIilcXFwiLCBbbiwgX3BmX2VjMnNzZV9zZXRzW2tdLCBjb25jYXQoXFxcIiwgXFxcIiwgX3BmX2VjMnNzZV9zZXRzW2tdKV0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgc291cmNlL2Rlc3RpbmF0aW9uIGZpZWxkIG9uIHRoZSBydWxlIHJlc291cmNlXFxcIixcXG5cXHRfcGZfZWMyc3NlX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRrIDo9IF9wZl9lYzJzc2VfcmtleVtydHlwZV1cXG5cXHRuIDo9IF9wZl9lYzJzc2VfY291bnQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIGspXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXN1Ym5ldC1jaWRyLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0IElQdjQgQ0lEUiBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlN1Ym5ldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zdWJuZXRjaWRyX2xlbihjKSA6PSB0b19udW1iZXIocGFydHNbMV0pIGlmIHtcXG5cXHRwYXJ0cyA6PSBzcGxpdChjLCBcXFwiL1xcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc3VibmV0LWNpZHItc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTdWJuZXQgQ0lEUiAnJXMnIGhhcyBhIC8lZCBuZXRtYXNrOyBFQzIgYWNjZXB0cyAvMTYgdGhyb3VnaCAvMjggYW5kIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIG90aGVyd2lzZVxcXCIsIFtjLCBuXSksXFxuXFx0XFxcIlJlc2l6ZSB0aGUgc3VibmV0IENJRFIgdG8gYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvc3VibmV0LXNpemluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlN1Ym5ldFxcXCIpXFxuXFx0YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIpXFxuXFx0aXNfc3RyaW5nKGMpXFxuXFx0biA6PSBfcGZfc3VibmV0Y2lkcl9sZW4oYylcXG5cXHRfcGZfc3VibmV0Y2lkcl9vdXQobilcXG59XFxuXFxuX3BmX3N1Ym5ldGNpZHJfb3V0KG4pIGlmIG4gPCAxNlxcblxcbl9wZl9zdWJuZXRjaWRyX291dChuKSBpZiBuID4gMjhcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi11c2VyZGF0YS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDMiB1c2VyIGRhdGEgaXMgbGltaXRlZCB0byAxNjM4NCBieXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl91ZHN6X2ZpeCA6PSBcXFwiS2VlcCB1c2VyIGRhdGEgdW5kZXIgMTYzODQgYnl0ZXM7IG1vdmUgbGFyZ2UgcGF5bG9hZHMgdG8gUzMgYW5kIGZldGNoIHRoZW0gZnJvbSBhIHNtYWxsIGJvb3RzdHJhcCBzY3JpcHRcXFwiXFxuXFxuX3BmX3Vkc3pfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2VkYXRhLWFkZC11c2VyLWRhdGEuaHRtbFxcXCJcXG5cXG5fcGZfdWRzel9saW1pdCA6PSAxNjM4NFxcblxcbiMgYmFzZTY0IOaWh+Wtl+WIl+OBruODh+OCs+ODvOODieW+jOODkOOCpOODiOaVsO+8iOODkeODh+OCo+ODs+OCsOiAg+aFru+8iVxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAyIGlmIGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDEgaWYge1xcblxcdGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXHRub3QgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG59XFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoY291bnQocykgKiAzKSAvIDQgaWYgbm90IGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXG5fcGZfdWRzel9wYXRocyA6PSB7XFxuXFx0XFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLlVzZXJEYXRhXFxcIixcXG5cXHRcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIjogXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVEYXRhLlVzZXJEYXRhXFxcIixcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYzjg6rjg4bjg6njg6sgYmFzZTY0IOaWh+Wtl+WIl+OBruOCseODvOOCuVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGRlY29kZXMgdG8gYWJvdXQgJXYgYnl0ZXMsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3NpemUsIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19zdHJpbmcodWQpXFxuXFx0c2l6ZSA6PSBfcGZfdWRzel9kZWNvZGVkKHVkKVxcblxcdHNpemUgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjCB7XFxcIkZuOjpCYXNlNjRcXFwiOiBcXFwiPGxpdGVyYWw+XFxcIn0g44Gu44Kx44O844K577yI44Ko44Oz44Kz44O844OJ5YmN44Gu55Sf44OQ44Kk44OI5pWw44Gn5Yik5a6a77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgaXMgJWQgYnl0ZXMgYmVmb3JlIGJhc2U2NCBlbmNvZGluZywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbY291bnQoaW5uZXIpLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfb2JqZWN0KHVkKVxcblxcdGlubmVyIDo9IG9iamVjdC5nZXQodWQsIFxcXCJGbjo6QmFzZTY0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5uZXIpXFxuXFx0Y291bnQoaW5uZXIpID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIElvcHMvVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgdHlwZSdzIHN1cHBvcnRlZCByYW5nZXMgYW5kIHJhdGlvc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl92b2xpb3BzX2ZpeCA6PSBcXFwiTWF0Y2ggSW9wcy9UaHJvdWdocHV0IHRvIHRoZSB2b2x1bWUgdHlwZTogZ3AzIDMwMDAtODAwMDAgSU9QUyAobWF4IDUwMC9HaUIsIHRocm91Z2hwdXQgMTI1LTIwMDAgTWlCL3MgYW5kIGF0IG1vc3QgSU9QUy80KSwgaW8xIDEwMC02NDAwMCAobWF4IDUwL0dpQiksIGlvMiAxMDAtMjU2MDAwIChtYXggMTAwMC9HaUIpOyBncDIvc3QxL3NjMS9zdGFuZGFyZCBhY2NlcHQgbmVpdGhlciBwcm9wZXJ0eVxcXCJcXG5cXG5fcGZfdm9saW9wc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfcmFuZ2UgOj0ge1xcXCJncDNcXFwiOiBbMzAwMCwgODAwMDBdLCBcXFwiaW8xXFxcIjogWzEwMCwgNjQwMDBdLCBcXFwiaW8yXFxcIjogWzEwMCwgMjU2MDAwXX1cXG5cXG5fcGZfdm9saW9wc19wZXJfZ2liIDo9IHtcXFwiZ3AzXFxcIjogNTAwLCBcXFwiaW8xXFxcIjogNTAsIFxcXCJpbzJcXFwiOiAxMDAwfVxcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPCBsb1xcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPiBoaVxcblxcbl9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxuXFxuIyBJT1BTIOOBjOWei+OBlOOBqOOBrue1tuWvvuODrOODs+OCuOWkllxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgJWQtJWQgZm9yICVzIHZvbHVtZXNcXFwiLCBbbiwgclswXSwgclsxXSwgdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyIDo9IF9wZl92b2xpb3BzX3JhbmdlW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dChuLCByWzBdLCByWzFdKVxcbn1cXG5cXG4jIElPUFMgOiDjgrXjgqTjgrrmr5Tjga7otoXpgY5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAlZCBJT1BTIHBlciBHaUIgZm9yICVzIChTaXplICV2IEdpQiBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbbiwgcmF0aW8sIHZ0LCBzLCBzICogcmF0aW9dKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyYXRpbyA6PSBfcGZfdm9saW9wc19wZXJfZ2liW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdG4gPiBzICogcmF0aW9cXG59XFxuXFxuIyBJb3BzIOOCkuWPl+OBkeS7mOOBkeOBquOBhOWei+OBqyBJb3BzIOOCkuaMh+WumlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMsIGlvMSwgaW8yKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJncDJcXFwiLCBcXFwic3QxXFxcIiwgXFxcInNjMVxcXCIsIFxcXCJzdGFuZGFyZFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG59XFxuXFxuIyBUaHJvdWdocHV0IOOBryBncDMg5bCC55SoXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMyk7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh2dClcXG5cXHR2dCAhPSBcXFwiZ3AzXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQg44Gu57W25a++44Os44Oz44K4XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAxMjUtMjAwMCBmb3IgZ3AzIHZvbHVtZXNcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dCh0LCAxMjUsIDIwMDApXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQgOiBJT1BTIOavlO+8iOacgOWkpyAwLjI1IE1pQi9zIHBlciBJT1BT77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUyAoJXYgSU9QUyBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbdCwgbiwgbiAvIDRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHR0ICogNCA+IG5cXG59XFxuXFxuIyBncDMg44GnIElvcHMg5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIDMwMDDvvInjga7jgajjgY3jga4gVGhyb3VnaHB1dCDmr5RcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyA3NTAsIHRoZSBtYXhpbXVtIGZvciB0aGUgZGVmYXVsdCAzMDAwIElPUFMgKDAuMjUgTWlCL3MgcGVyIElPUFMpOyBwcm92aXNpb24gSW9wcyBleHBsaWNpdGx5IG9yIGxvd2VyIHRoZSB0aHJvdWdocHV0XFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRub3QgX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHR0ID4gNzUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImlvMSBhbmQgaW8yIHZvbHVtZXMgcmVxdWlyZSB0aGUgSW9wcyBwcm9wZXJ0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcGYtZWMyLXZvbHVtZS1pb3BzIHZhbGlkYXRlcyBJb3BzIHZhbHVlczsgdGhpcyBydWxlIGNvdmVycyB0aGVcXG4jIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50IChhYnNlbmNlKSB0aGF0IHRoZSBzY2hlbWEgY2Fubm90IGV4cHJlc3MuXFxuX3BmX2VjMnZpcl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlcyB2b2x1bWVzIHJlcXVpcmUgSW9wczsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsIHdpdGggXFxcXFxcXCJUaGUgcGFyYW1ldGVyIGlvcHMgbXVzdCBiZSBzcGVjaWZpZWQgZm9yICVzIHZvbHVtZXMuXFxcXFxcXCJcXFwiLCBbdnQsIHZ0XSksXFxuXFx0XFxcIlNldCBJb3BzIChpbzE6IDEwMC02NDAwMCwgaW8yOiAxMDAtMjU2MDAwKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0X3BmX2VjMnZpcl9hYnNlbnQobmFtZSwgXFxcIklvcHNcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLbXNLZXlJZCBvbiBhIHZvbHVtZSByZXF1aXJlcyBFbmNyeXB0ZWQgdG8gYmUgdHJ1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRW5jcnlwdGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfZWMydmtlX2JhZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuY3J5cHRlZFxcXCIpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWttcy1lbmNyeXB0ZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkttc0tleUlkXFxcIixcXG5cXHRcXFwiS21zS2V5SWQgaXMgc2V0IGJ1dCBFbmNyeXB0ZWQgaXMgbm90IHRydWU7IEVDMiByZWplY3RzIHRoZSB2b2x1bWUgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgW0ttc0tleUlkXSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIEVuY3J5cHRlZCB0byBiZSBzZXQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgRW5jcnlwdGVkOiB0cnVlIGFsb25nc2lkZSBLbXNLZXlJZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVm9sdW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS21zS2V5SWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0X3BmX2VjMnZrZV9iYWQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLXNpemUtbWluaW11bVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgdm9sdW1lIHNpemUgbXVzdCBtZWV0IHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtIChpbzEvaW8yIDQgR2lCLCBzdDEvc2MxIDEyNSBHaUIpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IG1pbmltdW1zOiB0aGUgaGlzdG9yaWNhbCAxNjM4NCBHaUIgbWF4aW11bSBubyBsb25nZXIgaG9sZHNcXG4jIChhIDE3MDAwIEdpQiBncDMgZGVwbG95ZWQgY2xlYW4gb24gMjAyNi0wOS0wMykuXFxuX3BmX2VjMnZzbV9taW4gOj0ge1xcXCJpbzFcXFwiOiA0LCBcXFwiaW8yXFxcIjogNCwgXFxcInN0MVxcXCI6IDEyNSwgXFxcInNjMVxcXCI6IDEyNX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplICV2IEdpQiBpcyBiZWxvdyB0aGUgJXYgR2lCIG1pbmltdW0gZm9yICVzIHZvbHVtZXMgKFxcXFxcXFwiJXMgdm9sdW1lcyBtdXN0IGJlIGF0IGxlYXN0ICV2IEdpQiBpbiBzaXplLlxcXFxcXFwiKVxcXCIsIFtzLCBtbiwgdnQsIHZ0LCBtbl0pLFxcblxcdFxcXCJSYWlzZSBTaXplIHRvIHRoZSB2b2x1bWUgdHlwZSBtaW5pbXVtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0bW4gOj0gX3BmX2VjMnZzbV9taW5bdnRdXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0cyA8IG1uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIElQdjQgQ0lEUiBibG9jayBuZXRtYXNrIG11c3QgYmUgYmV0d2VlbiAvMTYgYW5kIC8yOFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSB2YWxpZGF0ZXMgc3VibmV0IGNvbnRhaW5tZW50IChFMzA1OSkgYW5kIG92ZXJsYXAgKEUzMDYwKVxcbiMgYnV0IGFjY2VwdHMgYW55IFZQQyBuZXRtYXNrOyBFQzIgcmVqZWN0cyBhbnl0aGluZyBvdXRzaWRlIC8xNi4uLzI4LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwYy1jaWRyLWJsb2NrLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNpZHJCbG9ja1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVlBDIENJRFIgYmxvY2sgJyVzJyBoYXMgbmV0bWFzayAvJXY7IEVDMiBvbmx5IGFjY2VwdHMgLzE2IHRocm91Z2ggLzI4IChcXFxcXFxcIlRoZSBDSURSICclcycgaXMgaW52YWxpZC5cXFxcXFxcIilcXFwiLCBbYywgcCwgY10pLFxcblxcdFxcXCJVc2UgYSBuZXRtYXNrIGJldHdlZW4gLzE2IGFuZCAvMjhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDXFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRwIDo9IHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKVxcblxcdF9wZl9lYzJ2Y3Nfb3V0KHApXFxufVxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPCAxNlxcblxcbl9wZl9lYzJ2Y3Nfb3V0KHApIGlmIHAgPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtZ2F0ZXdheS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXkgVlBDIGVuZHBvaW50cyBvbmx5IGV4aXN0IGZvciBTMyBhbmQgRHluYW1vREJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVnBjRW5kcG9pbnRUeXBlIGRlZmF1bHRzIHRvIEdhdGV3YXkgKG1lYXN1cmVkOiBhIHR5cGUtbGVzcyBlbmRwb2ludFxcbiMgZmFpbHMgd2l0aCBcXFwiRW5kcG9pbnQgdHlwZSAoR2F0ZXdheSkgLi4uXFxcIiBtZXNzYWdlcykuXFxuX3BmX2VjMnZnc19nYXRld2F5KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbmx5IFMzIGFuZCBEeW5hbW9EQiBvZmZlciBHYXRld2F5IGVuZHBvaW50czsgXFxcXFxcXCIlc1xcXFxcXFwiIGZhaWxzIHdpdGggXFxcXFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSBkb2VzIG5vdCBtYXRjaCBhdmFpbGFibGUgc2VydmljZSB0eXBlc1xcXFxcXFwiXFxcIiwgW2NvbmNhdChcXFwiLlxcXCIsIHBhcnRzKV0pLFxcblxcdFxcXCJVc2UgY29tLmFtYXpvbmF3cy48cmVnaW9uPi5zMyBvciAuZHluYW1vZGIsIG9yIHN3aXRjaCBWcGNFbmRwb2ludFR5cGUgdG8gSW50ZXJmYWNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvZ2F0ZXdheS1lbmRwb2ludHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0X3BmX2VjMnZnc19nYXRld2F5KG5hbWUpXFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0bm90IHBhcnRzWzNdIGluIHtcXFwiczNcXFwiLCBcXFwiZHluYW1vZGJcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlZQQyBlbmRwb2ludCBzZXJ2aWNlIG5hbWVzIG11c3QgdXNlIHRoZSBkZXBsb3kgcmVnaW9uIHVubGVzcyBTZXJ2aWNlUmVnaW9uIGlzIHNldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZzcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3ByaXZhdGVsaW5rL3ByaXZhdGVsaW5rLWFjY2Vzcy1hd3Mtc2VydmljZXMuaHRtbFxcXCJcXG5cXG4jIE9ubHkgY29tLmFtYXpvbmF3cy48cmVnaW9uPi48c2VydmljZT4gbmFtZXMgd2hlcmUgdGhlIHRoaXJkIHNlZ21lbnQgaXNcXG4jIHJlZ2lvbi1zaGFwZWQ7IG5hbWVzIGxpa2UgY29tLmFtYXpvbmF3cy5zMy1nbG9iYWwuYWNjZXNzcG9pbnQgc3RheSBvdXQuXFxuX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKSA6PSBwYXJ0cyBpZiB7XFxuXFx0c24gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHNuKVxcblxcdHBhcnRzIDo9IHNwbGl0KHNuLCBcXFwiLlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDRcXG5cXHRwYXJ0c1swXSA9PSBcXFwiY29tXFxcIlxcblxcdHBhcnRzWzFdID09IFxcXCJhbWF6b25hd3NcXFwiXFxuXFx0cmVnZXgubWF0Y2goYF5bYS16XXsyfSgtW2Etel0rKSstWzAtOV0rJGAsIHBhcnRzWzJdKVxcbn1cXG5cXG5fcGZfZWMydnNyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS1zZXJ2aWNlLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50IHNlcnZpY2UgJyVzJyBuYW1lcyByZWdpb24gJXMgYnV0IHRoaXMgc3RhY2sgZGVwbG95cyB0byAlczsgd2l0aG91dCBTZXJ2aWNlUmVnaW9uIHRoZSBsb29rdXAgaXMgcmVnaW9uYWwgYW5kIHRoZSBjcmVhdGUgZmFpbHNcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpLCBwYXJ0c1syXSwgcmVnaW9uXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxkZXBsb3ktcmVnaW9uPi48c2VydmljZT4sIG9yIHNldCBTZXJ2aWNlUmVnaW9uIGZvciBjcm9zcy1yZWdpb24gUHJpdmF0ZUxpbmtcXFwiLFxcblxcdF9wZl9lYzJ2c3JfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHBhcnRzIDo9IF9wZl9lYzJ2c3JfcGFydHMobmFtZSlcXG5cXHRwYXJ0c1syXSAhPSByZWdpb25cXG5cXHRfcGZfZWMydnNyX2Fic2VudChuYW1lLCBcXFwiU2VydmljZVJlZ2lvblxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3VibmV0SWRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEdhdGV3YXkgZW5kcG9pbnRzIChhbmQgUm91dGVUYWJsZUlkcyBvbmx5IG9uIEdhdGV3YXkpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnRjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXZwY2VuZHBvaW50Lmh0bWxcXFwiXFxuXFxuX3BmX2VjMnZ0Y190eXBlKG5hbWUpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0VuZHBvaW50VHlwZVxcXCIsIFxcXCJHYXRld2F5XFxcIilcXG59XFxuXFxuX3BmX2VjMnZ0Y19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldElkc1xcXCIsXFxuXFx0XFxcIkEgR2F0ZXdheSBlbmRwb2ludCBjYW5ub3QgdGFrZSBTdWJuZXRJZHMgKFxcXFxcXFwiU3VibmV0IElEcyBhcmUgb25seSBzdXBwb3J0ZWQgZm9yIEludGVyZmFjZSBhbmQgR2F0ZXdheUxvYWRCYWxhbmNlciB0eXBlIFZQQyBFbmRwb2ludHMuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFN1Ym5ldElkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogSW50ZXJmYWNlXFxcIixcXG5cXHRfcGZfZWMydnRjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydnRjX3R5cGUobmFtZSkgPT0gXFxcIkdhdGV3YXlcXFwiXFxuXFx0X3BmX2VjMnZ0Y19oYXMobmFtZSwgXFxcIlN1Ym5ldElkc1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZwY2UtdHlwZS1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlVGFibGVJZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgJXMgZW5kcG9pbnQgY2Fubm90IHRha2UgUm91dGVUYWJsZUlkczsgb25seSBHYXRld2F5IGVuZHBvaW50cyBhdHRhY2ggdG8gcm91dGUgdGFibGVzXFxcIiwgW3RdKSxcXG5cXHRcXFwiUmVtb3ZlIFJvdXRlVGFibGVJZHMsIG9yIHNldCBWcGNFbmRwb2ludFR5cGU6IEdhdGV3YXlcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdHQgOj0gX3BmX2VjMnZ0Y190eXBlKG5hbWUpXFxuXFx0dCAhPSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRpc19zdHJpbmcodClcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiUm91dGVUYWJsZUlkc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNsdXN0ZXItbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1MgY2x1c3RlciBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpDbHVzdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY2x1c3Rlci1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DbHVzdGVyTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2x1c3Rlck5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6Q2x1c3RlclxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNsdXN0ZXJOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1jb2RlZGVwbG95LWxiXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNPREVfREVQTE9ZIGRlcGxveW1lbnQgY29udHJvbGxlciByZXF1aXJlcyBhIGxvYWQgYmFsYW5jZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGaXJlcyBvbiBhIG1pc3Npbmcga2V5IG9yIGEgcHJlc2VudC1idXQtZW1wdHkgbGlzdDsgYW4gdW5yZXNvbHZhYmxlXFxuIyBMb2FkQmFsYW5jZXJzIHZhbHVlIHN0YXlzIHNpbGVudCAobWFya2VyIG9iamVjdHMgYXJlIFxcXCJwcmVzZW50XFxcIikuXFxuX3BmX2Vjc2NkbGJfbm9uZShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkxvYWRCYWxhbmNlcnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9lY3NjZGxiX25vbmUobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGxicyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTG9hZEJhbGFuY2Vyc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkobGJzKVxcblxcdGNvdW50KGxicykgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWNvZGVkZXBsb3ktbGJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyXFxcIixcXG5cXHRcXFwiRGVwbG95bWVudENvbnRyb2xsZXIgaXMgQ09ERV9ERVBMT1kgYnV0IG5vIExvYWRCYWxhbmNlcnMgYXJlIGNvbmZpZ3VyZWQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcInRoZSBzZXJ2aWNlIHJlcXVpcmVzIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgb3IgTmV0d29yayBMb2FkIEJhbGFuY2VyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBMb2FkQmFsYW5jZXJzIGVudHJ5IHdpdGggYSB0YXJnZXQgZ3JvdXAsIG9yIHVzZSB0aGUgRUNTIGNvbnRyb2xsZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb250cm9sbGVyLlR5cGVcXFwiKSA9PSBcXFwiQ09ERV9ERVBMT1lcXFwiXFxuXFx0X3BmX2Vjc2NkbGJfbm9uZShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWRhZW1vbi1kZXNpcmVkLWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRBRU1PTiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IGFjY2VwdCBEZXNpcmVkQ291bnRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZXNpcmVkQ291bnQgMCBmYWlscyB0b28gKHN2MDNiKSAtIGFueSBwcmVzZW5jZSBvZiB0aGUga2V5IGlzIHRoZSB2aW9sYXRpb24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1kYWVtb24tZGVzaXJlZC1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVzaXJlZENvdW50XFxcIixcXG5cXHRcXFwiU2NoZWR1bGluZ1N0cmF0ZWd5IGlzIERBRU1PTiBidXQgRGVzaXJlZENvdW50IGlzIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIGRhZW1vbiBzY2hlZHVsaW5nIHN0cmF0ZWd5IGRvZXMgbm90IHN1cHBvcnQgYSBkZXNpcmVkIGNvdW50IGZvciBzZXJ2aWNlc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIERlc2lyZWRDb3VudCBmcm9tIERBRU1PTiBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2NoZWR1bGluZ1N0cmF0ZWd5XFxcIikgPT0gXFxcIkRBRU1PTlxcXCJcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRub3Qgb2JqZWN0LmdldChwcm9wcywgXFxcIkRlc2lyZWRDb3VudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1kZXBsb3ltZW50LXBlcmNlbnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGVwbG95bWVudENvbmZpZ3VyYXRpb24gcGVyY2VudCBib3VuZHMgKG1pbiA8PSAxMDAsIG1heCA+PSAxMDApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZGVwbG95bWVudC1wZXJjZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NaW5pbXVtSGVhbHRoeVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbmltdW1IZWFsdGh5UGVyY2VudCAldiBleGNlZWRzIDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWluaW11bUhlYWx0aHlQZXJjZW50IG11c3QgYmUgYXQgbW9zdCAxMDBcXFxcXFxcIlxcXCIsIFttaW5wXSksXFxuXFx0XFxcIktlZXAgTWluaW11bUhlYWx0aHlQZXJjZW50IGF0IDEwMCBvciBiZWxvd1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdG1pbnAgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWluaW11bUhlYWx0aHlQZXJjZW50XFxcIikpXFxuXFx0bWlucCA+IDEwMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWRlcGxveW1lbnQtcGVyY2VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbmZpZ3VyYXRpb24uTWF4aW11bVBlcmNlbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heGltdW1QZXJjZW50ICV2IGlzIGJlbG93IDEwMDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibWF4aW11bVBlcmNlbnQgbXVzdCBiZSBhdCBsZWFzdCAxMDBcXFxcXFxcIlxcXCIsIFttYXhwXSksXFxuXFx0XFxcIktlZXAgTWF4aW11bVBlcmNlbnQgYXQgMTAwIG9yIGFib3ZlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bWF4cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NYXhpbXVtUGVyY2VudFxcXCIpKVxcblxcdG1heHAgPCAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1mYXJnYXRlLXBsYWNlbWVudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQbGFjZW1lbnQgY29uc3RyYWludHMgYW5kIHN0cmF0ZWdpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gRkFSR0FURVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWZhcmdhdGUtcGxhY2VtZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2tleV0pLFxcblxcdHNwcmludGYoXFxcIiVzIGlzIHNldCBidXQgdGhlIEZBUkdBVEUgbGF1bmNoIHR5cGUgZG9lcyBub3Qgc3VwcG9ydCB0YXNrIHBsYWNlbWVudDsgQ3JlYXRlU2VydmljZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtrZXldKSxcXG5cXHRcXFwiUmVtb3ZlIHBsYWNlbWVudCBjb25zdHJhaW50cy9zdHJhdGVnaWVzIGZyb20gRmFyZ2F0ZSBzZXJ2aWNlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVHlwZVxcXCIpID09IFxcXCJGQVJHQVRFXFxcIlxcblxcdHNvbWUga2V5IGluIHtcXFwiUGxhY2VtZW50Q29uc3RyYWludHNcXFwiLCBcXFwiUGxhY2VtZW50U3RyYXRlZ2llc1xcXCJ9XFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBba2V5XSkpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGF1bmNoLXR5cGUtY2FwYWNpdHktcHJvdmlkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGF1bmNoVHlwZSBhbmQgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1sYXVuY2gtdHlwZS1jYXBhY2l0eS1wcm92aWRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMYXVuY2hUeXBlICclcycgYW5kIENhcGFjaXR5UHJvdmlkZXJTdHJhdGVneSBjYW5ub3QgYm90aCBiZSBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlNwZWNpZnlpbmcgYm90aCBhIGxhdW5jaCB0eXBlIGFuZCBjYXBhY2l0eSBwcm92aWRlciBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLCBbbHRdKSxcXG5cXHRcXFwiUmVtb3ZlIExhdW5jaFR5cGUgb3IgdGhlIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5MYXVuY2hUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcobHQpXFxuXFx0Y291bnQoW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNhcGFjaXR5UHJvdmlkZXJTdHJhdGVneVxcXCIpXSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGxvYWQgYmFsYW5jZXIgZW50cnkgdGFrZXMgZWl0aGVyIFRhcmdldEdyb3VwQXJuIG9yIExvYWRCYWxhbmNlck5hbWUsIG5vdCBib3RoXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtbGItdGFyZ2V0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2Vyc1xcXCIsXFxuXFx0XFxcIkEgTG9hZEJhbGFuY2VycyBlbnRyeSBzZXRzIGJvdGggVGFyZ2V0R3JvdXBBcm4gYW5kIExvYWRCYWxhbmNlck5hbWU7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcImxvYWRCYWxhbmNlck5hbWUgYW5kIHRhcmdldEdyb3VwQXJuIGNhbm5vdCBib3RoIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBvZiBUYXJnZXRHcm91cEFybiAoQUxCL05MQikgb3IgTG9hZEJhbGFuY2VyTmFtZSAoQ0xCKSBwZXIgZW50cnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlcnNcXFwiKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0bm90IG9iamVjdC5nZXQoZW50cnksIFxcXCJUYXJnZXRHcm91cEFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRub3Qgb2JqZWN0LmdldChlbnRyeSwgXFxcIkxvYWRCYWxhbmNlck5hbWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQ1Mgc2VydmljZSBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiU2VydmljZU5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDbHVzdGVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTmV0d29ya0NvbmZpZ3VyYXRpb24gcmVxdWlyZXMgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIixcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lIHNoaXBzIEUzMDUyIGZvciB0aGUgaW52ZXJzZSAoYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiB3aXRob3V0XFxuIyBOZXR3b3JrQ29uZmlndXJhdGlvbik7IHRoaXMgZGlyZWN0aW9uIGlzIHVuZ3VhcmRlZC4gT25seSBhbiBleHBsaWNpdFxcbiMgbm9uLWF3c3ZwYyBOZXR3b3JrTW9kZSBmaXJlcyAtIHRoZSBhYnNlbnQtbW9kZSBkZWZhdWx0IGlzIHVuYmVuY2hlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLW5ldHdvcmstY29uZmlnLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtDb25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IHRoZSByZWZlcmVuY2VkIHRhc2sgZGVmaW5pdGlvbiB1c2VzIE5ldHdvcmtNb2RlICclcyc7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIk5ldHdvcmsgQ29uZmlndXJhdGlvbiBpcyBub3QgdmFsaWQgZm9yIHRoZSBnaXZlbiBuZXR3b3JrTW9kZSBvZiB0aGlzIHRhc2sgZGVmaW5pdGlvbi5cXFxcXFxcIlxcXCIsIFtubV0pLFxcblxcdFxcXCJVc2UgYW4gYXdzdnBjIHRhc2sgZGVmaW5pdGlvbiwgb3IgZHJvcCBOZXR3b3JrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0dGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dGQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0bm0gOj0gcmVzb2x2ZSh0ZCwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLXBsYXRmb3JtLXZlcnNpb24tZWMyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBsYXRmb3JtVmVyc2lvbiBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBFQzIgbGF1bmNoIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1wbGF0Zm9ybS12ZXJzaW9uLWVjMlxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUGxhdGZvcm1WZXJzaW9uXFxcIixcXG5cXHRcXFwiTGF1bmNoVHlwZSBpcyBFQzIgYnV0IFBsYXRmb3JtVmVyc2lvbiBpcyBzZXQ7IENyZWF0ZVNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwbGF0Zm9ybSB2ZXJzaW9uIG11c3QgYmUgbnVsbCB3aGVuIHNwZWNpZnlpbmcgYW4gRUMyIGxhdW5jaCB0eXBlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUGxhdGZvcm1WZXJzaW9uIChpdCBhcHBsaWVzIHRvIEZhcmdhdGUgb25seSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFR5cGVcXFwiKSA9PSBcXFwiRUMyXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUGxhdGZvcm1WZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy10YXNrZGVmLWZhbWlseVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXNrIGRlZmluaXRpb24gRmFtaWx5IGFsbG93cyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtdGFza2RlZi1mYW1pbHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZhbWlseVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmFtaWx5ICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAyNTUgY2hhcmFjdGVyc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmFtaWx5XFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU1fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VycyBuZWVkIGF0IGxlYXN0IHR3byBzdWJuZXRzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJzY19hbGIobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIikgPT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWFsYi1zdWJuZXQtY291bnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN1Ym5ldHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhcHBsaWNhdGlvbiBsb2FkIGJhbGFuY2VyIGxpc3RzICV2IHN1Ym5ldChzKTsgRUxCIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBpbiBkaWZmZXJlbnQgQVpzIChcXFxcXFxcIkF0IGxlYXN0IHR3byBzdWJuZXRzIGluIHR3byBkaWZmZXJlbnQgQXZhaWxhYmlsaXR5IFpvbmVzIG11c3QgYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW2NvdW50KHN1YnMpXSksXFxuXFx0XFxcIkxpc3QgdHdvIG9yIG1vcmUgc3VibmV0cyBmcm9tIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0X3BmX2VsYnNjX2FsYihuYW1lKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHN1YnMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlN1Ym5ldHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KHN1YnMpXFxuXFx0Y291bnQoc3VicykgPCAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiYXBwX2Nvb2tpZSBzdGlja2luZXNzIHJlcXVpcmVzIGEgY29va2llIG5hbWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxiYWNuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuX3BmX2VsYmFjbl9oYXMobmFtZSwga2V5KSBpZiBfcGZfZWxiYWNuX2F0dHIobmFtZSwga2V5KVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItYXBwLWNvb2tpZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdFxcXCJzdGlja2luZXNzLnR5cGUgYXBwX2Nvb2tpZSBoYXMgbm8gc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIChcXFxcXFxcIllvdSBtdXN0IHNldCBhbiBhcHBsaWNhdGlvbiBjb29raWUgbmFtZSB0byBlbmFibGUgc3RpY2tpbmVzcyBvZiB0eXBlICdhcHBfY29va2llJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkFkZCB0aGUgc3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lIGF0dHJpYnV0ZVxcXCIsXFxuXFx0X3BmX2VsYmFjbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdF9wZl9lbGJhY25fYXR0cihuYW1lLCBcXFwic3RpY2tpbmVzcy5lbmFibGVkXFxcIikgPT0gXFxcInRydWVcXFwiXFxuXFx0X3BmX2VsYmFjbl9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwiYXBwX2Nvb2tpZVxcXCJcXG5cXHRub3QgX3BmX2VsYmFjbl9oYXMobmFtZSwgXFxcInN0aWNraW5lc3MuYXBwX2Nvb2tpZS5jb29raWVfbmFtZVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItaGMtdGltZW91dC1pbnRlcnZhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhlYWx0aCBjaGVjayB0aW1lb3V0IG11c3QgYmUgc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBpbnRlcnZhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXF1YWxpdHkgaXMgcmVqZWN0ZWQgdG9vIChiZW5jaGVkKTogdGhlIHJlcXVpcmVtZW50IGlzIHN0cmljdGx5IGxlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1oYy10aW1lb3V0LWludGVydmFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIZWFsdGhDaGVja1RpbWVvdXRTZWNvbmRzICV2IGlzIG5vdCBzbWFsbGVyIHRoYW4gSGVhbHRoQ2hlY2tJbnRlcnZhbFNlY29uZHMgJXYgKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHRpbWVvdXQgJyV2JyBtdXN0IGJlIHNtYWxsZXIgdGhhbiB0aGUgaW50ZXJ2YWwgJyV2J1xcXFxcXFwiKVxcXCIsIFt0LCBpLCB0LCBpXSksXFxuXFx0XFxcIktlZXAgdGhlIHRpbWVvdXQgc3RyaWN0bHkgYmVsb3cgdGhlIGludGVydmFsXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrVGltZW91dFNlY29uZHNcXFwiKSlcXG5cXHRpIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrSW50ZXJ2YWxTZWNvbmRzXFxcIikpXFxuXFx0dCA+PSBpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGFtYmRhLXRhcmdldC1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSB0YXJnZXQgZ3JvdXBzIGNhbm5vdCBzcGVjaWZ5IFByb3RvY29sXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYW1iZGEtdGFyZ2V0LXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0XFxcIlRhcmdldFR5cGUgbGFtYmRhIGNhbm5vdCB0YWtlIFByb3RvY29sIChcXFxcXFxcIlByb3RvY29sIGNhbm5vdCBiZSBzcGVjaWZpZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0YXJnZXQgdHlwZSAnbGFtYmRhJ1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcm90b2NvbCBmcm9tIHRoZSBsYW1iZGEgdGFyZ2V0IGdyb3VwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldFR5cGVcXFwiKSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJQcm90b2NvbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTG9hZCBiYWxhbmNlciBuYW1lcyBhcmUgYXQgbW9zdCAzMiBhbHBoYW51bWVyaWMvaHlwaGVuIGNoYXJzIGFuZCBjYW5ub3QgYmVnaW4gd2l0aCBpbnRlcm5hbC0gb3IgYSBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VsYm5hbWVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTG9hZEJhbGFuY2VyLmh0bWxcXFwiXFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0c3RhcnRzd2l0aChuLCBcXFwiaW50ZXJuYWwtXFxcIilcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZWdpbiB3aXRoICdpbnRlcm5hbC0nXFxcIlxcbn1cXG5cXG5fcGZfZWxibmFtZV9iYWQgY29udGFpbnMgW25hbWUsIG4sIHdoeV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRlbmRzd2l0aChuLCBcXFwiLVxcXCIpXFxuXFx0d2h5IDo9IFxcXCJjYW5ub3QgZW5kIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdHN0YXJ0c3dpdGgobiwgXFxcIi1cXFwiKVxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlZ2luIHdpdGggYSBoeXBoZW4oLSlcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGNvdW50KG4pID4gMzJcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBiZSBsb25nZXIgdGhhbiAnMzInIGNoYXJhY3RlcnNcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTktXSokYCwgbilcXG5cXHR3aHkgOj0gXFxcImNhbiBvbmx5IGNvbnRhaW4gY2hhcmFjdGVycyB0aGF0IGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgaHlwaGVucygtKVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgbG9hZCBiYWxhbmNlciBuYW1lICclcycgJXM7IEVMQiByZWplY3RzIHRoZSBjcmVhdGUgY2FsbFxcXCIsIFtuLCB3aHldKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBsb2FkIGJhbGFuY2VyIHRvIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljIG9yIGh5cGhlbiBjaGFyYWN0ZXJzLCB3aXRob3V0IGEgbGVhZGluZy90cmFpbGluZyBoeXBoZW4gb3IgdGhlIHJlc2VydmVkIGludGVybmFsLSBwcmVmaXhcXFwiLFxcblxcdF9wZl9lbGJuYW1lX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIG4sIHdoeV0gaW4gX3BmX2VsYm5hbWVfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItbGlzdGVuZXItcHJvdG9jb2wtbGItdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpc3RlbmVyIHByb3RvY29scyBtdXN0IG1hdGNoIHRoZSBsb2FkIGJhbGFuY2VyIHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcIixcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFsbG93LXNldHMgdmVyYmF0aW0gZnJvbSB0aGUgdHdvIGJlbmNoZWQgc2VydmljZSBlcnJvcnMuXFxuX3BmX2VsYmxwdF9hbGxvdyA6PSB7XFxcImFwcGxpY2F0aW9uXFxcIjoge1xcXCJIVFRQXFxcIiwgXFxcIkhUVFBTXFxcIn0sIFxcXCJuZXR3b3JrXFxcIjoge1xcXCJUQ1BcXFwiLCBcXFwiUVVJQ1xcXCIsIFxcXCJUQ1BfUVVJQ1xcXCIsIFxcXCJVRFBcXFwiLCBcXFwiVENQX1VEUFxcXCIsIFxcXCJUTFNcXFwifX1cXG5cXG5fcGZfZWxibHB0X3R5cGUobGIpIDo9IHQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tsYl0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUeXBlXFxcIiwgXFxcImFwcGxpY2F0aW9uXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1saXN0ZW5lci1wcm90b2NvbC1sYi10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTGlzdGVuZXIgcHJvdG9jb2wgJyVzJyBpcyBub3QgdmFsaWQgZm9yIGEgJXMgbG9hZCBiYWxhbmNlciAoYWxsb3dlZDogJXYpXFxcIiwgW3Byb3RvLCB0LCBhbGxvd10pLFxcblxcdFxcXCJVc2UgSFRUUC9IVFRQUyBvbiBhcHBsaWNhdGlvbiBMQnMgYW5kIFRDUC9VRFAvVExTL1FVSUMgdmFyaWFudHMgb24gbmV0d29yayBMQnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlTGlzdGVuZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJcXFwiKVxcblxcdGxiIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXJuXFxcIilcXG5cXHRsYiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdHQgOj0gX3BmX2VsYmxwdF90eXBlKGxiKVxcblxcdGFsbG93IDo9IF9wZl9lbGJscHRfYWxsb3dbdF1cXG5cXHRwcm90byA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIilcXG5cXHRpc19zdHJpbmcocHJvdG8pXFxuXFx0bm90IHByb3RvIGluIGFsbG93XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItcnVsZS1wcmlvcml0eS11bmlxdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaXN0ZW5lciBydWxlcyBvbiB0aGUgc2FtZSBsaXN0ZW5lciBtdXN0IGhhdmUgZGlzdGluY3QgcHJpb3JpdGllc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIHJlc29sdmUoKSB0dXJucyBhIFJlZi9HZXRBdHQgdG8gYSBzaWJsaW5nIGxpc3RlbmVyIGludG8gaXRzIGxvZ2ljYWxcXG4jIGlkLCBzbyBib3RoIFJlZi13aXJlZCBhbmQgaWRlbnRpY2FsLWxpdGVyYWwgTGlzdGVuZXJBcm5zIGNvbXBhcmUgZXF1YWwuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1ydWxlLXByaW9yaXR5LXVuaXF1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIHIyLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByaW9yaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmlvcml0eSAldiBpcyBhbHNvIHVzZWQgYnkgJyVzJyBvbiB0aGUgc2FtZSBsaXN0ZW5lciAoXFxcXFxcXCJQcmlvcml0eSAnJXYnIGlzIGN1cnJlbnRseSBpbiB1c2VcXFxcXFxcIilcXFwiLCBbcDEsIHIxLCBwMV0pLFxcblxcdFxcXCJHaXZlIGVhY2ggcnVsZSBvbiBhIGxpc3RlbmVyIGEgZGlzdGluY3QgcHJpb3JpdHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcjEgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXFxcIilcXG5cXHRzb21lIHIyIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZVxcXCIpXFxuXFx0cjEgPCByMlxcblxcdGwxIDo9IHJlc29sdmUocjEsIFxcXCJQcm9wZXJ0aWVzLkxpc3RlbmVyQXJuXFxcIilcXG5cXHRsMiA6PSByZXNvbHZlKHIyLCBcXFwiUHJvcGVydGllcy5MaXN0ZW5lckFyblxcXCIpXFxuXFx0bDEgPT0gbDJcXG5cXHRwMSA6PSB0b19udW1iZXIocmVzb2x2ZShyMSwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMiA6PSB0b19udW1iZXIocmVzb2x2ZShyMiwgXFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiKSlcXG5cXHRwMSA9PSBwMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXN0aWNraW5lc3MtdHlwZS1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0aWNraW5lc3MgdHlwZSBsYl9jb29raWUgbmVlZHMgYW4gSFRUUC1wcm90b2NvbCB0YXJnZXQgZ3JvdXAsIHNvdXJjZV9pcCBhIFRDUCBvbmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxic3RwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9zdGlja3ktc2Vzc2lvbnMuaHRtbFxcXCJcXG5cXG5fcGZfZWxic3RwX2F0dHIobmFtZSwga2V5KSA6PSB2IGlmIHtcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IGtleVxcblxcdHYgOj0gb2JqZWN0LmdldChlbnRyeSwgXFxcIlZhbHVlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG59XFxuXFxuIyBPbmx5IHRoZSB0d28gYmVuY2hlZCBwYWlycyBhcmUgY2xhaW1lZC5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcImxiX2Nvb2tpZVxcXCIsIFxcXCJUQ1BcXFwiXSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxuXFx0X3BmX2VsYnN0cF9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLnR5cGVcXFwiKSA9PSBcXFwibGJfY29va2llXFxcIlxcbn1cXG5cXG5fcGZfZWxic3RwX2JhZChuYW1lKSA6PSBbXFxcInNvdXJjZV9pcFxcXCIsIFxcXCJIVFRQXFxcIl0gaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG5cXHRfcGZfZWxic3RwX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJzb3VyY2VfaXBcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItc3RpY2tpbmVzcy10eXBlLXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0aWNraW5lc3MgdHlwZSAnJXMnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRhcmdldCBncm91cHMgd2l0aCB0aGUgJXMgcHJvdG9jb2xcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJVc2Ugc291cmNlX2lwIHN0aWNraW5lc3MgZm9yIFRDUCB0YXJnZXQgZ3JvdXBzIGFuZCBjb29raWUgc3RpY2tpbmVzcyBmb3IgSFRUUCBvbmVzXFxcIixcXG5cXHRfcGZfZWxic3RwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0cGFpciA6PSBfcGZfZWxic3RwX2JhZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRDUCBoZWFsdGggY2hlY2tzIGNhbm5vdCB0YWtlIGEgaGVhbHRoIGNoZWNrIHBhdGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxidGNocF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYXJnZXRHcm91cC5odG1sXFxcIlxcblxcbl9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcblxcbiMgSGVhbHRoQ2hlY2tQcm90b2NvbCBkZWZhdWx0cyB0byB0aGUgdGFyZ2V0IGdyb3VwIHByb3RvY29sIChiZW5jaGVkIHZpYSBlMDRiKS5cXG5fcGZfZWxidGNocF90Y3BfaGMobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJIZWFsdGhDaGVja1Byb3RvY29sXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKSA9PSBcXFwiVENQXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRjcC1oZWFsdGgtY2hlY2stcGF0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tQYXRoXFxcIixcXG5cXHRcXFwiVGhlIGVmZmVjdGl2ZSBoZWFsdGggY2hlY2sgcHJvdG9jb2wgaXMgVENQLCB3aGljaCBjYW5ub3QgdGFrZSBIZWFsdGhDaGVja1BhdGggKFxcXFxcXFwiSGVhbHRoIGNoZWNrIHBhdGhzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBUQ1AgaGVhbHRoIGNoZWNrc1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBIZWFsdGhDaGVja1BhdGgsIG9yIHVzZSBhbiBIVFRQL0hUVFBTIGhlYWx0aCBjaGVjayBwcm90b2NvbFxcXCIsXFxuXFx0X3BmX2VsYnRjaHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRfcGZfZWxidGNocF90Y3BfaGMobmFtZSlcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiSGVhbHRoQ2hlY2tQYXRoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPiAzNjAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI2RlcmVnaXN0cmF0aW9uLWRlbGF5XFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzXFxcIlxcblxcdG51bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhdHRyLCBcXFwiVmFsdWVcXFwiLCBudWxsKSlcXG5cXHRfcGZfZGVyZWdfZGVsYXlfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIG5hbWVzIGFyZSBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYy9oeXBoZW4gY2hhcnMgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMzIgY2hhcmFjdGVyc1xcXCIgaWYgY291bnQobikgPiAzMlxcblxcbl9wZl90Z25hbWVfYmFkKG4pIDo9IFxcXCJtYXkgdXNlIG9ubHkgYWxwaGFudW1lcmljcyBhbmQgaHlwaGVucywgYW5kIGNhbm5vdCBzdGFydCBvciBlbmQgd2l0aCBhIGh5cGhlblxcXCIgaWYge1xcblxcdGNvdW50KG4pIDw9IDMyXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOV0oW0EtWmEtejAtOS1dKltBLVphLXowLTldKT8kYCwgbilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgdGFyZ2V0IGdyb3VwIG5hbWUgJyVzJyAlczsgRUxCIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW24sIHdoeV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIHRhcmdldCBncm91cCB0byBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYyBvciBoeXBoZW4gY2hhcmFjdGVycywgbm90IHN0YXJ0aW5nIG9yIGVuZGluZyB3aXRoIGEgaHlwaGVuXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0d2h5IDo9IF9wZl90Z25hbWVfYmFkKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLWlucHV0LXRyYW5zZm9ybWVyLXBsYWNlaG9sZGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcImV2ZW50c1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbnB1dFRlbXBsYXRlIHBsYWNlaG9sZGVycyBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSA8cGxhY2Vob2xkZXI+IGluIElucHV0VGVtcGxhdGUgbXVzdCBiZSBkZWNsYXJlZCBpbiBJbnB1dFBhdGhzTWFwLFxcbiMgZXhjZXB0IHRoZSBhd3MuZXZlbnRzLiogcHJlZGVmaW5lZCB2YXJpYWJsZXMuIEFuIElucHV0UGF0aHNNYXAgdGhhdCBpcyBhblxcbiMgdW5yZXNvbHZhYmxlIGludHJpbnNpYyAobm9ybWFsaXplZCB3aXRoIF9fLXByZWZpeGVkIG1hcmtlciBrZXlzKSBtYWtlcyB0aGVcXG4jIGRlY2xhcmVkIHNldCB1bmtub3dhYmxlLCBzbyB0aGUgcnVsZSBza2lwcy5cXG5fcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpIDo9IHtzdWJzdHJpbmcoZiwgMSwgY291bnQoZikgLSAyKSB8IHNvbWUgZiBpbiByZWdleC5maW5kX24oYDwoW0EtWmEtejAtOV8uLV0rKT5gLCB0bXBsLCAtMSl9XFxuXFxuX3BmX2V2aXRwX3BsYWluX21hcChwbSkgaWYge1xcblxcdGlzX29iamVjdChwbSlcXG5cXHRldmVyeSBrLCBfIGluIHBtIHtcXG5cXHRcXHRub3Qgc3RhcnRzd2l0aChrLCBcXFwiX19cXFwiKVxcblxcdH1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhcmdldHMuJWQuSW5wdXRUcmFuc2Zvcm1lci5JbnB1dFRlbXBsYXRlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJJbnB1dFRlbXBsYXRlIHVzZXMgPCVzPiBidXQgSW5wdXRQYXRoc01hcCBkb2VzIG5vdCBkZWNsYXJlIGl0OyBQdXRUYXJnZXRzIGZhaWxzIHdpdGggXFxcXFxcXCJJbnB1dFRlbXBsYXRlIGZvciB0YXJnZXQgJXMgY29udGFpbnMgaW52YWxpZCBwbGFjZWhvbGRlciAlc1xcXFxcXFwiXFxcIiwgW3AsIHRpZCwgcF0pLFxcblxcdHNwcmludGYoXFxcIkFkZCAnJXMnIHRvIElucHV0UGF0aHNNYXAsIG9yIHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgZnJvbSB0aGUgdGVtcGxhdGVcXFwiLCBbcF0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi10cmFuc2Zvcm0tdGFyZ2V0LWlucHV0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRzXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRpdCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJbnB1dFRyYW5zZm9ybWVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaXQpXFxuXFx0dG1wbCA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRUZW1wbGF0ZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRtcGwpXFxuXFx0cG0gOj0gb2JqZWN0LmdldChpdCwgXFxcIklucHV0UGF0aHNNYXBcXFwiLCB7fSlcXG5cXHRfcGZfZXZpdHBfcGxhaW5fbWFwKHBtKVxcblxcdHNvbWUgcCBpbiBfcGZfZXZpdHBfcGxhY2Vob2xkZXJzKHRtcGwpXFxuXFx0bm90IHN0YXJ0c3dpdGgocCwgXFxcImF3cy5ldmVudHMuXFxcIilcXG5cXHRub3QgcG1bcF1cXG5cXHR0aWQgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHRhcmdldD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIGVtcHR5IEV2ZW50UGF0dGVybiBjb3VudHMgYXMgbm8gcGF0dGVybiBhdCBhbGxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRjMwNTggZmlyZXMgd2hlbiB0aGUgRXZlbnRQYXR0ZXJuIEtFWSBpcyBhYnNlbnQsIGJ1dCBhbiBlbXB0eVxcbiMgb2JqZWN0IHBhc3NlcyB0aGUgc2NoZW1hIGFuZCB0aGUgaGFuZGxlciB0aGVuIHRyZWF0cyBpdCBhcyBubyBwYXR0ZXJuIGF0XFxuIyBhbGwuIEZpcmVzIG9ubHkgd2hlbiBTY2hlZHVsZUV4cHJlc3Npb24gaXMgYWxzbyBsaXRlcmFsbHkgYWJzZW50IOKAlCB0aGVcXG4jIGJlbmNoLXZlcmlmaWVkIHNoYXBlIChhYnNlbmNlIHByb3ZlbiB2aWEgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiLFxcblxcdFxcXCJFdmVudFBhdHRlcm4gaXMgYW4gZW1wdHkgb2JqZWN0LCB3aGljaCB0aGUgaGFuZGxlciB0cmVhdHMgYXMgbm8gcGF0dGVybjsgUHV0UnVsZSBmYWlscyB3aXRoIFxcXFxcXFwiUGFyYW1ldGVyKHMpIEV2ZW50UGF0dGVybiBvciBTY2hlZHVsZUV4cHJlc3Npb24gbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkdpdmUgRXZlbnRQYXR0ZXJuIGF0IGxlYXN0IG9uZSBtYXRjaGVyIChlLmcuIHNvdXJjZSksIG9yIHVzZSBTY2hlZHVsZUV4cHJlc3Npb24gaW5zdGVhZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLWV2ZW50LXBhdHRlcm5zLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkV2ZW50czo6UnVsZVxcXCIpXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm5cXFwiKVxcblxcdGlzX29iamVjdChlcClcXG5cXHRjb3VudChlcCkgPT0gMFxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJTY2hlZHVsZUV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tc2NhbGFyLXZhbHVlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZW50IHBhdHRlcm4gdmFsdWVzIG11c3QgYmUgYXJyYXlzIG9yIG9iamVjdHMsIG5vdCBzY2FsYXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkV2ZW50czo6UnVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX2Jvb2xlYW4odilcXG5cXG4jIEV2ZXJ5IG1hdGNoZXIgaW4gYW4gZXZlbnQgcGF0dGVybiBtdXN0IGJlIGFuIGFycmF5IChvciBhbiBvYmplY3QgaG9sZGluZ1xcbiMgb3BlcmF0b3JzKTsgYSBiYXJlIHNjYWxhciBpcyByZWplY3RlZCBwZXIga2V5LiBPbmx5IHRoZSB0b3AgbGV2ZWwgaXNcXG4jIGNoZWNrZWQg4oCUIHRoYXQgaXMgdGhlIGJlbmNoLXZlcmlmaWVkIHNjb3BlLCBhbmQgaXQgZG9kZ2VzIG9wZXJhdG9yIG9iamVjdHNcXG4jIGxpa2Uge1xcXCJwcmVmaXhcXFwiOiBcXFwiLi4uXFxcIn0gdGhhdCBsZWdhbGx5IGNhcnJ5IHNjYWxhcnMgZGVlcGVyIGRvd24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJFdmVudFBhdHRlcm4ga2V5ICclcycgaG9sZHMgYSBiYXJlIHNjYWxhcjsgUHV0UnVsZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFdmVudCBwYXR0ZXJuIGlzIG5vdCB2YWxpZC4gUmVhc29uOiBcXFxcXFxcXFxcXFxcXFwiJXNcXFxcXFxcXFxcXFxcXFwiIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5XFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdHNwcmludGYoXFxcIldyYXAgdGhlIHZhbHVlIGluIGFuIGFycmF5OiBcXFxcXFxcIiVzXFxcXFxcXCI6IFsuLi5dXFxcIiwgW2tdKSxcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdHNvbWUgaywgdiBpbiBlcFxcblxcdF9wZl9ldnBzdl9zY2FsYXIodilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFbmFibGVkIGZvcm1hdCBjb252ZXJzaW9uIG5lZWRzIGlucHV0LCBvdXRwdXQsIGFuZCBzY2hlbWEgY29uZmlnc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGhyZWUgc3ViLWNvbmZpZ3VyYXRpb25zIGFyZSB1bmNvbmRpdGlvbmFsbHkgcmVxdWlyZWQgb25jZSBFbmFibGVkXFxuIyBpcyB0cnVlOyB0aGUgc2VydmljZSByZWplY3RzIGVhY2ggYWJzZW5jZSBpbiB0dXJuLiBSZWFkIGZyb20gdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGRmY2Nfb3V0ZXIobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfZmhkZmNjX2NvbmYobmFtZSkgOj0gYyBpZiB7XFxuXFx0eCA6PSBfcGZfZmhkZmNjX291dGVyKG5hbWUpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHgsIFxcXCJEYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1kZmNjLXJlcXVpcmVkLWNvbmZpZ3NcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EYXRhRm9ybWF0Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkRhdGEgZm9ybWF0IGNvbnZlcnNpb24gaXMgZW5hYmxlZCB3aXRob3V0ICVzOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMgbXVzdCBub3QgYmUgbnVsbFxcXFxcXFwiXFxcIiwgW2ssIGtdKSxcXG5cXHRcXFwiU2V0IElucHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvbiwgYW5kIFNjaGVtYUNvbmZpZ3VyYXRpb24gdG9nZXRoZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1kYXRhZm9ybWF0Y29udmVyc2lvbmNvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0YyA6PSBfcGZfZmhkZmNjX2NvbmYobmFtZSlcXG5cXHRjb2VyY2VfdG9fYm9vbChvYmplY3QuZ2V0KGMsIFxcXCJFbmFibGVkXFxcIiwgZmFsc2UpKSA9PSB0cnVlXFxuXFx0c29tZSBrIGluIHtcXFwiSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uXFxcIiwgXFxcIk91dHB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiU2NoZW1hQ29uZmlndXJhdGlvblxcXCJ9XFxuXFx0b2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctYnVmZmVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgYSA2NCBNQiBidWZmZXIgZmxvb3JcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSBmbG9vciBpcyAxOyB0aGUgNjQgZmxvb3Igb25seSBhcHBsaWVzIHdpdGggZHluYW1pY1xcbiMgcGFydGl0aW9uaW5nIG9uIC0gYSBjb25kaXRpb25hbCBib3VuZCBubyBzY2hlbWEgbGF5ZXIgY2FuIGV4cHJlc3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTaXplSW5NQnMgJXYgd2l0aCBkeW5hbWljIHBhcnRpdGlvbmluZzsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkJ1ZmZlcmluZ0hpbnRzLlNpemVJbk1CcyBtdXN0IGJlIGF0IGxlYXN0IDY0IHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZC5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlJhaXNlIFNpemVJbk1CcyB0byBhdCBsZWFzdCA2NFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWR5bmFtaWNwYXJ0aXRpb25pbmdjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5EeW5hbWljUGFydGl0aW9uaW5nQ29uZmlndXJhdGlvbi5FbmFibGVkXFxcIikpID09IHRydWVcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzXFxcIikpXFxuXFx0cyA8IDY0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtZHluYW1pYy1wYXJ0aXRpb25pbmctcHJlZml4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRHluYW1pYyBwYXJ0aXRpb25pbmcgbmVlZHMgcGFydGl0aW9uIG5hbWVzcGFjZXMgaW4gdGhlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQYXJ0aXRpb25lZCBkZWxpdmVyeSBoYXMgbm93aGVyZSB0byBwdXQgdGhlIGtleXMgdW5sZXNzIHRoZSBwcmVmaXhcXG4jIGludGVycG9sYXRlcyB0aGVtIHZpYSAhe3BhcnRpdGlvbktleUZyb20uLi59IG5hbWVzcGFjZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmaXggJyVzJyBoYXMgbm8gcGFydGl0aW9uIG5hbWVzcGFjZTsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFByZWZpeCBzaG91bGQgY29udGFpbiBEeW5hbWljIFBhcnRpdGlvbmluZyBuYW1lc3BhY2VzIHdoZW4gRHluYW1pYyBQYXJ0aXRpb25pbmcgaXMgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiSW50ZXJwb2xhdGUgYXQgbGVhc3Qgb25lICF7cGFydGl0aW9uS2V5RnJvbVF1ZXJ5Oi4uLn0gb3IgIXtwYXJ0aXRpb25LZXlGcm9tTGFtYmRhOi4uLn0gaW50byB0aGUgcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ZpcmVob3NlL2xhdGVzdC9kZXYvZHluYW1pYy1wYXJ0aXRpb25pbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0bm90IGNvbnRhaW5zKHAsIFxcXCIhe3BhcnRpdGlvbktleVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbXMgbmVlZCBLaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoaXMgZGlyZWN0aW9uIGlzIGEgZGVwbG95IGZhaWx1cmUgLSBEaXJlY3RQdXQgd2l0aCBhIChzaWxlbnRseVxcbiMgaWdub3JlZCkgc291cmNlIGNvbmZpZ3VyYXRpb24gZGVwbG95cyBmaW5lIChiZW5jaCBmMDYpLiBBYnNlbmNlIGlzXFxuIyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfZmhrc2NfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIktpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWtpbmVzaXMtc291cmNlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJEZWxpdmVyeVN0cmVhbVR5cGUgaXMgS2luZXNpc1N0cmVhbUFzU291cmNlIGJ1dCBubyBzb3VyY2UgY29uZmlndXJhdGlvbiBpcyBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJLaW5lc2lzU291cmNlU3RyZWFtQ29uZmlnIGlzIG1hbmRhdG9yeSBmb3IgS2luZXNpc1N0cmVhbUFzU291cmNlIHN0cmVhbSB0eXBlLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uIHdpdGggdGhlIHN0cmVhbSBBUk4gYW5kIHJvbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVN0cmVhbVR5cGVcXFwiKSA9PSBcXFwiS2luZXNpc1N0cmVhbUFzU291cmNlXFxcIlxcblxcdF9wZl9maGtzY19taXNzaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBkZWxpdmVyeSBzdHJlYW0gdGFrZXMgZXhhY3RseSBvbmUgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkOiBub25lIHNldCwgYW5kIHR3byBzZXQuIEtleSBwcmVzZW5jZSBpc1xcbiMgcmVhZCBmcm9tIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maG9kX2Rlc3RzIDo9IHtcXG5cXHRcXFwiUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVkc2hpZnREZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJFbGFzdGljc2VhcmNoRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiQW1hem9ub3BlbnNlYXJjaHNlcnZpY2VEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25PcGVuU2VhcmNoU2VydmVybGVzc0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNwbHVua0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkh0dHBFbmRwb2ludERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlNub3dmbGFrZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkljZWJlcmdEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLW9uZS1kZXN0aW5hdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb25zIGFyZSBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHN1cHBvcnRlZCBmb3IgYSBGaXJlaG9zZVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IGV4YWN0bHkgb25lICpEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZmhvZF9kZXN0czsgb2JqZWN0LmdldChwcm9wcywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxuXFx0biAhPSAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsaW5nIFMzIGJhY2t1cCBuZWVkcyBTM0JhY2t1cENvbmZpZ3VyYXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFja3VwIG1vZGUgcG9pbnRzIGRlbGl2ZXJpZXMgYXQgYSBzZWNvbmQgYnVja2V0IHRoYXQgbXVzdCBiZVxcbiMgY29uZmlndXJlZC4gU2NvcGVkIHRvIHRoZSBiZW5jaGVkIEV4dGVuZGVkUzMgZGVzdGluYXRpb24uIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maHNiY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2UtczMtYmFja3VwLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJTM0JhY2t1cE1vZGUgaXMgRW5hYmxlZCBidXQgUzNCYWNrdXBDb25maWd1cmF0aW9uIGlzIG5vdCBzZXQ7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJTMyBiYWNrdXAgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbiBpcyByZXF1aXJlZCB3aGVuIGVuYWJsaW5nIFMzIGJhY2t1cC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gKGJ1Y2tldCBhbmQgcm9sZSksIG9yIGRyb3AgUzNCYWNrdXBNb2RlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZXh0ZW5kZWRzM2Rlc3RpbmF0aW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUzNCYWNrdXBNb2RlXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0eCA6PSBfcGZfZmhzYmNfb3V0ZXIobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHgsIFxcXCJTM0JhY2t1cENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUHJpbmNpcGFsIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBJZGVudGl0eSBwb2xpY2llcyBhdHRhY2ggdG8gdGhlaXIgcHJpbmNpcGFsIGltcGxpY2l0bHk7IHRoZSBmaWVsZFxcbiMgYmVsb25ncyB0byByZXNvdXJjZS1iYXNlZCBwb2xpY2llcy5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lpbnBfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lpbnBfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pZGVudGl0eS1wb2xpY3ktbm8tcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBQcmluY2lwYWwgZmllbGQ7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlBvbGljeSBkb2N1bWVudCBzaG91bGQgbm90IHNwZWNpZnkgYSBwcmluY2lwYWwuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUHJpbmNpcGFsIChpZGVudGl0eSBwb2xpY2llcyBhcHBseSB0byB0aGUgaWRlbnRpdHkgdGhleSBhdHRhY2ggdG8pXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9paW5wX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWlucF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBwb2xpY3kgZG9jdW1lbnRzIGFyZSBsaW1pdGVkIHBlciBpZGVudGl0eSAocm9sZSAxMDI0MCAvIGdyb3VwIDUxMjAgLyB1c2VyIDIwNDggY2hhcmFjdGVycylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2lubGluZV9wb2xpY3lfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6Um9sZVBvbGljeVxcXCI6IDEwMjQwLFxcblxcdFxcXCJBV1M6OklBTTo6VXNlclBvbGljeVxcXCI6IDIwNDgsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFBvbGljeVxcXCI6IDUxMjAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvbGljeURvY3VtZW50IGlzICVkIGNoYXJhY3RlcnMgKEpTT04gd2l0aG91dCB3aGl0ZXNwYWNlKSBidXQgdGhlIGlubGluZSBwb2xpY3kgbGltaXQgZm9yICVzIGlzICVkIChyb2xlOiAxMDI0MCwgZ3JvdXA6IDUxMjAsIHVzZXI6IDIwNDgpXFxcIiwgW3NpemUsIHJ0eXBlLCBsaW1pdF0pLFxcblxcdFxcXCJNb3ZlIHN0YXRlbWVudHMgaW50byBtYW5hZ2VkIHBvbGljaWVzIG9yIHNob3J0ZW4gdGhlIGRvY3VtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lubGluZV9wb2xpY3lfbGltaXRzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IGxpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gaW5zdGFuY2UgcHJvZmlsZSBob2xkcyBleGFjdGx5IG9uZSByb2xlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgXFxcInF1b3RhXFxcIiBpcyBhIGhhcmQgbGltaXQgb2Ygb25lIHJvbGU7IHRoZSBzY2hlbWEgaGFzIG5vIG1heEl0ZW1zLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWluc3RhbmNlLXByb2ZpbGUtc2luZ2xlLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCByb2xlcyBvbiBvbmUgaW5zdGFuY2UgcHJvZmlsZTsgdGhlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2Fubm90IGV4Y2VlZCBxdW90YSBmb3IgSW5zdGFuY2VTZXNzaW9uc1Blckluc3RhbmNlUHJvZmlsZTogMVxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSByb2xlIHBlciBpbnN0YW5jZSBwcm9maWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtaWFtLWluc3RhbmNlcHJvZmlsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Okluc3RhbmNlUHJvZmlsZVxcXCIpXFxuXFx0biA6PSBjb3VudChmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiKSlcXG5cXHRuID4gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSUFNIGVudGl0eSBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MgYW5kICs9LC5ALV9cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pYW1uYW1lX3BhdCA6PSBgXltBLVphLXowLTkrPSwuQF8tXSskYFxcblxcbl9wZl9pYW1uYW1lX3Byb3AodCwgcHJvcCkgOj0gW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pXFxufVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBfcGZfaWFtbmFtZV9wcm9wKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJSb2xlTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpVc2VyXFxcIiwgXFxcIlVzZXJOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06Okdyb3VwXFxcIiwgXFxcIkdyb3VwTmFtZVxcXCIpXFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIiwgXFxcIk1hbmFnZWRQb2xpY3lOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJBV1M6OklBTTo6VXNlclxcXCIsIFxcXCJBV1M6OklBTTo6R3JvdXBcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdHYgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5TmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9pYW1uYW1lX3BhdCwgdilcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5TmFtZVxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiSUFNIG5hbWUgJyVzJyBpcyByZWplY3RlZDogb25seSBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIGFyZSBhY2NlcHRlZCAobm9uLUFTQ0lJIHRleHQgc3VjaCBhcyBKYXBhbmVzZSBpcyByZWplY3RlZClcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGVudGl0eSB1c2luZyBhbHBoYW51bWVyaWNzIGFuZCArID0gLCAuIEAgXyAtIG9ubHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVJvbGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCB2XSBpbiBfcGZfaWFtbmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9ucyBtdXN0IGNhcnJ5IGEgc2VydmljZSBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgYmFyZSBhY3Rpb24gbmFtZSBoYXMgbm8gc2VydmljZSB0byBhdHRhY2ggdG8uIEludHJpbnNpY3MgaW5zaWRlIHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IGFyZSBtYXJrZXIgb2JqZWN0cywgc28gaXNfc3RyaW5nIG11dGVzIHRoZW0uXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lhZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWFmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWFmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWFjdGlvbi1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIGhhcyBubyBzZXJ2aWNlIHByZWZpeDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiQWN0aW9ucy9Db25kaXRpb25zIG11c3QgYmUgcHJlZmFjZWQgYnkgYSB2ZW5kb3IsIGUuZy4sIGlhbSwgc2RiLCBlYzIsIGV0Yy5cXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIldyaXRlIGFjdGlvbnMgYXMgc2VydmljZTpBY3Rpb24gKGUuZy4gczM6R2V0T2JqZWN0KSwgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWFmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWFmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSBhIGluIF9wZl9pYWZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJBY3Rpb25cXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxuXFx0YSAhPSBcXFwiKlxcXCJcXG5cXHRub3QgY29udGFpbnMoYSwgXFxcIjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktY29uZGl0aW9uLW9wZXJhdG9yXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbmRpdGlvbiBvcGVyYXRvcnMgY29tZSBmcm9tIGEgY2xvc2VkIGdyYW1tYXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJhc2Ugb3BlcmF0b3JzIHBsdXMgdGhlIElmRXhpc3RzIHN1ZmZpeCBhbmQgc2V0LW9wZXJhdG9yIHByZWZpeGVzLlxcbiMgQSB0eXBvIGxpa2UgU3RyaW5nRXF1YWwvU3RyaW5nRXF1YWx6IGlzIHVucmVhY2hhYmxlIGZvciBldmVyeSBvdGhlclxcbiMgbGF5ZXIgYmVjYXVzZSB0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24uXFxuX3BmX2ljb19iYXNlIDo9IHtcXG5cXHRcXFwiU3RyaW5nRXF1YWxzXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc1xcXCIsIFxcXCJTdHJpbmdFcXVhbHNJZ25vcmVDYXNlXFxcIiwgXFxcIlN0cmluZ05vdEVxdWFsc0lnbm9yZUNhc2VcXFwiLFxcblxcdFxcXCJTdHJpbmdMaWtlXFxcIiwgXFxcIlN0cmluZ05vdExpa2VcXFwiLFxcblxcdFxcXCJOdW1lcmljRXF1YWxzXFxcIiwgXFxcIk51bWVyaWNOb3RFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuXFxcIiwgXFxcIk51bWVyaWNMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIk51bWVyaWNHcmVhdGVyVGhhblxcXCIsIFxcXCJOdW1lcmljR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJEYXRlRXF1YWxzXFxcIiwgXFxcIkRhdGVOb3RFcXVhbHNcXFwiLCBcXFwiRGF0ZUxlc3NUaGFuXFxcIiwgXFxcIkRhdGVMZXNzVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVHcmVhdGVyVGhhblxcXCIsIFxcXCJEYXRlR3JlYXRlclRoYW5FcXVhbHNcXFwiLFxcblxcdFxcXCJCb29sXFxcIiwgXFxcIkJpbmFyeUVxdWFsc1xcXCIsIFxcXCJJcEFkZHJlc3NcXFwiLCBcXFwiTm90SXBBZGRyZXNzXFxcIixcXG5cXHRcXFwiQXJuRXF1YWxzXFxcIiwgXFxcIkFybkxpa2VcXFwiLCBcXFwiQXJuTm90RXF1YWxzXFxcIiwgXFxcIkFybk5vdExpa2VcXFwiLCBcXFwiTnVsbFxcXCIsXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pY29fZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2ljb19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuIyBTdHJpcCBhbiBvcHRpb25hbCBGb3JBbGxWYWx1ZXM6L0ZvckFueVZhbHVlOiBwcmVmaXgsIHRoZW4gSWZFeGlzdHMuXFxuX3BmX2ljb191bnByZWZpeGVkKG9wKSA6PSBwYXJ0c1tjb3VudChwYXJ0cykgLSAxXSBpZiBwYXJ0cyA6PSBzcGxpdChvcCwgXFxcIjpcXFwiKVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gc3Vic3RyaW5nKGIsIDAsIGNvdW50KGIpIC0gOCkgaWYge1xcblxcdGIgOj0gX3BmX2ljb191bnByZWZpeGVkKG9wKVxcblxcdGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbl9wZl9pY29fcm9vdChvcCkgOj0gYiBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0bm90IGVuZHN3aXRoKGIsIFxcXCJJZkV4aXN0c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5Db25kaXRpb25cXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkNvbmRpdGlvbiBvcGVyYXRvciAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJVc2UgYSBkb2N1bWVudGVkIG9wZXJhdG9yIChTdHJpbmdFcXVhbHMsIEFybkxpa2UsIC4uLiksIG9wdGlvbmFsbHkgd2l0aCBJZkV4aXN0cyBvciBhIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pY29fZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pY29fc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRjb25kIDo9IG9iamVjdC5nZXQocywgXFxcIkNvbmRpdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjb25kKVxcblxcdHNvbWUgb3AsIF8gaW4gY29uZFxcblxcdGlzX3N0cmluZyhvcClcXG5cXHRub3QgX3BmX2ljb19yb290KG9wKSBpbiBfcGZfaWNvX2Jhc2VcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RhdGVtZW50IElEcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhaXJ3aXNlIHVuaXF1ZW5lc3Mgd2l0aGluIG9uZSBkb2N1bWVudDsgc2VwYXJhdGUgZG9jdW1lbnRzIG1heSByZXVzZVxcbiMgaWRzIGZyZWVseS5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWRzX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pZHNfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1kdXBsaWNhdGUtc2lkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGpdKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyByZXBlYXRzIHdpdGhpbiBvbmUgcG9saWN5OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIGluIGEgc2luZ2xlIHBvbGljeSBtdXN0IGJlIHVuaXF1ZS5cXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzdGF0ZW1lbnQgaW4gdGhlIGRvY3VtZW50IGEgZGlzdGluY3QgU2lkIChvciBkcm9wIHRoZSBkdXBsaWNhdGVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWRzX2RvY3NcXG5cXHRzdG10cyA6PSBfcGZfaWRzX3N0bXRzKGQpXFxuXFx0c29tZSBbaSwgYV0gaW4gc3RtdHNcXG5cXHRzb21lIFtqLCBiXSBpbiBzdG10c1xcblxcdGkgPCBqXFxuXFx0aXNfb2JqZWN0KGEpXFxuXFx0aXNfb2JqZWN0KGIpXFxuXFx0c2lkIDo9IG9iamVjdC5nZXQoYSwgXFxcIlNpZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHNpZClcXG5cXHRzaWQgPT0gb2JqZWN0LmdldChiLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfb3RoZXJcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRWZmZWN0IGlzIGNhc2Utc2Vuc2l0aXZlIEFsbG93IG9yIERlbnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIExvd2VyY2FzZSBlZmZlY3RzIGFyZSBhIGNsYXNzaWMgaGFuZC13cml0dGVuLUpTT04gdHlwbyB0aGUgc2NoZW1hXFxuIyBjYW5ub3Qgc2VlICh0aGUgZG9jdW1lbnQgaXMgb3BhcXVlIGpzb24pLlxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llY19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWVmZmVjdC1jYXNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuRWZmZWN0XFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJFZmZlY3QgJyVzJyBpcyBub3QgQWxsb3cgb3IgRGVueSAoY2FzZS1zZW5zaXRpdmUpOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJUaGUgcG9saWN5IGZhaWxlZCBsZWdhY3kgcGFyc2luZ1xcXFxcXFwiXFxcIiwgW2VmXSksXFxuXFx0XFxcIlVzZSBFZmZlY3Q6IEFsbG93IG9yIEVmZmVjdDogRGVueVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaWVjX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaWVjX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0ZWYgOj0gb2JqZWN0LmdldChzLCBcXFwiRWZmZWN0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoZWYpXFxuXFx0bm90IGVmIGluIHtcXFwiQWxsb3dcXFwiLCBcXFwiRGVueVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjdGlvbi9Ob3RBY3Rpb24gYW5kIFJlc291cmNlL05vdFJlc291cmNlIGFyZSBleGNsdXNpdmUgcGFpcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVhY2ggcGFpciBpcyBlaXRoZXItb3IgcGVyIHN0YXRlbWVudDsgYm90aCBhdCBvbmNlIGlzIGEgc3ludGF4IGVycm9yLlxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZWZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2llZl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxuX3BmX2llZl9wYWlycyA6PSB7W1xcXCJBY3Rpb25cXFwiLCBcXFwiTm90QWN0aW9uXFxcIl0sIFtcXFwiUmVzb3VyY2VcXFwiLCBcXFwiTm90UmVzb3VyY2VcXFwiXX1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZXhjbHVzaXZlLWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLiVzXFxcIiwgW3BhdGgsIGksIHBhaXJbMV1dKSxcXG5cXHRzcHJpbnRmKFxcXCJTdGF0ZW1lbnQgc2V0cyBib3RoICVzIGFuZCAlczsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbcGFpclswXSwgcGFpclsxXV0pLFxcblxcdFxcXCJLZWVwIG9uZSBvZiB0aGUgcGFpciBwZXIgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHBhaXIgaW4gX3BmX2llZl9wYWlyc1xcblxcdG9iamVjdC5nZXQocywgcGFpclswXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgcGFpclsxXSwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlc291cmNlcyBtdXN0IGJlIEFSTnMgb3IgKlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSBsaXRlcmFsIHN0cmluZ3MgYXJlIGp1ZGdlZCAtIEZuOjpHZXRBdHQgLyBGbjo6U3ViIHZhbHVlcyBzdXJmYWNlXFxuIyBhcyBtYXJrZXIgb2JqZWN0cyBpbiB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChtZWFzdXJlZCksIHNvIHRoZVxcbiMgaXNfc3RyaW5nIGd1YXJkIG11dGVzIHRoZW0uXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lyZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaXJmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXJmX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSB2IGlmIGlzX2FycmF5KHYpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXJlc291cmNlLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhbiBBUk47IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlJlc291cmNlICVzIG11c3QgYmUgaW4gQVJOIGZvcm1hdCBvciAnKicuXFxcXFxcXCJcXFwiLCBbciwgcl0pLFxcblxcdFxcXCJVc2UgYSBmdWxsIEFSTiAoYXJuOi4uLikgb3IgKlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXJmX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXJmX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0c29tZSByIGluIF9wZl9pcmZfdmFscyhvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcocilcXG5cXHRyICE9IFxcXCIqXFxcIlxcblxcdG5vdCBzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXNpZC1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IHN0YXRlbWVudCBTaWQgbXVzdCBiZSBhbHBoYW51bWVyaWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlJvbGVcXFwiLCBcXFwiQVdTOjpJQU06OlVzZXJcXFwiLCBcXFwiQVdTOjpJQU06Okdyb3VwXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX3NpZGZtdF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfc2lkZm10X3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9zaWRmbXRfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc2lkLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLlNpZFxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiU2lkICclcycgaXMgbm90IGFscGhhbnVtZXJpYzsgSUFNIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiU3RhdGVtZW50IElEcyAoU0lEKSBtdXN0IGJlIGFscGhhLW51bWVyaWNcXFxcXFxcIlxcXCIsIFtzaWRdKSxcXG5cXHRcXFwiVXNlIG9ubHkgbGV0dGVycyBhbmQgZGlnaXRzIGluIHRoZSBTaWQgKGRyb3AgaHlwaGVucywgdW5kZXJzY29yZXMgYW5kIHNwYWNlcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9zaWRmbXRfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9zaWRmbXRfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChzLCBcXFwiU2lkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlswLTlBLVphLXpdKiRgLCBzaWQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1zdGF0ZW1lbnQtcmVzb3VyY2UtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSWRlbnRpdHkgcG9saWN5IHN0YXRlbWVudHMgbmVlZCBSZXNvdXJjZSBvciBOb3RSZXNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzdGF0ZW1lbnQgc2NvcGVkIHRvIG5vdGhpbmcgaXMgcmVqZWN0ZWQuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pc3JyX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pc3JyX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRcXFwiU3RhdGVtZW50IGhhcyBuZWl0aGVyIFJlc291cmNlIG5vciBOb3RSZXNvdXJjZTsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IHN0YXRlbWVudCBtdXN0IGNvbnRhaW4gcmVzb3VyY2VzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFJlc291cmNlIChhbiBBUk4gb3IgKikgdG8gdGhlIHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXNycl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2lzcnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJOb3RSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUG9saWN5IFZlcnNpb24gbXVzdCBiZSAyMDEyLTEwLTE3IG9yIDIwMDgtMTAtMTdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB2ZXJzaW9uIHN0cmluZyBpcyBhbiBlbnVtIG9mIHR3byBkYXRlczsgYW55dGhpbmcgZWxzZSBpcyBhIHN5bnRheFxcbiMgZXJyb3IgYXQgY3JlYXRlLlxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pcHZfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlZlcnNpb25cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIlBvbGljeSBWZXJzaW9uICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW3ZdKSxcXG5cXHRcXFwiVXNlIFZlcnNpb246IDIwMTItMTAtMTdcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ZlcnNpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBkXSBpbiBfcGZfaXB2X2RvY3NcXG5cXHR2IDo9IG9iamVjdC5nZXQoZCwgXFxcIlZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCB2IGluIHtcXFwiMjAxMi0xMC0xN1xcXCIsIFxcXCIyMDA4LTEwLTE3XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRydXN0IHBvbGljaWVzIGNhbm5vdCBjYXJyeSBhIFJlc291cmNlIGZpZWxkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJvbGUgaXRzZWxmIGlzIHRoZSByZXNvdXJjZSBvZiBpdHMgdHJ1c3QgcG9saWN5OyBhbiBleHBsaWNpdFxcbiMgUmVzb3VyY2UgZmllbGQgaXMgcHJvaGliaXRlZC5cXG5fcGZfaXRucl90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRucl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1uby1yZXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSxcXG5cXHRcXFwiVHJ1c3QgcG9saWN5IHN0YXRlbWVudCBoYXMgYSBSZXNvdXJjZSBmaWVsZDsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJIYXMgcHJvaGliaXRlZCBmaWVsZCBSZXNvdXJjZVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFJlc291cmNlIGZyb20gdGhlIHRydXN0IHBvbGljeSBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0ZCA6PSBfcGZfaXRucl90cnVzdChuYW1lKVxcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pdG5yX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUmVzb3VyY2VcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXJ2aWNlIHByaW5jaXBhbHMgbGl2ZSB1bmRlciBhbWF6b25hd3MuY29tXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU2hhcGUgY2hlY2sgb25seTogZXZlcnkgc2VydmljZSBwcmluY2lwYWwgZW5kcyBpbiAuYW1hem9uYXdzLmNvbSAob3JcXG4jIC5hbWF6b25hd3MuY29tLmNuIGluIHRoZSBDaGluYSBwYXJ0aXRpb24pLiBXaGV0aGVyIGEgd2VsbC1zaGFwZWQgbmFtZVxcbiMgZXhpc3RzIGlzIGxlZnQgdG8gdGhlIHNlcnZpY2UuXFxuX3BmX2l0c3BfdHJ1c3QobmFtZSkgOj0gZCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QoZClcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2l0c3Bfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IFt2XSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfaXRzcF92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbVxcXCIpXFxuXFxuX3BmX2l0c3Bfb2soc3ApIGlmIGVuZHN3aXRoKHNwLCBcXFwiLmFtYXpvbmF3cy5jb20uY25cXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXRydXN0LXBvbGljeS1zZXJ2aWNlLXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Bc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlByaW5jaXBhbC5TZXJ2aWNlXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJTZXJ2aWNlIHByaW5jaXBhbCAnJXMnIGlzIG5vdCBhbiBhbWF6b25hd3MuY29tIGRvbWFpbjsgdGhlIHJvbGUgY3JlYXRlIGZhaWxzIHdpdGggJ0ludmFsaWQgcHJpbmNpcGFsIGluIHBvbGljeTogXFxcXFxcXCJTRVJWSUNFXFxcXFxcXCI6XFxcXFxcXCIlc1xcXFxcXFwiJ1xcXCIsIFtzcCwgc3BdKSxcXG5cXHRcXFwiVXNlIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lLCBlLmcuIGxhbWJkYS5hbWF6b25hd3MuY29tXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19wcmluY2lwYWwuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdHNwX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0c3Bfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRwIDo9IG9iamVjdC5nZXQocywgXFxcIlByaW5jaXBhbFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChwKVxcblxcdHNvbWUgc3AgaW4gX3BmX2l0c3BfdmFscyhvYmplY3QuZ2V0KHAsIFxcXCJTZXJ2aWNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhzcClcXG5cXHRub3QgX3BmX2l0c3Bfb2soc3ApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTMy1iYXNlZCBDb2RlIG5lZWRzIGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEhhbGYgYW4gUzMgcmVmZXJlbmNlIGNhbm5vdCBiZSBmZXRjaGVkLiBPbmx5IGp1ZGdlZCB3aGVuIG5laXRoZXIgWmlwRmlsZVxcbiMgbm9yIEltYWdlVXJpIGlzIHByZXNlbnQgKHRob3NlIHNoYXBlcyBiZWxvbmcgdG8gdGhlIGV4Y2x1c2l2ZSBydWxlKS5cXG5fcGZfbGNzcF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxuX3BmX2xjc3BfaGFzKGMsIGspIGlmIG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0tleVxcXCIsIFxcXCJTM0J1Y2tldFxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0tleVxcXCIpXFxufVxcblxcbl9wZl9sY3NwX2hhbGYoYykgOj0gW1xcXCJTM0J1Y2tldFxcXCIsIFxcXCJTM0tleVxcXCJdIGlmIHtcXG5cXHRfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJTM0J1Y2tldFxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtczMtcGFpclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW21pc3NpbmdbMF1dKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIGhhcyAlcyBidXQgbm8gJXM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIEJ1Y2tldCBhbmQgS2V5IGFyZSByZXF1aXJlZCBmb3IgdXBsb2FkaW5nIHdpdGggUzMgcGFyYW1ldGVycy5cXFxcXFxcIlxcXCIsIFttaXNzaW5nWzFdLCBtaXNzaW5nWzBdXSksXFxuXFx0XFxcIlNldCBib3RoIFMzQnVja2V0IGFuZCBTM0tleVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGNzcF9jb2RlKG5hbWUpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiWmlwRmlsZVxcXCIpXFxuXFx0bm90IF9wZl9sY3NwX2hhcyhjLCBcXFwiSW1hZ2VVcmlcXFwiKVxcblxcdG1pc3NpbmcgOj0gX3BmX2xjc3BfaGFsZihjKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1jb2RlLXppcGZpbGUtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklubGluZSBaaXBGaWxlIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIENvZGUgcGFyYW1ldGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpbiB0aGUgQ29kZSBvYmplY3QgaXMgdGhlIHZpb2xhdGlvbjsgY2hlY2tlZCBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGN6eF9vdGhlciA6PSB7XFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIiwgXFxcIlMzT2JqZWN0VmVyc2lvblxcXCIsIFxcXCJJbWFnZVVyaVxcXCJ9XFxuXFxuX3BmX2xjenhfY29kZShuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb2RlXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQ29kZS4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiQ29kZSBzZXRzIFppcEZpbGUgdG9nZXRoZXIgd2l0aCAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUGxlYXNlIGRvIG5vdCBwcm92aWRlIG90aGVyIEZ1bmN0aW9uQ29kZSBwYXJhbWV0ZXJzIHdoZW4gcHJvdmlkaW5nIGEgWmlwRmlsZS5cXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0XFxcIktlZXAgdGhlIGlubGluZSBaaXBGaWxlIGFsb25lLCBvciBzd2l0Y2ggZW50aXJlbHkgdG8gdGhlIFMzL2ltYWdlIHJlZmVyZW5jZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbGFtYmRhLWZ1bmN0aW9uLWNvZGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0YyA6PSBfcGZfbGN6eF9jb2RlKG5hbWUpXFxuXFx0b2JqZWN0LmdldChjLCBcXFwiWmlwRmlsZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4gX3BmX2xjenhfb3RoZXJcXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgZGVhZCBsZXR0ZXIgdGFyZ2V0IG11c3Qgc2l0IGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGVhZCBsZXR0ZXIgdGFyZ2V0IHJlZ2lvbiAnJXMnIGlzIG5vdCB0aGUgZGVwbG95IHJlZ2lvbiAnJXMnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHJlc291cmNlIHNwZWNpZmllZCBieSB0aGUgVGFyZ2V0QXJuIG11c3QgYmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBMYW1iZGEgZnVuY3Rpb24gaXQncyBhc3NvY2lhdGVkIHdpdGguXFxcXFxcXCJcXFwiLCBbcGFydHNbM10sIHJlZ2lvbl0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGEgcXVldWUgb3IgdG9waWMgaW4gdGhlIHNhbWUgcmVnaW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbM10gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWRscS1zZXJ2aWNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBiZSBhbiBTUVMgcXVldWUgb3IgU05TIHRvcGljXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHNlZ21lbnQgbGl2ZXMgaW5zaWRlIHRoZSBBUk4gc3RyaW5nLCBpbnZpc2libGUgdG8gYW55XFxuIyBzY2hlbWEgbGF5ZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgc2VydmljZSAnJXMnIGlzIG5vdCBzcXMgb3Igc25zOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIGRlYWQgbGV0dGVyIHF1ZXVlIEFSTjogVGhlIHNlcnZpY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gaXMgbm90IHN1cHBvcnRlZCBmb3IgZGVhZCBsZXR0ZXIgY29uZmlndXJhdGlvbi5cXFxcXFxcIlxcXCIsIFtwYXJ0c1syXV0pLFxcblxcdFxcXCJQb2ludCBEZWFkTGV0dGVyQ29uZmlnIGF0IGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWMgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tZGVhZGxldHRlcmNvbmZpZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWFkTGV0dGVyQ29uZmlnLlRhcmdldEFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0bm90IHBhcnRzWzJdIGluIHtcXFwic3FzXFxcIiwgXFxcInNuc1xcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTW91bnRpbmcgRUZTIHJlcXVpcmVzIFZwY0NvbmZpZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNb3VudGluZyBFRlMgcmVxdWlyZXMgdGhlIGZ1bmN0aW9uIHRvIHJ1biBpbnNpZGUgYSBWUEMuIEtleSBwcmVzZW5jZSBpc1xcbiMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sZWZzdl9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVmcy1yZXF1aXJlcy12cGNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZwY0NvbmZpZ1xcXCIsXFxuXFx0XFxcIkZpbGVTeXN0ZW1Db25maWdzIHdpdGhvdXQgVnBjQ29uZmlnOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJGdW5jdGlvbiBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZXhlY3V0ZSBpbiBhIFZQQyB0byByZWZlcmVuY2UgYWNjZXNzIHBvaW50IC4uLiBQbGVhc2UgdXBkYXRlIHRoZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uIHRvIGluY2x1ZGUgVlBDIHN1Ym5ldHMgYW5kIHNlY3VyaXR5IGdyb3Vwcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBWcGNDb25maWcgd2l0aCBzdWJuZXRzIHRoYXQgaGF2ZSBFRlMgbW91bnQgdGFyZ2V0cyBpbiB0aGVpciBBWnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2xlZnN2X3Byb3BzKG5hbWUpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpbGVTeXN0ZW1Db25maWdzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNDb25maWdcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVudi1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGxpbWl0ZWQgdG8gNDA5NiBieXRlcyBpbiB0b3RhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDjg6rjg4bjg6njg6vmloflrZfliJfjga7jgq3jg7wv5YCk44Gg44GR44KS5pWw44GI44KL77yI44OI44O844Kv44Oz44Gv44K544Kt44OD44OX77yJ44CC5ZCI6KiI44GM5pei44GrIDQwOTYg44KS6LaF44GI44GmXFxuIyDjgYTjgozjgbDjgIHlrp/pmpvjga7jg4fjg5fjg63jgqTjgafjgoLlv4XjgZrlpLHmlZfjgZnjgovvvIjlrp/jgrXjgqTjgrrjga/mjqjlrprku6XkuIrjgavjgZfjgYvjgarjgonjgarjgYTvvInjgIJcXG4jIE5PVEU6IOOBk+OBruOCqOODs+OCuOODs+OBriBSZWdvIOODkeODvOOCteOBr+WGheWMheihqOiomOWGheOBriAyIOWkieaVsCBzb21l77yIc29tZSBrLCB2IGluIHZhcnPvvInjgpJcXG4jIOWPl+OBkeS7mOOBkeOBquOBhOOBn+OCgeOAgW9iamVjdC5rZXlzIOe1jOeUseOBp+abuOOBj+OAglxcbl9wZl9sZW52X3NpemUodmFycykgOj0gc3VtKFtzIHxcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmtleXModmFycylcXG5cXHRpc19zdHJpbmcodmFyc1trXSlcXG5cXHRzIDo9IGNvdW50KGspICsgY291bnQodmFyc1trXSlcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVudi1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkVudmlyb25tZW50IHZhcmlhYmxlcyB0b3RhbCBhdCBsZWFzdCAlZCBieXRlcyAobGl0ZXJhbCBrZXlzIGFuZCB2YWx1ZXMpLCBidXQgTGFtYmRhIGxpbWl0cyB0aGUgZW52aXJvbm1lbnQgdG8gNDA5NiBieXRlczsgQ3JlYXRlRnVuY3Rpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG90YWxdKSxcXG5cXHRcXFwiTW92ZSBsYXJnZSB2YWx1ZXMgdG8gU1NNIFBhcmFtZXRlciBTdG9yZSwgU2VjcmV0cyBNYW5hZ2VyLCBvciBhIGJ1bmRsZWQgY29uZmlnIGZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9nZXR0aW5nc3RhcnRlZC1saW1pdHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0dG90YWwgOj0gX3BmX2xlbnZfc2l6ZSh2YXJzKVxcblxcdHRvdGFsID4gNDA5Nlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTUVMgYmF0Y2ggc2l6ZXMgb3ZlciAxMCBuZWVkIGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTUVMtb25seSBjb3VwbGluZzogYmlnIGJhdGNoZXMgbXVzdCB3YWl0IGZvciBhIHdpbmRvdy4gS2luZXNpcyBhbmRcXG4jIER5bmFtb0RCIHNvdXJjZXMgdGFrZSBsYXJnZSBiYXRjaGVzIHdpdGhvdXQgb25lLCBoZW5jZSB0aGUgU1FTIGd1YXJkLlxcbl9wZl9sYnN3X2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGJzd19pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2xic3dfbm9fd2luZG93KG5hbWUpIGlmIHtcXG5cXHR0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiKSkgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tYmF0Y2hzaXplLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmF0Y2hTaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYXRjaFNpemUgJXYgd2l0aG91dCBhIGJhdGNoaW5nIHdpbmRvdzsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IE1heGltdW0gYmF0Y2ggd2luZG93IGluIHNlY29uZHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBpZiBtYXhpbXVtIGJhdGNoIHNpemUgaXMgZ3JlYXRlciB0aGFuIDEwXFxcXFxcXCJcXFwiLCBbYl0pLFxcblxcdFxcXCJTZXQgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzICgxLTMwMCksIG9yIGtlZXAgQmF0Y2hTaXplIGF0IDEwIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGJzd19pc19zcXMobmFtZSlcXG5cXHRiIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhdGNoU2l6ZVxcXCIpKVxcblxcdGIgPiAxMFxcblxcdF9wZl9sYnN3X25vX3dpbmRvdyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyBxdWV1ZXMgcmVqZWN0IGEgYmF0Y2hpbmcgd2luZG93XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBGSUZPIG9yZGVyaW5nIGZvcmJpZHMgaG9sZGluZyBhIGJhdGNoIG9wZW4uIEZJRk8tbmVzcyBjb21lcyBmcm9tIHRoZVxcbiMgcXVldWUgc2libGluZydzIEZpZm9RdWV1ZSBmbGFnIG9yIHRoZSAuZmlmbyBhcm4gc3VmZml4Llxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdHEgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpXFxuXFx0cSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpKSA9PSB0cnVlXFxufVxcblxcbl9wZl9sZmJ3X2lzX2ZpZm8obmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0ZW5kc3dpdGgoYXJuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1lc20tZmlmby1iYXRjaGluZy13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIsXFxuXFx0XFxcIkJhdGNoaW5nIHdpbmRvdyBvbiBhIEZJRk8gcXVldWUgc291cmNlOyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogQmF0Y2hpbmcgd2luZG93IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEZJRk8gcXVldWVzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kcywgb3IgdXNlIGEgc3RhbmRhcmQgcXVldWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGZid19pc19maWZvKG5hbWUpXFxuXFx0dG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIikpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1lc20tc3FzLXN0YXJ0aW5nLXBvc2l0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNRUyBldmVudCBzb3VyY2VzIHJlamVjdCBTdGFydGluZ1Bvc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTdGFydGluZ1Bvc2l0aW9uIGJlbG9uZ3MgdG8gc3RyZWFtIHNvdXJjZXM7IHF1ZXVlcyBoYXZlIG5vIG9mZnNldHMuXFxuIyBEZXRlY3RlZCB2aWEgYW4gaW4tdGVtcGxhdGUgcXVldWUgc2libGluZyBvciB0aGUgc3FzIGFybiBzZWdtZW50Llxcbl9wZl9sZXNwX2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FdmVudFNvdXJjZUFyblxcXCIpIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcbn1cXG5cXG5fcGZfbGVzcF9pc19zcXMobmFtZSkgaWYge1xcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0c3BsaXQoYXJuLCBcXFwiOlxcXCIpWzJdID09IFxcXCJzcXNcXFwiXFxufVxcblxcbl9wZl9sZXNwX3NldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlN0YXJ0aW5nUG9zaXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1zcXMtc3RhcnRpbmctcG9zaXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlN0YXJ0aW5nUG9zaXRpb25cXFwiLFxcblxcdFxcXCJTdGFydGluZ1Bvc2l0aW9uIG9uIGFuIFNRUyBldmVudCBzb3VyY2U7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBTdGFydGluZ1Bvc2l0aW9uIGlzIG5vdCB2YWxpZCBmb3IgU1FTIGV2ZW50IHNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIFN0YXJ0aW5nUG9zaXRpb24gKGl0IG9ubHkgYXBwbGllcyB0byBLaW5lc2lzL0R5bmFtb0RCL0thZmthIHNvdXJjZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWV2ZW50c291cmNlbWFwcGluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkV2ZW50U291cmNlTWFwcGluZ1xcXCIpXFxuXFx0X3BmX2xlc3BfaXNfc3FzKG5hbWUpXFxuXFx0X3BmX2xlc3Bfc2V0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLW1lbW9yeS1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWVtb3J5U2l6ZSB0b3BzIG91dCBhdCAxMDI0MFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBoYXMgdGhlIDEyOCBmbG9vciBidXQgaXMgbWlzc2luZyB0aGUgMTAyNDAgY2FwXFxuIyAoZW5naW5lIGNsZWFuIG9uIDIwMDAwLCBGMzAzNCBvbiA2NCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtbWVtb3J5LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5U2l6ZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWVtb3J5U2l6ZSAldiBpcyBvdmVyIHRoZSBjYXA7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIidNZW1vcnlTaXplJyB2YWx1ZSBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxMDI0MFxcXFxcXFwiXFxcIiwgW21dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMTAyNDAgTUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZnVuY3Rpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0bSA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NZW1vcnlTaXplXFxcIikpXFxuXFx0bSA+IDEwMjQwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLXRpbWVvdXQtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRpbWVvdXQgdG9wcyBvdXQgYXQgOTAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgaGFzIHRoZSAxIGZsb29yIGJ1dCBpcyBtaXNzaW5nIHRoZSA5MDAgY2FwIChlbmdpbmVcXG4jIGNsZWFuIG9uIDkwMSwgRjMwMzQgb24gMCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtdGltZW91dC1tYXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRpbWVvdXQgJXYgaXMgb3ZlciB0aGUgMTUtbWludXRlIGNhcDsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiVmFsdWUgJyV2JyBhdCAndGltZW91dCcgZmFpbGVkIHRvIHNhdGlzZnkgY29uc3RyYWludDogTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOTAwXFxcXFxcXCJcXFwiLCBbdCwgdF0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCA5MDAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRpbWVvdXRcXFwiKSlcXG5cXHR0ID4gOTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpbHRlciBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggJ1snIG11c3QgZW5kIHdpdGggJ10nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ2ZwYl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0ZpbHRlckFuZFBhdHRlcm5TeW50YXguaHRtbFxcXCJcXG5cXG5fcGZfbGdmcGJfbXNnKGtpbmQpIDo9IHNwcmludGYoXFxcIlRoZSAlcyBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgYnV0IGRvZXMgbm90IGVuZCB3aXRoICddJzsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSWYgYSBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgaXQgbXVzdCBlbmQgd2l0aCAnXSdcXFxcXFxcIlxcXCIsIFtraW5kXSlcXG5cXG5fcGZfbGdmcGJfZml4IDo9IFxcXCJDbG9zZSB0aGUgYnJhY2tldCDigJQgYSBzcGFjZS1kZWxpbWl0ZWQgcGF0dGVybiBpcyBbZmllbGQxLCBmaWVsZDIsIC4uLl1cXFwiXFxuXFxuIyBUaGUgc2FtZSBwYXJzZXIgcnVucyBmb3IgbWV0cmljIGZpbHRlcnMgYW5kIHN1YnNjcmlwdGlvbiBmaWx0ZXJzLCBhbmQgaXRcXG4jIHJ1bnMgYmVmb3JlIGFueSBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uIChiZW5jaCBjMDEvYzA2KS4gT25seSB0aGlzXFxuIyBzdGFydC9lbmQgcGFpcmluZyBpcyBjaGVja2VkIGhlcmU7IGEgZnVsbCBwYXR0ZXJuIHBhcnNlciBpcyBvdXQgb2Ygc2NvcGUuXFxuX3BmX2xnZnBiX3VuYmFsYW5jZWQocCkgaWYge1xcblxcdHQgOj0gdHJpbV9zcGFjZShwKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcIltcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiXVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJtZXRyaWNcXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJzdWJzY3JpcHRpb25cXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZWZhdWx0VmFsdWUgaXMgZW1pdHRlZCB3aGVuIGEgbG9nIGxpbmUgZG9lcyBub3QgbWF0Y2gsIGJ1dCBhIGRpbWVuc2lvblxcbiMgdmFsdWUgY2FuIG9ubHkgY29tZSBmcm9tIGEgbWF0Y2gg4oCUIHRoZSBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbWJpbmF0aW9uLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnMuJWQuRGVmYXVsdFZhbHVlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbiBzZXRzIGJvdGggRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJbnZhbGlkIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbjogZGltZW5zaW9ucyBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHByb3BlcnRpZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgRGVmYXVsdFZhbHVlIHdoZW4gdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBEaW1lbnNpb25zLCBvciBkcm9wIHRoZSBEaW1lbnNpb25zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sb2dzLW1ldHJpY2ZpbHRlci1tZXRyaWN0cmFuc2Zvcm1hdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEZWZhdWx0VmFsdWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0ZGltcyA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEaW1lbnNpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShkaW1zKVxcblxcdGNvdW50KGRpbXMpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIGRlc3RpbmF0aW9uIG5lZWRzIFJvbGVBcm5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnc2tyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvU3Vic2NyaXB0aW9uRmlsdGVycy5odG1sXFxcIlxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIGlzIHByb3ZhYmx5IEtpbmVzaXMgdHdvIHdheXM6IGEgbGl0ZXJhbFxcbiMgYXJuOjxwYXJ0aXRpb24+OmtpbmVzaXM6IHN0cmluZywgb3IgYSBSZWYvR2V0QXR0IHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG9cXG4jIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIEFXUzo6S2luZXNpczo6U3RyZWFtLiBTY29wZWQgdG8gS2luZXNpcyDigJRcXG4jIHRoZSBiZW5jaCBlcnJvciBuYW1lcyBcXFwidmVuZG9yIGtpbmVzaXNcXFwiOyBvdGhlciB2ZW5kb3JzIHdlcmUgbm90IG1lYXN1cmVkLlxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0cGFydHMgOj0gc3BsaXQoZCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAzXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG59XFxuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRkIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXM6OlN0cmVhbVxcXCIpXFxufVxcblxcbiMgVHJ1ZSBhYnNlbmNlIG9mIFJvbGVBcm4gbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVBcm5cXFwiLFxcblxcdFxcXCJUaGUgc3Vic2NyaXB0aW9uIGZpbHRlciB0YXJnZXRzIGEgS2luZXNpcyBzdHJlYW0gYnV0IHNldHMgbm8gUm9sZUFybjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiZGVzdGluYXRpb25Bcm4gZm9yIHZlbmRvciBraW5lc2lzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgcm9sZUFyblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUm9sZUFybiBmb3IgYSByb2xlIHRoYXQgbG9ncy5hbWF6b25hd3MuY29tIGNhbiBhc3N1bWUgd2l0aCBraW5lc2lzOlB1dFJlY29yZCBvbiB0aGUgc3RyZWFtXFxcIixcXG5cXHRfcGZfbGdza3JfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0X3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKVxcblxcdF9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdHJhY2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQmFja3RyYWNrIG9ubHkgd29ya3Mgb24gYXVyb3JhLW15c3FsLCB3aXRoIGEgd2luZG93IG9mIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvQXVyb3JhTXlTUUwuTWFuYWdpbmcuQmFja3RyYWNrLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3RyYWNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYWNrdHJhY2tXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t0cmFjayBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhdXJvcmEtbXlzcWwgKFxcXFxcXFwiQmFja3RyYWNrIGlzIG5vdCBlbmFibGVkIGZvciB0aGUgJXMgZW5naW5lLlxcXFxcXFwiKVxcXCIsIFtlbmddKSxcXG5cXHRcXFwiUmVtb3ZlIEJhY2t0cmFja1dpbmRvdywgb3IgdXNlIHRoZSBhdXJvcmEtbXlzcWwgZW5naW5lXFxcIixcXG5cXHRfcGZfcmRzYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAwXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRpc19zdHJpbmcoZW5nKVxcblxcdGVuZyAhPSBcXFwiYXVyb3JhLW15c3FsXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdHJhY2tcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmFja3RyYWNrV2luZG93ICV2IGlzIG91dHNpZGUgMC0yNTkyMDAgc2Vjb25kcyAoNzIgaG91cnMpXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU5MjAwIHNlY29uZHNcXFwiLFxcblxcdF9wZl9yZHNidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIikgPT0gXFxcImF1cm9yYS1teXNxbFxcXCJcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIpKVxcblxcdG4gPiAyNTkyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgbXVzdCBiZSBhdCBtb3N0IDM1IGRheXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtYmFja3VwLXJldGVudGlvbi1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmFja3VwUmV0ZW50aW9uUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXBSZXRlbnRpb25QZXJpb2QgJXYgZXhjZWVkcyB0aGUgbWF4aW11bTsgUkRTIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM1LlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiVXNlIGEgcmV0ZW50aW9uIHBlcmlvZCBvZiAzNSBkYXlzIG9yIGxlc3NcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJhY2t1cFJldGVudGlvblBlcmlvZFxcXCIpKVxcblxcdG4gPiAzNVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IG11c3QgYmUgYXQgbGVhc3QgMzAgbWludXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFxcXCJISDpNTVxcXCIgLT4gbWludXRlcyBvZiBkYXk7IHVuZGVmaW5lZCBmb3IgYW55dGhpbmcgZWxzZS4gRGlnaXRzIGdvXFxuIyB0aHJvdWdoIGEgbG9va3VwIHRhYmxlIGJlY2F1c2UgdG9fbnVtYmVyIHJlamVjdHMgbGVhZGluZyB6ZXJvc1xcbiMgKHRvX251bWJlcihcXFwiMDNcXFwiKSBpcyB1bmRlZmluZWQgaW4gdGhlIGVuZ2luZSdzIFJlZ28gYnVpbGQpLlxcbl9wZl9yZHN3ZF9kaWdpdCA6PSB7XFxcIjBcXFwiOiAwLCBcXFwiMVxcXCI6IDEsIFxcXCIyXFxcIjogMiwgXFxcIjNcXFwiOiAzLCBcXFwiNFxcXCI6IDQsIFxcXCI1XFxcIjogNSwgXFxcIjZcXFwiOiA2LCBcXFwiN1xcXCI6IDcsIFxcXCI4XFxcIjogOCwgXFxcIjlcXFwiOiA5fVxcblxcbl9wZl9yZHN3ZF9taW4odCkgOj0gbSBpZiB7XFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0cmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB0KVxcblxcdGggOj0gKF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgMCwgMSldICogMTApICsgX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAxLCAxKV1cXG5cXHRtaSA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAzLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDQsIDEpXVxcblxcdG0gOj0gKGggKiA2MCkgKyBtaVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWR1cmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG9ubHkgJXYgbWludXRlczsgUkRTIHJlcXVpcmVzIGF0IGxlYXN0IDMwIChcXFxcXFxcIkJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzLlxcXFxcXFwiKVxcXCIsIFt3LCBkXSksXFxuXFx0XFxcIldpZGVuIHRoZSB3aW5kb3cgdG8gMzAgbWludXRlcyBvciBtb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0cGFydHMgOj0gc3BsaXQodywgXFxcIi1cXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0cyA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzBdKVxcblxcdGUgOj0gX3BmX3Jkc3dkX21pbihwYXJ0c1sxXSlcXG5cXHRkIDo9ICgoZSAtIHMpICsgMTQ0MCkgJSAxNDQwXFxuXFx0ZCA8IDMwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyBtdXN0IGJlIGhoMjQ6bWktaGgyNDptaVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtd2luZG93LWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQcmVmZXJyZWRCYWNrdXBXaW5kb3cgJyVzJyBpcyBub3QgaGgyNDptaS1oaDI0Om1pICgyNEggY2xvY2sgVVRDKTsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLCBbd10pLFxcblxcdFxcXCJVc2UgdGhlIGhoMjQ6bWktaGgyNDptaSBmb3JtLCBlLmcuIDAzOjAwLTA0OjAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKHcpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0tKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtZGJuYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJwb3N0Z3JlcyBEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbGV0dGVyLXN0YXJ0IGhhbGYgb2YgdGhlIHNlcnZpY2UgbWVzc2FnZSBpcyBjbGFpbWVkOiB0aGVcXG4jIFxcXCJvbmx5IGFscGhhbnVtZXJpY1xcXCIgaGFsZiBpcyBtZWFzdXJhYmx5IHdyb25nIChiZW5jaF9kYiBkZXBsb3lzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kYm5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRCTmFtZSAnJXMnIGRvZXMgbm90IGJlZ2luIHdpdGggYSBsZXR0ZXIgKFxcXFxcXFwiREJOYW1lIG11c3QgYmVnaW4gd2l0aCBhIGxldHRlclxcXFxcXFwiKTsgdGhlIENyZWF0ZURCSW5zdGFuY2UgY2FsbCBmYWlsc1xcXCIsIFtkbl0pLFxcblxcdFxcXCJTdGFydCB0aGUgZGF0YWJhc2UgbmFtZSB3aXRoIGEgbGV0dGVyXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0ZG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EQk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aXWAsIGRuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUkRTIGdyb3VwIGRlc2NyaXB0aW9ucyBtdXN0IGJlIHByaW50YWJsZSBBU0NJSVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCUGFyYW1ldGVyR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cERlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBEZXNjcmlwdGlvblxcXCJcXG59XFxuXFxuX3BmX3Jkc2Rlc2NfYmFkIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCB2XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJQYXJhbWV0ZXJHcm91cFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgyMC1cXFxceDdlXSokYCwgdilcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLkRlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1kZXNjcmlwdGlvbi1wcmludGFibGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiRGVzY3JpcHRpb24gJyVzJyBpcyByZWplY3RlZDogUkRTIHRyZWF0cyBhbnkgbm9uLUFTQ0lJIGNoYXJhY3RlciBhcyBhIG5vbi1wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJcXFwiLCBbdl0pLFxcblxcdFxcXCJXcml0ZSB0aGUgZGVzY3JpcHRpb24gaW4gcHJpbnRhYmxlIEFTQ0lJXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgdl0gaW4gX3BmX3Jkc2Rlc2NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImdwMyBiZWxvdyA0MDAgR2lCIGNhbm5vdCB0YWtlIGN1c3RvbSBJb3BzIG9yIFN0b3JhZ2VUaHJvdWdocHV0IChwb3N0Z3Jlcy9teXNxbClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc2dwM19oYXMobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJJb3BzXFxcIilcXG5cXG5fcGZfcmRzZ3AzX2N1c3RvbShuYW1lKSBpZiBfcGZfcmRzZ3AzX2hhcyhuYW1lLCBcXFwiU3RvcmFnZVRocm91Z2hwdXRcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWdwMy1pb3BzLXN0b3JhZ2UtdGhyZXNob2xkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJncDMgd2l0aCAldiBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQgYmVsb3cgNDAwIEdpQiBmb3IgZW5naW5lICVzIChcXFxcXFxcIllvdSBjYW4ndCBzcGVjaWZ5IElPUFMgb3Igc3RvcmFnZSB0aHJvdWdocHV0IC4uLiBsZXNzIHRoYW4gNDAwLlxcXFxcXFwiKVxcXCIsIFtzLCBlbmddKSxcXG5cXHRcXFwiRHJvcCB0aGUgY3VzdG9tIElvcHMvU3RvcmFnZVRocm91Z2hwdXQsIG9yIGFsbG9jYXRlIGF0IGxlYXN0IDQwMCBHaUJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0ZW5nIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5naW5lXFxcIilcXG5cXHRlbmcgaW4ge1xcXCJwb3N0Z3Jlc1xcXCIsIFxcXCJteXNxbFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA8IDQwMFxcblxcdF9wZl9yZHNncDNfY3VzdG9tKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIGlvMSBJb3BzIG1heSBub3QgZXhjZWVkIDUwIHBlciBHaUIgb2Ygc3RvcmFnZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIGJlbmNoZWQgZW5naW5lL3R5cGUgcGFpcjsgdGhlIGhpc3RvcmljYWwgNjQwMDAgSU9QUyBjYXAgaXNcXG4jIGdvbmUgKDgwMDAwIGRlcGxveWVkIGNsZWFuIGF0IHJhdGlvIDQwIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvMS1pb3BzLXJhdGlvXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzICV2IHBlciBHaUIgZm9yICV2IEdpQjsgcG9zdGdyZXMgaW8xIGFsbG93cyBhdCBtb3N0IDUwIChcXFxcXFxcIkludmFsaWQgaW9wcyB0byBzdG9yYWdlIChHaUIpIHJhdGlvXFxcXFxcXCIpXFxcIiwgW24sIG4gLyBzLCBzXSksXFxuXFx0XFxcIktlZXAgSW9wcyBhdCBvciBiZWxvdyA1MCB4IEFsbG9jYXRlZFN0b3JhZ2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9TdG9yYWdlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwicG9zdGdyZXNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TdG9yYWdlVHlwZVxcXCIpID09IFxcXCJpbzFcXFwiXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvY2F0ZWRTdG9yYWdlXFxcIikpXFxuXFx0cyA+IDBcXG5cXHRuID4gcyAqIDUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgc3RvcmFnZSByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlN0b3JhZ2VUeXBlICVzIHJlcXVpcmVzIElvcHMgKFxcXFxcXFwiVGhlIHN0b3JhZ2UgdHlwZSAlcyByZXF1aXJlcyBpb3BzIHRvIGJlIHNwZWNpZmllZC5cXFxcXFxcIilcXFwiLCBbc3QsIHN0XSksXFxuXFx0XFxcIlNldCBJb3BzIGFsb25nc2lkZSB0aGUgcHJvdmlzaW9uZWQtSU9QUyBzdG9yYWdlIHR5cGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRzdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIilcXG5cXHRzdCBpbiB7XFxcImlvMVxcXCIsIFxcXCJpbzJcXFwifVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJJb3BzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wYXNzd29yZC12YWxpZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYXN0ZXJVc2VyUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgd2l0aG91dCAnLycsICdAJywgJ1xcXFxcXFwiJyBvciBzcGFjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcHdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCJcXG5cXG5fcGZfcmRzcHdfdHlwZXMgOj0ge1xcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIsIFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIn1cXG5cXG5fcGZfcmRzcHdfZm9yYmlkZGVuIDo9IHtcXFwiL1xcXCIsIFxcXCJAXFxcIiwgXFxcIlxcXFxcXFwiXFxcIiwgXFxcIiBcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdFxcXCJNYXN0ZXJVc2VyUGFzc3dvcmQgaXMgc2hvcnRlciB0aGFuIDggY2hhcmFjdGVyczsgUkRTIHJlamVjdHMgaXQgYXQgY3JlYXRlIHRpbWVcXFwiLFxcblxcdFxcXCJVc2UgOCsgY2hhcmFjdGVycywgb3IgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRjb3VudChwdykgPCA4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiLFxcblxcdHNwcmludGYoXFxcIk1hc3RlclVzZXJQYXNzd29yZCBjb250YWlucyAnJXMnOyBSRFMgZm9yYmlkcyAnLycsICdAJywgZG91YmxlIHF1b3RlcyBhbmQgc3BhY2VzXFxcIiwgW2NoXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgZm9yYmlkZGVuIGNoYXJhY3Rlciwgb3IgdXNlIGEgU2VjcmV0cyBNYW5hZ2VyIHJlZmVyZW5jZVxcXCIsXFxuXFx0X3BmX3Jkc3B3X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4gX3BmX3Jkc3B3X3R5cGVzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHB3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFzdGVyVXNlclBhc3N3b3JkXFxcIilcXG5cXHRpc19zdHJpbmcocHcpXFxuXFx0c29tZSBjaCBpbiBfcGZfcmRzcHdfZm9yYmlkZGVuXFxuXFx0Y29udGFpbnMocHcsIGNoKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkYXRhYmFzZSBwb3J0IG11c3QgYmUgd2l0aGluIDExNTAtNjU1MzVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPCAxMTUwXFxuXFxuX3BmX3Jkc3BvcnRfb3V0KG4pIGlmIG4gPiA2NTUzNVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvcnQgJXYgaXMgb3V0c2lkZSAxMTUwLTY1NTM1IChcXFxcXFxcIkludmFsaWQgZW5kcG9pbnQgcG9ydCAldi4gVmFsaWQgcmFuZ2UgaXM6IDExNTAtNjU1MzVcXFxcXFxcIilcXFwiLCBbbiwgbl0pLFxcblxcdFxcXCJQaWNrIGEgcG9ydCBiZXR3ZWVuIDExNTAgYW5kIDY1NTM1XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQkluc3RhbmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJJbnN0YW5jZVxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb3J0XFxcIikpXFxuXFx0X3BmX3Jkc3BvcnRfb3V0KG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VydmVybGVzcyB2MiBNaW5DYXBhY2l0eSBtdXN0IG5vdCBleGNlZWQgTWF4Q2FwYWNpdHksIGFuZCBNYXhDYXBhY2l0eSBpcyBhdCBtb3N0IDI1NlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNzdjJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BdXJvcmFVc2VyR3VpZGUvYXVyb3JhLXNlcnZlcmxlc3MtdjIuc2V0dGluZy1jYXBhY2l0eS5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5DYXBhY2l0eSAldiBleGNlZWRzIE1heENhcGFjaXR5ICV2IChcXFxcXFxcIm1pbmltdW0gY2FwYWNpdHkgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4aW11bSBjYXBhY2l0eVxcXFxcXFwiKVxcXCIsIFttbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5DYXBhY2l0eSA8PSBNYXhDYXBhY2l0eVxcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1pbkNhcGFjaXR5XFxcIikpXFxuXFx0bXggOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXNlcnZlcmxlc3MtdjItY2FwYWNpdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNYXhDYXBhY2l0eSAldiBpcyBhYm92ZSAyNTYgQUNVcyAoXFxcXFxcXCJUaGUgdmFsaWQgc2NhbGluZyByYW5nZSBmb3IgdGhpcyBjbHVzdGVyIGlzIDAuMCB0byAyNTYuMC5cXFxcXFxcIilcXFwiLCBbbXhdKSxcXG5cXHRcXFwiVXNlIGF0IG1vc3QgMjU2IEFDVXNcXFwiLFxcblxcdF9wZl9yZHNzdjJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJDbHVzdGVyXFxcIilcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG14ID4gMjU2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXN1Ym5ldC1ncm91cC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRCIHN1Ym5ldCBncm91cCBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIHNwYWNlcywgZG90LCB1bmRlcnNjb3JlIGFuZCBoeXBoZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc3VibmV0LWdyb3VwLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEQlN1Ym5ldEdyb3VwTmFtZSAnJXMnIGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJJbnZhbGlkIHN1Ym5ldCBncm91cCBuYW1lXFxcXFxcXCI6IFJEUyBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkb3QsIHVuZGVyc2NvcmUgYW5kIGh5cGhlblxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgc3VibmV0IGdyb3VwIHVzaW5nIFthLXpBLVowLTkgLl8tXSBvbmx5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblJEUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVEQlN1Ym5ldEdyb3VwLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJEUzo6REJTdWJuZXRHcm91cFxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCU3VibmV0R3JvdXBOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05IC5fLV17MSwyNTV9JGAsIG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBiYWNrdXAgd2luZG93IGFuZCB0aGUgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBcXFwiSEg6TU1cXFwiIC0+IG1pbnV0ZXMgb2YgZGF5OyB1bmRlZmluZWQgZm9yIGFueXRoaW5nIGVsc2UuIERpZ2l0cyBnb1xcbiMgdGhyb3VnaCBhIGxvb2t1cCB0YWJsZSBiZWNhdXNlIHRvX251bWJlciByZWplY3RzIGxlYWRpbmcgemVyb3NcXG4jICh0b19udW1iZXIoXFxcIjAzXFxcIikgaXMgdW5kZWZpbmVkIGluIHRoZSBlbmdpbmUncyBSZWdvIGJ1aWxkKS5cXG5fcGZfcmRzd29fZGlnaXQgOj0ge1xcXCIwXFxcIjogMCwgXFxcIjFcXFwiOiAxLCBcXFwiMlxcXCI6IDIsIFxcXCIzXFxcIjogMywgXFxcIjRcXFwiOiA0LCBcXFwiNVxcXCI6IDUsIFxcXCI2XFxcIjogNiwgXFxcIjdcXFwiOiA3LCBcXFwiOFxcXCI6IDgsIFxcXCI5XFxcIjogOX1cXG5cXG5fcGZfcmRzd29fbWluKHQpIDo9IG0gaWYge1xcblxcdGlzX3N0cmluZyh0KVxcblxcdHJlZ2V4Lm1hdGNoKGBeKFswMV1bMC05XXwyWzAtM10pOlswLTVdWzAtOV0kYCwgdClcXG5cXHRoIDo9IChfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDAsIDEpXSAqIDEwKSArIF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMSwgMSldXFxuXFx0bWkgOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMywgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCA0LCAxKV1cXG5cXHRtIDo9IChoICogNjApICsgbWlcXG59XFxuXFxuIyBUaGUgYmFja3VwIHdpbmRvdyByZWN1cnMgZGFpbHksIHNvIGEgc2FtZS1kYXkgbWFpbnRlbmFuY2Ugd2luZG93XFxuIyBvdmVybGFwcyB3aGVuZXZlciB0aGUgdGltZS1vZi1kYXkgaW50ZXJ2YWxzIGludGVyc2VjdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy13aW5kb3ctb3ZlcmxhcFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdXAgd2luZG93ICVzIG92ZXJsYXBzIG1haW50ZW5hbmNlIHdpbmRvdyAlczsgUkRTIHJlamVjdHMgdGhlIHBhaXIgKFxcXFxcXFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIG1haW50ZW5hbmNlIHdpbmRvdyBtdXN0IG5vdCBvdmVybGFwLlxcXFxcXFwiKVxcXCIsIFtidywgbXddKSxcXG5cXHRcXFwiU2VwYXJhdGUgdGhlIHR3byB3aW5kb3dzIGluIHRpbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRidyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKGJ3KVxcblxcdGJwIDo9IHNwbGl0KGJ3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQoYnApID09IDJcXG5cXHRicyA6PSBfcGZfcmRzd29fbWluKGJwWzBdKVxcblxcdGJlIDo9IF9wZl9yZHN3b19taW4oYnBbMV0pXFxuXFx0YnMgPCBiZVxcblxcdG13IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3dcXFwiKVxcblxcdGlzX3N0cmluZyhtdylcXG5cXHRtcCA6PSBzcGxpdChsb3dlcihtdyksIFxcXCItXFxcIilcXG5cXHRjb3VudChtcCkgPT0gMlxcblxcdG0xIDo9IHNwbGl0KG1wWzBdLCBcXFwiOlxcXCIpXFxuXFx0bTIgOj0gc3BsaXQobXBbMV0sIFxcXCI6XFxcIilcXG5cXHRjb3VudChtMSkgPT0gM1xcblxcdGNvdW50KG0yKSA9PSAzXFxuXFx0bTFbMF0gPT0gbTJbMF1cXG5cXHRtcyA6PSBfcGZfcmRzd29fbWluKHNwcmludGYoXFxcIiVzOiVzXFxcIiwgW20xWzFdLCBtMVsyXV0pKVxcblxcdG1lIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTJbMV0sIG0yWzJdXSkpXFxuXFx0bXMgPCBtZVxcblxcdGJzIDwgbWVcXG5cXHRtcyA8IGJlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ2xvdWRGcm9udCBhbGlhcyB0YXJnZXQgbXVzdCB1c2UgaG9zdGVkIHpvbmUgWjJGRFROREFUQVFZVzJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFdmVyeSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbiBpcyBhbGlhc2VkIHRocm91Z2ggdGhlIHNpbmdsZSBnbG9iYWwgaG9zdGVkXFxuIyB6b25lIFoyRkRUTkRBVEFRWVcyLiBBbnkgb3RoZXIgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIChhbiBBTEIncyByZWdpb25hbFxcbiMgem9uZSBpZCBpcyB0aGUgY2xhc3NpYyBwYXN0ZSBlcnJvcikgZmFpbHMgYXQgZGVwbG95IHRpbWUgd2l0aCBcXFwidGhlIGFsaWFzXFxuIyB0YXJnZXQgbmFtZSBkb2VzIG5vdCBsaWUgd2l0aGluIHRoZSB0YXJnZXQgem9uZVxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgYWxpYXMgdGFyZ2V0cyBhIENsb3VkRnJvbnQgZG9tYWluLCBzbyBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgbXVzdCBiZSBaMkZEVE5EQVRBUVlXMiwgbm90ICclcydcXFwiLCBbemlkXSksXFxuXFx0XFxcIlNldCBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgdG8gWjJGRFROREFUQVFZVzIgKGluIHRoZSBDREssIHJvdXRlNTNfdGFyZ2V0cy5DbG91ZEZyb250VGFyZ2V0IGRvZXMgdGhpcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2VuZXJhbC9sYXRlc3QvZ3IvY2ZfcmVnaW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0ZG5zIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuRE5TTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRucylcXG5cXHRlbmRzd2l0aCh0cmltX3N1ZmZpeChsb3dlcihkbnMpLCBcXFwiLlxcXCIpLCBcXFwiLmNsb3VkZnJvbnQubmV0XFxcIilcXG5cXHR6aWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6aWQpXFxuXFx0emlkICE9IFxcXCJaMkZEVE5EQVRBUVlXMlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIixcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19hcGV4X25vcm0obikgOj0gdHJpbV9zdWZmaXgobG93ZXIobiksIFxcXCIuXFxcIilcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAyMyBjYXRjaGVzIGFuIGFwZXggQ05BTUUgb25seSB3aGVuIHRoZSByZWNvcmQgY2FycmllcyBhXFxuIyBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lLiBDREsgTDIgYWx3YXlzIGxpbmtzIHJlY29yZHMgd2l0aFxcbiMgSG9zdGVkWm9uZUlkOiB7XFxcIlJlZlxcXCI6IDx6b25lPn0sIHdoaWNoIEUzMDIzIGRvZXMgbm90IHNlZSAobWVhc3VyZWQgMjAyNi0wOS0wMixcXG4jIGVuZ2luZSAxLjcuMC1iZXRhKS4gcmVzb2x2ZSgpIHR1cm5zIHN1Y2ggYSBSZWYgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCxcXG4jIHNvIHdoZW4gdGhhdCBJRCBuYW1lcyBhIEhvc3RlZFpvbmUgaW4gdGhlIHNhbWUgdGVtcGxhdGUgd2UgY2FuIHJlYWQgaXRzXFxuIyBsaXRlcmFsIE5hbWUgYW5kIGRvIHRoZSBhcGV4IGNvbXBhcmlzb24gb3Vyc2VsdmVzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hcGV4LWNuYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXggKCclcycpOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiUlJTZXQgb2YgdHlwZSBDTkFNRSAuLi4gaXMgbm90IHBlcm1pdHRlZCBhdCBhcGV4XFxcXFxcXCJcXFwiLCBbcmVjTmFtZV0pLFxcblxcdFxcXCJVc2UgYW4gYWxpYXMgQS9BQUFBIHJlY29yZCBmb3IgdGhlIGFwZXggKEFsaWFzVGFyZ2V0KSwgb3IgbW92ZSB0aGUgQ05BTUUgdG8gYSBzdWJkb21haW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvcmVzb3VyY2UtcmVjb3JkLXNldHMtY2hvb3NpbmctYWxpYXMtbm9uLWFsaWFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHpyZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lSWRcXFwiKVxcblxcdGlzX3N0cmluZyh6cmVmKVxcblxcdHpyZWYgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVxcXCIpXFxuXFx0em9uZU5hbWUgOj0gcmVzb2x2ZSh6cmVmLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem9uZU5hbWUpXFxuXFx0cmVjTmFtZSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhyZWNOYW1lKVxcblxcdF9wZl9yNTNfYXBleF9ub3JtKHJlY05hbWUpID09IF9wZl9yNTNfYXBleF9ub3JtKHpvbmVOYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgZXhwcmVzc2VzIHRoaXMgYXMgYSBvbmVPZiwgd2hpY2ggdGhlIHNlcnZlci1zaWRlXFxuIyBwcmUtZGVwbG95IHZhbGlkYXRpb24gZW5mb3JjZXMgKFxcXCIyIHN1YnNjaGVtYXMgbWF0Y2hlZCBpbnN0ZWFkIG9mIG9uZVxcXCIpIGJ1dFxcbiMgdGhlIGJ1bmRsZWQgZW5naW5lIGRvZXMgbm90IGV2YWx1YXRlIOKAlCBoZW5jZSB1cHN0cmVhbTogcGVuZGluZy1lbmdpbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiLFxcblxcdFxcXCJHZW9Mb2NhdGlvbiBjYW5ub3Qgc3BlY2lmeSBib3RoIENvbnRpbmVudENvZGUgYW5kIENvdW50cnlDb2RlOyBDbG91ZEZvcm1hdGlvbiByZWplY3RzIHRoZSByZWNvcmQgc2V0IGJlZm9yZSBwcm92aXNpb25pbmdcXFwiLFxcblxcdFxcXCJLZWVwIGVpdGhlciB0aGUgQ29udGluZW50Q29kZSBvciB0aGUgQ291bnRyeUNvZGUgKGFkZCBTdWJkaXZpc2lvbkNvZGUgb25seSBuZXh0IHRvIENvdW50cnlDb2RlIFVTKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtcm91dGU1My1yZWNvcmRzZXQtZ2VvbG9jYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRnZW8gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KGdlbylcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb250aW5lbnRDb2RlXFxcIiwgbnVsbCkpXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ291bnRyeUNvZGVcXFwiLCBudWxsKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLW11bHRpdmFsdWUtYWxpYXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdFxcXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJNdWx0aXZhbHVlIGFuc3dlciBycnNldCBzaG91bGQgbm90IGJlIGFuIGFsaWFzIHJyc2V0XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgcGxhaW4gbXVsdGl2YWx1ZSByZWNvcmRzIHdpdGggUmVzb3VyY2VSZWNvcmRzLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXIgYW5kIGtlZXAgdGhlIGFsaWFzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOUyByZWNvcmRzIHRha2Ugbm8gcm91dGluZyBwb2xpY3k7IENOQU1FIGNhbm5vdCBiZSBtdWx0aXZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdHlwb2xfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfdHlwb2xfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3R5cG9sX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuIyBPbmx5IGNvbWJpbmF0aW9ucyB0aGF0IGZhaWxlZCBvbiBhIHJlYWwgZGVwbG95IGFyZSBmbGFnZ2VkLiBTT0EvRFMgd2l0aCBhXFxuIyByb3V0aW5nIHBvbGljeSBhcmUgYWxzbyBkb2N1bWVudGVkIGFzIHVuc3VwcG9ydGVkIGJ1dCB3ZXJlIG5vdCBtZWFzdXJlZCwgc29cXG4jIHRoZXkgYXJlIGRlbGliZXJhdGVseSBsZWZ0IG91dCAoc2VlIHRoZSBkaXNjb3ZlcnkgaXNzdWUpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkFuIE5TIHJlY29yZCBjYW5ub3QgdXNlIGEgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJVc2UgYSBzaW1wbGUgcmVjb3JkIHNldCBmb3IgTlMgcmVjb3JkcyAobm8gV2VpZ2h0L1JlZ2lvbi9GYWlsb3Zlci9HZW9Mb2NhdGlvbi9NdWx0aVZhbHVlQW5zd2VyL0NpZHJSb3V0aW5nQ29uZmlnKVxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiTlNcXFwiXFxuXFx0X3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0XFxcIkEgQ05BTUUgcmVjb3JkIGNhbm5vdCB1c2UgdGhlIG11bHRpdmFsdWUgYW5zd2VyIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiUG9pbnQgdGhlIG11bHRpdmFsdWUgcmVjb3JkcyBhdCBBL0FBQUEgKG9yIGFub3RoZXIgc3VwcG9ydGVkIHR5cGUpLCBvciBkcm9wIE11bHRpVmFsdWVBbnN3ZXJcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNOQU1FXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBuZWVkcyBBbGlhc1RhcmdldCBvciB0aGUgZnVsbCBUVEwrUmVzb3VyY2VSZWNvcmRzIHBhaXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M192YWxzcmNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbiMgVGhlIHNlcnZpY2UgZXhwZWN0cyBcXFwiZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kXFxuIyBSZXNvdXJjZVJlY29yZHNdXVxcXCIgKFRyYWZmaWNQb2xpY3lJbnN0YW5jZUlkIGhhcyBubyBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSkuXFxuIyBUaGUgVFRMK0FsaWFzVGFyZ2V0IGNvbWJpbmF0aW9uIGlzIGFscmVhZHkgdGhlIGVuZ2luZSdzIEUzMDI5LCBzbyB0aGlzIHJ1bGVcXG4jIGNvdmVycyB0aGUgcmVtYWluaW5nIHNoYXBlczogYWxpYXMgcGx1cyByZWNvcmRzLCBhbmQgYW4gaW5jb21wbGV0ZSBub24tYWxpYXNcXG4jIGdyb3VwIChyZWNvcmRzIHdpdGhvdXQgVFRMLCBUVEwgd2l0aG91dCByZWNvcmRzLCBvciBuZWl0aGVyKS5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXRcXFwiKSlcXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSkgaWYge1xcblxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIilcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpICE9IG51bGxcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiQWxpYXNUYXJnZXQgYW5kIFJlc291cmNlUmVjb3JkcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIEFsaWFzVGFyZ2V0IG9yIFRUTC1wbHVzLVJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIktlZXAgdGhlIEFsaWFzVGFyZ2V0IGFuZCBkcm9wIFJlc291cmNlUmVjb3Jkcywgb3IgbWFrZSBpdCBhIHBsYWluIHJlY29yZCB3aXRoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRcXFwiQSBub24tYWxpYXMgcmVjb3JkIHNldCBuZWVkcyBib3RoIFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzOyB0aGUgc2VydmljZSByZWplY3RzIGFuIGluY29tcGxldGUgcGFpciB3aXRoIFxcXFxcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW0FsaWFzVGFyZ2V0LCBhbGwgb2YgW1RUTCwgYW5kIFJlc291cmNlUmVjb3Jkc11dIC4uLiBmb3VuZCBub25lXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTcGVjaWZ5IFRUTCBhbmQgUmVzb3VyY2VSZWNvcmRzIHRvZ2V0aGVyLCBvciB1c2UgQWxpYXNUYXJnZXQgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19jb21wbGV0ZShuYW1lKSBpZiB7XFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3R0bChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIGVuZm9yY2VzIFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLFxcbiMgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIEdlb1Byb3hpbWl0eUxvY2F0aW9uLCBvciBDaWRyUm91dGluZ0NvbmZpZ11cXFwiLlxcbiMgR2VvUHJveGltaXR5TG9jYXRpb24gaXMgbm90IGEgQ2xvdWRGb3JtYXRpb24gcHJvcGVydHksIHNvIGZpdmUgcmVtYWluIGhlcmUuXFxuIyBNdWx0aVZhbHVlQW5zd2VyOiBmYWxzZSBpcyB0cmVhdGVkIGFzIGFic2VudCDigJQgb25seSB0cnVlIHNlbGVjdHMgdGhlIHBvbGljeS5cXG5fcGZfcjUzX3BvbHhfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwcm9wKSBpZiB7XFxuXFx0cHJvcCAhPSBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIikgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxuX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpIDo9IHBzIGlmIHtcXG5cXHRwcyA6PSBbcCB8IHNvbWUgcCBpbiBhcnJheS5jb25jYXQoX3BmX3I1M19wb2x4X3Byb3BzLCBbXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXSk7IF9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHApXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcm91dGluZy1wb2xpY3ktZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3ksIGJ1dCAldiBhcmUgYWxsIHNwZWNpZmllZFxcXCIsIFtwc10pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBzcGxpdCB0aGUgcmVzdCBpbnRvIHNlcGFyYXRlIHJlY29yZCBzZXRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRwcyA6PSBfcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSlcXG5cXHRjb3VudChwcykgPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXRJZGVudGlmaWVyIGFuZCBhIHJvdXRpbmcgcG9saWN5IG11c3QgYXBwZWFyIHRvZ2V0aGVyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfc2lkcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M19zaWRwX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHNvbWUgcCBpbiBfcGZfcjUzX3NpZHBfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiQSByb3V0aW5nIHBvbGljeSBpcyBjb25maWd1cmVkIGJ1dCBTZXRJZGVudGlmaWVyIGlzIG1pc3Npbmc7IHRoZSBDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiTWlzc2luZyBmaWVsZCAnU2V0SWRlbnRpZmllcidcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFNldElkZW50aWZpZXIgdGhhdCBpcyB1bmlxdWUgYW1vbmcgdGhlIHJlY29yZCBzZXRzIHNoYXJpbmcgdGhpcyBOYW1lIGFuZCBUeXBlXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG5cXHRub3QgaXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIlNldElkZW50aWZpZXIgaXMgc3BlY2lmaWVkIGJ1dCBubyByb3V0aW5nIHBvbGljeSBpczsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgZmluZHMgbm9uZVxcXCIsXFxuXFx0XFxcIlJlbW92ZSBTZXRJZGVudGlmaWVyIGZyb20gdGhpcyBzaW1wbGUgcmVjb3JkIHNldCwgb3IgYWRkIHRoZSByb3V0aW5nIHBvbGljeSBpdCB3YXMgbWVhbnQgZm9yXFxcIixcXG5cXHRfcGZfcjUzX3NpZHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIpKVxcblxcdG5vdCBfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUVEwgbXVzdCBmaXQgaW4gMzIgYml0cyAoMC4uMjE0NzQ4MzY0NyBzZWNvbmRzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgOTk5OTk5OTk5OSB3aXRoXFxuIyBcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjE0NzQ4MzY0N1xcXCIuIE5lZ2F0aXZlIFRUTHMgYXJlXFxuIyB1bnRlc3RlZCwgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVFRMIG11c3QgYmUgYXQgbW9zdCAyMTQ3NDgzNjQ3IHNlY29uZHMsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBUVEwgdG8gYSAzMi1iaXQgdmFsdWU7IGFueXRoaW5nIGFib3ZlIGEgZGF5IHJhcmVseSBoZWxwcyBjYWNoaW5nIGFueXdheVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHQpXFxuXFx0biA+IDIxNDc0ODM2NDdcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiV2VpZ2h0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDMwMCB3aXRoIFxcXCJNZW1iZXJcXG4jIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1XFxcIi4gTmVnYXRpdmUgd2VpZ2h0cyBhcmUgdW50ZXN0ZWQsXFxuIyBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXdlaWdodC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJXZWlnaHQgbXVzdCBiZSBhdCBtb3N0IDI1NSwgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFdlaWdodCB0byBhIHZhbHVlIGluIFswLCAyNTVdOyB3ZWlnaHRzIGFyZSByZWxhdGl2ZSwgc28gc2NhbGUgdGhlIGdyb3VwIGRvd24gcHJvcG9ydGlvbmFsbHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2VpZ2h0XFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih3KVxcblxcdG4gPiAyNTVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSG9zdGVkWm9uZU5hbWUgbXVzdCBlbmQgd2l0aCBhIHRyYWlsaW5nIGRvdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENsb3VkRm9ybWF0aW9uIGxvb2tzIHRoZSB6b25lIHVwIGJ5IHRoZSBsaXRlcmFsIEhvc3RlZFpvbmVOYW1lIGFuZCBkb2VzIG5vdFxcbiMgbm9ybWFsaXplIHRoZSB0cmFpbGluZyBkb3Q6IHRoZSBzYW1lIHN0YWNrIGRlcGxveWVkIGNsZWFuIHdpdGhcXG4jIFxcXCJ6b25lLmV4YW1wbGUuXFxcIiBhbmQgZmFpbGVkIHdpdGggTm90Rm91bmQgZm9yIFxcXCJ6b25lLmV4YW1wbGVcXFwiICgyMDI2LTA5LTAyKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiSG9zdGVkWm9uZU5hbWUgJyVzJyBpcyBtaXNzaW5nIHRoZSB0cmFpbGluZyBkb3QsIHNvIENsb3VkRm9ybWF0aW9uIGZhaWxzIHRoZSBsb29rdXAgd2l0aCBcXFxcXFxcIk5vIGhvc3RlZCB6b25lIHdpdGggbmFtZSAuLi4gZm91bmRcXFxcXFxcIlxcXCIsIFt6bl0pLFxcblxcdHNwcmludGYoXFxcIlVzZSAnJXMuJyAod2l0aCB0aGUgdHJhaWxpbmcgZG90KVxcXCIsIFt6bl0pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHpuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6bilcXG5cXHR6biAhPSBcXFwiXFxcIlxcblxcdG5vdCBlbmRzd2l0aCh6biwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUcmFuc2ZlciBBY2NlbGVyYXRpb24gcmVqZWN0cyBidWNrZXQgbmFtZXMgd2l0aCBwZXJpb2RzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBlbmRwb2ludHMgYXJlIEROUy1iYXNlZCwgc28gYnVja2V0IG5hbWVzIGNvbnRhaW5pbmdcXG4jIHBlcmlvZHMgYXJlIHJlamVjdGVkIGF0IGNyZWF0aW9uLiBPbmx5IGEgbGl0ZXJhbCBCdWNrZXROYW1lIGlzIGNoZWNrYWJsZTtcXG4jIENESy1nZW5lcmF0ZWQgbmFtZXMgbmV2ZXIgY29udGFpbiBwZXJpb2RzIGFueXdheS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWFjY2VsZXJhdGUtZG90dGVkLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQnVja2V0IG5hbWUgJyVzJyBjb250YWlucyBwZXJpb2RzLCB3aGljaCBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZG9lcyBub3Qgc3VwcG9ydDsgQ3JlYXRlQnVja2V0IGZhaWxzIHdpdGggXFxcXFxcXCJTMyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgYnVja2V0cyB3aXRoIHBlcmlvZHMgKC4pIGluIHRoZWlyIG5hbWVzXFxcXFxcXCJcXFwiLCBbYm5dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBidWNrZXQgd2l0aG91dCBwZXJpb2RzLCBvciBkcm9wIEFjY2VsZXJhdGVDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvdHJhbnNmZXItYWNjZWxlcmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIikgPT0gXFxcIkVuYWJsZWRcXFwiXFxuXFx0Ym4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CdWNrZXROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoYm4pXFxuXFx0Y29udGFpbnMoYm4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdC1sZXZlbCBhY3Rpb25zIG5lZWQgYW4gb2JqZWN0LWxldmVsIFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIG9iamVjdC1sZXZlbCBhY3Rpb24gd2hvc2Ugc3RhdGVtZW50IGxpc3RzIG9ubHkgYnVja2V0LWxldmVsIEFSTnMgYXBwbGllc1xcbiMgdG8gbm90aGluZywgYW5kIFMzIHJlamVjdHMgdGhlIHBvbGljeS4gQSBidWNrZXQtbGV2ZWwgQVJOIGlzIHByb3ZhYmxlIHR3b1xcbiMgd2F5czogYSBsaXRlcmFsIGFybjouLi46czM6OjpuYW1lIHdpdGggbm8gXFxcIi9cXFwiIGluIHRoZSBuYW1lIHBhcnQsIG9yIGEgdmFsdWVcXG4jIHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG8gdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgYnVja2V0IChSZWYgYW5kXFxuIyBGbjo6R2V0QXR0IEFybiBib3RoIGRvIOKAlCB0aGUgR2V0QXR0IG9mIGEgYnVja2V0IGlzIGl0cyBidWNrZXQgQVJOKS4gRmlyZXNcXG4jIG9ubHkgd2hlbiBldmVyeSByZXNvdXJjZSBpbiB0aGUgc3RhdGVtZW50IGlzIHByb3ZhYmx5IGJ1Y2tldC1sZXZlbCwgc29cXG4jIHVucmVzb2x2YWJsZSBlbnRyaWVzIChlLmcuIEZuOjpTdWIgXFxcIiR7Qi5Bcm59LypcXFwiKSBtdXRlIHRoZSBzdGF0ZW1lbnQuXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpnZXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6cHV0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmRlbGV0ZW9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIGxvd2VyKGEpIGluIHtcXFwiczM6YWJvcnRtdWx0aXBhcnR1cGxvYWRcXFwiLCBcXFwiczM6cmVzdG9yZW9iamVjdFxcXCIsIFxcXCJzMzpsaXN0bXVsdGlwYXJ0dXBsb2FkcGFydHNcXFwifVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYge1xcblxcdHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcblxcdGNvbnRhaW5zKHIsIFxcXCI6czM6OjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KHIsIFxcXCI6OjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA9PSAyXFxuXFx0bm90IGNvbnRhaW5zKHBhcnRzWzFdLCBcXFwiL1xcXCIpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBbYV0gaWYge1xcblxcdGEgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gYWN0cyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGFjdHMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IGl0LnZhbHVlOyBpc19zdHJpbmcodildXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IFtyXSBpZiB7XFxuXFx0ciA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcocilcXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gcnMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW2ldKSldXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdHJzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlLiVkXFxcIiwgW2ksIGl0LmluZGV4XSkpOyBpc19zdHJpbmcodildXFxuXFx0Y291bnQocnMpID09IGNvdW50KGl0ZW1zKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtzdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkFjdGlvbiAnJXMnIHRhcmdldHMgb2JqZWN0cyBidXQgdGhlIHN0YXRlbWVudCdzIHJlc291cmNlcyBhcmUgYWxsIGJ1Y2tldC1sZXZlbCBBUk5zOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIkFjdGlvbiBkb2VzIG5vdCBhcHBseSB0byBhbnkgcmVzb3VyY2UocykgaW4gc3RhdGVtZW50XFxcXFxcXCJcXFwiLCBbYV0pLFxcblxcdFxcXCJBZGQgdGhlIG9iamVjdCBmb3JtIG9mIHRoZSBBUk4gKGFwcGVuZCAvKiBvciBhIGtleSBwYXR0ZXJuKSB0byBSZXNvdXJjZSwgb3IgZHJvcCB0aGUgb2JqZWN0LWxldmVsIGFjdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRzb21lIGEgaW4gX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIHN0LmluZGV4KVxcblxcdF9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKVxcblxcdHJzIDo9IF9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIHN0LmluZGV4KVxcblxcdGNvdW50KHJzKSA+IDBcXG5cXHRldmVyeSByIGluIHJzIHtcXG5cXHRcXHRfcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIGEgUHJpbmNpcGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlc291cmNlLWJhc2VkIHBvbGljaWVzIHJlcXVpcmUgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIGluIGV2ZXJ5XFxuIyBzdGF0ZW1lbnQg4oCUIHVubGlrZSBpZGVudGl0eSBwb2xpY2llcywgd2hlcmUgY2ZuLWxpbnQtZ3JhZGUgY2hlY2tzIGFyZVxcbiMgdHVuZWQuIEFuIHVucmVzb2x2YWJsZSBQcmluY2lwYWwgdmFsdWUgc3RpbGwgY291bnRzIGFzIHByZXNlbnQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LXByaW5jaXBhbFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWRcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIHN0YXRlbWVudCBoYXMgbmVpdGhlciBQcmluY2lwYWwgbm9yIE5vdFByaW5jaXBhbDsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJNaXNzaW5nIHJlcXVpcmVkIGZpZWxkIFByaW5jaXBhbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUHJpbmNpcGFsIChvciBOb3RQcmluY2lwYWwpIHRvIHRoZSBzdGF0ZW1lbnQg4oCUIGJ1Y2tldCBwb2xpY2llcyBhbHdheXMgbmFtZSB3aG8gdGhleSBhcHBseSB0b1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2J1Y2tldC1wb2xpY2llcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XFxcIilcXG5cXHRzb21lIHN0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChzdC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJOb3RQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMaWZlY3ljbGUgYXJjaGl2ZSB0cmFuc2l0aW9ucyBtdXN0IGNvbWUgMzArIGRheXMgYWZ0ZXIgSUEsIGFuZCBleHBpcmF0aW9uIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zM29yZF9maXggOj0gXFxcIk9yZGVyIHRoZSBsaWZlY3ljbGUgZGF5cyBzbyBhcmNoaXZlIHRyYW5zaXRpb25zIGNvbWUgYXQgbGVhc3QgMzAgZGF5cyBhZnRlciBJQSB0cmFuc2l0aW9ucyBhbmQgZXhwaXJhdGlvbiBjb21lcyBhZnRlciBldmVyeSB0cmFuc2l0aW9uXFxcIlxcblxcbl9wZl9zM29yZF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL2xpZmVjeWNsZS10cmFuc2l0aW9uLWdlbmVyYWwtY29uc2lkZXJhdGlvbnMuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuVHJhbnNpdGlvbnNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlRyYW5zaXRpb24gdG8gJXMgYXQgJXYgZGF5cyBpcyBsZXNzIHRoYW4gMzAgZGF5cyBhZnRlciB0aGUgJXMgdHJhbnNpdGlvbiBhdCAldiBkYXlzOyBTMyByZXF1aXJlcyBvYmplY3RzIHRvIHN0YXkgYXQgbGVhc3QgMzAgZGF5cyBpbiBJQSBzdG9yYWdlXFxcIiwgW3NjMiwgZDIsIHNjMSwgZDFdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQxIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQxKVxcblxcdHNjMSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MxIGluIHtcXFwiU1RBTkRBUkRfSUFcXFwiLCBcXFwiT05FWk9ORV9JQVxcXCJ9XFxuXFx0cmF3MSA6PSBvYmplY3QuZ2V0KHQxLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGQxIDo9IHRvX251bWJlcihyYXcxKVxcblxcdHNvbWUgdDIgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDIpXFxuXFx0c2MyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzIgaW4ge1xcXCJHTEFDSUVSXFxcIiwgXFxcIkRFRVBfQVJDSElWRVxcXCJ9XFxuXFx0cmF3MiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3MiAhPSBudWxsXFxuXFx0ZDIgOj0gdG9fbnVtYmVyKHJhdzIpXFxuXFx0ZDIgPCBkMSArIDMwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzICgldikgbXVzdCBiZSBncmVhdGVyIHRoYW4gVHJhbnNpdGlvbkluRGF5cyAoJXYpOyBTMyByZWplY3RzIGxpZmVjeWNsZSBydWxlcyB0aGF0IGV4cGlyZSBvYmplY3RzIGJlZm9yZSBvciB3aGVuIHRoZXkgdHJhbnNpdGlvblxcXCIsIFtlLCBkXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhd2UgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZSAhPSBudWxsICMgdG9fbnVtYmVyKG51bGwpIOOBryAwIOOBq+OBquOCi1xcblxcdGUgOj0gdG9fbnVtYmVyKHJhd2UpXFxuXFx0dHJhbnMgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiVHJhbnNpdGlvbnNcXFwiLCBbXSlcXG5cXHRpc19hcnJheSh0cmFucylcXG5cXHRzb21lIHQgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodClcXG5cXHRyYXdkIDo9IG9iamVjdC5nZXQodCwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2QgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhd2QpXFxuXFx0ZSA8PSBkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHBpcmF0aW9uSW5EYXlzIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIEV4cGlyYXRpb25JbkRheXMgYXMgYSBiYXJlIGludGVnZXIgd2l0aCBub1xcbiMgbWluaW11bSwgc28gMCBhbmQgbmVnYXRpdmVzIHJlYWNoIHRoZSBzZXJ2aWNlLiBPbmx5IHRoZSBFeHBpcmF0aW9uIGFjdGlvblxcbiMgd2FzIGJlbmNoLXZlcmlmaWVkOyBvdGhlciBkYXkgZmllbGRzIGFyZSBsZWZ0IGFsb25lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWV4cGlyYXRpb24tcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5FeHBpcmF0aW9uSW5EYXlzXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJFeHBpcmF0aW9uSW5EYXlzIGlzICV2OyBTMyByZWplY3RzIHRoZSBydWxlIHdpdGggXFxcXFxcXCInRGF5cycgZm9yIEV4cGlyYXRpb24gYWN0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXFxcXFxcXCJcXFwiLCBbZF0pLFxcblxcdFxcXCJVc2UgYW4gRXhwaXJhdGlvbkluRGF5cyBvZiAxIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdyAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3KVxcblxcdGQgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbGlmZWN5Y2xlIHJ1bGUgbmVlZHMgYXQgbGVhc3Qgb25lIGFjdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgdGVuIGFjdGlvbiBmaWVsZHMsIHZlcmJhdGltIGZyb20gdGhlIHNlcnZpY2UgZXJyb3IuIEEgZmllbGQgd2hvc2UgdmFsdWVcXG4jIGlzIGFuIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgc3RpbGwgY291bnRzIGFzIHByZXNlbnQgKGZhaWwgY2xvc2VkKS5cXG5fcGZfczNsbmFfYWN0aW9ucyA6PSB7XFxuXFx0XFxcIkFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZFxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25EYXRlXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIkV4cGlyZWRPYmplY3REZWxldGVNYXJrZXJcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvbkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJOb25jdXJyZW50VmVyc2lvblRyYW5zaXRpb25zXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25zXFxcIixcXG59XFxuXFxuX3BmX3MzbG5hX2hhc19hY3Rpb24ocnVsZSkgaWYge1xcblxcdHNvbWUgayBpbiBfcGZfczNsbmFfYWN0aW9uc1xcblxcdG9iamVjdC5nZXQocnVsZSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1ydWxlLW5vLWFjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIGxpZmVjeWNsZSBydWxlIHNwZWNpZmllcyBubyBhY3Rpb247IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkF0IGxlYXN0IG9uZSBvZiBbRXhwaXJhdGlvbkRhdGUsRXhwaXJhdGlvbkluRGF5cyxBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWQsVHJhbnNpdGlvbiwuLi5dIG5lZWRzIHRvIGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGFuIGV4cGlyYXRpb24sIHRyYW5zaXRpb24sIG9yIGFib3J0LWluY29tcGxldGUtbXVsdGlwYXJ0LXVwbG9hZCBhY3Rpb24gdG8gdGhlIHJ1bGUsIG9yIHJlbW92ZSB0aGUgcnVsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRub3QgX3BmX3MzbG5hX2hhc19hY3Rpb24oci52YWx1ZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vdGlmaWNhdGlvbiBlbnRyaWVzIG11c3Qgbm90IG92ZXJsYXAgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUzMga2VlcHMgb25lIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uIHBlciBidWNrZXQgYW5kIHJlamVjdHMgaXQgd2hlbiB0d29cXG4jIGVudHJpZXMgKGFjcm9zcyBxdWV1ZS90b3BpYy9sYW1iZGEgYWxpa2UpIGNvdWxkIG1hdGNoIHRoZSBzYW1lIG9iamVjdCBldmVudDpcXG4jIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzIEFORCBvdmVybGFwcGluZyBwcmVmaXhlcyBBTkQgb3ZlcmxhcHBpbmcgc3VmZml4ZXMuXFxuIyBBIG1pc3NpbmcgZmlsdGVyIHNpZGUgbWVhbnMgXFxcIlxcXCIgYW5kIG92ZXJsYXBzIGV2ZXJ5dGhpbmcuIFBhaXJzIHdpdGggYW5cXG4jIHVucmVzb2x2YWJsZSBldmVudCBvciBmaWx0ZXIgdmFsdWUgYXJlIHNraXBwZWQg4oCUIG92ZXJsYXAgY2Fubm90IGJlIHByb3Zlbi5cXG5cXG5fcGZfczNub19jb25maWdzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChhcnJheS5jb25jYXQoXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uUXVldWVDb25maWd1cmF0aW9uc1xcXCIpXSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5Ub3BpY0NvbmZpZ3VyYXRpb25zXFxcIildKSxcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5MYW1iZGFDb25maWd1cmF0aW9uc1xcXCIpXSlcXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBydWxlcyBpZiB7XFxuXFx0ZiA6PSBvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChmKVxcblxcdGsgOj0gb2JqZWN0LmdldChmLCBcXFwiUzNLZXlcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChrKVxcblxcdHJ1bGVzIDo9IG9iamVjdC5nZXQoaywgXFxcIlJ1bGVzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkocnVsZXMpXFxufVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IFtdIGlmIHtcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJGaWx0ZXJcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gdiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA+IDBcXG5cXHR2IDo9IHZzWzBdXFxufVxcblxcbl9wZl9zM25vX2ZpbHRlcl92YWwoYywga2luZCkgOj0gXFxcIlxcXCIgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPT0gMFxcbn1cXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChiLCBhKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGEsIGIpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYiwgYSlcXG5cXG4jIFxcXCJzMzpPYmplY3RDcmVhdGVkOipcXFwiIGNvdmVycyBcXFwiczM6T2JqZWN0Q3JlYXRlZDpQdXRcXFwiOyBkcm9wIHRoZSB0cmFpbGluZyBcXFwiKlxcXCJcXG4jIGFuZCBwcmVmaXgtbWF0Y2guXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIGUxID09IGUyXFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMSwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUyLCBzdWJzdHJpbmcoZTEsIDAsIGNvdW50KGUxKSAtIDEpKVxcbn1cXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUyLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTEsIHN1YnN0cmluZyhlMiwgMCwgY291bnQoZTIpIC0gMSkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlR3byBub3RpZmljYXRpb24gZW50cmllcyBmb3Igb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgKCclcycgYW5kICclcycpIGhhdmUgb3ZlcmxhcHBpbmcgcHJlZml4L3N1ZmZpeCBmaWx0ZXJzOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJDb25maWd1cmF0aW9uIGlzIGFtYmlndW91c2x5IGRlZmluZWQuIENhbm5vdCBoYXZlIG92ZXJsYXBwaW5nIHN1ZmZpeGVzIGluIHR3byBydWxlcyBpZiB0aGUgcHJlZml4ZXMgYXJlIG92ZXJsYXBwaW5nIGZvciB0aGUgc2FtZSBldmVudCB0eXBlLlxcXFxcXFwiXFxcIiwgW2UxLCBlMl0pLFxcblxcdFxcXCJNYWtlIHRoZSBwcmVmaXhlcyBvciBzdWZmaXhlcyBkaXNqb2ludCwgb3IgbWVyZ2UgdGhlIHR3byBlbnRyaWVzIGludG8gb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbm90aWZpY2F0aW9uLWhvdy10by1maWx0ZXJpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y3MgOj0gX3BmX3Mzbm9fY29uZmlncyhuYW1lKVxcblxcdHNvbWUgaSwgYSBpbiBjc1xcblxcdHNvbWUgaiwgYiBpbiBjc1xcblxcdGkgPCBqXFxuXFx0ZTEgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMSlcXG5cXHRlMiA6PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUyKVxcblxcdF9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKVxcblxcdHAxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAxKVxcblxcdHAyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInByZWZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHAyKVxcblxcdF9wZl9zM25vX3ByZV9vdmVybGFwKHAxLCBwMilcXG5cXHRzMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMSlcXG5cXHRzMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJzdWZmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhzMilcXG5cXHRfcGZfczNub19zdWZfb3ZlcmxhcChzMSwgczIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdExvY2tDb25maWd1cmF0aW9uIG9uIGl0cyBvd24gZG9lcyBOT1QgcmVxdWlyZSBPYmplY3RMb2NrRW5hYmxlZCDigJRcXG4jIFMzIGFjY2VwdHMgT2JqZWN0IExvY2sgb24gYW4gZXhpc3RpbmcgdmVyc2lvbmVkIGJ1Y2tldCAoYmVuY2ggczA1YiBkZXBsb3llZFxcbiMgY2xlYW4pLiBXaGF0IGl0IGRvZXMgcmVxdWlyZSBpcyB2ZXJzaW9uaW5nLiBXaGVuIE9iamVjdExvY2tFbmFibGVkIGlzIHRydWVcXG4jIHRoZSBidWNrZXQgaXMgY3JlYXRlZCBsb2NrLWVuYWJsZWQgYW5kIHZlcnNpb25pbmcgY29tZXMgd2l0aCBpdCwgc28gdGhlIHJ1bGVcXG4jIGZpcmVzIG9ubHkgd2hlbiBsb2NrLWVuYWJsZW1lbnQgaXMgcHJvdmFibHkgb2ZmIChrZXkgbGl0ZXJhbGx5IGFic2VudCBvclxcbiMgbGl0ZXJhbCBmYWxzZSkgYW5kIHZlcnNpb25pbmcgaXMgcHJvdmFibHkgbm90IGVuYWJsZWQuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJPYmplY3RMb2NrRW5hYmxlZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSkgaWYge1xcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gZmFsc2VcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIGlzIHNldCBvbiBhIGJ1Y2tldCB3aG9zZSB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQgdG8gYXBwbHkgYSBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJywgb3Igc2V0IE9iamVjdExvY2tFbmFibGVkOiB0cnVlIHRvIGNyZWF0ZSB0aGUgYnVja2V0IGxvY2stZW5hYmxlZFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3Mzb2xydl9ub19sb2NrX2VuYWJsZWQobmFtZSlcXG5cXHRfcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdCBMb2NrIGZvcmJpZHMgc3VzcGVuZGluZyB2ZXJzaW9uaW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9iamVjdCBMb2NrIGZvcmNlLWVuYWJsZXMgdmVyc2lvbmluZyBhdCBjcmVhdGlvbiwgc28gYSB0ZW1wbGF0ZSB0aGF0IGFsc29cXG4jIHN1c3BlbmRzIHZlcnNpb25pbmcgY29udHJhZGljdHMgaXRzZWxmIGFuZCB0aGUgaGFuZGxlcidzIFB1dEJ1Y2tldFZlcnNpb25pbmdcXG4jIGNhbGwgaXMgcmVqZWN0ZWQuIEZpcmVzIG9ubHkgb24gYSBsaXRlcmFsIFxcXCJTdXNwZW5kZWRcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtb2JqZWN0bG9jay12ZXJzaW9uaW5nLXN1c3BlbmRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZSBidXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gc3VzcGVuZHMgdmVyc2lvbmluZzsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQW4gT2JqZWN0IExvY2sgY29uZmlndXJhdGlvbiBpcyBwcmVzZW50IG9uIHRoaXMgYnVja2V0LCBzbyB0aGUgdmVyc2lvbmluZyBzdGF0ZSBjYW5ub3QgYmUgY2hhbmdlZC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIChvciBkcm9wIGl0IOKAlCBPYmplY3QgTG9jayBlbmFibGVzIHZlcnNpb25pbmcgaXRzZWxmKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1sb2NrLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0VuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUaGUgcmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0IG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gc2lkZSBvZiB3aGF0IHBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmcgY2hlY2tzIG9uXFxuIyB0aGUgc291cmNlLiBEZXN0aW5hdGlvbi5CdWNrZXQgaXMgbm9ybWFsbHkgRm46OkdldEF0dC9SZWYgdG8gYW4gaW4tdGVtcGxhdGVcXG4jIGJ1Y2tldDsgcmVzb2x2ZSgpIHR1cm5zIGJvdGggaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRCwgc28gdGhlXFxuIyBkZXN0aW5hdGlvbidzIG93biBwcm9wZXJ0aWVzIGFyZSByZWFkYWJsZS4gRXh0ZXJuYWwgZGVzdGluYXRpb24gQVJOcyByZXNvbHZlXFxuIyB0byBzdHJpbmdzIHRoYXQgYXJlIG5vdCBsb2dpY2FsIElEcyBhbmQgc2tpcC4gVmVyc2lvbmluZyBpcyBcXFwibm90IGVuYWJsZWRcXFwiXFxuIyB3aGVuIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIGlzIGxpdGVyYWxseSBhYnNlbnQgKHByb3ZlbiB2aWFcXG4jIGlucHV0LnJlc291cmNlcywgc2VlIEFHRU5UUy5tZCkgb3IgU3RhdHVzIHJlc29sdmVzIHRvIFxcXCJTdXNwZW5kZWRcXFwiOyBhblxcbiMgdW5yZXNvbHZhYmxlIFN0YXR1cyBza2lwcy5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tkZXN0XS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRyZXNvbHZlKGRlc3QsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIlJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCAnJXMnIGRvZXMgbm90IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkOyBTMyByZWplY3RzIHRoZSBjb25maWd1cmF0aW9uIHdpdGggXFxcXFxcXCJEZXN0aW5hdGlvbiBidWNrZXQgbXVzdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZFxcXFxcXFwiXFxcIiwgW2Rlc3RdKSxcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIGRlc3RpbmF0aW9uIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0ZGVzdCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSkpXFxuXFx0aXNfc3RyaW5nKGRlc3QpXFxuXFx0ZGVzdCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRfcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIHJlcXVpcmVzIHZlcnNpb25pbmcgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc291cmNlIGJ1Y2tldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDpgZXlj43jgavjgZnjgovjga7jga8gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24g44GM5paH5a2X44Gp44GK44KK5LiN5Zyo77yIaW5wdXQucmVzb3VyY2VzIOOBp1xcbiMg6Ki85piO44CBQUdFTlRTLm1kIOWPgueFp++8ieOBi+OAgVN0YXR1cyDjgYzjg6rjg4bjg6njg6vjgacgXFxcIlN1c3BlbmRlZFxcXCIg44Gu44Go44GN44Gg44GR44CCXFxuIyDmnKrop6Pmsbrjg4jjg7zjgq/jg7Pjga8gT0sg5omx44GE77yIcmVzb2x2ZSgpIOOBr+OCreODvOS4jeWcqOOBqOacquino+axuuOBruS4oeaWueOBpyB1bmRlZmluZWQg44GrXFxuIyDjgarjgovjgZ/jgoHjgIFgbm90IHJlc29sdmUoLi4uKWAg44Gn44Gv5LiN5Zyo44KS6Ki85piO44Gn44GN44Gq44GEIOKAlCAyMDI2LTA5LTAyIOWun+a4rO+8ieOAglxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBpcyBzZXQgYnV0IGJ1Y2tldCB2ZXJzaW9uaW5nIGlzIG5vdCBlbmFibGVkOyBTMyByZWplY3RzIHRoZSByZXBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGF0IGRlcGxveSB0aW1lIChJbnZhbGlkUmVxdWVzdDogVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0KVxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBzb3VyY2UgYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlZGlyZWN0QWxsUmVxdWVzdHNUbyBleGNsdWRlcyBldmVyeSBvdGhlciB3ZWJzaXRlIHNldHRpbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHJlZGlyZWN0cyB0aGUgd2hvbGUgc2l0ZSwgc28gUzMgcmVqZWN0cyBhbnkgc2libGluZ1xcbiMgd2Vic2l0ZSBzZXR0aW5nIGFsb25nc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJXZWJzaXRlQ29uZmlndXJhdGlvbiBjb21iaW5lcyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gd2l0aCAlczsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiW0luZGV4RG9jdW1lbnQsIEVycm9yRG9jdW1lbnQsIFJvdXRpbmdSdWxlc10gc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaWYgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGlzIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gYWxvbmUsIG9yIGRyb3AgaXQgYW5kIGNvbmZpZ3VyZSB0aGUgd2Vic2l0ZSB3aXRoIEluZGV4RG9jdW1lbnQvRXJyb3JEb2N1bWVudC9Sb3V0aW5nUnVsZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC13ZWJzaXRlY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHR3YyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlYnNpdGVDb25maWd1cmF0aW9uXFxcIilcXG5cXHRpc19vYmplY3Qod2MpXFxuXFx0b2JqZWN0LmdldCh3YywgXFxcIlJlZGlyZWN0QWxsUmVxdWVzdHNUb1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRzb21lIGsgaW4ge1xcXCJJbmRleERvY3VtZW50XFxcIiwgXFxcIkVycm9yRG9jdW1lbnRcXFwiLCBcXFwiUm91dGluZ1J1bGVzXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHdjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGTEVYSUJMRSBtb2RlIG5lZWRzIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIE9GRiBmb3JiaWRzIGl0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2NoZndfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXNjaGVkdWxlci1zY2hlZHVsZS1mbGV4aWJsZXRpbWV3aW5kb3cuaHRtbFxcXCJcXG5cXG5fcGZfc2NoZndfZnR3KG5hbWUpIDo9IGZ0dyBpZiB7XFxuXFx0ZnR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93XFxcIilcXG5cXHRpc19vYmplY3QoZnR3KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgRkxFWElCTEUgYnV0IE1heGltdW1XaW5kb3dJbk1pbnV0ZXMgaXMgbWlzc2luZzsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBiZSBwcm92aWRlZCB3aGVuIEZsZXhpYmxlVGltZVdpbmRvd01vZGUgaXMgc2V0IHRvIEZMRVhJQkxFXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgTWF4aW11bVdpbmRvd0luTWludXRlcyAoMS0xNDQwKSwgb3Igc3dpdGNoIE1vZGUgdG8gT0ZGXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIkZMRVhJQkxFXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3cuTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsXFxuXFx0XFxcIkZsZXhpYmxlVGltZVdpbmRvdy5Nb2RlIGlzIE9GRiBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBzZXQ7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzIG11c3Qgbm90IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gT0ZGXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIE1heGltdW1XaW5kb3dJbk1pbnV0ZXMsIG9yIHN3aXRjaCBNb2RlIHRvIEZMRVhJQkxFXFxcIixcXG5cXHRfcGZfc2NoZndfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGZ0dyA6PSBfcGZfc2NoZndfZnR3KG5hbWUpXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNb2RlXFxcIiwgbnVsbCkgPT0gXFxcIk9GRlxcXCJcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzY2hlZHVsZXJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBTY2hlZHVsZXIgcmF0ZSgpIHZhbHVlIG11c3QgYmUgcG9zaXRpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDI3IHZhbGlkYXRlcyByYXRlKCkgYm91bmRzIGZvciBBV1M6OkV2ZW50czo6UnVsZSBidXQgbm90XFxuIyBmb3IgQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlIOKAlCBzYW1lIGNvbnN0cmFpbnQgZmFtaWx5LCBkaWZmZXJlbnQgcmVzb3VyY2UuXFxuIyBPbmx5IHRoZSB2YWx1ZSBib3VuZCBpcyBjaGVja2VkIGhlcmU7IHVuaXQgc3BlbGxpbmdzIGRpZmZlciBiZXR3ZWVuIHRoZSB0d29cXG4jIHNlcnZpY2VzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCBmb3IgU2NoZWR1bGVyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLXJhdGUtcG9zaXRpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJhdGUgdmFsdWUgaW4gJyVzJyBpcyBub3QgcG9zaXRpdmU7IENyZWF0ZVNjaGVkdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIFNjaGVkdWxlIEV4cHJlc3Npb24gJXMuXFxcXFxcXCJcXFwiLCBbZXhwciwgZXhwcl0pLFxcblxcdFxcXCJVc2UgYSByYXRlIG9mIDEgb3IgbW9yZSAoZS5nLiByYXRlKDUgbWludXRlcykpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NjaGVkdWxlci9sYXRlc3QvVXNlckd1aWRlL3NjaGVkdWxlLXR5cGVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGVcXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsZUV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcInJhdGUoXFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiKVxcXCIpXFxuXFx0aW5uZXIgOj0gdHJpbV9zcGFjZShzdWJzdHJpbmcodCwgNSwgY291bnQodCkgLSA2KSlcXG5cXHRwYXJ0cyA6PSBzcGxpdChpbm5lciwgXFxcIiBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHBhcnRzWzBdKVxcblxcdG4gPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXRvcGljLW5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRvcGljIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChwbHVzIGEgLmZpZm8gc3VmZml4KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU2fSRgLCBuKVxcblxcbl9wZl9zbnNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDI1MX1cXFxcLmZpZm8kYCwgbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljIE5hbWVcXFxcXFxcIjogU05TIGFjY2VwdHMgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKGEgRklGTyB0b3BpYyBhZGRzIHRoZSAuZmlmbyBzdWZmaXgpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0b3BpYyB1c2luZyBbYS16QS1aMC05Xy1dIChhcHBlbmQgLmZpZm8gb25seSBmb3IgRklGTyB0b3BpY3MpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVUb3BpYy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgX3BmX3Nuc25hbWVfb2sobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcXVldWUtbmFtZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUXVldWUgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKG1heCA4MCwgcGx1cyBhIC5maWZvIHN1ZmZpeClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDgwfSRgLCBuKVxcblxcbl9wZl9zcXNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDc1fVxcXFwuZmlmbyRgLCBuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXF1ZXVlLW5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5RdWV1ZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlF1ZXVlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBTUVMgYWNjZXB0cyAxLTgwIGNoYXJhY3RlcnMgb2YgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChhIEZJRk8gcXVldWUgYWRkcyB0aGUgLmZpZm8gc3VmZml4KVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgcXVldWUgdXNpbmcgW2EtekEtWjAtOV8tXSB3aXRoaW4gODAgY2hhcmFjdGVycyAoYXBwZW5kIC5maWZvIG9ubHkgZm9yIEZJRk8gcXVldWVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IF9wZl9zcXNuYW1lX29rKG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgTmV4dC9EZWZhdWx0L0Nob2ljZXMgbXVzdCByZWZlcmVuY2UgYSBkZWZpbmVkIHN0YXRlICh0b3AtbGV2ZWwgc3RhdGVzOyBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzYwMSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbl9maXggOj0gXFxcIlBvaW50IE5leHQvRGVmYXVsdC9DaG9pY2VzIGF0IGFuIGV4aXN0aW5nIHN0YXRlIG5hbWVcXFwiXFxuXFxuX3BmX3Nmbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1zdGF0ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuX2FzbChuYW1lKSA6PSBhc2wgaWYge1xcblxcdGRlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiKVxcblxcdGlzX3N0cmluZyhkZWYpXFxuXFx0YXNsIDo9IGpzb24udW5tYXJzaGFsKGRlZilcXG5cXHRpc19vYmplY3QoYXNsKVxcbn1cXG5cXG5fcGZfc2ZuX2RlZmluZWQoYXNsKSA6PSB7c24gfCBzb21lIHNuLCBfIGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pfVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0IGlzIGRlbGliZXJhdGVseSBOT1QgY2hlY2tlZCBoZXJlIOKAlCB0aGUgZW5naW5lJ3NcXG4jIGJ1aWx0LWluIHJ1bGUgRTM2MDEgKEVSUk9SL0NGTl9MSU5UKSBhbHJlYWR5IGNvdmVycyBpdC4gVmVyaWZpZWQgYWdhaW5zdFxcbiMgQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZSAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDE6IEUzNjAxIGZpcmVzIGZvclxcbiMgU3RhcnRBdCBvbmx5IGFuZCBkb2VzIG5vdCBjaGVjayBOZXh0L0RlZmF1bHQvQ2hvaWNlcywgd2hpY2ggaXMgd2hhdCB0aGlzXFxuIyBydWxlIGFkZHMuXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldCwga2V5XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJOZXh0XFxcIiwgXFxcIkRlZmF1bHRcXFwifVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBhIENob2ljZSBydWxlIHJlZmVyZW5jaW5nIHN0YXRlICclcycsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXRdKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRjaG9pY2VzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJDaG9pY2VzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoY2hvaWNlcylcXG5cXHRzb21lIGMgaW4gY2hvaWNlc1xcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi10YWdzLWF3cy1wcmVmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJ0YWdzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhZyBrZXlzIG1heSBub3QgdXNlIHRoZSByZXNlcnZlZCBhd3M6IHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiKlwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGFncyBzdXJ2aXZlIGludG8gdGhlIHRlbXBsYXRlIGZyb20gZXZlcnkgc2NvcGUgdGhhdCBjYWxsZWQgVGFncy5vZigpLCBhbmQgdGhlXFxuIyBtZXJnZSBoYXBwZW5zIGluIGNmblByb3BlcnRpZXMgYXQgcmVuZGVyIHRpbWUgLSBhZnRlciB2YWxpZGF0ZVRyZWUgLSBzbyBubyBMMVxcbiMgb3IgTDIgdmFsaWRhdGlvbiBjYW4gc2VlIHRoZSBmaW5hbCBrZXkgc2V0LiBBcHBsaWVzIHRvIGV2ZXJ5IHJlc291cmNlIHR5cGUuXFxuX3BmX3RhZ2F3c19iYWQgY29udGFpbnMgW25hbWUsIGlkeCwga2V5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIG9iamVjdC5rZXlzKGlucHV0LnJlc291cmNlcylcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhZ3NcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdGtleSA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJLZXlcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhrZXkpXFxuXFx0c3RhcnRzd2l0aChsb3dlcihrZXkpLCBcXFwiYXdzOlxcXCIpXFxuXFx0aWR4IDo9IHQuaW5kZXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi10YWdzLWF3cy1wcmVmaXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFncy4lZC5LZXlcXFwiLCBbaWR4XSksXFxuXFx0c3ByaW50ZihcXFwiVGFnIGtleSAnJXMnIHVzZXMgdGhlIHJlc2VydmVkIGF3czogcHJlZml4OyBBV1MgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGwgd2l0aCBcXFxcXFxcImF3czogcHJlZml4ZWQgdGFnIGtleSBuYW1lcyBhcmUgbm90IGFsbG93ZWQgZm9yIGV4dGVybmFsIHVzZS5cXFxcXFxcIlxcXCIsIFtrZXldKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0YWcga2V5IHNvIGl0IGRvZXMgbm90IHN0YXJ0IHdpdGggYXdzOlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS90YWctZWRpdG9yL2xhdGVzdC91c2VyZ3VpZGUvdGFnZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIGlkeCwga2V5XSBpbiBfcGZfdGFnYXdzX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXRhZ3MtY291bnQtbWF4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwidGFnc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlc291cmNlIG1heSBjYXJyeSBhdCBtb3N0IDUwIHRhZ3NcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIipcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBBV1Mtd2lkZSBsaW1pdCBpcyA1MCB1c2VyIHRhZ3MgcGVyIHJlc291cmNlLiBDb3VudGVkIG9uIHRoZSByZW5kZXJlZFxcbiMgdGVtcGxhdGUsIHdoaWNoIGlzIHRoZSBvbmx5IHBsYWNlIHRoZSBtZXJnZWQgVGFncy5vZigpIHJlc3VsdCBleGlzdHMuXFxuX3BmX3RhZ2NvdW50X2JhZCBjb250YWlucyBbbmFtZSwgbl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiBvYmplY3Qua2V5cyhpbnB1dC5yZXNvdXJjZXMpXFxuXFx0dGFncyA6PSBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFnc1xcXCIpXFxuXFx0biA6PSBjb3VudCh0YWdzKVxcblxcdG4gPiA1MFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXRhZ3MtY291bnQtbWF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWdzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCB0YWdzIGFyZSBhdHRhY2hlZCB0byB0aGlzIHJlc291cmNlOyBBV1MgYWxsb3dzIGF0IG1vc3QgNTAgcGVyIHJlc291cmNlIGFuZCByZWplY3RzIHRoZSBjcmVhdGUgY2FsbCAoXFxcXFxcXCJNb3JlIHRoYW4gNTAgdGFncyBzcGVjaWZpZWQuXFxcXFxcXCIpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVkdWNlIHRoZSB0YWcgc2V0IHRvIDUwIG9yIGZld2VyIC0gcmVtZW1iZXIgdGhhdCBUYWdzLm9mKCkgYWRkcyB0YWdzIGZyb20gZXZlcnkgZW5jbG9zaW5nIHNjb3BlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3RhZy1lZGl0b3IvbGF0ZXN0L3VzZXJndWlkZS90YWdnaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbl0gaW4gX3BmX3RhZ2NvdW50X2JhZFxcbn1cXG5cIlxuICB9XG5dO1xuIl19
|
|
2789
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUsdUNBQXVDO1FBQzdDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSxzREFBc0Q7UUFDL0QsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2Ysd0JBQXdCO1NBQ3pCO1FBQ0QsTUFBTSxFQUFFLDQ0QkFBNDRCO0tBQ3I1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsT0FBTztRQUNuQixPQUFPLEVBQUUsK0NBQStDO1FBQ3hELFVBQVUsRUFBRSxNQUFNO1FBQ2xCLGVBQWUsRUFBRTtZQUNmLDZCQUE2QjtTQUM5QjtRQUNELE1BQU0sRUFBRSw4eUJBQTh5QjtLQUN2ekI7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLGtEQUFrRDtRQUMzRCxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiw2QkFBNkI7U0FDOUI7UUFDRCxNQUFNLEVBQUUsMmhDQUEyaEM7S0FDcGlDO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsZ0NBQWdDO1FBQ3RDLFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSx3REFBd0Q7UUFDakUsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsNkJBQTZCO1NBQzlCO1FBQ0QsTUFBTSxFQUFFLDAzQ0FBMDNDO0tBQ240QztJQUNEO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxTQUFTLEVBQUUs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O0tBQ2wyQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB+fiBHZW5lcmF0ZWQgYnkgc2NyaXB0cy9idW5kbGUtcnVsZXMudHMgZnJvbSBydWxlcy8qKi4gRG8gbm90IGVkaXQgYnkgaGFuZC5cbi8vIH5+IFJlZ2VuZXJhdGUgd2l0aDogbnB4IHByb2plbiBidW5kbGUtcnVsZXNcbi8qIGVzbGludC1kaXNhYmxlICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZWRSdWxlRGF0YSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgc2V2ZXJpdHk6IHN0cmluZztcbiAgcmVhZG9ubHkgdGl0bGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdXBzdHJlYW06IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlczogc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlZ286IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJVTkRMRURfUlVMRVM6IEJ1bmRsZWRSdWxlRGF0YVtdID0gW1xuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWFjY2Vzcy1sb2ctZm9ybWF0LXJlcXVlc3QtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFjY2VzcyBsb2cgZm9ybWF0IG11c3QgaW5jbHVkZSBhIHJlcXVlc3QgaWQgdmFyaWFibGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6U3RhZ2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBmb3JtYXQgc3RyaW5nIGlzIG9wYXF1ZSB0byBldmVyeSBzY2hlbWEgbGF5ZXI7IHRoZSBzZXJ2aWNlIHJlcXVpcmVzIGFcXG4jIHJlcXVlc3QgaWQgdmFyaWFibGUgc29tZXdoZXJlIGluc2lkZSBpdC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWFjY2Vzcy1sb2ctZm9ybWF0LXJlcXVlc3QtaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc0xvZ1NldHRpbmcuRm9ybWF0XFxcIixcXG5cXHRcXFwiQWNjZXNzIGxvZyBmb3JtYXQgaGFzIG5vIHJlcXVlc3QgaWQgdmFyaWFibGU7IHRoZSBzdGFnZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBMb2cgZm9ybWF0IG11c3QgaW5jbHVkZSBlaXRoZXIgJGNvbnRleHQucmVxdWVzdElkIG9yICRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgJGNvbnRleHQucmVxdWVzdElkIChvciAkY29udGV4dC5leHRlbmRlZFJlcXVlc3RJZCkgdG8gdGhlIGFjY2VzcyBsb2cgZm9ybWF0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NldC11cC1sb2dnaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXFxcIilcXG5cXHRmbXQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BY2Nlc3NMb2dTZXR0aW5nLkZvcm1hdFxcXCIpXFxuXFx0aXNfc3RyaW5nKGZtdClcXG5cXHRub3QgY29udGFpbnMoZm10LCBcXFwiJGNvbnRleHQucmVxdWVzdElkXFxcIilcXG5cXHRub3QgY29udGFpbnMoZm10LCBcXFwiJGNvbnRleHQuZXh0ZW5kZWRSZXF1ZXN0SWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LWF1dGhvcml6ZXItdHRsLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdXRob3JpemVyUmVzdWx0VHRsSW5TZWNvbmRzIHRvcHMgb3V0IGF0IDM2MDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyB0aGUgVFRMIGFzIGEgYmFyZSBpbnRlZ2VyOyB0aGUgMzYwMCBjZWlsaW5nIGlzXFxuIyBvbmx5IGluIHRoZSBzZXJ2aWNlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctYXV0aG9yaXplci10dGwtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkF1dGhvcml6ZXJSZXN1bHRUdGxJblNlY29uZHMgJXYgaXMgb3ZlciB0aGUgY2FwOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkF1dGhvcml6ZXIgcmVzdWx0IFRUTCBvdXRzaWRlIGFsbG93YWJsZSByYW5nZS4gVFRMIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHMuXFxcXFxcXCJcXFwiLCBbdHRsXSksXFxuXFx0XFxcIlVzZSBhIFRUTCBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpBdXRob3JpemVyXFxcIilcXG5cXHR0dGwgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclJlc3VsdFR0bEluU2Vjb25kc1xcXCIpKVxcblxcdHR0bCA+IDM2MDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1jb2duaXRvLWF1dGhvcml6ZXItcHJvdmlkZXItYXJuc1wiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6ZXJzIG5lZWQgUHJvdmlkZXJBUk5zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgQ29nbml0byBhdXRob3JpemVyIHZhbGlkYXRlcyB0b2tlbnMgYWdhaW5zdCB0aGUgdXNlciBwb29scyBsaXN0ZWQgaW5cXG4jIFByb3ZpZGVyQVJOczsgdGhlIGNyZWF0ZSBjYWxsIHJlamVjdHMgaXRzIGFic2VuY2UuIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdjcGFfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlByb3ZpZGVyQVJOc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1jb2duaXRvLWF1dGhvcml6ZXItcHJvdmlkZXItYXJuc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlkZXJBUk5zXFxcIixcXG5cXHRcXFwiQ09HTklUT19VU0VSX1BPT0xTIGF1dGhvcml6ZXIgaGFzIG5vIFByb3ZpZGVyQVJOczsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm92aWRlckFSTnMgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUHJvdmlkZXJBUk5zIHRvIHRoZSBDb2duaXRvIHVzZXIgcG9vbCBBUk4ocykgdGhpcyBhdXRob3JpemVyIHNob3VsZCB1c2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LWF1dGhvcml6ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6QXV0aG9yaXplclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIkNPR05JVE9fVVNFUl9QT09MU1xcXCJcXG5cXHRfcGZfYXBnY3BhX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1kZXBsb3ltZW50LW5vLW1ldGhvZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgRGVwbG95bWVudCBuZWVkcyBhdCBsZWFzdCBvbmUgTWV0aG9kIG9uIGl0cyBSRVNUIEFQSVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZXBsb3lpbmcgYW4gQVBJIHdpdGggemVybyBtZXRob2RzIGZhaWxzLiBKdWRnZWQgb25seSB3aGVuIHRoZSB3aG9sZVxcbiMgcGljdHVyZSBpcyBpbiB0aGlzIHRlbXBsYXRlOiB0aGUgYXBpIGlzIGEgc2libGluZyByZXNvdXJjZSBhbmQgaXQgaGFzIG5vXFxuIyBPcGVuQVBJIGJvZHkgKHdoaWNoIHdvdWxkIGRlZmluZSBtZXRob2RzIGludmlzaWJseSkuIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdkbm1fYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfYXBnZG5tX3NlcnZlZChhcGkpIGlmIHtcXG5cXHRzb21lIG0gaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHRyZXNvbHZlKG0sIFxcXCJQcm9wZXJ0aWVzLlJlc3RBcGlJZFxcXCIpID09IGFwaVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LWRlcGxveW1lbnQtbm8tbWV0aG9kc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVzdEFwaUlkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSRVNUIEFQSSAnJXMnIGhhcyBubyBBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZCBpbiB0aGlzIHRlbXBsYXRlOyB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIFJFU1QgQVBJIGRvZXNuJ3QgY29udGFpbiBhbnkgbWV0aG9kc1xcXFxcXFwiXFxcIiwgW2FwaV0pLFxcblxcdFxcXCJBZGQgYXQgbGVhc3Qgb25lIEFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kIHRvIHRoZSBBUEkgYmVmb3JlIGRlcGxveWluZyBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXktZGVwbG95bWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpEZXBsb3ltZW50XFxcIilcXG5cXHRhcGkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXN0QXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpSZXN0QXBpXFxcIilcXG5cXHRfcGZfYXBnZG5tX2Fic2VudChhcGksIFxcXCJCb2R5XFxcIilcXG5cXHRfcGZfYXBnZG5tX2Fic2VudChhcGksIFxcXCJCb2R5UzNMb2NhdGlvblxcXCIpXFxuXFx0bm90IF9wZl9hcGdkbm1fc2VydmVkKGFwaSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1pbnRlZ3JhdGlvbi1odHRwLW1ldGhvZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm9uLU1PQ0sgaW50ZWdyYXRpb25zIG5lZWQgSW50ZWdyYXRpb25IdHRwTWV0aG9kXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1ldGhvZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXZlcnkgaW50ZWdyYXRpb24gdHlwZSBleGNlcHQgTU9DSyBjYWxscyBhIGJhY2tlbmQgYW5kIG5lZWRzIHRoZSBIVFRQXFxuIyBtZXRob2QgdG8gY2FsbCBpdCB3aXRoLiBWZXJpZmllZCBmb3IgYWxsIGZvdXIgbm9uLU1PQ0sgdHlwZXMuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGdpaG1fdHlwZXMgOj0ge1xcXCJBV1NcXFwiLCBcXFwiQVdTX1BST1hZXFxcIiwgXFxcIkhUVFBcXFwiLCBcXFwiSFRUUF9QUk9YWVxcXCJ9XFxuXFxuX3BmX2FwZ2lobV9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRpbnRlZyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiSW50ZWdyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoaW50ZWcpXFxuXFx0b2JqZWN0LmdldChpbnRlZywgXFxcIkludGVncmF0aW9uSHR0cE1ldGhvZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlndy1pbnRlZ3JhdGlvbi1odHRwLW1ldGhvZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW50ZWdyYXRpb24uSW50ZWdyYXRpb25IdHRwTWV0aG9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJbnRlZ3JhdGlvbiB0eXBlICclcycgaGFzIG5vIEludGVncmF0aW9uSHR0cE1ldGhvZDsgdGhlIG1ldGhvZCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkVudW1lcmF0aW9uIHZhbHVlIGZvciBIdHRwTWV0aG9kIG11c3QgYmUgbm9uLWVtcHR5XFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdFxcXCJTZXQgSW50ZWdyYXRpb24uSW50ZWdyYXRpb25IdHRwTWV0aG9kIChQT1NUIGZvciBBV1MvQVdTX1BST1hZIExhbWJkYSBiYWNrZW5kcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LW1ldGhvZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcXFwiKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvbi5UeXBlXFxcIilcXG5cXHR0IGluIF9wZl9hcGdpaG1fdHlwZXNcXG5cXHRfcGZfYXBnaWhtX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1tZXRob2QtYXV0aG9yaXplci1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ1VTVE9NIGFuZCBDT0dOSVRPX1VTRVJfUE9PTFMgYXV0aG9yaXphdGlvbiBuZWVkIEF1dGhvcml6ZXJJZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpNZXRob2RcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggYXV0aG9yaXplci1iYWNrZWQgYXV0aG9yaXphdGlvbiB0eXBlcyBwb2ludCBhdCBhbiBBdXRob3JpemVyOyB0aGVcXG4jIG1ldGhvZCBjcmVhdGUgcmVqZWN0cyB0aGVtIHdpdGhvdXQgb25lLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYXBnbWFpZF9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXV0aG9yaXplcklkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LW1ldGhvZC1hdXRob3JpemVyLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVySWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkF1dGhvcml6YXRpb25UeXBlICclcycgaXMgc2V0IGJ1dCBBdXRob3JpemVySWQgaXMgbm90OyB0aGUgbWV0aG9kIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBhdXRob3JpemVyIElEIHNwZWNpZmllZC4gU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiB0eXBlIHRvIENVU1RPTSBvciBDT0dOSVRPX1VTRVJfUE9PTFMgcmVxdWlyZXMgYSB2YWxpZCBhdXRob3JpemVyLlxcXFxcXFwiXFxcIiwgW2F0XSksXFxuXFx0XFxcIlNldCBBdXRob3JpemVySWQgdG8gdGhlIGF1dGhvcml6ZXIgdGhpcyBtZXRob2Qgc2hvdWxkIHVzZSwgb3IgY2hhbmdlIEF1dGhvcml6YXRpb25UeXBlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1tZXRob2QuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheTo6TWV0aG9kXFxcIilcXG5cXHRhdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6YXRpb25UeXBlXFxcIilcXG5cXHRhdCBpbiB7XFxcIkNVU1RPTVxcXCIsIFxcXCJDT0dOSVRPX1VTRVJfUE9PTFNcXFwifVxcblxcdF9wZl9hcGdtYWlkX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1tb2RlbC1zY2hlbWEtdHlwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXlcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTW9kZWwgc2NoZW1hICd0eXBlJyBtdXN0IGJlIGEgSlNPTiBTY2hlbWEgZHJhZnQtNCB0eXBlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6Ok1vZGVsXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgU2NoZW1hIGJvZHkgaXMgb3BhcXVlIEpTT04gdG8gZXZlcnkgc2NoZW1hIGxheWVyLiBGdWxsIGRyYWZ0LTRcXG4jIHZhbGlkYXRpb24gaXMgb3V0IG9mIHNjb3BlOyBhIGxpdGVyYWwgdG9wLWxldmVsIFxcXCJ0eXBlXFxcIiBvdXRzaWRlIHRoZVxcbiMgZHJhZnQtNCBzZXQgKGEgY29tbW9uIHR5cG8gbGlrZSBcXFwiU3RyaW5nXFxcIikgaXMgcHJvdmFibHkgZmF0YWwuXFxuX3BmX2FwZ21zdF90eXBlcyA6PSB7XFxcImFycmF5XFxcIiwgXFxcImJvb2xlYW5cXFwiLCBcXFwiaW50ZWdlclxcXCIsIFxcXCJudWxsXFxcIiwgXFxcIm51bWJlclxcXCIsIFxcXCJvYmplY3RcXFwiLCBcXFwic3RyaW5nXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LW1vZGVsLXNjaGVtYS10eXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TY2hlbWEudHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTW9kZWwgc2NoZW1hIHR5cGUgJyVzJyBpcyBub3QgYSBKU09OIFNjaGVtYSBkcmFmdC00IHR5cGU7IHRoZSBtb2RlbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgbW9kZWwgc3BlY2lmaWVkOiBWYWxpZGF0aW9uIFJlc3VsdDogd2FybmluZ3MgOiBbXSwgZXJyb3JzIDogW0ludmFsaWQgbW9kZWwgc2NoZW1hIHNwZWNpZmllZF1cXFxcXFxcIlxcXCIsIFt0XSksXFxuXFx0XFxcIlVzZSBvbmUgb2YgYXJyYXksIGJvb2xlYW4sIGludGVnZXIsIG51bGwsIG51bWJlciwgb2JqZWN0LCBzdHJpbmcgKGxvd2VyY2FzZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LW1vZGVsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6Ok1vZGVsXFxcIilcXG5cXHRzY2ggOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlbWFcXFwiKVxcblxcdGlzX29iamVjdChzY2gpXFxuXFx0dCA6PSBvYmplY3QuZ2V0KHNjaCwgXFxcInR5cGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdHQgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdGlzX3N0cmluZyh0KVxcblxcdG5vdCB0IGluIF9wZl9hcGdtc3RfdHlwZXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlndy1yZXNvdXJjZS1wYXRoLXBhcnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBhdGhQYXJ0IGFsbG93cyBhLXpBLVowLTkuXy06IG9yIG9uZSBjdXJseS1icmFjZSB2YXJpYWJsZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5OjpSZXNvdXJjZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVmFsaWQgZm9ybXMgcGVyIHRoZSBzZXJ2aWNlIGVycm9yIGl0c2VsZjogcGxhaW4gW2EtekEtWjAtOS5fOi1dKywgb3IgYVxcbiMgd2hvbGUtcGFydCB2YXJpYWJsZSB7bmFtZX0gLyBncmVlZHkge25hbWUrfS5cXG5fcGZfYXBncnBwX29rKHBwKSBpZiByZWdleC5tYXRjaChgXlthLXpBLVowLTkuXzotXSskYCwgcHApXFxuXFxuX3BmX2FwZ3JwcF9vayhwcCkgaWYgcmVnZXgubWF0Y2goYF5cXFxce1thLXpBLVowLTkuXy1dK1xcXFwrP1xcXFx9JGAsIHBwKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3ctcmVzb3VyY2UtcGF0aC1wYXJ0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXRoUGFydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUGF0aFBhcnQgJyVzJyBoYXMgY2hhcmFjdGVycyB0aGUgc2VydmljZSByZWplY3RzOyB0aGUgcmVzb3VyY2UgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJSZXNvdXJjZSdzIHBhdGggcGFydCBvbmx5IGFsbG93IGEtekEtWjAtOS5fLTogb3IgYSB2YWxpZCBncmVlZHkgcGF0aCB2YXJpYWJsZSBhbmQgY3VybHkgYnJhY2VzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQuXFxcXFxcXCJcXFwiLCBbcHBdKSxcXG5cXHRcXFwiVXNlIG9ubHkgYS16QS1aMC05Ll8tOiBpbiB0aGUgcGF0aCBwYXJ0LCBvciBhIHNpbmdsZSB7dmFyaWFibGV9IC8ge2dyZWVkeSt9IGZvcm1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5LXJlc291cmNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OlJlc291cmNlXFxcIilcXG5cXHRwcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBhdGhQYXJ0XFxcIilcXG5cXHRpc19zdHJpbmcocHApXFxuXFx0bm90IF9wZl9hcGdycHBfb2socHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3ctc3RhZ2UtdmFyaWFibGUtdmFsdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN0YWdlIHZhcmlhYmxlIHZhbHVlcyBoYXZlIGEgcmVzdHJpY3RlZCBjaGFyYWN0ZXIgc2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OlN0YWdlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbGxvd2VkIHBlciB0aGUgc2VydmljZSBlcnJvciBpdHNlbGY6IGFscGhhbnVtZXJpY3MgcGx1cyBzcGFjZSBhbmRcXG4jIC0gLiBfIDogLyA/ICYgPSAsIChub3RlOiBzcGFjZSBJUyBsZWdhbCkuXFxuX3BmX2FwZ3N2dl9vayh2KSBpZiByZWdleC5tYXRjaChgXlthLXpBLVowLTkgLl86Lz8mPSwtXSokYCwgdilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXN0YWdlLXZhcmlhYmxlLXZhbHVlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlZhcmlhYmxlcy4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiU3RhZ2UgdmFyaWFibGUgJyVzJyBoYXMgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBhbGxvd2VkIHNldDsgdGhlIHN0YWdlIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBzdGFnZSB2YXJpYWJsZSB2YWx1ZSBvZiBrZXkgJXMuICBQbGVhc2UgdXNlIHZhbHVlcyB3aXRoIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCB0aGUgc3ltYm9scyAnICcsIC0nLCAnLicsICdfJywgJzonLCAnLycsICc/JywgJyYnLCAnPScsIGFuZCAnLCcuXFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdFxcXCJSZXN0cmljdCB0aGUgdmFsdWUgdG8gYWxwaGFudW1lcmljcyBhbmQgJyAnLCAtLCAuLCBfLCA6LCAvLCA/LCAmLCA9LCAsXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3N0YWdlLXZhcmlhYmxlcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5OjpTdGFnZVxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0c29tZSBrLCB2IGluIHZhcnNcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgX3BmX2FwZ3N2dl9vayh2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3LXRva2VuLWF1dGhvcml6ZXItaWRlbnRpdHktc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUT0tFTiBhdXRob3JpemVycyBuZWVkIElkZW50aXR5U291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRPS0VOIGF1dGhvcml6ZXJzIHJlYWQgdGhlIHRva2VuIGZyb20gdGhlIGhlYWRlciBuYW1lZCBieSBJZGVudGl0eVNvdXJjZSxcXG4jIHNvIHRoZSBjcmVhdGUgY2FsbCByZWplY3RzIGl0cyBhYnNlbmNlLiBSRVFVRVNUIGF1dGhvcml6ZXJzIGFyZSBvdXQgb2ZcXG4jIHNjb3BlOiB0aGV5IG5lZWQgaXQgb25seSB3aXRoIGNhY2hpbmcgZW5hYmxlZCAodW5tZWFzdXJlZCkuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hcGd0aXNfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIklkZW50aXR5U291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3LXRva2VuLWF1dGhvcml6ZXItaWRlbnRpdHktc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JZGVudGl0eVNvdXJjZVxcXCIsXFxuXFx0XFxcIlRPS0VOIGF1dGhvcml6ZXIgaGFzIG5vIElkZW50aXR5U291cmNlOyB0aGUgYXV0aG9yaXplciBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIklkZW50aXR5U291cmNlIGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IElkZW50aXR5U291cmNlLCBlLmcuIG1ldGhvZC5yZXF1ZXN0LmhlYWRlci5BdXRob3JpemF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheS1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXk6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJUT0tFTlxcXCJcXG5cXHRfcGZfYXBndGlzX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWFwaS1uYW1lLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFwaSBuZWVkcyBhIE5hbWUgdW5sZXNzIGFuIE9wZW5BUEkgYm9keSBwcm92aWRlcyBvbmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1pcnJvcnMgY2ZuLWxpbnQgRTM2NjAgZm9yIFJFU1QgQVBJcywgd2hpY2ggaGFzIG5vIEFwaUdhdGV3YXlWMlxcbiMgY291bnRlcnBhcnQ6IHdpdGhvdXQgYSBCb2R5IHRvIGNhcnJ5IGluZm8udGl0bGUsIE5hbWUgaXMgbWFuZGF0b3J5LlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYWd2MmFucl9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1hcGktbmFtZS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTmFtZVxcXCIsXFxuXFx0XFxcIkFwaSBoYXMgbm8gTmFtZSBhbmQgbm8gT3BlbkFQSSBib2R5IHRvIHRha2Ugb25lIGZyb207IHRoZSBBUEkgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEFQSSBuYW1lIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IE5hbWUsIG9yIHByb3ZpZGUgdGhlIGRlZmluaXRpb24gdmlhIEJvZHkgLyBCb2R5UzNMb2NhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hcGkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdF9wZl9hZ3YyYW5yX2Fic2VudChuYW1lLCBcXFwiTmFtZVxcXCIpXFxuXFx0X3BmX2FndjJhbnJfYWJzZW50KG5hbWUsIFxcXCJCb2R5XFxcIilcXG5cXHRfcGZfYWd2MmFucl9hYnNlbnQobmFtZSwgXFxcIkJvZHlTM0xvY2F0aW9uXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWF3cy1wcm94eS1wYXlsb2FkLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVdTX1BST1hZIGludGVncmF0aW9ucyB0YWtlIFBheWxvYWRGb3JtYXRWZXJzaW9uIDEuMCBvciAyLjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgU2NvcGVkIHRvIGludGVncmF0aW9ucyB3aG9zZSBBcGkgc2libGluZyBpcyBwcm92YWJseSBIVFRQICh0aGUgYmVuY2hlZFxcbiMgc2hhcGUpOyBXZWJTb2NrZXQgaW50ZWdyYXRpb25zIGFyZSBvdXQgb2Ygc2NvcGUuXFxuX3BmX2FndjJhcHBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWF3cy1wcm94eS1wYXlsb2FkLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQYXlsb2FkRm9ybWF0VmVyc2lvbiAnJXMnIGRvZXMgbm90IGV4aXN0OyB0aGUgaW50ZWdyYXRpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJVbnN1cHBvcnRlZCBQYXlsb2FkRm9ybWF0VmVyc2lvbjogJXNcXFxcXFxcIlxcXCIsIFtwdiwgcHZdKSxcXG5cXHRcXFwiVXNlIDEuMCBvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItaW50ZWdyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvblR5cGVcXFwiKSA9PSBcXFwiQVdTX1BST1hZXFxcIlxcblxcdF9wZl9hZ3YyYXBwX2h0dHBfYXBpKG5hbWUpXFxuXFx0cHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHB2KVxcblxcdG5vdCBwdiBpbiB7XFxcIjEuMFxcXCIsIFxcXCIyLjBcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItY29ycy1jcmVkZW50aWFscy13aWxkY2FyZFwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDT1JTIEFsbG93Q3JlZGVudGlhbHMgY2Fubm90IHBhaXIgd2l0aCBhIHdpbGRjYXJkIG9yaWdpblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIENPUlMgc3BlYyBmb3JiaWRzIGNyZWRlbnRpYWxlZCByZXF1ZXN0cyBhZ2FpbnN0IGEgd2lsZGNhcmQgb3JpZ2luLFxcbiMgYW5kIHRoZSBBUEkgY3JlYXRlIGVuZm9yY2VzIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1jb3JzLWNyZWRlbnRpYWxzLXdpbGRjYXJkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvcnNDb25maWd1cmF0aW9uLkFsbG93T3JpZ2lucy4lZFxcXCIsIFtvLmluZGV4XSksXFxuXFx0XFxcIkNvcnNDb25maWd1cmF0aW9uIHNldHMgQWxsb3dDcmVkZW50aWFscyB3aXRoIGEgJyonIG9yaWdpbjsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImFsbG93LWNyZWRlbnRpYWxzIGlzIG5vdCBzdXBwb3J0ZWQgaWYgJ2FsbG93LW9yaWdpbicgaXMgKlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiTGlzdCBleHBsaWNpdCBvcmlnaW5zLCBvciBkcm9wIEFsbG93Q3JlZGVudGlhbHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktY29ycy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db3JzQ29uZmlndXJhdGlvbi5BbGxvd0NyZWRlbnRpYWxzXFxcIikpID09IHRydWVcXG5cXHRzb21lIG8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvcnNDb25maWd1cmF0aW9uLkFsbG93T3JpZ2luc1xcXCIpXFxuXFx0by52YWx1ZSA9PSBcXFwiKlxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLWh0dHAtcHJveHktcGF5bG9hZC12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXBpZ2F0ZXdheXYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhUVFBfUFJPWFkgaW50ZWdyYXRpb25zIG9ubHkgdGFrZSBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIDIuMCBldmVudCBmb3JtYXQgaXMgTGFtYmRhLW9ubHk7IEhUVFBfUFJPWFkgYmFja2VuZHMgbXVzdCBzdGF5IG9uXFxuIyAxLjAuIFNjb3BlZCB0byB0aGUgYmVuY2hlZCBzaGFwZSAoQXBpIHNpYmxpbmcgcHJvdmFibHkgSFRUUCkuXFxuX3BmX2FndjJocHBfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLWh0dHAtcHJveHktcGF5bG9hZC12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QYXlsb2FkRm9ybWF0VmVyc2lvblxcXCIsXFxuXFx0XFxcIkhUVFBfUFJPWFkgaW50ZWdyYXRpb25zIG9ubHkgc3VwcG9ydCBQYXlsb2FkRm9ybWF0VmVyc2lvbiAxLjA7IHRoZSBpbnRlZ3JhdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlBheWxvYWRGb3JtYXRWZXJzaW9uIDIuMCBpcyBub3Qgc3VwcG9ydGVkIGZvciBpbnRlZ3JhdGlvbiBvZiB0eXBlIEhUVFBfUFJPWFlcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBQYXlsb2FkRm9ybWF0VmVyc2lvbiB0byAxLjAgKG9yIG9taXQgaXQpLCBvciBzd2l0Y2ggdG8gYW4gQVdTX1BST1hZIGludGVncmF0aW9uIGZvciAyLjBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItaW50ZWdyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpJbnRlZ3JhdGlvblxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnRlZ3JhdGlvblR5cGVcXFwiKSA9PSBcXFwiSFRUUF9QUk9YWVxcXCJcXG5cXHRfcGZfYWd2MmhwcF9odHRwX2FwaShuYW1lKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGF5bG9hZEZvcm1hdFZlcnNpb25cXFwiKSA9PSBcXFwiMi4wXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1rZXlcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUCBBUEkgcm91dGUga2V5cyBhcmUgXFxcIk1FVEhPRCAvcGF0aFxcXCIgb3IgJGRlZmF1bHRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpSb3V0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgV2ViU29ja2V0IHJvdXRlIGtleXMgYXJlIGZyZWUtZm9ybSwgc28gdGhpcyBvbmx5IGp1ZGdlcyByb3V0ZXMgd2hvc2UgQXBpXFxuIyBzaWJsaW5nIGlzIHByb3ZhYmx5IEhUVFAuIFRSQUNFIGlzIGRlcGxveS12ZXJpZmllZCBhcyByZWplY3RlZDsgcGF0aHMgd2l0aFxcbiMgc3BhY2VzIGFyZSBsZWZ0IGFsb25lICh1bm1lYXN1cmVkKS5cXG5fcGZfYWd2MnJrX21ldGhvZHMgOj0ge1xcXCJHRVRcXFwiLCBcXFwiUE9TVFxcXCIsIFxcXCJQVVRcXFwiLCBcXFwiUEFUQ0hcXFwiLCBcXFwiREVMRVRFXFxcIiwgXFxcIkhFQURcXFwiLCBcXFwiT1BUSU9OU1xcXCIsIFxcXCJBTllcXFwifVxcblxcbl9wZl9hZ3YycmtfaHR0cF9hcGkobmFtZSkgaWYge1xcblxcdGFwaSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFwaUlkXFxcIilcXG5cXHRhcGkgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXBpR2F0ZXdheVYyOjpBcGlcXFwiKVxcblxcdHJlc29sdmUoYXBpLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG59XFxuXFxuX3BmX2FndjJya19vayhyaykgaWYgcmsgPT0gXFxcIiRkZWZhdWx0XFxcIlxcblxcbl9wZl9hZ3Yycmtfb2socmspIGlmIHtcXG5cXHRwYXJ0cyA6PSBzcGxpdChyaywgXFxcIiBcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAyXFxuXFx0cGFydHNbMF0gaW4gX3BmX2FndjJya19tZXRob2RzXFxuXFx0c3RhcnRzd2l0aChwYXJ0c1sxXSwgXFxcIi9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlS2V5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSb3V0ZUtleSAnJXMnIGlzIG1hbGZvcm1lZCBmb3IgYW4gSFRUUCBBUEk7IHRoZSByb3V0ZSBjcmVhdGUgZmFpbHMgd2l0aCAnVGhlIHByb3ZpZGVkIHJvdXRlIGtleSBpcyBub3QgZm9ybWF0dGVkIHByb3Blcmx5IGZvciBIVFRQIHByb3RvY29sLiBGb3JtYXQgc2hvdWxkIGJlIFxcXFxcXFwiW0hUVFAgTUVUSE9EXSAvW1JFU09VUkNFIFBBVEhdXFxcXFxcXCIgb3IgXFxcXFxcXCIkZGVmYXVsdFxcXFxcXFwiJ1xcXCIsIFtya10pLFxcblxcdFxcXCJVc2UgXFxcXFxcXCJNRVRIT0QgL3BhdGhcXFxcXFxcIiB3aXRoIE1FVEhPRCBvbmUgb2YgR0VUIFBPU1QgUFVUIFBBVENIIERFTEVURSBIRUFEIE9QVElPTlMgQU5ZLCBvciAkZGVmYXVsdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1kZXZlbG9wLXJvdXRlcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OlJvdXRlXFxcIilcXG5cXHRfcGZfYWd2MnJrX2h0dHBfYXBpKG5hbWUpXFxuXFx0cmsgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Sb3V0ZUtleVxcXCIpXFxuXFx0aXNfc3RyaW5nKHJrKVxcblxcdG5vdCBfcGZfYWd2MnJrX29rKHJrKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItaHR0cC1yb3V0ZS1zZWxlY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSFRUUCBBUElzIGFjY2VwdCBvbmx5IHRoZSBtZXRob2QtcGF0aCByb3V0ZSBzZWxlY3Rpb24gZXhwcmVzc2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQm90aCBzcGVsbGluZ3MgZGVwbG95LXZlcmlmaWVkIGFzIGFjY2VwdGVkOiB0aGUgZG9jdW1lbnRlZFxcbiMgXFxcIiRyZXF1ZXN0Lm1ldGhvZCAkcmVxdWVzdC5wYXRoXFxcIiBhbmQgdGhlIFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFwiXFxuIyBmb3JtIHRoZSBzZXJ2aWNlIGVycm9yIGl0c2VsZiBwcmludHMgKGJlbmNoIHYwMmIpLlxcbl9wZl9hZ3YyaHJzX2FsbG93ZWQgOj0ge1xcXCIkcmVxdWVzdC5tZXRob2QgJHJlcXVlc3QucGF0aFxcXCIsIFxcXCIke3JlcXVlc3QubWV0aG9kfSAke3JlcXVlc3QucGF0aH1cXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1odHRwLXJvdXRlLXNlbGVjdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIVFRQIEFQSSBSb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb24gJyVzJyBpcyBub3Qgc3VwcG9ydGVkOyB0aGUgQVBJIGNyZWF0ZSBmYWlscyB3aXRoICdSb3V0ZSBzZWxlY3Rpb24gZXhwcmVzc2lvbiBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBcXFxcXFxcIiR7cmVxdWVzdC5tZXRob2R9ICR7cmVxdWVzdC5wYXRofVxcXFxcXFwiJ1xcXCIsIFtyc2VdKSxcXG5cXHRcXFwiVXNlICRyZXF1ZXN0Lm1ldGhvZCAkcmVxdWVzdC5wYXRoLCBvciBvbWl0IHRoZSBwcm9wZXJ0eSAoSFRUUCBBUElzIGRlZmF1bHQgdG8gaXQpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWFwaS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiSFRUUFxcXCJcXG5cXHRyc2UgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Sb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb25cXFwiKVxcblxcdGlzX3N0cmluZyhyc2UpXFxuXFx0bm90IHJzZSBpbiBfcGZfYWd2Mmhyc19hbGxvd2VkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXBpZ3d2Mi1qd3QtYXV0aG9yaXplci1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSldUIGF1dGhvcml6ZXJzIG5lZWQgSnd0Q29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgSldUIGF1dGhvcml6ZXIgaXMgbm90aGluZyBidXQgaXRzIGlzc3Vlci9hdWRpZW5jZSBjb25maWcsIHNvIHRoZVxcbiMgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJqYWNfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkp3dENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXBpZ3d2Mi1qd3QtYXV0aG9yaXplci1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkp3dENvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJKV1QgYXV0aG9yaXplciBoYXMgbm8gSnd0Q29uZmlndXJhdGlvbjsgdGhlIGF1dGhvcml6ZXIgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJKd3RDb25maWd1cmF0aW9uIG11c3Qgbm90IGJlIG51bGwgZm9yIEpXVCBBdXRob3JpemVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgSnd0Q29uZmlndXJhdGlvbiB3aXRoIElzc3VlciBhbmQgQXVkaWVuY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hcGlnYXRld2F5djItYXV0aG9yaXplci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkF1dGhvcml6ZXJcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclR5cGVcXFwiKSA9PSBcXFwiSldUXFxcIlxcblxcdF9wZl9hZ3YyamFjX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hcGlnd3YyLXJlcXVlc3QtYXV0aG9yaXplci1wYXlsb2FkLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJhcGlnYXRld2F5djJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUkVRVUVTVCBhdXRob3JpemVycyBvbiBIVFRQIEFQSXMgbmVlZCBBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXBpR2F0ZXdheVYyOjpBdXRob3JpemVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZXF1aXJlZCBvbiBIVFRQIEFQSXMgb25seSAtIFdlYlNvY2tldCBSRVFVRVNUIGF1dGhvcml6ZXJzIG11c3QgTk9UIHNldFxcbiMgaXQsIHNvIHRoZSBydWxlIGZpcmVzIHNvbGVseSB3aGVuIHRoZSBBcGkgc2libGluZyBpcyBwcm92YWJseSBIVFRQLlxcbiMgQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfYWd2MnJhcF9odHRwX2FwaShuYW1lKSBpZiB7XFxuXFx0YXBpIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXBpSWRcXFwiKVxcblxcdGFwaSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShhcGksIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sVHlwZVxcXCIpID09IFxcXCJIVFRQXFxcIlxcbn1cXG5cXG5fcGZfYWd2MnJhcF9taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFwaWd3djItcmVxdWVzdC1hdXRob3JpemVyLXBheWxvYWQtdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uXFxcIixcXG5cXHRcXFwiUkVRVUVTVCBhdXRob3JpemVyIG9uIGFuIEhUVFAgQVBJIGhhcyBubyBBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb247IHRoZSBhdXRob3JpemVyIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQXV0aG9yaXplclBheWxvYWRGb3JtYXRWZXJzaW9uIGlzIGEgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciBSRVFVRVNUIGF1dGhvcml6ZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBBdXRob3JpemVyUGF5bG9hZEZvcm1hdFZlcnNpb24gdG8gMS4wIG9yIDIuMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWFwaWdhdGV3YXl2Mi1hdXRob3JpemVyLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkFwaUdhdGV3YXlWMjo6QXV0aG9yaXplclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJSRVFVRVNUXFxcIlxcblxcdF9wZl9hZ3YycmFwX2h0dHBfYXBpKG5hbWUpXFxuXFx0X3BmX2FndjJyYXBfbWlzc2luZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFwaWd3djItd2Vic29ja2V0LXJvdXRlLXNlbGVjdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImFwaWdhdGV3YXl2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXZWJTb2NrZXQgQVBJcyBuZWVkIFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgV2ViU29ja2V0IEFQSXMgcm91dGUgYnkgZXZhbHVhdGluZyB0aGlzIGV4cHJlc3Npb24gYWdhaW5zdCBlYWNoIG1lc3NhZ2UsXFxuIyBzbyB0aGUgY3JlYXRlIGNhbGwgcmVqZWN0cyBpdHMgYWJzZW5jZS4gQWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2FndjJ3cnNfbWlzc2luZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hcGlnd3YyLXdlYnNvY2tldC1yb3V0ZS1zZWxlY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvblxcXCIsXFxuXFx0XFxcIldlYlNvY2tldCBBUEkgaGFzIG5vIFJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbjsgdGhlIEFQSSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcm91dGVTZWxlY3Rpb25FeHByZXNzaW9uXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgUm91dGVTZWxlY3Rpb25FeHByZXNzaW9uLCBlLmcuICRyZXF1ZXN0LmJvZHkuYWN0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXBpZ2F0ZXdheXYyLWFwaS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBcGlHYXRld2F5VjI6OkFwaVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFR5cGVcXFwiKSA9PSBcXFwiV0VCU09DS0VUXFxcIlxcblxcdF9wZl9hZ3Yyd3JzX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctY29vbGRvd24tbm9uLW5lZ2F0aXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYXV0b3NjYWxpbmdcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29vbGRvd24gY2Fubm90IGJlIG5lZ2F0aXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDb29sZG93biBpcyBhIHN0cmluZyBpbiB0aGUgc2NoZW1hOyBvbmx5IHRoZSBzZXJ2aWNlIGtub3dzIGl0IGlzIGFcXG4jIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYXNnLWNvb2xkb3duLW5vbi1uZWdhdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29vbGRvd25cXFwiLFxcblxcdHNwcmludGYoXFxcIkNvb2xkb3duICV2IGlzIG5lZ2F0aXZlOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwXFxcXFxcXCJcXFwiLCBbY10pLFxcblxcdFxcXCJVc2UgemVybyBvciBhIHBvc2l0aXZlIG51bWJlciBvZiBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0YyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db29sZG93blxcXCIpKVxcblxcdGMgPCAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWRlc2lyZWQtY2FwYWNpdHktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEZXNpcmVkQ2FwYWNpdHkgbXVzdCBzaXQgYmV0d2VlbiBNaW5TaXplIGFuZCBNYXhTaXplXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpBdXRvU2NhbGluZ0dyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2l6ZXMgYXJlIHN0cmluZy10eXBlZCBpbiB0aGUgc2NoZW1hOyB0aGUgYmV0d2Vlbi1yZWxhdGlvbnNoaXAgaXNcXG4jIGEgdGhyZWUtd2F5IGNyb3NzLXByb3BlcnR5IGNoZWNrLiBUaGUgbWluPm1heCBwYWlyIGl0c2VsZiBpcyBlbmdpbmVcXG4jIHRlcnJpdG9yeSAoRTM3MDYpIGFuZCBub3QgcmVwZWF0ZWQgaGVyZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1kZXNpcmVkLWNhcGFjaXR5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXNpcmVkQ2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkRlc2lyZWRDYXBhY2l0eSAldiBpcyBvdXRzaWRlIFsldiwgJXZdOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJEZXNpcmVkIGNhcGFjaXR5OiV2IG11c3QgYmUgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIG1pbiBzaXplOiV2IGFuZCBtYXggc2l6ZToldlxcXFxcXFwiXFxcIiwgW2RjLCBtbiwgbXgsIGRjLCBtbiwgbXhdKSxcXG5cXHRcXFwiS2VlcCBNaW5TaXplIDw9IERlc2lyZWRDYXBhY2l0eSA8PSBNYXhTaXplXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0ZGMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzaXJlZENhcGFjaXR5XFxcIikpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWluU2l6ZVxcXCIpKVxcblxcdG14IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1heFNpemVcXFwiKSlcXG5cXHRtbiA8PSBteFxcblxcdF9wZl9hc2dkY3Jfb3V0KGRjLCBtbiwgbXgpXFxufVxcblxcbl9wZl9hc2dkY3Jfb3V0KGRjLCBtbiwgXykgaWYgZGMgPCBtblxcblxcbl9wZl9hc2dkY3Jfb3V0KGRjLCBfLCBteCkgaWYgZGMgPiBteFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLWhlYWx0aC1jaGVjay1ncmFjZS1wZXJpb2RcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIZWFsdGhDaGVja0dyYWNlUGVyaW9kIGNhbm5vdCBiZSBuZWdhdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSB0eXBlcyBpdCBhcyBhIGJhcmUgaW50ZWdlciB3aXRoIG5vIGZsb29yOyB6ZXJvIGlzIHRoZVxcbiMgc2VydmljZSBkZWZhdWx0LCBzbyBvbmx5IG5lZ2F0aXZlcyBhcmUgY2xhaW1lZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1oZWFsdGgtY2hlY2stZ3JhY2UtcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja0dyYWNlUGVyaW9kXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIZWFsdGhDaGVja0dyYWNlUGVyaW9kICV2IGlzIG5lZ2F0aXZlOyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJHcmFjZSBwZXJpb2QgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXFxcXFxcXCJcXFwiLCBbZ10pLFxcblxcdFxcXCJVc2UgemVybyBvciBhIHBvc2l0aXZlIG51bWJlciBvZiBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtYXV0b3NjYWxpbmctYXV0b3NjYWxpbmdncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0ZyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja0dyYWNlUGVyaW9kXFxcIikpXFxuXFx0ZyA8IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hc2ctb25kZW1hbmQtcGVyY2VudGFnZS1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJhdXRvc2NhbGluZ1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eSB0b3BzIG91dCBhdCAxMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgcGVyY2VudGFnZSBzcGxpdCBjYW5ub3QgZXhjZWVkIDEwMDsgdGhlIHNjaGVtYSBoYXMgbm8gbWF4aW11bS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy1vbmRlbWFuZC1wZXJjZW50YWdlLW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWl4ZWRJbnN0YW5jZXNQb2xpY3kuSW5zdGFuY2VzRGlzdHJpYnV0aW9uLk9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJPbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eSAldiBpcyBvdmVyIDEwMDsgdGhlIGdyb3VwIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJVc2UgYSBwZXJjZW50YWdlIGJldHdlZW4gMCBhbmQgMTAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1hdXRvc2NhbGluZy1hdXRvc2NhbGluZ2dyb3VwLWluc3RhbmNlc2Rpc3RyaWJ1dGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpBdXRvU2NhbGluZzo6QXV0b1NjYWxpbmdHcm91cFxcXCIpXFxuXFx0cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NaXhlZEluc3RhbmNlc1BvbGljeS5JbnN0YW5jZXNEaXN0cmlidXRpb24uT25EZW1hbmRQZXJjZW50YWdlQWJvdmVCYXNlQ2FwYWNpdHlcXFwiKSlcXG5cXHRwID4gMTAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYXNnLXRhcmdldC12YWx1ZS1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCB0cmFja2luZyBuZWVkcyBhIHBvc2l0aXZlIFRhcmdldFZhbHVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkF1dG9TY2FsaW5nOjpTY2FsaW5nUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBmbG9vciBpcyBlZmZlY3RpdmVseSBcXFwicG9zaXRpdmVcXFwiICg4LjVlLTEyKTsgemVybyBhbmRcXG4jIG5lZ2F0aXZlcyBhcmUgcmVqZWN0ZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hc2ctdGFyZ2V0LXZhbHVlLXBvc2l0aXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYXJnZXRUcmFja2luZ0NvbmZpZ3VyYXRpb24uVGFyZ2V0VmFsdWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhcmdldFZhbHVlICV2IGlzIG5vdCBwb3NpdGl2ZTsgdGhlIHBvbGljeSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlRhcmdldCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gOC41MTU5MkUtMTIgYW5kIDEuMTc0MjcxRTE3XFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2UgYSBwb3NpdGl2ZSB0YXJnZXQgdmFsdWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1hdXRvc2NhbGluZy1zY2FsaW5ncG9saWN5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkF1dG9TY2FsaW5nOjpTY2FsaW5nUG9saWN5XFxcIilcXG5cXHR2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldFRyYWNraW5nQ29uZmlndXJhdGlvbi5UYXJnZXRWYWx1ZVxcXCIpKVxcblxcdHYgPD0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFzZy16b25lLW9yLXN1Ym5ldC1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImF1dG9zY2FsaW5nXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZ3JvdXAgbmVlZHMgQXZhaWxhYmlsaXR5Wm9uZXMsIEF2YWlsYWJpbGl0eVpvbmVJZHMsIG9yIHN1Ym5ldHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBsYWNlbWVudCBtdXN0IGNvbWUgZnJvbSBzb21ld2hlcmUuIEFic2VuY2UgaXMgcHJvdmVuIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFzZy16b25lLW9yLXN1Ym5ldC1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVlBDWm9uZUlkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJOZWl0aGVyIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBub3IgVlBDWm9uZUlkZW50aWZpZXIgaXMgc2V0OyB0aGUgZ3JvdXAgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJZb3UgbXVzdCBzcGVjaWZ5IDEgb2YgZWl0aGVyIEF2YWlsYWJpbGl0eVpvbmVzLCBBdmFpbGFiaWxpdHlab25lSWRzLCBvciBTdWJuZXRzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVlBDWm9uZUlkZW50aWZpZXIgd2l0aCB0aGUgdGFyZ2V0IHN1Ym5ldHMgKG9yIEF2YWlsYWJpbGl0eVpvbmVzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWF1dG9zY2FsaW5nLWF1dG9zY2FsaW5nZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QXV0b1NjYWxpbmc6OkF1dG9TY2FsaW5nR3JvdXBcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJBdmFpbGFiaWxpdHlab25lc1xcXCIpXFxuXFx0X3BmX2FzZ3pzcl9hYnNlbnQobmFtZSwgXFxcIkF2YWlsYWJpbGl0eVpvbmVJZHNcXFwiKVxcblxcdF9wZl9hc2d6c3JfYWJzZW50KG5hbWUsIFxcXCJWUENab25lSWRlbnRpZmllclxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtY2UtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbXB1dGUgZW52aXJvbm1lbnQgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtY2UtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZUVudmlyb25tZW50TmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29tcHV0ZUVudmlyb25tZW50TmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMTI4IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlRW52aXJvbm1lbnROYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMTI4fSRgLCB2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWNlLXZjcHVzLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWF4dkNwdXMgbXVzdCBiZSBhdCBsZWFzdCBNaW52Q3B1c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1jZS12Y3B1cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5NYXh2Q3B1c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWF4dkNwdXMgJXYgaXMgYmVsb3cgTWludkNwdXMgJXYgKFxcXFxcXFwibWF4dkNwdXMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW52Q3B1cy5cXFxcXFxcIilcXFwiLCBbbXgsIG1uXSksXFxuXFx0XFxcIktlZXAgTWludkNwdXMgPD0gTWF4dkNwdXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdG1uIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuTWludkNwdXNcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLk1heHZDcHVzXFxcIikpXFxuXFx0bXggPCBtblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWZhcmdhdGUtY2UtZmllbGRzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBjb21wdXRlIGVudmlyb25tZW50cyBjYW5ub3QgdGFrZSBBbGxvY2F0aW9uU3RyYXRlZ3kgb3IgSW5zdGFuY2VUeXBlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2JhdGNoZmNmX2NyKG5hbWUpIDo9IGNyIGlmIHtcXG5cXHRjciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGNyKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtY2UtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXMuJXNcXFwiLCBbZmllbGRdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyBpcyBub3QgYXBwbGljYWJsZSBmb3IgJXMgY29tcHV0ZSBlbnZpcm9ubWVudHM7IEJhdGNoIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW2ZpZWxkLCBjcl0pLFxcblxcdFxcXCJSZW1vdmUgdGhlIEVDMi1vbmx5IGZpZWxkLCBvciBzd2l0Y2ggQ29tcHV0ZVJlc291cmNlcy5UeXBlIHRvIEVDMi9TUE9UXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNvbXB1dGVFbnZpcm9ubWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Q29tcHV0ZUVudmlyb25tZW50XFxcIilcXG5cXHRjciA6PSBfcGZfYmF0Y2hmY2ZfY3IobmFtZSlcXG5cXHRjciBpbiB7XFxcIkZBUkdBVEVcXFwiLCBcXFwiRkFSR0FURV9TUE9UXFxcIn1cXG5cXHRjcmVzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLkNvbXB1dGVSZXNvdXJjZXNcXG5cXHRpc19vYmplY3QoY3JlcylcXG5cXHRzb21lIGZpZWxkIGluIHtcXFwiQWxsb2NhdGlvblN0cmF0ZWd5XFxcIiwgXFxcIkluc3RhbmNlVHlwZXNcXFwifVxcblxcdG9iamVjdC5nZXQoY3JlcywgZmllbGQsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGYXJnYXRlIGpvYiBkZWZpbml0aW9ucyBtdXN0IHVzZSBhIHN1cHBvcnRlZCB2Q1BVL21lbW9yeSBjb21iaW5hdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaGZjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvdXNlcmd1aWRlL2ZhcmdhdGUuaHRtbFxcXCJcXG5cXG4jIE1lbW9yeSBzcGVjIHBlciB2Q1BVIHRpZXI6IDAuMjUgaXMgYW4gZXhwbGljaXQgc2V0OyB0aGUgcmVzdCBhcmVcXG4jIFttaW4sIG1heCwgc3RlcF0gYXJpdGhtZXRpYyByYW5nZXMuIEtleXMgYXJlIG51bWJlcnMgc28gXFxcIjEuMFxcXCIgYW5kXFxuIyBcXFwiMVxcXCIgYm90aCBsYW5kIG9uIHRoZSBzYW1lIHRpZXIgYWZ0ZXIgdG9fbnVtYmVyLlxcbl9wZl9iYXRjaGZjbV9zZXQgOj0gezUxMiwgMTAyNCwgMjA0OH1cXG5cXG5fcGZfYmF0Y2hmY21fcmFuZ2UgOj0gezAuNTogWzEwMjQsIDQwOTYsIDEwMjRdLCAxOiBbMjA0OCwgODE5MiwgMTAyNF0sIDI6IFs0MDk2LCAxNjM4NCwgMTAyNF0sIDQ6IFs4MTkyLCAzMDcyMCwgMTAyNF0sIDg6IFsxNjM4NCwgNjE0NDAsIDQwOTZdLCAxNjogWzMyNzY4LCAxMjI4ODAsIDgxOTJdfVxcblxcbl9wZl9iYXRjaGZjbV9mYXJnYXRlKG5hbWUpIGlmIHtcXG5cXHRzb21lIHBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5QbGF0Zm9ybUNhcGFiaWxpdGllc1xcXCIpXFxuXFx0cGMudmFsdWUgPT0gXFxcIkZBUkdBVEVcXFwiXFxufVxcblxcbl9wZl9iYXRjaGZjbV9yZXEobmFtZSwgcnR5cGUpIDo9IHYgaWYge1xcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5SZXNvdXJjZVJlcXVpcmVtZW50c1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVHlwZVxcXCIsIFxcXCJcXFwiKSA9PSBydHlwZVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVmFsdWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0diA6PSB0b19udW1iZXIocmF3KVxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHR2ID09IDAuMjVcXG5cXHRub3QgbSBpbiBfcGZfYmF0Y2hmY21fc2V0XFxufVxcblxcbl9wZl9iYXRjaGZjbV9iYWQodiwgbSkgaWYge1xcblxcdHNwZWMgOj0gX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFx0bSA8IHNwZWNbMF1cXG59XFxuXFxuX3BmX2JhdGNoZmNtX2JhZCh2LCBtKSBpZiB7XFxuXFx0c3BlYyA6PSBfcGZfYmF0Y2hmY21fcmFuZ2Vbdl1cXG5cXHRtID4gc3BlY1sxXVxcbn1cXG5cXG5fcGZfYmF0Y2hmY21fYmFkKHYsIG0pIGlmIHtcXG5cXHRzcGVjIDo9IF9wZl9iYXRjaGZjbV9yYW5nZVt2XVxcblxcdChtIC0gc3BlY1swXSkgJSBzcGVjWzJdICE9IDBcXG59XFxuXFxuX3BmX2JhdGNoZmNtX3RpZXIodikgaWYgdiA9PSAwLjI1XFxuXFxuX3BmX2JhdGNoZmNtX3RpZXIodikgaWYgX3BmX2JhdGNoZmNtX3JhbmdlW3ZdXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXMuUmVzb3VyY2VSZXF1aXJlbWVudHNcXFwiLFxcblxcdHNwcmludGYoXFxcIlZDUFUgJXYgaXMgbm90IGEgRmFyZ2F0ZSB0aWVyICgwLjI1LCAwLjUsIDEsIDIsIDQsIDgsIDE2KTsgQmF0Y2ggcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXNvdXJjZSByZXF1aXJlbWVudHMgLi4uIG5vdCB2YWxpZC5cXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0XFxcIlVzZSBvbmUgb2YgdGhlIEZhcmdhdGUgdkNQVSB0aWVyc1xcXCIsXFxuXFx0X3BmX2JhdGNoZmNtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2JhdGNoZmNtX2ZhcmdhdGUobmFtZSlcXG5cXHR2IDo9IF9wZl9iYXRjaGZjbV9yZXEobmFtZSwgXFxcIlZDUFVcXFwiKVxcblxcdG5vdCBfcGZfYmF0Y2hmY21fdGllcih2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLWZhcmdhdGUtY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyUHJvcGVydGllcy5SZXNvdXJjZVJlcXVpcmVtZW50c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiTUVNT1JZICV2IE1pQiBpcyBub3QgdmFsaWQgZm9yIFZDUFUgJXY7IEJhdGNoIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVzb3VyY2UgcmVxdWlyZW1lbnRzICgldiB2Q1BVLCAldiBNaUIpIG5vdCB2YWxpZC5cXFxcXFxcIlxcXCIsIFttLCB2LCB2LCBtXSksXFxuXFx0XFxcIlBpY2sgYSBtZW1vcnkgdmFsdWUgZnJvbSB0aGUgdGllcidzIHN1cHBvcnRlZCBsaXN0XFxcIixcXG5cXHRfcGZfYmF0Y2hmY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfYmF0Y2hmY21fZmFyZ2F0ZShuYW1lKVxcblxcdHYgOj0gX3BmX2JhdGNoZmNtX3JlcShuYW1lLCBcXFwiVkNQVVxcXCIpXFxuXFx0bSA6PSBfcGZfYmF0Y2hmY21fcmVxKG5hbWUsIFxcXCJNRU1PUllcXFwiKVxcblxcdF9wZl9iYXRjaGZjbV9iYWQodiwgbSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1mYXJnYXRlLWV4ZWN1dGlvbi1yb2xlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSBqb2IgZGVmaW5pdGlvbnMgcmVxdWlyZSBFeGVjdXRpb25Sb2xlQXJuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2JhdGNoZmVyX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIilcXG5cXHRwYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC1mYXJnYXRlLWV4ZWN1dGlvbi1yb2xlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJQcm9wZXJ0aWVzLkV4ZWN1dGlvblJvbGVBcm5cXFwiLFxcblxcdFxcXCJQbGF0Zm9ybUNhcGFiaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCBFeGVjdXRpb25Sb2xlQXJuIGlzIG1pc3NpbmcgKFxcXFxcXFwiZXhlY3V0aW9uUm9sZUFybiBpcyByZXF1aXJlZCBmb3IgRmFyZ2F0ZSBqb2JzLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlNldCBDb250YWluZXJQcm9wZXJ0aWVzLkV4ZWN1dGlvblJvbGVBcm5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJKb2JEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpKb2JEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfYmF0Y2hmZXJfZmFyZ2F0ZShuYW1lKVxcblxcdGNwIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLkNvbnRhaW5lclByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QoY3ApXFxuXFx0b2JqZWN0LmdldChjcCwgXFxcIkV4ZWN1dGlvblJvbGVBcm5cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtZmFyZ2F0ZS1tdWx0aW5vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNdWx0aS1ub2RlIHBhcmFsbGVsIGpvYnMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gRmFyZ2F0ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtZmFyZ2F0ZS1tdWx0aW5vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBsYXRmb3JtQ2FwYWJpbGl0aWVzXFxcIixcXG5cXHRcXFwiVHlwZSBtdWx0aW5vZGUgY2Fubm90IHJ1biBvbiBGYXJnYXRlIChcXFxcXFxcIkZhcmdhdGUgZG9lcyBub3Qgc3VwcG9ydCBNTlAgam9ic1xcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIlVzZSBFQzIgcGxhdGZvcm0gY2FwYWJpbGl0aWVzIGZvciBtdWx0aS1ub2RlIHBhcmFsbGVsIGpvYnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L3VzZXJndWlkZS9tdWx0aS1ub2RlLXBhcmFsbGVsLWpvYnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJtdWx0aW5vZGVcXFwiXFxuXFx0c29tZSBwYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhdGZvcm1DYXBhYmlsaXRpZXNcXFwiKVxcblxcdHBjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLWpkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJKb2IgZGVmaW5pdGlvbiBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtamQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSm9iRGVmaW5pdGlvbk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkpvYkRlZmluaXRpb25OYW1lICclcycgaXMgcmVqZWN0ZWQgYnkgdGhlIHNlcnZpY2U6IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAxMjggY2hhcmFjdGVyc1xcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSwgYXQgbW9zdCAxMjggY2hhcmFjdGVyc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Kb2JEZWZpbml0aW9uTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDEyOH0kYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1tYW5hZ2VkLWNvbXB1dGUtcmVzb3VyY2VzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTUFOQUdFRCBjb21wdXRlIGVudmlyb25tZW50cyByZXF1aXJlIENvbXB1dGVSZXNvdXJjZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtbWFuYWdlZC1jb21wdXRlLXJlc291cmNlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlc1xcXCIsXFxuXFx0XFxcIlR5cGUgTUFOQUdFRCByZXF1aXJlcyBDb21wdXRlUmVzb3VyY2VzIChcXFxcXFxcImNvbXB1dGVSZXNvdXJjZXMgbXVzdCBiZSBwcm92aWRlZCBmb3IgYSBNQU5BR0VEIGNvbXB1dGUgZW52aXJvbm1lbnRcXFxcXFxcIilcXFwiLFxcblxcdFxcXCJBZGQgYSBDb21wdXRlUmVzb3VyY2VzIGJsb2NrLCBvciB1c2UgVHlwZSBVTk1BTkFHRURcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJNQU5BR0VEXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb21wdXRlUmVzb3VyY2VzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWJhdGNoLXF1ZXVlLW9yZGVyLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXIgbWF5IG5vdCBiZSBlbXB0eVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCYXRjaDo6Sm9iUXVldWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzY2hlbWEgYWNjZXB0cyBhbiBlbXB0eSBsaXN0OyB0aGUgc2VydmljZSByZWplY3RzIGl0LiBUcnVlXFxuIyBhYnNlbmNlIGlzIHNjaGVtYSB0ZXJyaXRvcnksIHNvIG9ubHkgdGhlIHByZXNlbnQtYW5kLWVtcHR5IHNoYXBlXFxuIyBpcyBjbGFpbWVkIChpbnB1dC5yZXNvdXJjZXMgc2VlcyB0aGUgcmF3IGxpc3QpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYmF0Y2gtcXVldWUtb3JkZXItcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNvbXB1dGVFbnZpcm9ubWVudE9yZGVyXFxcIixcXG5cXHRcXFwiQ29tcHV0ZUVudmlyb25tZW50T3JkZXIgaXMgZW1wdHkgKFxcXFxcXFwiY29tcHV0ZUVudmlyb25tZW50T3JkZXIgaXMgcmVxdWlyZWQuXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiTGlzdCBhdCBsZWFzdCBvbmUgY29tcHV0ZSBlbnZpcm9ubWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVKb2JRdWV1ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iUXVldWVcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9yZGVyIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb21wdXRlRW52aXJvbm1lbnRPcmRlclxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkob3JkZXIpXFxuXFx0Y291bnQob3JkZXIpID09IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1iYXRjaC1yZXRyeS1hdHRlbXB0c1wiLFxuICAgIFwic2VydmljZVwiOiBcImJhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJldHJ5U3RyYXRlZ3kuQXR0ZW1wdHMgbWF5IG5vdCBleGNlZWQgMTBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXJldHJ5LWF0dGVtcHRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXRyeVN0cmF0ZWd5LkF0dGVtcHRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJSZXRyeVN0cmF0ZWd5LkF0dGVtcHRzICV2IGlzIGFib3ZlIHRoZSBtYXhpbXVtIChcXFxcXFxcIlJldHJ5QXR0ZW1wdHMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDEwLlxcXFxcXFwiKVxcXCIsIFtuXSksXFxuXFx0XFxcIlVzZSBhdCBtb3N0IDEwIGF0dGVtcHRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVySm9iRGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCYXRjaDo6Sm9iRGVmaW5pdGlvblxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXRyeVN0cmF0ZWd5LkF0dGVtcHRzXFxcIikpXFxuXFx0biA+IDEwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtdGltZW91dC1taW5pbXVtXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiYmF0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGltZW91dC5BdHRlbXB0RHVyYXRpb25TZWNvbmRzIG11c3QgYmUgYXQgbGVhc3QgNjBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWJhdGNoLXRpbWVvdXQtbWluaW11bVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGltZW91dC5BdHRlbXB0RHVyYXRpb25TZWNvbmRzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaW1lb3V0ICV2IHNlY29uZHMgaXMgYmVsb3cgdGhlIG1pbmltdW0gKFxcXFxcXFwiQXR0ZW1wdER1cmF0aW9uU2Vjb25kcyBpbiBUaW1lb3V0IG11c3QgYmUgYXQgbGVhc3QgNjAgc2Vjb25kcy5cXFxcXFxcIilcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbGVhc3QgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlckpvYkRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmF0Y2g6OkpvYkRlZmluaXRpb25cXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGltZW91dC5BdHRlbXB0RHVyYXRpb25TZWNvbmRzXFxcIikpXFxuXFx0biA8IDYwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYmF0Y2gtdW5tYW5hZ2VkLWZhcmdhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiYXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJVTk1BTkFHRUQgY29tcHV0ZSBlbnZpcm9ubWVudHMgY2Fubm90IGJlIEZhcmdhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmF0Y2g6OkNvbXB1dGVFbnZpcm9ubWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9iYXRjaHVtZl9jcihuYW1lKSA6PSBjciBpZiB7XFxuXFx0Y3IgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wdXRlUmVzb3VyY2VzLlR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhjcilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1iYXRjaC11bm1hbmFnZWQtZmFyZ2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29tcHV0ZVJlc291cmNlcy5UeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUeXBlIFVOTUFOQUdFRCBjYW5ub3QgcGFpciB3aXRoIENvbXB1dGVSZXNvdXJjZXMuVHlwZSAlcyAoXFxcXFxcXCJDYW5ub3QgY3JlYXRlIGFuIFVOTUFOQUdFRCBGYXJnYXRlIENvbXB1dGUgRW52aXJvbm1lbnQuXFxcXFxcXCIpXFxcIiwgW2NyXSksXFxuXFx0XFxcIlVzZSBNQU5BR0VEIGZvciBGYXJnYXRlLCBvciBFQzIgcmVzb3VyY2VzIGZvciBVTk1BTkFHRURcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYmF0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQ29tcHV0ZUVudmlyb25tZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJhdGNoOjpDb21wdXRlRW52aXJvbm1lbnRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJVTk1BTkFHRURcXFwiXFxuXFx0Y3IgOj0gX3BmX2JhdGNodW1mX2NyKG5hbWUpXFxuXFx0Y3IgaW4ge1xcXCJGQVJHQVRFXFxcIiwgXFxcIkZBUkdBVEVfU1BPVFxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHYXRld2F5cyB3aXRoIEF1dGhvcml6ZXJUeXBlIENVU1RPTV9KV1QgcmVxdWlyZSBBdXRob3JpemVyQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2d3and0X2hhc19jb25maWcobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkF1dGhvcml6ZXJUeXBlIGlzIENVU1RPTV9KV1QgYnV0IEF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGlzIG1pc3Npbmc7IHRoZSBDcmVhdGVHYXRld2F5IEFQSSByZXF1aXJlcyBpdCBhbmQgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBhIFZhbGlkYXRpb25FeGNlcHRpb25cXFwiLFxcblxcdFxcXCJBZGQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uQ3VzdG9tSldUQXV0aG9yaXplciAoZGlzY292ZXJ5VXJsIGFuZCBhbGxvd2VkQXVkaWVuY2UvYWxsb3dlZENsaWVudHMpLCBvciBzd2l0Y2ggQXV0aG9yaXplclR5cGUgdG8gQVdTX0lBTVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUdhdGV3YXkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJDVVNUT01fSldUXFxcIlxcblxcdG5vdCBfcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBZ2VudENvcmUgUnVudGltZSBuYW1lcyBtdXN0IG1hdGNoIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IChubyBoeXBoZW5zKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24g44K544Kt44O844Oe44GvIEFnZW50UnVudGltZU5hbWUg44Gu44OR44K/44O844Oz44KS5oyB44Gf44Gq44GE77yI44Ko44Oz44K444Oz57Sg6YCa44KK44CBXFxuIyAyMDI2LTA5LTAxIOOBqyAxLjcuMC1iZXRhIOOBp+eiuuiqje+8ieOBjOOAgUNyZWF0ZUFnZW50UnVudGltZSBBUEkg44GvXFxuIyBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSDjgpLlvLfliLbjgZnjgovjgILjg4/jgqTjg5Xjg7PlhaXjgorjga4gQ0RLIOmiqOWRveWQjeOBjOWumueVquOBruatu+WboOOAglxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWdlbnRSdW50aW1lTmFtZSAnJXMnIGlzIGludmFsaWQ6IGl0IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVzIChtYXggNDggY2hhcmFjdGVycywgaHlwaGVucyBhcmUgbm90IGFsbG93ZWQpOyBDcmVhdGVBZ2VudFJ1bnRpbWUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYW4gdW5kZXJzY29yZS1zZXBhcmF0ZWQgbmFtZSBzdWNoIGFzICdteV9hZ2VudF9ydW50aW1lJ1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUFnZW50UnVudGltZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2xvdWRGcm9udCB2aWV3ZXIgY2VydGlmaWNhdGVzIG11c3QgbGl2ZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IHJlcXVpcmVzIHRoZSBBQ00gY2VydGlmaWNhdGUgdG8gYmUgaW4gdXMtZWFzdC0xLCBidXQgdGhlIGNlcnRpZmljYXRlIGlzIGluICVzXFxcIiwgW3JlZ2lvbl0pLFxcblxcdFxcXCJJc3N1ZSBvciBpbXBvcnQgdGhlIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMSAoZS5nLiBhIGRlZGljYXRlZCB1cy1lYXN0LTEgc3RhY2spIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY25hbWVzLWFuZC1odHRwcy1yZXF1aXJlbWVudHMuaHRtbCNodHRwcy1yZXF1aXJlbWVudHMtY2VydGlmaWNhdGUtaXNzdWVyXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcImFjbVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2FsaWFzY2VydF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tdmlld2VyY2VydGlmaWNhdGUuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2ZpeCA6PSBcXFwiQXR0YWNoIGFuIEFDTSBjZXJ0aWZpY2F0ZSAoQWNtQ2VydGlmaWNhdGVBcm4sIHVzLWVhc3QtMSkgb3IgYW4gSUFNIGNlcnRpZmljYXRlLCB0b2dldGhlciB3aXRoIFNzbFN1cHBvcnRNZXRob2QgYW5kIE1pbmltdW1Qcm90b2NvbFZlcnNpb25cXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA6PSBjb3VudChbMSB8XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQWxpYXNlc1xcXCIpXFxuXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlXFxcIixcXG5cXHRcXFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9maXgsIF9wZl9jZl9hbGlhc2NlcnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA+IDBcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGUtcG9saWN5LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlIHBvbGljeSBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6Q2FjaGVQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtY2FjaGUtcG9saWN5LW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNhY2hlUG9saWN5Q29uZmlnLk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNhY2hlUG9saWN5Q29uZmlnLk5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogYWxwaGFudW1lcmljcywgZGFzaCBhbmQgdW5kZXJzY29yZVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSBpdCB0byBzYXRpc2Z5IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDYWNoZVBvbGljeS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpDYWNoZVBvbGljeVxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNhY2hlUG9saWN5Q29uZmlnLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlZE1ldGhvZHMgbXVzdCBiZSBhIHN1YnNldCBvZiBBbGxvd2VkTWV0aG9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfbWV0aG9kc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tY2FjaGViZWhhdmlvci5odG1sXFxcIlxcblxcbl9wZl9jZl9tZXRob2RzX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBDbG91ZEZyb250IGRlZmF1bHRzIEFsbG93ZWRNZXRob2RzIHRvIEdFVC9IRUFEIHdoZW4gdGhlIHByb3BlcnR5IGlzIG9taXR0ZWQsXFxuIyBzbyBhbiBvbWl0dGVkIEFsbG93ZWRNZXRob2RzIHN0aWxsIGNvbnN0cmFpbnMgd2hhdCBtYXkgYmUgY2FjaGVkLlxcbl9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYikgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQWxsb3dlZE1ldGhvZHNcXFwiLCBbXFxcIkdFVFxcXCIsIFxcXCJIRUFEXFxcIl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlZC1tZXRob2RzLXN1YnNldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2FjaGVkTWV0aG9kc1xcXCIsIFtiLnBhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZWRNZXRob2RzIGNvbnRhaW5zICVzLCB3aGljaCBpcyBub3QgaW4gQWxsb3dlZE1ldGhvZHMgJXZcXFwiLCBbbWV0aG9kLCBhbGxvd2VkXSksXFxuXFx0XFxcIkV2ZXJ5IG1ldGhvZCBpbiBDYWNoZWRNZXRob2RzIG11c3QgYWxzbyBhcHBlYXIgaW4gQWxsb3dlZE1ldGhvZHNcXFwiLFxcblxcdF9wZl9jZl9tZXRob2RzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRjYWNoZWQgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQ2FjaGVkTWV0aG9kc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoY2FjaGVkKVxcblxcdGFsbG93ZWQgOj0gX3BmX2NmX21ldGhvZHNfYWxsb3dlZChiKVxcblxcdGlzX2FycmF5KGFsbG93ZWQpXFxuXFx0c29tZSBtZXRob2QgaW4gY2FjaGVkXFxuXFx0bm90IG1ldGhvZCBpbiBhbGxvd2VkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBkaXN0cmlidXRpb24gbXVzdCBiZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fZml4IDo9IFxcXCJDcmVhdGUgdGhlIExhbWJkYUBFZGdlIGZ1bmN0aW9uIGluIHVzLWVhc3QtMSAoY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIGRvZXMgdGhpcyBmb3IgeW91KSBhbmQgYXNzb2NpYXRlIHRoYXQgdmVyc2lvbidzIEFSTlxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9sYW1iZGEtYXQtZWRnZS1mdW5jdGlvbi1yZXN0cmljdGlvbnMuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwifSB8XFxuXFx0XFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSl9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRfcGZfY2ZfZWRnZXJlZ2lvbl9maXgsIF9wZl9jZl9lZGdlcmVnaW9uX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gN1xcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImxhbWJkYVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGFzc29jaWF0aW9ucyBtdXN0IHJlZmVyZW5jZSBhIHZlcnNpb24gQVJOLCBub3QgYW4gYWxpYXMgb3IgJExBVEVTVFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfZWRnZXZlcl9maXggOj0gXFxcIkFzc29jaWF0ZSBhIHZlcnNpb24gQVJOIChpbiB0aGUgQ0RLLCBmbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuKSBpbnN0ZWFkIG9mIHRoZSB1bnF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGFuIGFsaWFzLCBvciAkTEFURVNUXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1sYW1iZGFmdW5jdGlvbmFzc29jaWF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG4jIExhbWJkYSBBUk5zIHNwbGl0IGludG8gNyBzZWdtZW50cyB3aGVuIHVucXVhbGlmaWVkXFxuIyAoYXJuOnBhcnRpdGlvbjpsYW1iZGE6cmVnaW9uOmFjY291bnQ6ZnVuY3Rpb246bmFtZSkgYW5kIDggd2hlbiBhIHZlcnNpb24gb3JcXG4jIGFsaWFzIHF1YWxpZmllciBpcyBhcHBlbmRlZC4gT25seSBhbiBhbGwtZGlnaXQgcXVhbGlmaWVyIGlzIGEgdmVyc2lvbi5cXG5fcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpIDo9IFt7XFxcInBhdGhcXFwiOiBwYXRoLCBcXFwiYXJuXFxcIjogYXJuLCBcXFwicGFydHNcXFwiOiBwYXJ0c30gfFxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXZlcl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cGFydHNbNV0gPT0gXFxcImZ1bmN0aW9uXFxcIlxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnMuJWQuTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBbYi5wYXRoLCBhLmluZGV4XSlcXG5dXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0IHRoaXMgQVJOIGhhcyBubyBxdWFsaWZpZXJcXFwiLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDdcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIHJlcXVpcmVzIGEgdmVyc2lvbi1xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBidXQgJyVzJyBpcyBhbiBhbGlhcyBvciAkTEFURVNUXFxcIiwgW3F1YWxpZmllcl0pLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDhcXG5cXHRxdWFsaWZpZXIgOj0gaXQucGFydHNbN11cXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgcXVhbGlmaWVyKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9yaWdpbiBncm91cCBtZW1iZXJzIG11c3QgcmVmZXJlbmNlIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiB0aGUgZGlzdHJpYnV0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSkgOj0ge2lkIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luc1xcXCIpXFxuXFx0aWQgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaWQpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1vcmlnaW4tZ3JvdXAtbWVtYmVyLW9yaWdpblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luR3JvdXBzLkl0ZW1zLiVkLk1lbWJlcnNcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIk9yaWdpbiBncm91cCBtZW1iZXIgJyVzJyBkb2VzIG5vdCBtYXRjaCBhbnkgb3JpZ2luIElkIGluIHRoZSBkaXN0cmlidXRpb25cXFwiLCBbb2lkXSksXFxuXFx0XFxcIlBvaW50IGV2ZXJ5IG9yaWdpbiBncm91cCBtZW1iZXIgYXQgdGhlIElkIG9mIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiBPcmlnaW5zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW5ncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtc1xcXCIpXFxuXFx0bWVtYmVycyA6PSBvYmplY3QuZ2V0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIk1lbWJlcnNcXFwiLCB7fSksIFxcXCJJdGVtc1xcXCIsIFtdKVxcblxcdHNvbWUgbSBpbiBtZW1iZXJzXFxuXFx0b2lkIDo9IG9iamVjdC5nZXQobSwgXFxcIk9yaWdpbklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcob2lkKVxcblxcdG5vdCBvaWQgaW4gX3BmX2NmX29nbWVtYmVyX2lkcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBiZWhhdmlvciBUVExzIG11c3Qgc2F0aXNmeSBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX3R0bF9maXggOj0gXFxcIk9yZGVyIHRoZSBUVExzIGFzIE1pblRUTCA8PSBEZWZhdWx0VFRMIDw9IE1heFRUTFxcXCJcXG5cXG5fcGZfY2ZfdHRsX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIiwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSksIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heFRUTCAoJXYpXFxcIiwgW21uLCBteF0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBiLnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiTWluVFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRGVmYXVsdFRUTCAoJXYpXFxcIiwgW21uLCBkZl0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBkZlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIkRlZmF1bHRUVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFtkZiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bXggOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1heFRUTFxcXCIsIG51bGwpKVxcblxcdGRmID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBXQUZ2MiB3ZWIgQUNMIGF0dGFjaGVkIHRvIENsb3VkRnJvbnQgbXVzdCBiZSBnbG9iYWxseSBzY29wZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIFdBRnYyIEFSTiBjYXJyaWVzIGl0cyBzY29wZSBpbiB0aGUgcmVzb3VyY2Ugc2VnbWVudDpcXG4jICAgYXJuOmF3czp3YWZ2Mjp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmdsb2JhbC93ZWJhY2wvbmFtZS9pZCAgICAoQ0xPVURGUk9OVClcXG4jICAgYXJuOmF3czp3YWZ2MjphcC1ub3J0aGVhc3QtMToxMjM0NTY3ODkwMTI6cmVnaW9uYWwvd2ViYWNsLy4uLiAoUkVHSU9OQUwpXFxuIyBDbG91ZEZyb250IGFjY2VwdHMgb25seSB0aGUgZ2xvYmFsIGZvcm0uIENoZWNraW5nIHRoZSByZWdpb24gYWxvbmUgd291bGQgbWlzc1xcbiMgYSBSRUdJT05BTCB3ZWIgQUNMIHRoYXQgaGFwcGVucyB0byBoYXZlIGJlZW4gY3JlYXRlZCBpbiB1cy1lYXN0LTEsIHdoaWNoIGlzXFxuIyB0aGUgZWFzeSBtaXN0YWtlIHRvIG1ha2UuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IG9ubHkgYWNjZXB0cyBhIGdsb2JhbGx5IHNjb3BlZCB3ZWIgQUNMLCBidXQgdGhpcyBBUk4gaXMgc2NvcGVkICclcydcXFwiLCBbc2NvcGVdKSxcXG5cXHRcXFwiQ3JlYXRlIHRoZSB3ZWIgQUNMIHdpdGggc2NvcGUgQ0xPVURGUk9OVCBpbiB1cy1lYXN0LTEgKHdhZnYyLkNmbldlYkFDTCB3aXRoIHNjb3BlOiAnQ0xPVURGUk9OVCcpIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS13YWZ2Mi13ZWJhY2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuV2ViQUNMSWRcXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJ3YWZ2MlxcXCJcXG5cXHRzZWdtZW50cyA6PSBzcGxpdChwYXJ0c1s1XSwgXFxcIi9cXFwiKVxcblxcdHNjb3BlIDo9IHNlZ21lbnRzWzBdXFxuXFx0c2NvcGUgIT0gXFxcImdsb2JhbFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXBlcmlvZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIFBlcmlvZCBhcyBhIGJhcmUgaW50ZWdlcjsgdGhlIHZhbGlkIHZhbHVlcyBhcmVcXG4jIG9ubHkgaW4gdGhlIHNlcnZpY2UgKFxcXCJQZXJpb2QgbXVzdCBiZSAxMCwgMjAsIDMwIG9yIGEgbXVsdGlwbGUgb2YgNjBcXFwiKS5cXG4jIFRoZSBzYW1lIGNvbnN0cmFpbnQgYXBwbGllcyBpbnNpZGUgTWV0cmljU3RhdCAoYmVuY2ggdzExLCAyMDI2LTA5LTAzKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIlBlcmlvZCAldiBpcyBpbnZhbGlkOyBQdXRNZXRyaWNBbGFybSBmYWlscyB3aXRoIFxcXFxcXFwiUGVyaW9kIG11c3QgYmUgMTAsIDIwLCAzMCBvciBhIG11bHRpcGxlIG9mIDYwXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJVc2UgMTAsIDIwLCAzMCwgb3IgYSBtdWx0aXBsZSBvZiA2MCBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0cCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QZXJpb2RcXFwiKSlcXG5cXHRub3QgcCBpbiB7MTAsIDIwLCAzMH1cXG5cXHRwICUgNjAgIT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tcGVyaW9kXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3MgKE1ldHJpY1N0YXQuUGVyaW9kIG9mIHF1ZXJ5ICVkKVxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiTWV0cmljU3RhdCBQZXJpb2QgJXYgaXMgaW52YWxpZDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlBlcmlvZCBtdXN0IGJlIDEwLCAyMCwgMzAgb3IgYSBtdWx0aXBsZSBvZiA2MFxcXFxcXFwiXFxcIiwgW3BdKSxcXG5cXHRcXFwiVXNlIDEwLCAyMCwgMzAsIG9yIGEgbXVsdGlwbGUgb2YgNjAgc2Vjb25kc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIpXFxuXFx0aSA6PSBpdGVtLmluZGV4XFxuXFx0cSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KHEpXFxuXFx0cCA6PSBvYmplY3QuZ2V0KHEsIFtcXFwiTWV0cmljU3RhdFxcXCIsIFxcXCJQZXJpb2RcXFwiXSwgbnVsbClcXG5cXHRpc19udW1iZXIocClcXG5cXHRub3QgcCBpbiB7MTAsIDIwLCAzMH1cXG5cXHRwICUgNjAgIT0gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtYWxhcm0tdGhyZXNob2xkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGFuZGFyZCBvcGVyYXRvcnMgbmVlZCBUaHJlc2hvbGQsIHJhbmdlIG9wZXJhdG9ycyBuZWVkIFRocmVzaG9sZE1ldHJpY0lkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2N3YXRoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIlxcblxcbiMgVGhlIHR3byByYW5nZSBvcGVyYXRvcnMgYW5jaG9yIHRvIGFuIGFub21hbHktZGV0ZWN0aW9uIGJhbmQgdmlhXFxuIyBUaHJlc2hvbGRNZXRyaWNJZDsgZXZlcnkgb3RoZXIgb3BlcmF0b3IgbmVlZHMgYSBzdGF0aWMgVGhyZXNob2xkLiBBYnNlbmNlXFxuIyBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY3dhdGhfcmFuZ2Vfb3BzIDo9IHtcXFwiTGVzc1RoYW5Mb3dlck9yR3JlYXRlclRoYW5VcHBlclRocmVzaG9sZFxcXCIsIFxcXCJMZXNzVGhhbkxvd2VyVGhyZXNob2xkXFxcIiwgXFxcIkdyZWF0ZXJUaGFuVXBwZXJUaHJlc2hvbGRcXFwifVxcblxcbl9wZl9jd2F0aF9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1hbGFybS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRocmVzaG9sZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ29tcGFyaXNvbk9wZXJhdG9yICclcycgbmVlZHMgYSBzdGF0aWMgVGhyZXNob2xkIGJ1dCBub25lIGlzIHNldDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlB1dE1ldHJpY0FsYXJtIHJlcXVlc3Qgc2hvdWxkIGhhdmUgdmFsaWQgVGhyZXNob2xkIHBhcmFtZXRlclxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlNldCBUaHJlc2hvbGQsIG9yIHN3aXRjaCB0byBhbiBhbm9tYWx5LWRldGVjdGlvbiBvcGVyYXRvciB3aXRoIFRocmVzaG9sZE1ldHJpY0lkXFxcIixcXG5cXHRfcGZfY3dhdGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRvcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbXBhcmlzb25PcGVyYXRvclxcXCIpXFxuXFx0aXNfc3RyaW5nKG9wKVxcblxcdG5vdCBvcCBpbiBfcGZfY3dhdGhfcmFuZ2Vfb3BzXFxuXFx0X3BmX2N3YXRoX2Fic2VudChuYW1lLCBcXFwiVGhyZXNob2xkXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWFsYXJtLXRocmVzaG9sZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGhyZXNob2xkTWV0cmljSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkNvbXBhcmlzb25PcGVyYXRvciAnJXMnIGlzIGEgcmFuZ2Ugb3BlcmF0b3IgYnV0IFRocmVzaG9sZE1ldHJpY0lkIGlzIG5vdCBzZXQ7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJDb21wYXJpc29uT3BlcmF0b3JzIGZvciByYW5nZXMgcmVxdWlyZSBUaHJlc2hvbGRNZXRyaWNJZCB0byBiZSBzZXRcXFxcXFxcIlxcXCIsIFtvcF0pLFxcblxcdFxcXCJQb2ludCBUaHJlc2hvbGRNZXRyaWNJZCBhdCB0aGUgQU5PTUFMWV9ERVRFQ1RJT05fQkFORCBxdWVyeSBpZCwgb3IgdXNlIGEgc3RhdGljLXRocmVzaG9sZCBvcGVyYXRvclxcXCIsXFxuXFx0X3BmX2N3YXRoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0b3AgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db21wYXJpc29uT3BlcmF0b3JcXFwiKVxcblxcdG9wIGluIF9wZl9jd2F0aF9yYW5nZV9vcHNcXG5cXHRfcGZfY3dhdGhfYWJzZW50KG5hbWUsIFxcXCJUaHJlc2hvbGRNZXRyaWNJZFxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1jb21wb3NpdGUtYWxhcm0tcnVsZS1zeW50YXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIEFsYXJtUnVsZSBtdXN0IHN0YXJ0IHdpdGggYSB2YWxpZCBleHByZXNzaW9uIHRva2VuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkNvbXBvc2l0ZUFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBuYW1lcyB0aGUgb25seSB0b2tlbnMgYSBydWxlIGV4cHJlc3Npb24gbWF5IHN0YXJ0IHdpdGg7IHRoaXNcXG4jIGNoZWNrcyBqdXN0IHRoYXQgZmlyc3QgdG9rZW4g4oCUIGEgZnVsbCBncmFtbWFyIGlzIG91dCBvZiBzY29wZS4gRnVuY3Rpb25cXG4jIHRva2VucyB0YWtlIGFuIGFyZ3VtZW50IGxpc3QsIGtleXdvcmRzIHN0YW5kIGFsb25lLlxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCIoXFxcIilcXG5cXG5fcGZfY3djYXNfdmFsaWRfc3RhcnQodCkgaWYgc3RhcnRzd2l0aCh0LCBcXFwiTk9UIFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHN0YXJ0c3dpdGgodCwgXFxcIk5PVChcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJBVF9MRUFTVFxcXCIpXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHQgPT0gXFxcIlRSVUVcXFwiXFxuXFxuX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpIGlmIHQgPT0gXFxcIkZBTFNFXFxcIlxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJBTEFSTShcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJPSyhcXFwiKVxcblxcbl9wZl9jd2Nhc192YWxpZF9zdGFydCh0KSBpZiBzdGFydHN3aXRoKHQsIFxcXCJJTlNVRkZJQ0lFTlRfREFUQShcXFwiKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1jb21wb3NpdGUtYWxhcm0tcnVsZS1zeW50YXhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsYXJtUnVsZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxhcm1SdWxlICclcycgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHZhbGlkIHRva2VuOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJFcnJvciBpbiBBbGFybVJ1bGUgW1Vuc3VwcG9ydGVkIHRva2VuIC4uLiBtdXN0IGJlOiAnKCcsICdOT1QnLCBBVF9MRUFTVCwgVFJVRSBvciBGQUxTRSwgQUxBUk0sIE9LLCBvciBJTlNVRkZJQ0lFTlRfREFUQV1cXFxcXFxcIlxcXCIsIFtleHByXSksXFxuXFx0XFxcIlN0YXJ0IHRoZSBydWxlIHdpdGggQUxBUk0oLi4uKSwgT0soLi4uKSwgSU5TVUZGSUNJRU5UX0RBVEEoLi4uKSwgTk9ULCBBVF9MRUFTVCwgVFJVRSwgRkFMU0UsIG9yIGEgcGFyZW50aGVzaXplZCBncm91cFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9tb25pdG9yaW5nL0NyZWF0ZV9Db21wb3NpdGVfQWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6Q29tcG9zaXRlQWxhcm1cXFwiKVxcblxcdGV4cHIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGFybVJ1bGVcXFwiKVxcblxcdGlzX3N0cmluZyhleHByKVxcblxcdHQgOj0gdHJpbV9zcGFjZShleHByKVxcblxcdHQgIT0gXFxcIlxcXCJcXG5cXHRub3QgX3BmX2N3Y2FzX3ZhbGlkX3N0YXJ0KHQpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtYm9keS1qc29uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmRCb2R5IG11c3QgYmUgdmFsaWQgSlNPTlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLWJvZHktanNvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIsXFxuXFx0XFxcIkRhc2hib2FyZEJvZHkgZG9lcyBub3QgcGFyc2UgYXMgSlNPTjsgUHV0RGFzaGJvYXJkIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgZmllbGQgRGFzaGJvYXJkQm9keSBtdXN0IGJlIGEgdmFsaWQgSlNPTiBvYmplY3RcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkZpeCB0aGUgSlNPTiBzeW50YXggb2YgdGhlIGRhc2hib2FyZCBib2R5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L0FQSVJlZmVyZW5jZS9DbG91ZFdhdGNoLURhc2hib2FyZC1Cb2R5LVN0cnVjdHVyZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdGJvZHkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5XFxcIilcXG5cXHRpc19zdHJpbmcoYm9keSlcXG5cXHRub3QganNvbi5pc192YWxpZChib2R5KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRhc2hib2FyZCBuYW1lcyBhbGxvdyBvbmx5IGFscGhhbnVtZXJpY3MsIGRhc2ggYW5kIHVuZGVyc2NvcmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFeHRyYSBwYWluZnVsIGF0IGRlcGxveSB0aW1lOiB0aGUgaW52YWxpZCBuYW1lIGFsc28gYnJlYWtzIHRoZSByb2xsYmFja1xcbiMgREVMRVRFLCBsZWF2aW5nIHRoZSBzdGFjayBpbiBST0xMQkFDS19GQUlMRUQgKGJlbmNoZWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGFzaGJvYXJkTmFtZSAnJXMnIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczsgUHV0RGFzaGJvYXJkIGFsbG93cyBvbmx5IGFscGhhbnVtZXJpY3MsIGRhc2ggKC0pIGFuZCB1bmRlcnNjb3JlIChfKSwgYW5kIHRoZSBmYWlsZWQgc3RhY2sgY2Fubm90IGV2ZW4gcm9sbCBiYWNrIGNsZWFubHlcXFwiLCBbZG5dKSxcXG5cXHRcXFwiVXNlIG9ubHkgbGV0dGVycywgZGlnaXRzLCBkYXNoIGFuZCB1bmRlcnNjb3JlIGluIHRoZSBkYXNoYm9hcmQgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1B1dERhc2hib2FyZC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcXFwiKVxcblxcdGRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTlfLV0rJGAsIGRuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldC1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV2ZXJ5IGRhc2hib2FyZCB3aWRnZXQgcmVxdWlyZXMgdHlwZSBhbmQgcHJvcGVydGllc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZFdhdGNoOjpEYXNoYm9hcmRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkga2V5IHByZXNlbmNlIGlzIGNoZWNrZWQ6IHRoZSBzZXJ2aWNlIGFjY2VwdHMgYXJiaXRyYXJ5IHR5cGUgdmFsdWVzXFxuIyAoYmVuY2ggZHcwNCwgdHlwZSBcXFwibWV0cmljY1xcXCIgZGVwbG95ZWQgY2xlYW4pLCBzbyBubyBlbnVtIHZhbGlkYXRpb24uXFxuX3BmX2N3ZHdmX3dpZGdldHMobmFtZSkgOj0gd3MgaWYge1xcblxcdGJvZHkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5XFxcIilcXG5cXHRpc19zdHJpbmcoYm9keSlcXG5cXHRqc29uLmlzX3ZhbGlkKGJvZHkpXFxuXFx0b2JqIDo9IGpzb24udW5tYXJzaGFsKGJvZHkpXFxuXFx0d3MgOj0gb2JqZWN0LmdldChvYmosIFxcXCJ3aWRnZXRzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkod3MpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0LWZpZWxkc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5ICh3aWRnZXRzWyVkXSlcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIkRhc2hib2FyZCB3aWRnZXQgJWQgaXMgbWlzc2luZyAnJXMnOyBQdXREYXNoYm9hcmQgZmFpbHMgd2l0aCBcXFxcXFxcIlNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICclcydcXFxcXFxcIlxcXCIsIFtpLCBrZXksIGtleV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHdpZGdldCBhIHR5cGUgYW5kIGEgcHJvcGVydGllcyBvYmplY3RcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0Nsb3VkV2F0Y2gtRGFzaGJvYXJkLUJvZHktU3RydWN0dXJlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFxcXCIpXFxuXFx0c29tZSBpLCB3IGluIF9wZl9jd2R3Zl93aWRnZXRzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KHcpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJ0eXBlXFxcIiwgXFxcInByb3BlcnRpZXNcXFwifVxcblxcdG9iamVjdC5nZXQodywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0LXBvc2l0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXNoYm9hcmQgd2lkZ2V0IHggdG9wcyBvdXQgYXQgMjMgYW5kIHdpZHRoIGF0IDI0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgdHdvIGJlbmNoZWQgbWF4aW1hIGFyZSBjbGFpbWVkICh4IDw9IDIzLCB3aWR0aCA8PSAyNCkuXFxuX3BmX2N3ZHdwX3dpZGdldHMobmFtZSkgOj0gd3MgaWYge1xcblxcdGJvZHkgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXNoYm9hcmRCb2R5XFxcIilcXG5cXHRpc19zdHJpbmcoYm9keSlcXG5cXHRqc29uLmlzX3ZhbGlkKGJvZHkpXFxuXFx0b2JqIDo9IGpzb24udW5tYXJzaGFsKGJvZHkpXFxuXFx0d3MgOj0gb2JqZWN0LmdldChvYmosIFxcXCJ3aWRnZXRzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkod3MpXFxufVxcblxcbl9wZl9jd2R3cF9tYXggOj0ge1xcXCJ4XFxcIjogMjMsIFxcXCJ3aWR0aFxcXCI6IDI0fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0LXBvc2l0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRhc2hib2FyZEJvZHkgKHdpZGdldHNbJWRdLiVzKVxcXCIsIFtpLCBrZXldKSxcXG5cXHRzcHJpbnRmKFxcXCJEYXNoYm9hcmQgd2lkZ2V0ICVkIGhhcyAlcz0ldiwgYWJvdmUgdGhlIG1heGltdW0gJXY7IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiU2hvdWxkIGJlIDw9ICV2XFxcXFxcXCJcXFwiLCBbaSwga2V5LCB2LCBtLCBtXSksXFxuXFx0XFxcIktlZXAgeCB3aXRoaW4gMC0yMyBhbmQgd2lkdGggd2l0aGluIDEtMjQgKDI0LWNvbHVtbiBncmlkKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRzb21lIGksIHcgaW4gX3BmX2N3ZHdwX3dpZGdldHMobmFtZSlcXG5cXHRpc19vYmplY3QodylcXG5cXHRzb21lIGtleSwgbSBpbiBfcGZfY3dkd3BfbWF4XFxuXFx0diA6PSBvYmplY3QuZ2V0KHcsIGtleSwgMClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2ID4gbVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGFzaGJvYXJkLXdpZGdldHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRhc2hib2FyZEJvZHkgcmVxdWlyZXMgYSB3aWRnZXRzIGFycmF5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkRhc2hib2FyZFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC1kYXNoYm9hcmQtd2lkZ2V0c1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIsXFxuXFx0XFxcIkRhc2hib2FyZEJvZHkgaGFzIG5vICd3aWRnZXRzJyBrZXk7IFB1dERhc2hib2FyZCBmYWlscyB3aXRoIFxcXFxcXFwiU2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ3dpZGdldHMnXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSB3aWRnZXRzIGFycmF5IHRvIHRoZSBkYXNoYm9hcmQgYm9keVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9BUElSZWZlcmVuY2UvQ2xvdWRXYXRjaC1EYXNoYm9hcmQtQm9keS1TdHJ1Y3R1cmUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6RGFzaGJvYXJkXFxcIilcXG5cXHRib2R5IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGFzaGJvYXJkQm9keVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJvZHkpXFxuXFx0anNvbi5pc192YWxpZChib2R5KVxcblxcdG9iaiA6PSBqc29uLnVubWFyc2hhbChib2R5KVxcblxcdGlzX29iamVjdChvYmopXFxuXFx0b2JqZWN0LmdldChvYmosIFxcXCJ3aWRnZXRzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3Vkd2F0Y2gtZGF0YXBvaW50cy1ldmFsdWF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEYXRhcG9pbnRzVG9BbGFybSBtdXN0IG5vdCBleGNlZWQgRXZhbHVhdGlvblBlcmlvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtZGF0YXBvaW50cy1ldmFsdWF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EYXRhcG9pbnRzVG9BbGFybVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRGF0YXBvaW50c1RvQWxhcm0gKCV2KSBleGNlZWRzIEV2YWx1YXRpb25QZXJpb2RzICgldik7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJEYXRhcG9pbnRzVG9BbGFybSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBFdmFsdWF0aW9uUGVyaW9kc1xcXFxcXFwiXFxcIiwgW2QsIGV2XSksXFxuXFx0XFxcIkxvd2VyIERhdGFwb2ludHNUb0FsYXJtIHRvIGF0IG1vc3QgRXZhbHVhdGlvblBlcmlvZHMsIG9yIHJhaXNlIEV2YWx1YXRpb25QZXJpb2RzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY2xvdWR3YXRjaC1hbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0ZCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EYXRhcG9pbnRzVG9BbGFybVxcXCIpKVxcblxcdGV2IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2YWx1YXRpb25QZXJpb2RzXFxcIikpXFxuXFx0ZCA+IGV2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1leHRlbmRlZC1zdGF0aXN0aWNcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcGVyY2VudGlsZSBzdGF0aXN0aWMgY2Fubm90IGV4Y2VlZCBwMTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBQZXJjZW50aWxlIHN0YXRpc3RpY3MgcnVuIHAwLjAgdG8gcDEwMC4gT25seSB0aGUgcE4gZm9ybSBpcyBjaGVja2VkOyBvdGhlclxcbiMgZXh0ZW5kZWQgZm9ybXMgKHRtLCB3bSwgdGMsIHRzLCAuLi4pIGhhdmUgdGhlaXIgb3duIGdyYW1tYXJzIGFuZCB3ZXJlIG5vdFxcbiMgbWVhc3VyZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLWV4dGVuZGVkLXN0YXRpc3RpY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTdGF0aXN0aWNcXFwiLFxcblxcdHNwcmludGYoXFxcIkV4dGVuZGVkU3RhdGlzdGljICclcycgaXMgYmV5b25kIHAxMDA7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgdmFsdWUgJXMgZm9yIHBhcmFtZXRlciBFeHRlbmRlZFN0YXRpc3RpYyBpcyBub3Qgc3VwcG9ydGVkLlxcXFxcXFwiXFxcIiwgW3MsIHNdKSxcXG5cXHRcXFwiVXNlIGEgcGVyY2VudGlsZSBiZXR3ZWVuIHAwLjAgYW5kIHAxMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbW9uaXRvcmluZy9jbG91ZHdhdGNoX2NvbmNlcHRzLmh0bWwjUGVyY2VudGlsZXNcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTdGF0aXN0aWNcXFwiKVxcblxcdGlzX3N0cmluZyhzKVxcblxcdHN0YXJ0c3dpdGgocywgXFxcInBcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHN1YnN0cmluZyhzLCAxLCBjb3VudChzKSAtIDEpKVxcblxcdG4gPiAxMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1uYW1lc3BhY2UtYXNjaWlcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1ldHJpYyBuYW1lc3BhY2VzIG11c3Qgbm90IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLW5hbWVzcGFjZS1hc2NpaVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTmFtZXNwYWNlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOYW1lc3BhY2UgJyVzJyBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVyczsgQ2xvdWRXYXRjaCByZWplY3RzIHRoZSBhbGFybSB3aXRoIFxcXFxcXFwiTmFtZXNwYWNlIG11c3Qgbm90IGNvbnRhaW4gTm9uLUFTQ0lJIGNoYXJhY3RlcnMuXFxcXFxcXCJcXFwiLCBbbnNdKSxcXG5cXHRcXFwiVXNlIEFTQ0lJIG9ubHkgaW4gdGhlIG1ldHJpYyBuYW1lc3BhY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRNZXRyaWNBbGFybS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZFdhdGNoOjpBbGFybVxcXCIpXFxuXFx0bnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lc3BhY2VcXFwiKVxcblxcdGlzX3N0cmluZyhucylcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bXFxcXHgwMC1cXFxceDdmXSokYCwgbnMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWR3YXRjaFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFeHByZXNzaW9uIGFuZCBNZXRyaWNTdGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUgcGVyIHF1ZXJ5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgcXVlcnkgZW50cnkgaXMgZWl0aGVyIGEgbWF0aCBleHByZXNzaW9uIG9yIGEgbWV0cmljIGZldGNoLCBuZXZlciBib3RoLlxcbiMgVGhlIHNwZWNpZnktbmVpdGhlciBzaGFwZSBmYWlscyB0b28sIGJ1dCB3aXRoIGFuIHVucmVsYXRlZCBlcnJvciAoXFxcIlBlcmlvZFxcbiMgbXVzdCBub3QgYmUgbnVsbFxcXCIsIGJlbmNoIHcwM2IpIOKAlCBzbyBvbmx5IHRoZSBib3RoLXNldCBkaXJlY3Rpb24gaXMgY2xhaW1lZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3Vkd2F0Y2gtbWV0cmljLXF1ZXJ5LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNzLiVkXFxcIiwgW3EuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJNZXRyaWMgcXVlcnkgJyVzJyBzZXRzIGJvdGggRXhwcmVzc2lvbiBhbmQgTWV0cmljU3RhdDsgUHV0TWV0cmljQWxhcm0gZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXJzIE1ldHJpY0RhdGFRdWVyeSBFeHByZXNzaW9uIGFuZCBNZXRyaWNTdGF0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIHlvdSBoYXZlIHNwZWNpZmllZCBib3RoLlxcXFxcXFwiXFxcIiwgW3FpZF0pLFxcblxcdFxcXCJLZWVwIHRoZSBFeHByZXNzaW9uIGFuZCBkcm9wIE1ldHJpY1N0YXQgKGZldGNoIHRoZSBpbnB1dHMgaW4gc2VwYXJhdGUgcXVlcmllcyksIG9yIHZpY2UgdmVyc2FcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3Vkd2F0Y2gtYWxhcm0tbWV0cmljZGF0YXF1ZXJ5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKVxcblxcdGlzX29iamVjdChxLnZhbHVlKVxcblxcdG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIkV4cHJlc3Npb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChxLnZhbHVlLCBcXFwiTWV0cmljU3RhdFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRxaWQgOj0gb2JqZWN0LmdldChxLnZhbHVlLCBcXFwiSWRcXFwiLCBcXFwiPHF1ZXJ5PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWR3YXRjaC1tZXRyaWMtcXVlcnktcmV0dXJuZGF0YVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3Vkd2F0Y2hcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhhY3RseSBvbmUgbWV0cmljIHF1ZXJ5IG11c3QgcmV0dXJuIGRhdGFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEFuIGFsYXJtIG9uIGEgTWV0cmljcyBhcnJheSBuZWVkcyBleGFjdGx5IG9uZSBxdWVyeSByZXR1cm5pbmcgZGF0YS5cXG4jIFJldHVybkRhdGEgZGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIGFic2VudCAoYmVuY2ggdzA0YiksIGFuZCBleHBsaWNpdCBmYWxzZVxcbiMgZXZlcnl3aGVyZSBpcyByZWplY3RlZCB0b28gKHcwNGMpLiBBIHF1ZXJ5IHdob3NlIFJldHVybkRhdGEgaXMgYW5cXG4jIHVucmVzb2x2YWJsZSBpbnRyaW5zaWMgbWFrZXMgdGhlIGNvdW50IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9jd21xcl9jb3VudGFibGUocSkgaWYgb2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXG5fcGZfY3dtcXJfY291bnRhYmxlKHEpIGlmIGlzX2Jvb2xlYW4ob2JqZWN0LmdldChxLCBcXFwiUmV0dXJuRGF0YVxcXCIsIG51bGwpKVxcblxcbl9wZl9jd21xcl9yZXR1cm5zKHEpIGlmIG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCB0cnVlKSA9PSB0cnVlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZHdhdGNoLW1ldHJpYy1xdWVyeS1yZXR1cm5kYXRhXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZXRyaWNzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCBvZiB0aGUgbWV0cmljIHF1ZXJpZXMgcmV0dXJuIGRhdGEgKFJldHVybkRhdGEgZGVmYXVsdHMgdG8gdHJ1ZSk7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJFeGFjdGx5IG9uZSBlbGVtZW50IG9mIHRoZSBtZXRyaWNzIGxpc3Qgc2hvdWxkIHJldHVybiBkYXRhLlxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFJldHVybkRhdGE6IGZhbHNlIG9uIGV2ZXJ5IHF1ZXJ5IGV4Y2VwdCB0aGUgb25lIHRoZSBhbGFybSBzaG91bGQgd2F0Y2hcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3Vkd2F0Y2gtYWxhcm0tbWV0cmljZGF0YXF1ZXJ5Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkV2F0Y2g6OkFsYXJtXFxcIilcXG5cXHRpdGVtcyA6PSBbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBxIGluIGl0ZW1zIHtcXG5cXHRcXHRpc19vYmplY3QocS52YWx1ZSlcXG5cXHRcXHRfcGZfY3dtcXJfY291bnRhYmxlKHEudmFsdWUpXFxuXFx0fVxcblxcdG4gOj0gY291bnQoW3EgfCBzb21lIHEgaW4gaXRlbXM7IF9wZl9jd21xcl9yZXR1cm5zKHEudmFsdWUpXSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZHdhdGNoLXRocmVzaG9sZC1tZXRyaWMtaWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZHdhdGNoXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRocmVzaG9sZE1ldHJpY0lkIG11c3QgbWF0Y2ggYSBtZXRyaWMgcXVlcnkgdGhhdCByZXR1cm5zIGRhdGFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1hdGNoaW5nIG1lYW5zIElkIGVxdWFsaXR5IEFORCBlZmZlY3RpdmUgUmV0dXJuRGF0YSB0cnVlIChkZWZhdWx0IHRydWUsXFxuIyBiZW5jaCB3MDRiKTsgdzEyIHByb3ZlZCBhbiBJZCBtYXRjaCB3aXRoIFJldHVybkRhdGEgZmFsc2UgZG9lcyBub3QgY291bnQuXFxuIyBPbmx5IG4gPT0gMCBmaXJlcyAtIHRoZSBkdXBsaWNhdGUtbWF0Y2ggc2lkZSBpcyB1bmJlbmNoZWQuIFF1ZXJpZXMgd2l0aFxcbiMgdW5yZXNvbHZhYmxlIElkL1JldHVybkRhdGEgbWFrZSB0aGUgY291bnQgdW5rbm93YWJsZSwgc28gdGhlIHJ1bGUgc2tpcHMuXFxuX3BmX2N3dG1pX2NvdW50YWJsZShxKSBpZiBvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcbl9wZl9jd3RtaV9jb3VudGFibGUocSkgaWYgaXNfYm9vbGVhbihvYmplY3QuZ2V0KHEsIFxcXCJSZXR1cm5EYXRhXFxcIiwgbnVsbCkpXFxuXFxuX3BmX2N3dG1pX21hdGNoZXMocSwgdG1pZCkgaWYge1xcblxcdG9iamVjdC5nZXQocSwgXFxcIklkXFxcIiwgbnVsbCkgPT0gdG1pZFxcblxcdG9iamVjdC5nZXQocSwgXFxcIlJldHVybkRhdGFcXFwiLCB0cnVlKSA9PSB0cnVlXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWR3YXRjaC10aHJlc2hvbGQtbWV0cmljLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRNZXRyaWNJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTm8gbWV0cmljIHF1ZXJ5IHdpdGggSWQgJyVzJyByZXR1cm5zIGRhdGE7IFB1dE1ldHJpY0FsYXJtIGZhaWxzIHdpdGggXFxcXFxcXCJNZXRyaWNzIGxpc3QgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG1ldHJpYyBtYXRjaGluZyB0aGUgVGhyZXNob2xkTWV0cmljSWQgcGFyYW1ldGVyXFxcXFxcXCJcXFwiLCBbdG1pZF0pLFxcblxcdFxcXCJQb2ludCBUaHJlc2hvbGRNZXRyaWNJZCBhdCBhIHF1ZXJ5IHdob3NlIFJldHVybkRhdGEgaXMgdHJ1ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNsb3Vkd2F0Y2gtYWxhcm0uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRXYXRjaDo6QWxhcm1cXFwiKVxcblxcdHRtaWQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJlc2hvbGRNZXRyaWNJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHRtaWQpXFxuXFx0aXRlbXMgOj0gW3EgfCBzb21lIHEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY3NcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgcSBpbiBpdGVtcyB7XFxuXFx0XFx0aXNfb2JqZWN0KHEudmFsdWUpXFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQocS52YWx1ZSwgXFxcIklkXFxcIiwgbnVsbCkpXFxuXFx0XFx0X3BmX2N3dG1pX2NvdW50YWJsZShxLnZhbHVlKVxcblxcdH1cXG5cXHRjb3VudChbcSB8IHNvbWUgcSBpbiBpdGVtczsgX3BmX2N3dG1pX21hdGNoZXMocS52YWx1ZSwgdG1pZCldKSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1hbGlhcy11c2VybmFtZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFsaWFzQXR0cmlidXRlcyBhbmQgVXNlcm5hbWVBdHRyaWJ1dGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEtleSBwcmVzZW5jZSBpcyB0aGUgdmlvbGF0aW9uIHJlZ2FyZGxlc3Mgb2YgdmFsdWVzLCBzbyB0aGlzIGNoZWNrcyB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCBkaXJlY3RseSAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2NvZ2F1ZV9zZXQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1hbGlhcy11c2VybmFtZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlVzZXJuYW1lQXR0cmlidXRlc1xcXCIsXFxuXFx0XFxcIkJvdGggQWxpYXNBdHRyaWJ1dGVzIGFuZCBVc2VybmFtZUF0dHJpYnV0ZXMgYXJlIHNldDsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJPbmx5IG9uZSBvZiB0aGUgYWxpYXNBdHRyaWJ1dGVzIG9yIHVzZXJuYW1lQXR0cmlidXRlcyBjYW4gYmUgc2V0IGluIGEgVXNlciBwb29sLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiS2VlcCBvbmU6IGFsaWFzZXMgZm9yIHNpZ24taW4gYWx0ZXJuYXRpdmVzLCBvciB1c2VybmFtZSBhdHRyaWJ1dGVzIHRvIHJlcGxhY2UgdXNlcm5hbWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0X3BmX2NvZ2F1ZV9zZXQobmFtZSwgXFxcIkFsaWFzQXR0cmlidXRlc1xcXCIpXFxuXFx0X3BmX2NvZ2F1ZV9zZXQobmFtZSwgXFxcIlVzZXJuYW1lQXR0cmlidXRlc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtY3JlZGVudGlhbHMtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjbGllbnRfY3JlZGVudGlhbHMgY2Fubm90IGNvbWJpbmUgd2l0aCBjb2RlIG9yIGltcGxpY2l0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBNYWNoaW5lLXRvLW1hY2hpbmUgYW5kIHVzZXItZmFjaW5nIGdyYW50cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIG9uIG9uZVxcbiMgY2xpZW50Llxcbl9wZl9jb2djY2VfZmxvd3MobmFtZSkgOj0ge2YudmFsdWUgfCBzb21lIGYgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIil9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBbGxvd2VkT0F1dGhGbG93cyBjb21iaW5lcyBjbGllbnRfY3JlZGVudGlhbHMgd2l0aCAnJXMnOyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgY2FuIG5vdCBiZSBzZWxlY3RlZCBhbG9uZyB3aXRoIGNvZGUgZmxvdyBvciBpbXBsaWNpdCBmbG93LlxcXFxcXFwiXFxcIiwgW290aGVyXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBmbG93cyBhY3Jvc3Mgc2VwYXJhdGUgdXNlciBwb29sIGNsaWVudHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRmbG93cyA6PSBfcGZfY29nY2NlX2Zsb3dzKG5hbWUpXFxuXFx0XFxcImNsaWVudF9jcmVkZW50aWFsc1xcXCIgaW4gZmxvd3NcXG5cXHRzb21lIG90aGVyIGluIHtcXFwiY29kZVxcXCIsIFxcXCJpbXBsaWNpdFxcXCJ9XFxuXFx0b3RoZXIgaW4gZmxvd3NcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1zZWNyZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcImNsaWVudF9jcmVkZW50aWFscyBuZWVkcyBhIGNsaWVudCBzZWNyZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1hY2hpbmUtdG8tbWFjaGluZSBhdXRoIGlzIHNlY3JldC1iYXNlZC4gR2VuZXJhdGVTZWNyZXQgZGVmYXVsdHMgdG9cXG4jIGZhbHNlLCBzbyBib3RoIHRoZSBsaXRlcmFsIGZhbHNlIGFuZCB0aGUgYWJzZW50IGtleSBsZWF2ZSB0aGUgY2xpZW50XFxuIyBzZWNyZXRsZXNzLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZVxcbiMgQUdFTlRTLm1kKS5cXG5fcGZfY29nY2NzX25vX3NlY3JldChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkdlbmVyYXRlU2VjcmV0XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfY29nY2NzX25vX3NlY3JldChuYW1lKSBpZiBjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlbmVyYXRlU2VjcmV0XFxcIikpID09IGZhbHNlXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWNsaWVudC1jcmVkZW50aWFscy1zZWNyZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkdlbmVyYXRlU2VjcmV0XFxcIixcXG5cXHRcXFwiY2xpZW50X2NyZWRlbnRpYWxzIGZsb3cgb24gYSBjbGllbnQgd2l0aG91dCBhIHNlY3JldDsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcImNsaWVudF9jcmVkZW50aWFscyBmbG93IGNhbiBub3QgYmUgc2VsZWN0ZWQgaWYgY2xpZW50IGRvZXMgbm90IGhhdmUgYSBjbGllbnQgc2VjcmV0LlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IEdlbmVyYXRlU2VjcmV0OiB0cnVlIG9uIHRoaXMgY2xpZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0c29tZSBmIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1xcXCIpXFxuXFx0Zi52YWx1ZSA9PSBcXFwiY2xpZW50X2NyZWRlbnRpYWxzXFxcIlxcblxcdF9wZl9jb2djY3Nfbm9fc2VjcmV0KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1jbGllbnQtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVXNlciBwb29sIGNsaWVudCBuYW1lcyBhbGxvdyBvbmx5IHdvcmQgY2hhcmFjdGVycywgc3BhY2VzIGFuZCArPSwuQC1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tY2xpZW50LW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNsaWVudE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNsaWVudE5hbWUgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgd29yZCBjaGFyYWN0ZXJzLCBzcGFjZXMgYW5kICsgPSAsIC4gQCAtXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NvZ25pdG8tdXNlci1pZGVudGl0eS1wb29scy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVVc2VyUG9vbENsaWVudC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0diA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNsaWVudE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXltBLVphLXowLTlfIFxcXFx0Kz0sLkAtXSskYCwgdilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLWRvbWFpbi1yZXNlcnZlZC13b3JkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEb21haW4gcHJlZml4ZXMgY2Fubm90IGNvbnRhaW4gcmVzZXJ2ZWQgd29yZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBzZXJ2aWNlIHJlZnVzZXMgcHJlZml4ZXMgd2l0aCBhIHJlc2VydmVkIHdvcmQgYXMgYSBoeXBoZW4tZGVsaW1pdGVkXFxuIyB0b2tlbiwgd2l0aCBvbmx5IGEgZ2VuZXJpYyBlcnJvci4gUGlubmVkIGJ5IGNvbnRyb2xsZWQgcGFpcnM6IC1hd3MtIC9cXG4jIC1hbWF6b24tIC8gLWNvZ25pdG8tIGZhaWwgd2hpbGUgLWF3c29tZS0gZGVwbG95cyAoYmVuY2ggYzA3LWMwN2UpLCBzb1xcbiMgYSB0b2tlbiBtZXJlbHkgY29udGFpbmluZyBhIHdvcmQgc3RheXMgbGVnYWwuXFxuX3BmX2NvZ2Ryd193b3JkcyA6PSB7XFxcImF3c1xcXCIsIFxcXCJhbWF6b25cXFwiLCBcXFwiY29nbml0b1xcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLWRvbWFpbi1yZXNlcnZlZC13b3JkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Eb21haW5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRvbWFpbiBwcmVmaXggJyVzJyBoYXMgdGhlIHJlc2VydmVkIHdvcmQgJyVzJyBhcyBhIHNlZ21lbnQ7IHRoZSBkb21haW4gY3JlYXRlIGZhaWxzIHdpdGggdGhlIGdlbmVyaWMgXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IEFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cXFxcXFxcIlxcXCIsIFtkLCB3XSksXFxuXFx0XFxcIlJlbmFtZSBvciBtZXJnZSB0aGF0IHNlZ21lbnQgKGUuZy4gbXlhcHAtYXV0aCk7IHdvcmRzIG1lcmVseSBpbnNpZGUgYSBsb25nZXIgc2VnbWVudCBhcmUgZmluZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jb2duaXRvL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jb2duaXRvLXVzZXItcG9vbHMtYXNzaWduLWRvbWFpbi1wcmVmaXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xEb21haW5cXFwiKVxcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Eb21haW5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdHNvbWUgdyBpbiBfcGZfY29nZHJ3X3dvcmRzXFxuXFx0dyBpbiBzcGxpdChkLCBcXFwiLVxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1tZmEtc21zLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTUZBIHdpdGhvdXQgYW55IGZhY3RvciBjb25maWd1cmF0aW9uIGNhbm5vdCBkZXBsb3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFdpdGggTUZBIG9uIGFuZCBubyBFbmFibGVkTWZhcywgQ29nbml0byBmYWxscyBiYWNrIHRvIFNNUyBNRkEsIHdoaWNoXFxuIyBuZWVkcyBTbXNDb25maWd1cmF0aW9uLiBBIHBvb2wgZGVjbGFyaW5nIEVuYWJsZWRNZmFzIChlLmcuIFRPVFAgb25seSxcXG4jIGJlbmNoIGMwNWIpIGlzIHZhbGlkIHdpdGhvdXQgU01TLCBzbyBpdHMgcHJlc2VuY2UgbXV0ZXMgdGhlIHJ1bGUuXFxuIyBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dtc2NfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tbWZhLXNtcy1jb25maWdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1mYUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIk1mYUNvbmZpZ3VyYXRpb24gJyVzJyB3aXRoIG5vIFNtc0NvbmZpZ3VyYXRpb24gYW5kIG5vIEVuYWJsZWRNZmFzOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlNNUyBjb25maWd1cmF0aW9uIGFuZCBBdXRvIHZlcmlmaWNhdGlvbiBmb3IgcGhvbmVfbnVtYmVyIGFyZSByZXF1aXJlZCB3aGVuIE1GQSBpcyByZXF1aXJlZC9vcHRpb25hbFxcXFxcXFwiXFxcIiwgW21mYV0pLFxcblxcdFxcXCJDb25maWd1cmUgU21zQ29uZmlndXJhdGlvbiAoU01TIE1GQSksIG9yIHBpY2sgZmFjdG9ycyB2aWEgRW5hYmxlZE1mYXMgKGUuZy4gU09GVFdBUkVfVE9LRU5fTUZBKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcXFwiKVxcblxcdG1mYSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1mYUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdG1mYSBpbiB7XFxcIk9OXFxcIiwgXFxcIk9QVElPTkFMXFxcIn1cXG5cXHRfcGZfY29nbXNjX2Fic2VudChuYW1lLCBcXFwiU21zQ29uZmlndXJhdGlvblxcXCIpXFxuXFx0X3BmX2NvZ21zY19hYnNlbnQobmFtZSwgXFxcIkVuYWJsZWRNZmFzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLW9hdXRoLWNhbGxiYWNrLXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJjb2RlIGFuZCBpbXBsaWNpdCBPQXV0aCBmbG93cyBuZWVkIENhbGxiYWNrVVJMc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVkaXJlY3QtYmFzZWQgZmxvd3MgbmVlZCBzb21ld2hlcmUgdG8gcmVkaXJlY3QgdG8uIEFic2VuY2UgaXMgcHJvdmVuXFxuIyBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9jb2dvY3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tb2F1dGgtY2FsbGJhY2stcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNhbGxiYWNrVVJMc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3MgaGFzICclcycgYnV0IENhbGxiYWNrVVJMcyBpcyBub3Qgc2V0OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQ2FsbGJhY2tVcmxzIGNhbiBub3QgYmUgZW1wdHkgd2hlbiBjb2RlIGZsb3cgb3IgaW1wbGljaXQgZmxvdyBpcyBzZWxlY3RlZFxcXFxcXFwiXFxcIiwgW2YudmFsdWVdKSxcXG5cXHRcXFwiQWRkIGF0IGxlYXN0IG9uZSBjYWxsYmFjayBVUkxcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiKSkgPT0gdHJ1ZVxcblxcdHNvbWUgZiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiKVxcblxcdGYudmFsdWUgaW4ge1xcXCJjb2RlXFxcIiwgXFxcImltcGxpY2l0XFxcIn1cXG5cXHRfcGZfY29nb2NyX2Fic2VudChuYW1lLCBcXFwiQ2FsbGJhY2tVUkxzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLW9hdXRoLWZsb3dzLXNjb3Blcy1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5hYmxpbmcgT0F1dGggcmVxdWlyZXMgYm90aCBBbGxvd2VkT0F1dGhGbG93cyBhbmQgQWxsb3dlZE9BdXRoU2NvcGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCb3RoIGRpcmVjdGlvbnMgZGVwbG95LXZlcmlmaWVkLiBBYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZVxcbiMgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfY29nb2ZzX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ29mc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWNvZ25pdG8tdXNlcnBvb2xjbGllbnQuaHRtbFxcXCJcXG5cXG5fcGZfY29nb2ZzX21zZyA6PSBcXFwidGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFsbG93ZWRPQXV0aEZsb3dzIGFuZCBBbGxvd2VkT0F1dGhTY29wZXMgYXJlIHJlcXVpcmVkIGlmIHVzZXIgcG9vbCBjbGllbnQgaXMgYWxsb3dlZCB0byB1c2UgT0F1dGggZmxvd3MuXFxcXFxcXCJcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLW9hdXRoLWZsb3dzLXNjb3Blcy1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWxsb3dlZE9BdXRoRmxvd3NcXFwiLFxcblxcdHNwcmludGYoXFxcIkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnQgaXMgdHJ1ZSBidXQgQWxsb3dlZE9BdXRoRmxvd3MgaXMgbm90IHNldDsgJXNcXFwiLCBbX3BmX2NvZ29mc19tc2ddKSxcXG5cXHRcXFwiU2V0IEFsbG93ZWRPQXV0aEZsb3dzLCBvciBkcm9wIEFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiLFxcblxcdF9wZl9jb2dvZnNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aEZsb3dzVXNlclBvb2xDbGllbnRcXFwiKSkgPT0gdHJ1ZVxcblxcdF9wZl9jb2dvZnNfYWJzZW50KG5hbWUsIFxcXCJBbGxvd2VkT0F1dGhGbG93c1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1vYXV0aC1mbG93cy1zY29wZXMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsbG93ZWRPQXV0aFNjb3Blc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWxsb3dlZE9BdXRoRmxvd3NVc2VyUG9vbENsaWVudCBpcyB0cnVlIGJ1dCBBbGxvd2VkT0F1dGhTY29wZXMgaXMgbm90IHNldDsgJXNcXFwiLCBbX3BmX2NvZ29mc19tc2ddKSxcXG5cXHRcXFwiU2V0IEFsbG93ZWRPQXV0aFNjb3Blcywgb3IgZHJvcCBBbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIixcXG5cXHRfcGZfY29nb2ZzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGxvd2VkT0F1dGhGbG93c1VzZXJQb29sQ2xpZW50XFxcIikpID09IHRydWVcXG5cXHRfcGZfY29nb2ZzX2Fic2VudChuYW1lLCBcXFwiQWxsb3dlZE9BdXRoU2NvcGVzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXBhc3N3b3JkLW1pbi1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBhc3N3b3JkUG9saWN5IE1pbmltdW1MZW5ndGggcnVucyA2IHRvIDk5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIHR5cGVzIE1pbmltdW1MZW5ndGggYXMgYSBiYXJlIGludGVnZXI7IGJvdGggYm91bmRzXFxuIyBhcmUgZGVwbG95LXZlcmlmaWVkLlxcbl9wZl9jb2dwbWxfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNvZ25pdG8tdXNlcnBvb2wtcGFzc3dvcmRwb2xpY3kuaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcGFzc3dvcmQtbWluLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWNpZXMuUGFzc3dvcmRQb2xpY3kuTWluaW11bUxlbmd0aFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUxlbmd0aCAldiBpcyB1bmRlciB0aGUgZmxvb3I7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSB2YWx1ZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gNlxcXFxcXFwiXFxcIiwgW21sXSksXFxuXFx0XFxcIlVzZSBhIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIGJldHdlZW4gNiBhbmQgOTlcXFwiLFxcblxcdF9wZl9jb2dwbWxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtbCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIikpXFxuXFx0bWwgPCA2XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1wYXNzd29yZC1taW4tbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNaW5pbXVtTGVuZ3RoICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIHBvb2wgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA5OVxcXFxcXFwiXFxcIiwgW21sXSksXFxuXFx0XFxcIlVzZSBhIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIGJldHdlZW4gNiBhbmQgOTlcXFwiLFxcblxcdF9wZl9jb2dwbWxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRtbCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llcy5QYXNzd29yZFBvbGljeS5NaW5pbXVtTGVuZ3RoXFxcIikpXFxuXFx0bWwgPiA5OVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tcmVjb3ZlcnktZHVwbGljYXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWNvdmVyeSBtZWNoYW5pc21zIGNhbm5vdCByZXBlYXQgcHJpb3JpdGllcyBvciBuYW1lc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGFpcndpc2UgZHVwbGljYXRlIGNoZWNrIG9uIHRoZSBtZWNoYW5pc20gbGlzdDsgdGhlIHNlcnZpY2UgZXJyb3IgbmFtZXNcXG4jIGJvdGggZHVwbGljYXRlIHByaW9yaXRpZXMgYW5kIGR1cGxpY2F0ZSBtZWNoYW5pc20gbmFtZXMuXFxuX3BmX2NvZ3JkcF9kdXAoYSwgYikgaWYge1xcblxcdHBhIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGEsIFxcXCJQcmlvcml0eVxcXCIsIC0xKSlcXG5cXHRwYiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLCBcXFwiUHJpb3JpdHlcXFwiLCAtMikpXFxuXFx0cGEgPT0gcGJcXG59XFxuXFxuX3BmX2NvZ3JkcF9kdXAoYSwgYikgaWYge1xcblxcdG4gOj0gb2JqZWN0LmdldChhLCBcXFwiTmFtZVxcXCIsIFxcXCJfX3BmX2FcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG4gPT0gb2JqZWN0LmdldChiLCBcXFwiTmFtZVxcXCIsIFxcXCJfX3BmX2JcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tcmVjb3ZlcnktZHVwbGljYXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zLiVkXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRcXFwiUmVjb3ZlcnkgbWVjaGFuaXNtcyByZXBlYXQgYSBwcmlvcml0eSBvciBuYW1lOyB0aGUgcG9vbCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY291bnQgUmVjb3ZlcnkgU2V0dGluZyBjYW5ub3QgaGF2ZSBkdXBsaWNhdGUgcHJpb3JpdGllcyBvciByZWNvdmVyeSBtZWNoYW5pc21zLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBlYWNoIHJlY292ZXJ5IG1lY2hhbmlzbSBhIGRpc3RpbmN0IHByaW9yaXR5IGFuZCBuYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXJlY292ZXJ5b3B0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY291bnRSZWNvdmVyeVNldHRpbmcuUmVjb3ZlcnlNZWNoYW5pc21zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdGlzX29iamVjdChhLnZhbHVlKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdF9wZl9jb2dyZHBfZHVwKGEudmFsdWUsIGIudmFsdWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY29nbml0by1zY2hlbWEtYXR0ci1sZW5ndGgtb3JkZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNjaGVtYSBhdHRyaWJ1dGUgTWF4TGVuZ3RoIGNhbm5vdCB1bmRlcmN1dCBNaW5MZW5ndGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBjb25zdHJhaW50cyBhcmUgdHlwZWQgYXMgc3RyaW5ncywgc28gbm8gc2NoZW1hIGxheWVyIGNhbiBjb21wYXJlXFxuIyB0aGVtIG51bWVyaWNhbGx5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by1zY2hlbWEtYXR0ci1sZW5ndGgtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuU2NoZW1hLiVkLlN0cmluZ0F0dHJpYnV0ZUNvbnN0cmFpbnRzXFxcIiwgW2F0dC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGhhcyBNaW5MZW5ndGggJXYgb3ZlciBNYXhMZW5ndGggJXY7IHRoZSBwb29sIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiY2Fubm90IGhhdmUgYSBtYXggbGVuZ3RoIHNob3J0ZXIgdGhhbiBpdCdzIG1pbiBsZW5ndGhcXFxcXFxcIlxcXCIsIFtvYmplY3QuZ2V0KGF0dC52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPGF0dHI+XFxcIiksIG1uLCBteF0pLFxcblxcdFxcXCJLZWVwIE1pbkxlbmd0aCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4TGVuZ3RoXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jb2duaXRvLXVzZXJwb29sLXNjaGVtYWF0dHJpYnV0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbFxcXCIpXFxuXFx0c29tZSBhdHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVtYVxcXCIpXFxuXFx0aXNfb2JqZWN0KGF0dC52YWx1ZSlcXG5cXHRzYWMgOj0gb2JqZWN0LmdldChhdHQudmFsdWUsIFxcXCJTdHJpbmdBdHRyaWJ1dGVDb25zdHJhaW50c1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzYWMpXFxuXFx0bW5fcmF3IDo9IG9iamVjdC5nZXQoc2FjLCBcXFwiTWluTGVuZ3RoXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRtbl9yYXcgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG14X3JhdyA6PSBvYmplY3QuZ2V0KHNhYywgXFxcIk1heExlbmd0aFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0bXhfcmF3ICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRtbiA6PSB0b19udW1iZXIobW5fcmF3KVxcblxcdG14IDo9IHRvX251bWJlcihteF9yYXcpXFxuXFx0bW4gPiBteFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tdG9rZW4tZXhwaXJhdGlvbi1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNvZ25pdG9cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWNjZXNzIGFuZCBpZCB0b2tlbnMgY2Fubm90IG91dGxpdmUgdGhlIHJlZnJlc2ggdG9rZW5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIENyb3NzLXByb3BlcnR5IGluZXF1YWxpdHkgYmV0d2VlbiBkaWZmZXJlbnRseS11bml0ZWQgZHVyYXRpb25zIC0gb25seVxcbiMgY29tcGFyYWJsZSBhZnRlciBub3JtYWxpemluZyB0byBzZWNvbmRzLiBVbml0IGRlZmF1bHRzIGFyZSB0aGVcXG4jIGRlcGxveS12ZXJpZmllZCBob3Vycy9ob3Vycy9kYXlzLlxcbl9wZl9jb2d0ZW9fdW5pdF9zZWNzIDo9IHtcXFwic2Vjb25kc1xcXCI6IDEsIFxcXCJtaW51dGVzXFxcIjogNjAsIFxcXCJob3Vyc1xcXCI6IDM2MDAsIFxcXCJkYXlzXFxcIjogODY0MDB9XFxuXFxuX3BmX2NvZ3Rlb191bml0KG5hbWUsIHVuaXRLZXksIF8pIDo9IHUgaWYge1xcblxcdHUgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRva2VuVmFsaWRpdHlVbml0cy4lc1xcXCIsIFt1bml0S2V5XSkpXFxuXFx0aXNfc3RyaW5nKHUpXFxufVxcblxcbl9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBkZWZVbml0KSA6PSBkZWZVbml0IGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHR0dnUgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlRva2VuVmFsaWRpdHlVbml0c1xcXCIsIHt9KVxcblxcdGlzX29iamVjdCh0dnUpXFxuXFx0b2JqZWN0LmdldCh0dnUsIHVuaXRLZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIHZhbEtleSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gcyBpZiB7XFxuXFx0diA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3ZhbEtleV0pKSlcXG5cXHR1IDo9IF9wZl9jb2d0ZW9fdW5pdChuYW1lLCB1bml0S2V5LCBkZWZVbml0KVxcblxcdHMgOj0gdiAqIF9wZl9jb2d0ZW9fdW5pdF9zZWNzW3VdXFxufVxcblxcbl9wZl9jb2d0ZW9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1jb2duaXRvLXVzZXJwb29sY2xpZW50Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXRva2VuLWV4cGlyYXRpb24tb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkFjY2VzcyB0b2tlbiB2YWxpZGl0eSAoJXYgcykgZXhjZWVkcyByZWZyZXNoIHRva2VuIHZhbGlkaXR5ICgldiBzKTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBhbmQgSWQgVG9rZW4gZXhwaXJhdGlvbiB0aW1lcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWZyZXNoIHRva2VuIGV4cGlyYXRpb24gdGltZXMuXFxcXFxcXCJcXFwiLCBbYSwgcl0pLFxcblxcdFxcXCJTaG9ydGVuIHRoZSBhY2Nlc3MgdG9rZW4gdmFsaWRpdHkgb3IgbGVuZ3RoZW4gdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHlcXFwiLFxcblxcdF9wZl9jb2d0ZW9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRhIDo9IF9wZl9jb2d0ZW9fc2VjcyhuYW1lLCBcXFwiQWNjZXNzVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJBY2Nlc3NUb2tlblxcXCIsIFxcXCJob3Vyc1xcXCIpXFxuXFx0ciA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIiwgXFxcIlJlZnJlc2hUb2tlblxcXCIsIFxcXCJkYXlzXFxcIilcXG5cXHRhID4gclxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tZXhwaXJhdGlvbi1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJZCB0b2tlbiB2YWxpZGl0eSAoJXYgcykgZXhjZWVkcyByZWZyZXNoIHRva2VuIHZhbGlkaXR5ICgldiBzKTsgdGhlIGNsaWVudCBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFjY2VzcyBhbmQgSWQgVG9rZW4gZXhwaXJhdGlvbiB0aW1lcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byByZWZyZXNoIHRva2VuIGV4cGlyYXRpb24gdGltZXMuXFxcXFxcXCJcXFwiLCBbaSwgcl0pLFxcblxcdFxcXCJTaG9ydGVuIHRoZSBpZCB0b2tlbiB2YWxpZGl0eSBvciBsZW5ndGhlbiB0aGUgcmVmcmVzaCB0b2tlbiB2YWxpZGl0eVxcXCIsXFxuXFx0X3BmX2NvZ3Rlb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdGkgOj0gX3BmX2NvZ3Rlb19zZWNzKG5hbWUsIFxcXCJJZFRva2VuVmFsaWRpdHlcXFwiLCBcXFwiSWRUb2tlblxcXCIsIFxcXCJob3Vyc1xcXCIpXFxuXFx0ciA6PSBfcGZfY29ndGVvX3NlY3MobmFtZSwgXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5XFxcIiwgXFxcIlJlZnJlc2hUb2tlblxcXCIsIFxcXCJkYXlzXFxcIilcXG5cXHRpID4gclxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJjb2duaXRvXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRva2VuIHZhbGlkaXR5IHJhbmdlcyBkZXBlbmQgb24gdG9rZW4gdHlwZSBhbmQgdW5pdFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNjaGVtYSB0eXBlcyB0aGUgdmFsaWRpdGllcyBhcyBiYXJlIGludGVnZXJzOyB0aGUgcmVhbCByYW5nZXMgYXJlXFxuIyBwZXIgdG9rZW4gdHlwZSBBTkQgdW5pdCAoYWNjZXNzL2lkOiA1IG1pbnV0ZXMtMSBkYXksIHJlZnJlc2g6IDYwXFxuIyBtaW51dGVzLTEwIHllYXJzKS4gVW5pdCBkZWZhdWx0cyAoaG91cnMvaG91cnMvZGF5cykgYXJlIGRlcGxveS12ZXJpZmllZC5cXG5fcGZfY29ndHZyX3VuaXRfc2VjcyA6PSB7XFxcInNlY29uZHNcXFwiOiAxLCBcXFwibWludXRlc1xcXCI6IDYwLCBcXFwiaG91cnNcXFwiOiAzNjAwLCBcXFwiZGF5c1xcXCI6IDg2NDAwfVxcblxcbl9wZl9jb2d0dnJfdW5pdChuYW1lLCB1bml0S2V5LCBfKSA6PSB1IGlmIHtcXG5cXHR1IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Ub2tlblZhbGlkaXR5VW5pdHMuJXNcXFwiLCBbdW5pdEtleV0pKVxcblxcdGlzX3N0cmluZyh1KVxcbn1cXG5cXG5fcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdCkgOj0gZGVmVW5pdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dHZ1IDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJUb2tlblZhbGlkaXR5VW5pdHNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QodHZ1KVxcblxcdG9iamVjdC5nZXQodHZ1LCB1bml0S2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9jb2d0dnJfc2VjcyhuYW1lLCB2YWxLZXksIHVuaXRLZXksIGRlZlVuaXQpIDo9IHMgaWYge1xcblxcdHYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFt2YWxLZXldKSkpXFxuXFx0dSA6PSBfcGZfY29ndHZyX3VuaXQobmFtZSwgdW5pdEtleSwgZGVmVW5pdClcXG5cXHRzIDo9IHYgKiBfcGZfY29ndHZyX3VuaXRfc2Vjc1t1XVxcbn1cXG5cXG5fcGZfY29ndHZyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtY29nbml0by11c2VycG9vbGNsaWVudC5odG1sXFxcIlxcblxcbl9wZl9jb2d0dnJfYWlfYmFkKHMpIGlmIHMgPCAzMDBcXG5cXG5fcGZfY29ndHZyX2FpX2JhZChzKSBpZiBzID4gODY0MDBcXG5cXG5fcGZfY29ndHZyX3J0X2JhZChzKSBpZiBzIDwgMzYwMFxcblxcbl9wZl9jb2d0dnJfcnRfYmFkKHMpIGlmIHMgPiAzMTUzNjAwMDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNvZ25pdG8tdG9rZW4tdmFsaWRpdHktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHkgd29ya3Mgb3V0IHRvICV2IHNlY29uZHMsIG91dHNpZGUgNSBtaW51dGVzLTEgZGF5OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSBhY2Nlc3MgdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA1IG1pbnV0ZXMgYW5kIDEgZGF5XFxcIixcXG5cXHRfcGZfY29ndHZyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDb2duaXRvOjpVc2VyUG9vbENsaWVudFxcXCIpXFxuXFx0cyA6PSBfcGZfY29ndHZyX3NlY3MobmFtZSwgXFxcIkFjY2Vzc1Rva2VuVmFsaWRpdHlcXFwiLCBcXFwiQWNjZXNzVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdF9wZl9jb2d0dnJfYWlfYmFkKHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi12YWxpZGl0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSWRUb2tlblZhbGlkaXR5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJZFRva2VuVmFsaWRpdHkgd29ya3Mgb3V0IHRvICV2IHNlY29uZHMsIG91dHNpZGUgNSBtaW51dGVzLTEgZGF5OyB0aGUgY2xpZW50IGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByYW5nZSBmb3IgdG9rZW4gdmFsaWRpdHkuXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJLZWVwIHRoZSBpZCB0b2tlbiB2YWxpZGl0eSBiZXR3ZWVuIDUgbWludXRlcyBhbmQgMSBkYXlcXFwiLFxcblxcdF9wZl9jb2d0dnJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sQ2xpZW50XFxcIilcXG5cXHRzIDo9IF9wZl9jb2d0dnJfc2VjcyhuYW1lLCBcXFwiSWRUb2tlblZhbGlkaXR5XFxcIiwgXFxcIklkVG9rZW5cXFwiLCBcXFwiaG91cnNcXFwiKVxcblxcdF9wZl9jb2d0dnJfYWlfYmFkKHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY29nbml0by10b2tlbi12YWxpZGl0eS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVmcmVzaFRva2VuVmFsaWRpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZnJlc2hUb2tlblZhbGlkaXR5IHdvcmtzIG91dCB0byAldiBzZWNvbmRzLCBvdXRzaWRlIDYwIG1pbnV0ZXMtMTAgeWVhcnM7IHRoZSBjbGllbnQgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJhbmdlIGZvciB0b2tlbiB2YWxpZGl0eS5cXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIktlZXAgdGhlIHJlZnJlc2ggdG9rZW4gdmFsaWRpdHkgYmV0d2VlbiA2MCBtaW51dGVzIGFuZCAxMCB5ZWFyc1xcXCIsXFxuXFx0X3BmX2NvZ3R2cl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q29nbml0bzo6VXNlclBvb2xDbGllbnRcXFwiKVxcblxcdHMgOj0gX3BmX2NvZ3R2cl9zZWNzKG5hbWUsIFxcXCJSZWZyZXNoVG9rZW5WYWxpZGl0eVxcXCIsIFxcXCJSZWZyZXNoVG9rZW5cXFwiLCBcXFwiZGF5c1xcXCIpXFxuXFx0X3BmX2NvZ3R2cl9ydF9iYWQocylcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jb2duaXRvLXVzZXItcG9vbC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY29nbml0b1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJVc2VyIHBvb2wgbmFtZXMgYWxsb3cgb25seSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKz0sLkAtXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jb2duaXRvLXVzZXItcG9vbC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Vc2VyUG9vbE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlVzZXJQb29sTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKyA9ICwgLiBAIC1cXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSB3b3JkIGNoYXJhY3RlcnMsIHNwYWNlcyBhbmQgKyA9ICwgLiBAIC1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by11c2VyLWlkZW50aXR5LXBvb2xzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVVzZXJQb29sLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNvZ25pdG86OlVzZXJQb29sXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVXNlclBvb2xOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XyBcXFxcdCs9LC5ALV0rJGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZSB1c2VkIGJ5IGEga2V5IHNjaGVtYVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoOiBldmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlXFxuIyB1c2VkIGJ5IHRoZSB0YWJsZSBrZXkgc2NoZW1hIG9yIGFuIGluZGV4IGtleSBzY2hlbWEuIFRoZSBlbmdpbmUncyBFMzAzOVxcbiMgY2hlY2tzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb25seSAoa2V5IGF0dHJpYnV0ZSBub3QgZGVmaW5lZCksIHNvIHRoZVxcbiMgY2xhc3NpYyBcXFwicmVtb3ZlZCBhIEdTSSwgbGVmdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25cXFwiIG1pc3Rha2Ugc2FpbHMgdGhyb3VnaC5cXG5cXG5fcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBwcm9wKSA6PSB7YSB8XFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VzZWQobmFtZSkgOj0gKChfcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSlcXG5cXG4jIEFueSB1bnJlc29sdmFibGUgQXR0cmlidXRlTmFtZSBpbiBhIGtleSBzY2hlbWEgbWVhbnMgdGhlIHVzZWQtc2V0IGlzXFxuIyBpbmNvbXBsZXRlLCBzbyB0aGUgcnVsZSBtdXN0IHN0YXkgc2lsZW50IHJhdGhlciB0aGFuIGd1ZXNzLlxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgaXMgZGVmaW5lZCBidXQgdXNlZCBieSBubyBrZXkgc2NoZW1hOyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMgd2l0aCBcXFxcXFxcIk51bWJlciBvZiBhdHRyaWJ1dGVzIGluIEtleVNjaGVtYSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIG51bWJlciBvZiBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgdW51c2VkIGRlZmluaXRpb24gKG5vbi1rZXkgYXR0cmlidXRlcyBzdWNoIGFzIGEgVFRMIGF0dHJpYnV0ZSBtdXN0IE5PVCBiZSBkZWNsYXJlZCksIG9yIGFkZCB0aGUgaW5kZXggdGhhdCB1c2VzIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRub3QgX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJhZHVfdXNlZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIEJpbGxpbmdNb2RlIChyZXF1aXJlZCBmb3IgUFJPVklTSU9ORUQsIGZvcmJpZGRlbiBmb3IgUEFZX1BFUl9SRVFVRVNUKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuX3BmX2RkYmJ0X2hhc19wdChuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiKSlcXG5cXG5fcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbiMgQmlsbGluZ01vZGUg44GM44Oq44OG44Op44OrIFxcXCJQUk9WSVNJT05FRFxcXCLjgIHjgb7jgZ/jga/mnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggUFJPVklTSU9ORUTvvInjgIJcXG4jIOODiOODvOOCr+ODs+WApO+8iFJlZiDnrYnvvInjga/liKTlrprjgavkvb/jgo/jgarjgYTvvIjoqqTmpJznn6XpmLLmraLvvInjgIJcXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBzcGVjaWZpZWQgd2hlbiBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIEJpbGxpbmdNb2RlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0X3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiQmlsbGluZ01vZGUgaXMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KSBidXQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGlzIG1pc3Npbmc7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCAoUmVhZENhcGFjaXR5VW5pdHMgLyBXcml0ZUNhcGFjaXR5VW5pdHMpLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0bm90IF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXR0cmlidXRlRGVmaW5pdGlvbnMgbXVzdCBub3QgZGVmaW5lIHRoZSBzYW1lIGF0dHJpYnV0ZSB0d2ljZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2FuXSksXFxuXFx0XFxcIktlZXAgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgYXR0cmlidXRlIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0YW4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFuKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSA9PSBhblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2Vjb25kYXJ5IGluZGV4IG5hbWVzIG11c3QgYmUgdW5pcXVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJkaW5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgRHVwbGljYXRlcyB3aXRoaW4gdGhlIHNhbWUgaW5kZXggbGlzdCBvbmx5OyBhIEdTSS9MU0kgY3Jvc3MtbGlzdCBjbGFzaCB3YXNcXG4jIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkluZGV4TmFtZVxcXCIsIFtwcm9wLCBiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiSW5kZXggbmFtZSAnJXMnIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2U7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJEdXBsaWNhdGUgaW5kZXggbmFtZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgc2Vjb25kYXJ5IGluZGV4IGEgdW5pcXVlIEluZGV4TmFtZVxcXCIsXFxuXFx0X3BmX2RkYmRpbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5hbWUpXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbCkgPT0gaW5hbWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHbG9iYWxUYWJsZSBSZXBsaWNhcyBtdXN0IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIGVuZm9yY2UgcGx1Z2luXFxuIyBrbm93cyB0aGUgYXBwJ3MgY29uY3JldGUgcmVnaW9uIChzZWUgc3JjL3ByaXZhdGUvZW5mb3JjZS50cyk7IHdpdGhvdXQgaXQgdGhlXFxuIyByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIGFuZCB0aGlzIHJ1bGUgc2tpcHMuIFJlcGxpY2FzIHdpdGggdW5yZXNvbHZhYmxlXFxuIyBSZWdpb24gdmFsdWVzIGFsc28gbWFrZSB0aGUgcnVsZSBza2lwIOKAlCBhYnNlbmNlIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBSZXBsaWNhcyBsaXN0ICV2IGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uICclcyc7IENyZWF0ZUdsb2JhbFRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUmVwbGljYXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHJlZ2lvblxcXFxcXFwiXFxcIiwgW3JlcGxpY2FzLCByZWdpb25dKSxcXG5cXHRcXFwiQWRkIGEgcmVwbGljYSBlbnRyeSBmb3IgdGhlIHJlZ2lvbiB0aGUgc3RhY2sgZGVwbG95cyB0byAoQ0RLIFRhYmxlVjIgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItZ2xvYmFsdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGl0IGluIGl0ZW1zIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpKVxcblxcdH1cXG5cXHRyZXBsaWNhcyA6PSBbciB8IHNvbWUgaXQgaW4gaXRlbXM7IHIgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpXVxcblxcdG5vdCByZWdpb24gaW4gcmVwbGljYXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR1NJIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB0YWJsZSBCaWxsaW5nTW9kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ2J0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbiMgR1NJLWxldmVsIGNvdW50ZXJwYXJ0IG9mIHBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dCAod2hpY2ggY292ZXJzIHRoZVxcbiMgdGFibGUtbGV2ZWwgcGFpciBvbmx5KS4gU2FtZSB0b2tlbiBzYWZldHk6IGxpdGVyYWwgQmlsbGluZ01vZGUgb3IgYWJzZW50XFxuIyAoZGVmYXVsdCBQUk9WSVNJT05FRCk7IHRva2VuIHZhbHVlcyBuZXZlciBqdWRnZWQuXFxuX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBzcGVjaWZpZXMgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGJ1dCBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2FuJ3QgYmUgdXNlZCB3aXRoIFBBWV9QRVJfUkVRVUVTVCBCaWxsaW5nTW9kZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgR1NJJ3MgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggdGhlIHRhYmxlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGlzIG1pc3NpbmcgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHdoaWxlIHRoZSB0YWJsZSBiaWxscyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgdG8gdGhlIEdTSSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRub3QgaXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbktleUF0dHJpYnV0ZXMgZ29lcyB3aXRoIElOQ0xVREUsIGFuZCBvbmx5IHdpdGggSU5DTFVERVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ3BuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1wcm9qZWN0aW9uLmh0bWxcXFwiXFxuXFxuIyBHU0kgcHJvamVjdGlvbnMgb25seTogdGhlIExTSSBzaGFwZSBhbmQgdGhlIEtFWVNfT05MWStOb25LZXlBdHRyaWJ1dGVzIGNvbWJvXFxuIyB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHVzZXMgUHJvamVjdGlvblR5cGUgSU5DTFVERSB3aXRob3V0IE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBJTkNMVURFLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBub3Qgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiTGlzdCB0aGUgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaW4gTm9uS2V5QXR0cmlidXRlcywgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIEFMTCAvIEtFWVNfT05MWVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSU5DTFVERVxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA9PSAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgY29tYmluZXMgUHJvamVjdGlvblR5cGUgQUxMIHdpdGggTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIEFMTCwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiRHJvcCBOb25LZXlBdHRyaWJ1dGVzIChBTEwgYWxyZWFkeSBwcm9qZWN0cyBldmVyeXRoaW5nKSwgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIElOQ0xVREVcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkFMTFxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA+IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2V5U2NoZW1hIG11c3QgYmUgW0hBU0hdIG9yIFtIQVNILCBSQU5HRV1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmtzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBUYWJsZS1sZXZlbCBrZXkgc2NoZW1hIG9ubHk6IGluZGV4IGtleSBzY2hlbWFzIHByb2R1Y2UgZGlmZmVyZW50IHNlcnZpY2VcXG4jIGVycm9ycyBhbmQgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxuX3BmX2RkYmtzaF90eXBlKG5hbWUsIGkpIDo9IGt0IGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGl0LmluZGV4ID09IGlcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjAuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGZpcnN0IEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgSEFTSCwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIGZpcnN0IEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgSEFTSCBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlB1dCB0aGUgcGFydGl0aW9uIGtleSAoS2V5VHlwZSBIQVNIKSBmaXJzdCBhbmQgdGhlIG9wdGlvbmFsIHNvcnQga2V5IChSQU5HRSkgc2Vjb25kXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAwKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiSEFTSFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMS5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgc2Vjb25kIEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgUkFOR0UsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBzZWNvbmQgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBSQU5HRSBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlVzZSBleGFjdGx5IG9uZSBIQVNIIGVsZW1lbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIFJBTkdFIGVsZW1lbnRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDEpXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJSQU5HRVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiLFxcblxcdHNwcmludGYoXFxcIktleVNjaGVtYSBjYW4gaG9sZCBhdCBtb3N0IDIgZWxlbWVudHMgKEhBU0ggKyBvcHRpb25hbCBSQU5HRSksIGdvdCAlZFxcXCIsIFtuXSksXFxuXFx0XFxcIk1vZGVsIGV4dHJhIGFjY2VzcyBwYXR0ZXJucyBhcyBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRuIDo9IGNvdW50KFsxIHwgc29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKV0pXFxuXFx0biA+IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG11c3QgYmUgaW4gdGhlIHRhYmxlJ3MgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBLaW5lc2lzIERhdGEgU3RyZWFtcyBkZXN0aW5hdGlvbiBtdXN0IGxpdmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZVxcbiMgdGFibGUuIFRoZSBkZXBsb3ktdGltZSBmYWlsdXJlIG1vZGUgaXMgdWdseTogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIHRoZVxcbiMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMsIGFuZCBDbG91ZEZvcm1hdGlvbiByb2xscyBiYWNrIG9uXFxuIyBOb3RTdGFiaWxpemVkIG1pbnV0ZXMgbGF0ZXIg4oCUIG5vdGhpbmcgbmFtZXMgdGhlIHJlZ2lvbiBtaXNtYXRjaC5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSBpbiBlbmZvcmNlIG1vZGUgd2l0aCBhXFxuIyBjb25jcmV0ZSByZWdpb247IG90aGVyd2lzZSB0aGlzIHJ1bGUgc2tpcHMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIEtpbmVzaXMgc3RyZWFtIGxpdmVzIGluICclcycgYnV0IHRoZSB0YWJsZSBkZXBsb3lzIHRvICclcyc7IHRoZSBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcyBhbmQgdGhlIHN0YWNrIHJvbGxzIGJhY2tcXFwiLCBbc3RyZWFtUmVnaW9uLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuIGF0IGEgc3RyZWFtIGluIHRoZSB0YWJsZSdzIG93biByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2tkcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG5cXHRzdHJlYW1SZWdpb24gOj0gcGFydHNbM11cXG5cXHRzdHJlYW1SZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRzdHJlYW1SZWdpb24gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxTSSBrZXkgYXR0cmlidXRlcyBtdXN0IGJlIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMzkgY2hlY2tzIHRhYmxlIGFuZCBHU0kga2V5IHNjaGVtYXMgYWdhaW5zdFxcbiMgQXR0cmlidXRlRGVmaW5pdGlvbnMgYnV0IGlzIGJsaW5kIHRvIExvY2FsU2Vjb25kYXJ5SW5kZXhlcyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDIsIDEuNy4wLWJldGEpLiBUaGlzIHJ1bGUgY292ZXJzIGV4YWN0bHkgdGhhdCBnYXAuXFxuXFxuX3BmX2RkYmxhZF9kZWZzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG4jIElmIGFueSBkZWZpbml0aW9uJ3MgbmFtZSBpcyB1bnJlc29sdmFibGUgdGhlIHNldCBpcyBpbmNvbXBsZXRlIOKAlCBzdGF5IHNpbGVudC5cXG5fcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0ZXZlcnkgZCBpbiBbeCB8IHNvbWUgeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKV0ge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTFNJIGtleSBhdHRyaWJ1dGUgJyVzJyBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGluIGEgS2V5U2NoZW1hIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIkFkZCB0aGUgYXR0cmlidXRlIHRvIEF0dHJpYnV0ZURlZmluaXRpb25zIChhbmQgbm93aGVyZSBlbHNlOiBvbmx5IGtleSBhdHRyaWJ1dGVzIGJlbG9uZyB0aGVyZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRjb3VudChfcGZfZGRibGFkX2RlZnMobmFtZSkpID4gMFxcblxcdF9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJsYWRfZGVmcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIExTSSBuZWVkcyBhIFJBTkdFIGtleSBhbmQgdGhlIHRhYmxlJ3MgbGVhZGluZyBoYXNoIGtleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRibHNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiXFxuXFxuX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykgOj0ge2t0IHxcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa3QpXFxufVxcblxcbiMgT25seSBqdWRnZSBhIGtleSBzY2hlbWEgd2hvc2UgS2V5VHlwZXMgYXJlIGFsbCBsaXRlcmFsIHN0cmluZ3MuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlKGtzKSBpZiBjb3VudChfcGZfZGRibHNoX2tleXR5cGVzKGtzKSkgPiAwXFxuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcykgaWYge1xcblxcdGV2ZXJ5IGsgaW4ga3Mge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyBoYXMgbm8gUkFOR0Uga2V5OyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgYSByYW5nZSBrZXkgZm9yIGluZGV4XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSB0aGUgTFNJIGEgc29ydCBrZXk6IFt0YWJsZSBIQVNIIGtleSwgaXRzIG93biBSQU5HRSBrZXldXFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRjb3VudChrcykgPiAwXFxuXFx0X3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcylcXG5cXHRub3QgXFxcIlJBTkdFXFxcIiBpbiBfcGZfZGRibHNoX2tleXR5cGVzKGtzKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyB1c2VzIGhhc2gga2V5ICclcycgYnV0IHRoZSB0YWJsZSdzIGhhc2gga2V5IGlzICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZWFkaW5nIGhhc2gga2V5IGFzIHRhYmxlIEtleVNjaGVtYVxcXFxcXFwiXFxcIiwgW2luYW1lLCBsc2lIYXNoLCB0YWJsZUhhc2hdKSxcXG5cXHRcXFwiQW4gTFNJIG11c3QgcmV1c2UgdGhlIHRhYmxlJ3MgcGFydGl0aW9uIGtleTsgdXNlIGEgZ2xvYmFsIHNlY29uZGFyeSBpbmRleCBmb3IgYSBkaWZmZXJlbnQgaGFzaCBrZXlcXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdHQuaW5kZXggPT0gMFxcblxcdHRhYmxlSGFzaCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFibGVIYXNoKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkhBU0hcXFwiXFxuXFx0bHNpSGFzaCA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobHNpSGFzaClcXG5cXHRsc2lIYXNoICE9IHRhYmxlSGFzaFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFibGUgbmFtZXMgYWxsb3cgb25seSBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlLCBkb3QgYW5kIGh5cGhlbiAobWF4IDI1NSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCIsXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiLCBcXFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLi1dezEsMjU1fSRgLCBuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBEeW5hbW9EQiBhY2NlcHRzIG9ubHkgbGV0dGVycywgbnVtYmVycywgdW5kZXJzY29yZSwgZG90IGFuZCBoeXBoZW4sIHVwIHRvIDI1NSBjaGFyYWN0ZXJzXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0YWJsZSB1c2luZyBbYS16QS1aMC05Xy4tXSB3aXRoaW4gMjU1IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBuXSBpbiBfcGZfZGRibmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWxlbmd0aFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhYmxlTmFtZSBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVyc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCAobWluaW11bSAzIGNoYXJhY3RlcnMpIGlzIGVuZm9yY2VkLiBUaGUgMjU1LWNoYXJcXG4jIG1heGltdW0gYW5kIHRoZSBjaGFyYWN0ZXIgcGF0dGVybiB3ZXJlIG5vdCBtZWFzdXJlZC4gTm90ZSByZXNvbHZlKCkgdHVybnMgYVxcbiMgUmVmLXRvLXJlc291cmNlIGludG8gdGhlIHRhcmdldCdzIGxvZ2ljYWwgSUQ7IGEgbG9naWNhbCBJRCBzaG9ydCBlbm91Z2ggdG9cXG4jIHRyaXAgdGhpcyBydWxlIHdoaWxlIGZlZWRpbmcgYSBUYWJsZU5hbWUgaXMgdHJlYXRlZCBhcyB0aGUgYnVnIGl0IGFsbW9zdFxcbiMgY2VydGFpbmx5IGlzLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhYmxlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGFibGVOYW1lICclcycgaXMgc2hvcnRlciB0aGFuIDMgY2hhcmFjdGVyczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1lbWJlciBtdXN0IGhhdmUgbGVuZ3RoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAzXFxcXFxcXCJcXFwiLCBbdG5dKSxcXG5cXHRcXFwiVXNlIGEgdGFibGUgbmFtZSBvZiBhdCBsZWFzdCAzIGNoYXJhY3RlcnMsIG9yIG9taXQgVGFibGVOYW1lIGFuZCBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRjb3VudCh0bikgPCAzXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLWluc3RhbmNlLWFtaS1hcmNoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkluc3RhbmNlIHR5cGUgYXJjaGl0ZWN0dXJlIG11c3QgbWF0Y2ggdGhlIFNTTSBwdWJsaWMtcGFyYW1ldGVyIEFNSSBhcmNoaXRlY3R1cmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJpYWFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2UtdHlwZXMuaHRtbFxcXCJcXG5cXG4jIEdyYXZpdG9uIG5hbWluZyBjb252ZW50aW9uOiBhIFxcXCJnXFxcIiBhbW9uZyB0aGUgbGV0dGVycyBhZnRlciB0aGVcXG4jIGdlbmVyYXRpb24gZGlnaXQgKHQ0ZywgYzdnbiwgaW00Z24sIGc1ZyksIHBsdXMgdGhlIHByZS1jb252ZW50aW9uIGExLlxcbiMgbWFjKiBmYW1pbGllcyBhcmUgZXhjbHVkZWQgZnJvbSBqdWRnbWVudCBlbnRpcmVseS5cXG5fcGZfZWMyaWFhX2FybV9mYW0oZmFtKSBpZiByZWdleC5tYXRjaChgXlthLXpdK1swLTldK1thLXowLTldKmdbYS16MC05XSokYCwgZmFtKVxcblxcbl9wZl9lYzJpYWFfYXJtX2ZhbShmYW0pIGlmIGZhbSA9PSBcXFwiYTFcXFwiXFxuXFxuX3BmX2VjMmlhYV9mYW0obmFtZSkgOj0gZmFtIGlmIHtcXG5cXHRpdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGl0KVxcblxcdGZhbSA6PSBzcGxpdChpdCwgXFxcIi5cXFwiKVswXVxcblxcdG5vdCBzdGFydHN3aXRoKGZhbSwgXFxcIm1hY1xcXCIpXFxufVxcblxcbiMge3tyZXNvbHZlOnNzbTouLi59fSBzdHJpbmdzIHN1cmZhY2UgYXMge1xcXCJfX2R5bmFtaWNcXFwiOiBcXFwiZHluYW1pY1xcbiMgcmVmZXJlbmNlOiB7e3Jlc29sdmU6c3NtOjxwYXRoPn19XFxcIn0gbWFya2VyIG9iamVjdHMgKG1lYXN1cmVkXFxuIyAyMDI2LTA5LTAzKTsgdGhlIHJlZmVyZW5jZSB0ZXh0IGlzIHJlYWQgZnJvbSB0aGUgbWFya2VyLlxcbl9wZl9lYzJpYWFfaW1nKG5hbWUpIDo9IGQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiSW1hZ2VJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJhdylcXG5cXHRkIDo9IG9iamVjdC5nZXQocmF3LCBcXFwiX19keW5hbWljXFxcIiwgXFxcIlxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0Y29udGFpbnMoZCwgXFxcInt7cmVzb2x2ZTpzc206XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItaW5zdGFuY2UtYW1pLWFyY2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkltYWdlSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkluc3RhbmNlIHR5cGUgJyVzJyBpcyB4ODZfNjQgYnV0IHRoZSBBTUkgcGFyYW1ldGVyIHBhdGggbmFtZXMgYXJtNjQ7IHRoZSBsYXVuY2ggZmFpbHMgd2l0aCBhbiBhcmNoaXRlY3R1cmUgbWlzbWF0Y2hcXFwiLCBbcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiKV0pLFxcblxcdFxcXCJVc2UgYW4gYXJtNjQgKEdyYXZpdG9uKSBpbnN0YW5jZSB0eXBlIG9yIHRoZSB4ODZfNjQgQU1JIHBhdGhcXFwiLFxcblxcdF9wZl9lYzJpYWFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiKVxcblxcdGZhbSA6PSBfcGZfZWMyaWFhX2ZhbShuYW1lKVxcblxcdG5vdCBfcGZfZWMyaWFhX2FybV9mYW0oZmFtKVxcblxcdGltZyA6PSBfcGZfZWMyaWFhX2ltZyhuYW1lKVxcblxcdGNvbnRhaW5zKGltZywgXFxcImFybTY0XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItaW5zdGFuY2UtYW1pLWFyY2hcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkltYWdlSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIkluc3RhbmNlIHR5cGUgJyVzJyBpcyBhcm02NCAoR3Jhdml0b24pIGJ1dCB0aGUgQU1JIHBhcmFtZXRlciBwYXRoIG5hbWVzIHg4Nl82NDsgdGhlIGxhdW5jaCBmYWlscyB3aXRoIGFuIGFyY2hpdGVjdHVyZSBtaXNtYXRjaFxcXCIsIFtyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXSksXFxuXFx0XFxcIlVzZSBhbiB4ODZfNjQgaW5zdGFuY2UgdHlwZSBvciB0aGUgYXJtNjQgQU1JIHBhdGhcXFwiLFxcblxcdF9wZl9lYzJpYWFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiKVxcblxcdGZhbSA6PSBfcGZfZWMyaWFhX2ZhbShuYW1lKVxcblxcdF9wZl9lYzJpYWFfYXJtX2ZhbShmYW0pXFxuXFx0aW1nIDo9IF9wZl9lYzJpYWFfaW1nKG5hbWUpXFxuXFx0Y29udGFpbnMoaW1nLCBcXFwieDg2XzY0XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItbGF1bmNoLXRlbXBsYXRlLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGF1bmNoIHRlbXBsYXRlIG5hbWVzIGFyZSAzLTEyOCBjaGFycyBvZiBsZXR0ZXJzLCBudW1iZXJzIGFuZCAtKCkuL19cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLWxhdW5jaC10ZW1wbGF0ZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5MYXVuY2hUZW1wbGF0ZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkxhdW5jaFRlbXBsYXRlTmFtZSAnJXMnIGlzIHJlamVjdGVkOiBFQzIgcmVxdWlyZXMgMy0xMjggY2hhcmFjdGVycyBvZiBsZXR0ZXJzLCBudW1iZXJzIGFuZCAtICggKSAuIC8gX1xcXCIsIFtuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgbGF1bmNoIHRlbXBsYXRlIHVzaW5nIG9ubHkgbGV0dGVycywgbnVtYmVycyBhbmQgLSAoICkgLiAvIF8gKDMtMTI4IGNoYXJhY3RlcnMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMYXVuY2hUZW1wbGF0ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05KCkuL18tXXszLDEyOH0kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItbmF0Z3ctYWxsb2NhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOQVQgZ2F0ZXdheSBBbGxvY2F0aW9uSWQgaXMgcmVxdWlyZWQgZm9yIHB1YmxpYyBjb25uZWN0aXZpdHkgYW5kIGZvcmJpZGRlbiBmb3IgcHJpdmF0ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Ok5hdEdhdGV3YXlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMybmdhX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbFxcXCJcXG5cXG5fcGZfZWMybmdhX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuIyBDb25uZWN0aXZpdHlUeXBlIGRlZmF1bHRzIHRvIHB1YmxpYzsgYW4gdW5yZXNvbHZhYmxlIHZhbHVlIHNraXBzIGJvdGggZGlyZWN0aW9ucy5cXG5fcGZfZWMybmdhX3B1YmxpYyhuYW1lKSBpZiBfcGZfZWMybmdhX2Fic2VudChuYW1lLCBcXFwiQ29ubmVjdGl2aXR5VHlwZVxcXCIpXFxuXFxuX3BmX2VjMm5nYV9wdWJsaWMobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db25uZWN0aXZpdHlUeXBlXFxcIikgPT0gXFxcInB1YmxpY1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1uYXRndy1hbGxvY2F0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvY2F0aW9uSWRcXFwiLFxcblxcdFxcXCJBIHByaXZhdGUgTkFUIGdhdGV3YXkgY2Fubm90IHRha2UgQWxsb2NhdGlvbklkIChcXFxcXFxcIkFsbG9jYXRpb25JZCBjYW5ub3QgYmUgc3BlY2lmaWVkIGZvciBhIE5BVCBHYXRld2F5IHdpdGggQ29ubmVjdGl2aXR5IFR5cGUgcHJpdmF0ZS5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJSZW1vdmUgQWxsb2NhdGlvbklkLCBvciBzd2l0Y2ggQ29ubmVjdGl2aXR5VHlwZSB0byBwdWJsaWNcXFwiLFxcblxcdF9wZl9lYzJuZ2FfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6TmF0R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Db25uZWN0aXZpdHlUeXBlXFxcIikgPT0gXFxcInByaXZhdGVcXFwiXFxuXFx0bm90IF9wZl9lYzJuZ2FfYWJzZW50KG5hbWUsIFxcXCJBbGxvY2F0aW9uSWRcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1uYXRndy1hbGxvY2F0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGxvY2F0aW9uSWRcXFwiLFxcblxcdFxcXCJBIHB1YmxpYyBOQVQgZ2F0ZXdheSByZXF1aXJlcyBBbGxvY2F0aW9uSWQgKFxcXFxcXFwiVGhlIHJlcXVlc3QgbXVzdCBpbmNsdWRlIHRoZSBBbGxvY2F0aW9uSWQgcGFyYW1ldGVyLlxcXFxcXFwiKVxcXCIsXFxuXFx0XFxcIkFsbG9jYXRlIGFuIEVJUCBhbmQgcGFzcyBpdHMgQWxsb2NhdGlvbklkLCBvciBzZXQgQ29ubmVjdGl2aXR5VHlwZTogcHJpdmF0ZVxcXCIsXFxuXFx0X3BmX2VjMm5nYV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpOYXRHYXRld2F5XFxcIilcXG5cXHRfcGZfZWMybmdhX3B1YmxpYyhuYW1lKVxcblxcdF9wZl9lYzJuZ2FfYWJzZW50KG5hbWUsIFxcXCJBbGxvY2F0aW9uSWRcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1wZy1jbHVzdGVyLWJ1cnN0YWJsZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCdXJzdGFibGUgaW5zdGFuY2UgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gY2x1c3RlciBwbGFjZW1lbnQgZ3JvdXBzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OlBsYWNlbWVudEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDcm9zcy1yZXNvdXJjZTogb25seSBmaXJlcyB3aGVuIHRoZSByZWZlcmVuY2VkIHBsYWNlbWVudCBncm91cCBpcyBpblxcbiMgdGhlIHRlbXBsYXRlIHdpdGggU3RyYXRlZ3kgY2x1c3Rlci4gQSBsaXRlcmFsIChwcmUtZXhpc3RpbmcpIGdyb3VwXFxuIyBuYW1lIGNhcnJpZXMgbm8gc3RyYXRlZ3kgaW5mb3JtYXRpb24gYW5kIHN0YXlzIHNpbGVudC5cXG5fcGZfZWMycGdiX2J1cnN0YWJsZShmYW0pIGlmIGZhbSBpbiB7XFxcInQyXFxcIiwgXFxcInQzXFxcIiwgXFxcInQzYVxcXCIsIFxcXCJ0NGdcXFwifVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXBnLWNsdXN0ZXItYnVyc3RhYmxlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5JbnN0YW5jZVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkNsdXN0ZXIgcGxhY2VtZW50IGdyb3VwcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgJyVzJyBpbnN0YW5jZSB0eXBlOyB0aGUgbGF1bmNoIGZhaWxzIGF0IGRlcGxveVxcXCIsIFtpdF0pLFxcblxcdFxcXCJVc2UgYSBub24tYnVyc3RhYmxlIHR5cGUsIG9yIGEgc3ByZWFkL3BhcnRpdGlvbiBwbGFjZW1lbnQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvcGxhY2VtZW50LWdyb3Vwcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIilcXG5cXHRpdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkluc3RhbmNlVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGl0KVxcblxcdF9wZl9lYzJwZ2JfYnVyc3RhYmxlKHNwbGl0KGl0LCBcXFwiLlxcXCIpWzBdKVxcblxcdHBnIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUGxhY2VtZW50R3JvdXBOYW1lXFxcIilcXG5cXHRwZyBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlBsYWNlbWVudEdyb3VwXFxcIilcXG5cXHRyZXNvbHZlKHBnLCBcXFwiUHJvcGVydGllcy5TdHJhdGVneVxcXCIpID09IFxcXCJjbHVzdGVyXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1yb3V0ZS10YXJnZXQtZXhhY3RseS1vbmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByb3V0ZSBtdXN0IG5hbWUgZXhhY3RseSBvbmUgdGFyZ2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Um91dGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSAxMSB0YXJnZXQgcHJvcGVydGllcywgc3RyYWlnaHQgZnJvbSB0aGUgRUMyIGVycm9yIG1lc3NhZ2UuXFxuX3BmX2VjMnJ0ZV90YXJnZXRzIDo9IFtcXFwiR2F0ZXdheUlkXFxcIiwgXFxcIkxvY2FsR2F0ZXdheUlkXFxcIiwgXFxcIkNhcnJpZXJHYXRld2F5SWRcXFwiLCBcXFwiTmF0R2F0ZXdheUlkXFxcIiwgXFxcIk5ldHdvcmtJbnRlcmZhY2VJZFxcXCIsIFxcXCJWcGNQZWVyaW5nQ29ubmVjdGlvbklkXFxcIiwgXFxcIkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlJZFxcXCIsIFxcXCJUcmFuc2l0R2F0ZXdheUlkXFxcIiwgXFxcIlZwY0VuZHBvaW50SWRcXFwiLCBcXFwiQ29yZU5ldHdvcmtBcm5cXFwiLCBcXFwiSW5zdGFuY2VJZFxcXCJdXFxuXFxuX3BmX2VjMnJ0ZV9jb3VudChuYW1lKSA6PSBuIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KFtrIHwgc29tZSBrIGluIF9wZl9lYzJydGVfdGFyZ2V0czsgb2JqZWN0LmdldChwcm9wcywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXJvdXRlLXRhcmdldC1leGFjdGx5LW9uZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSByb3V0ZSBuYW1lcyAldiB0YXJnZXRzOyBFQzIgcmVxdWlyZXMgZXhhY3RseSBvbmUgb2YgR2F0ZXdheUlkLCBMb2NhbEdhdGV3YXlJZCwgQ2FycmllckdhdGV3YXlJZCwgTmF0R2F0ZXdheUlkLCBOZXR3b3JrSW50ZXJmYWNlSWQsIFZwY1BlZXJpbmdDb25uZWN0aW9uSWQsIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlJZCwgVHJhbnNpdEdhdGV3YXlJZCwgVnBjRW5kcG9pbnRJZCwgQ29yZU5ldHdvcmtBcm4gb3IgSW5zdGFuY2VJZFxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBleGFjdGx5IG9uZSB0YXJnZXQgcHJvcGVydHkgb24gdGhlIHJvdXRlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWMyLXJvdXRlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Um91dGVcXFwiKVxcblxcdG4gOj0gX3BmX2VjMnJ0ZV9jb3VudChuYW1lKVxcblxcdG4gIT0gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1jaWRyLXZhbGlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgQ2lkcklwIG11c3QgYmUgYSB3ZWxsLWZvcm1lZCBJUHY0IENJRFJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1wiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJzY3ZfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0F1dGhvcml6ZVNlY3VyaXR5R3JvdXBJbmdyZXNzLmh0bWxcXFwiXFxuXFxuX3BmX2VjMnNjdl9tYWxmb3JtZWQoYykgaWYge1xcblxcdHJlZ2V4Lm1hdGNoKGBeWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rL1swLTldKyRgLCBjKVxcblxcdHRvX251bWJlcihzcGxpdChjLCBcXFwiL1xcXCIpWzFdKSA+IDMyXFxufVxcblxcbl9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpIGlmIHtcXG5cXHRyZWdleC5tYXRjaChgXlswLTldK1xcXFwuWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldKy9bMC05XSskYCwgYylcXG5cXHRzb21lIG8gaW4gc3BsaXQoc3BsaXQoYywgXFxcIi9cXFwiKVswXSwgXFxcIi5cXFwiKVxcblxcdHRvX251bWJlcihvKSA+IDI1NVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1jaWRyLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkNpZHJJcFxcXCIsIFtkaXIsIGl0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDaWRySXAgJyVzJyBpcyBtYWxmb3JtZWQgKG9jdGV0cyBtdXN0IGJlIDAtMjU1LCBwcmVmaXggMC0zMik7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJDSURSIGJsb2NrICVzIGlzIG1hbGZvcm1lZFxcXFxcXFwiXFxcIiwgW2MsIGNdKSxcXG5cXHRcXFwiRml4IHRoZSBDSURSIG5vdGF0aW9uXFxcIixcXG5cXHRfcGZfZWMyc2N2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiQ2lkcklwXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRfcGZfZWMyc2N2X21hbGZvcm1lZChjKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1jaWRyLXZhbGlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DaWRySXBcXFwiLFxcblxcdHNwcmludGYoXFxcIkNpZHJJcCAnJXMnIGlzIG1hbGZvcm1lZCAob2N0ZXRzIG11c3QgYmUgMC0yNTUsIHByZWZpeCAwLTMyKTsgRUMyIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkNJRFIgYmxvY2sgJXMgaXMgbWFsZm9ybWVkXFxcXFxcXCJcXFwiLCBbYywgY10pLFxcblxcdFxcXCJGaXggdGhlIENJRFIgbm90YXRpb25cXFwiLFxcblxcdF9wZl9lYzJzY3ZfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DaWRySXBcXFwiKVxcblxcdGlzX3N0cmluZyhjKVxcblxcdF9wZl9lYzJzY3ZfbWFsZm9ybWVkKGMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLWdyb3VwLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2VjdXJpdHkgZ3JvdXAgbmFtZXMgbWF5IG5vdCBzdGFydCB3aXRoIHNnLVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1ncm91cC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Hcm91cE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkdyb3VwTmFtZSAnJXMnIHN0YXJ0cyB3aXRoIHRoZSByZXNlcnZlZCBwcmVmaXg7IEVDMiByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJHcm91cCBuYW1lcyBtYXkgbm90IGJlIGluIHRoZSBmb3JtYXQgc2ctKlxcXFxcXFwiXFxcIiwgW2duXSksXFxuXFx0XFxcIlBpY2sgYSBuYW1lIHRoYXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBzZy1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlY3VyaXR5R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwXFxcIilcXG5cXHRnbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdyb3VwTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGduKVxcblxcdHN0YXJ0c3dpdGgoZ24sIFxcXCJzZy1cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIFRDUC9VRFAgcG9ydHMgbXVzdCBiZSB3aXRoaW4gMC02NTUzNSBhbmQgRnJvbVBvcnQgPD0gVG9Qb3J0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2dfZml4IDo9IFxcXCJVc2UgYSBwb3J0IGJldHdlZW4gMCBhbmQgNjU1MzUgd2l0aCBGcm9tUG9ydCA8PSBUb1BvcnRcXFwiXFxuXFxuX3BmX3NnX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9wb3J0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9wb3J0X291dChuKSBpZiBuID4gNjU1MzVcXG5cXG5fcGZfdGNwX3VkcChwKSBpZiBwIGluIHtcXFwidGNwXFxcIiwgXFxcInVkcFxcXCIsIFxcXCI2XFxcIiwgXFxcIjE3XFxcIiwgNiwgMTd9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC4lc1xcXCIsIFtkaXIsIGl0ZW0uaW5kZXgsIHBuYW1lXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgb3V0c2lkZSB0aGUgdmFsaWQgVENQL1VEUCBwb3J0IHJhbmdlIDAtNjU1MzVcXFwiLCBbcG5hbWUsIG5dKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRfcGZfdGNwX3VkcChvYmplY3QuZ2V0KGVudHJ5LCBcXFwiSXBQcm90b2NvbFxcXCIsIG51bGwpKVxcblxcdHNvbWUgcG5hbWUgaW4ge1xcXCJGcm9tUG9ydFxcXCIsIFxcXCJUb1BvcnRcXFwifVxcblxcdG4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIHBuYW1lLCBudWxsKSlcXG5cXHRfcGZfcG9ydF9vdXQobilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5Gcm9tUG9ydFxcXCIsIFtkaXIsIGl0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGcm9tUG9ydCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRvUG9ydCAoJXYpXFxcIiwgW2YsIHRdKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRfcGZfdGNwX3VkcChvYmplY3QuZ2V0KGVudHJ5LCBcXFwiSXBQcm90b2NvbFxcXCIsIG51bGwpKVxcblxcdGYgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIFxcXCJGcm9tUG9ydFxcXCIsIG51bGwpKVxcblxcdHQgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIFxcXCJUb1BvcnRcXFwiLCBudWxsKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGcm9tUG9ydCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRvUG9ydCAoJXYpXFxcIiwgW2YsIHRdKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdF9wZl90Y3BfdWRwKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSXBQcm90b2NvbFxcXCIpKVxcblxcdGYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRnJvbVBvcnRcXFwiKSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvUG9ydFxcXCIpKVxcblxcdGYgPj0gMFxcblxcdHQgPD0gNjU1MzVcXG5cXHRmID4gdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1ydWxlLWRlc2NyaXB0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIHJ1bGUgZGVzY3JpcHRpb25zIGFyZSBsaW1pdGVkIHRvIDI1NSBjaGFycyBvZiBhIHJlc3RyaWN0ZWQgQVNDSUkgc2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2dkZXNjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9zZ2Rlc2NfcGF0IDo9IGBeW2EtekEtWjAtOS5fIDovKCkjLEBcXFxcW1xcXFxdKz0mO3t9ISQqLV17MCwyNTV9JGBcXG5cXG4jIGlubGluZSBydWxlIGxpc3RzIG9uIGEgc2VjdXJpdHkgZ3JvdXBcXG5fcGZfc2dkZXNjX2JhZCBjb250YWlucyBbbmFtZSwgcGF0aCwgZGVzY10gaWYge1xcblxcdHNvbWUgbiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUga2V5IGluIFtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJdXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2tleV0pKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdGRlc2MgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRGVzY3JpcHRpb25cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhkZXNjKVxcblxcdG5vdCByZWdleC5tYXRjaChfcGZfc2dkZXNjX3BhdCwgZGVzYylcXG5cXHRuYW1lIDo9IG5cXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRGVzY3JpcHRpb25cXFwiLCBba2V5LCByLmluZGV4XSlcXG59XFxuXFxuIyBzdGFuZGFsb25lIHJ1bGUgcmVzb3VyY2VzXFxuX3BmX3NnZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIGRlc2NdIGlmIHtcXG5cXHRzb21lIHQgaW4gW1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwiXVxcblxcdHNvbWUgbiBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdGRlc2MgOj0gcmVzb2x2ZShuLCBcXFwiUHJvcGVydGllcy5EZXNjcmlwdGlvblxcXCIpXFxuXFx0aXNfc3RyaW5nKGRlc2MpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKF9wZl9zZ2Rlc2NfcGF0LCBkZXNjKVxcblxcdG5hbWUgOj0gblxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXJ1bGUtZGVzY3JpcHRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHBhdGgsXFxuXFx0c3ByaW50ZihcXFwiU2VjdXJpdHkgZ3JvdXAgcnVsZSBkZXNjcmlwdGlvbiAnJXMnIGlzIHJlamVjdGVkOiBFQzIgYWxsb3dzIGZld2VyIHRoYW4gMjU2IGNoYXJhY3RlcnMgZnJvbSB0aGUgc2V0IGEtekEtWjAtOS4gXy06LygpIyxAW10rPSY7e30hJCogKG5vbi1BU0NJSSB0ZXh0IHN1Y2ggYXMgSmFwYW5lc2UgaXMgcmVqZWN0ZWQpXFxcIiwgW2Rlc2NdKSxcXG5cXHRcXFwiV3JpdGUgdGhlIHJ1bGUgZGVzY3JpcHRpb24gaW4gdGhlIGFsbG93ZWQgQVNDSUkgc2V0IGFuZCBrZWVwIGl0IHVuZGVyIDI1NiBjaGFyYWN0ZXJzXFxcIixcXG5cXHRfcGZfc2dkZXNjX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRlc2NdIGluIF9wZl9zZ2Rlc2NfYmFkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBzZWN1cml0eSBncm91cCBydWxlIHRha2VzIGV4YWN0bHkgb25lIHNvdXJjZS9kZXN0aW5hdGlvbiBmaWVsZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnNzZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG4jIFRoZSBtZW1iZXIgc2V0cyBjb21lIHZlcmJhdGltIGZyb20gdGhlIEVDMiBlcnJvciBtZXNzYWdlcy5cXG5fcGZfZWMyc3NlX3NldHMgOj0ge1xcXCJpblxcXCI6IFtcXFwiQ2lkcklwXFxcIiwgXFxcIkNpZHJJcHY2XFxcIiwgXFxcIlNvdXJjZVNlY3VyaXR5R3JvdXBJZFxcXCIsIFxcXCJTb3VyY2VQcmVmaXhMaXN0SWRcXFwiXSwgXFxcIm91dFxcXCI6IFtcXFwiQ2lkcklwXFxcIiwgXFxcIkNpZHJJcHY2XFxcIiwgXFxcIkRlc3RpbmF0aW9uUHJlZml4TGlzdElkXFxcIiwgXFxcIkRlc3RpbmF0aW9uU2VjdXJpdHlHcm91cElkXFxcIl19XFxuXFxuX3BmX2VjMnNzZV9kaXJrZXkgOj0ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCI6IFxcXCJpblxcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIjogXFxcIm91dFxcXCJ9XFxuXFxuX3BmX2VjMnNzZV9ya2V5IDo9IHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIjogXFxcImluXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIjogXFxcIm91dFxcXCJ9XFxuXFxuX3BmX2VjMnNzZV9jb3VudChlbnRyeSwgc2V0a2V5KSA6PSBuIGlmIHtcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0biA6PSBjb3VudChbayB8IHNvbWUgayBpbiBfcGZfZWMyc3NlX3NldHNbc2V0a2V5XTsgb2JqZWN0LmdldChlbnRyeSwgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIl0pXFxufVxcblxcbiMgRW1iZWRkZWQgcnVsZXM6IHR3byBvciBtb3JlIG1lbWJlcnMgaXMgYW4gZXJyb3I7IHplcm8gaXMgdG9sZXJhdGVkXFxuIyAoYSBzb3VyY2UtbGVzcyBlbWJlZGRlZCBpbmdyZXNzIGRlcGxveWVkIGNsZWFuIG9uIDIwMjYtMDktMDMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVGhlIHJ1bGUgc2V0cyAldiBvZiAldjsgRUMyIGFsbG93cyBvbmx5IG9uZSAoXFxcXFxcXCJPbmx5IG9uZSBvZiAlcyBjYW4gYmUgc3BlY2lmaWVkXFxcXFxcXCIpXFxcIiwgW24sIF9wZl9lYzJzc2Vfc2V0c1trXSwgY29uY2F0KFxcXCIsIFxcXCIsIF9wZl9lYzJzc2Vfc2V0c1trXSldKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGQgb24gdGhlIHJ1bGVcXFwiLFxcblxcdF9wZl9lYzJzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ayA6PSBfcGZfZWMyc3NlX2RpcmtleVtkaXJdXFxuXFx0biA6PSBfcGZfZWMyc3NlX2NvdW50KGl0ZW0udmFsdWUsIGspXFxuXFx0biA+PSAyXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXNvdXJjZS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcnVsZSBzZXRzICV2IG9mICV2OyBFQzIgcmVxdWlyZXMgZXhhY3RseSBvbmUgKFxcXFxcXFwiRXhhY3RseSBvbmUgb2YgJXMgbXVzdCBiZSBzcGVjaWZpZWQgYW5kIG5vdCBlbXB0eVxcXFxcXFwiKVxcXCIsIFtuLCBfcGZfZWMyc3NlX3NldHNba10sIGNvbmNhdChcXFwiLCBcXFwiLCBfcGZfZWMyc3NlX3NldHNba10pXSksXFxuXFx0XFxcIlNldCBleGFjdGx5IG9uZSBzb3VyY2UvZGVzdGluYXRpb24gZmllbGQgb24gdGhlIHJ1bGUgcmVzb3VyY2VcXFwiLFxcblxcdF9wZl9lYzJzc2VfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGsgOj0gX3BmX2VjMnNzZV9ya2V5W3J0eXBlXVxcblxcdG4gOj0gX3BmX2VjMnNzZV9jb3VudChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgaylcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc3VibmV0LWNpZHItc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJuZXQgSVB2NCBDSURSIG5ldG1hc2sgbXVzdCBiZSBiZXR3ZWVuIC8xNiBhbmQgLzI4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U3VibmV0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3N1Ym5ldGNpZHJfbGVuKGMpIDo9IHRvX251bWJlcihwYXJ0c1sxXSkgaWYge1xcblxcdHBhcnRzIDo9IHNwbGl0KGMsIFxcXCIvXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gMlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zdWJuZXQtY2lkci1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DaWRyQmxvY2tcXFwiLFxcblxcdHNwcmludGYoXFxcIlN1Ym5ldCBDSURSICclcycgaGFzIGEgLyVkIG5ldG1hc2s7IEVDMiBhY2NlcHRzIC8xNiB0aHJvdWdoIC8yOCBhbmQgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGwgb3RoZXJ3aXNlXFxcIiwgW2MsIG5dKSxcXG5cXHRcXFwiUmVzaXplIHRoZSBzdWJuZXQgQ0lEUiB0byBhIG5ldG1hc2sgYmV0d2VlbiAvMTYgYW5kIC8yOFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS9zdWJuZXQtc2l6aW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U3VibmV0XFxcIilcXG5cXHRjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIilcXG5cXHRpc19zdHJpbmcoYylcXG5cXHRuIDo9IF9wZl9zdWJuZXRjaWRyX2xlbihjKVxcblxcdF9wZl9zdWJuZXRjaWRyX291dChuKVxcbn1cXG5cXG5fcGZfc3VibmV0Y2lkcl9vdXQobikgaWYgbiA8IDE2XFxuXFxuX3BmX3N1Ym5ldGNpZHJfb3V0KG4pIGlmIG4gPiAyOFxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXVzZXJkYXRhLXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUMyIHVzZXIgZGF0YSBpcyBsaW1pdGVkIHRvIDE2Mzg0IGJ5dGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6SW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Vkc3pfZml4IDo9IFxcXCJLZWVwIHVzZXIgZGF0YSB1bmRlciAxNjM4NCBieXRlczsgbW92ZSBsYXJnZSBwYXlsb2FkcyB0byBTMyBhbmQgZmV0Y2ggdGhlbSBmcm9tIGEgc21hbGwgYm9vdHN0cmFwIHNjcmlwdFxcXCJcXG5cXG5fcGZfdWRzel91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9pbnN0YW5jZWRhdGEtYWRkLXVzZXItZGF0YS5odG1sXFxcIlxcblxcbl9wZl91ZHN6X2xpbWl0IDo9IDE2Mzg0XFxuXFxuIyBiYXNlNjQg5paH5a2X5YiX44Gu44OH44Kz44O844OJ5b6M44OQ44Kk44OI5pWw77yI44OR44OH44Kj44Oz44Kw6ICD5oWu77yJXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDIgaWYgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG5cXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9ICgoY291bnQocykgKiAzKSAvIDQpIC0gMSBpZiB7XFxuXFx0ZW5kc3dpdGgocywgXFxcIj1cXFwiKVxcblxcdG5vdCBlbmRzd2l0aChzLCBcXFwiPT1cXFwiKVxcbn1cXG5cXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9IChjb3VudChzKSAqIDMpIC8gNCBpZiBub3QgZW5kc3dpdGgocywgXFxcIj1cXFwiKVxcblxcbl9wZl91ZHN6X3BhdGhzIDo9IHtcXG5cXHRcXFwiQVdTOjpFQzI6Okluc3RhbmNlXFxcIjogXFxcIlByb3BlcnRpZXMuVXNlckRhdGFcXFwiLFxcblxcdFxcXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcXFwiOiBcXFwiUHJvcGVydGllcy5MYXVuY2hUZW1wbGF0ZURhdGEuVXNlckRhdGFcXFwiLFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjOODquODhuODqeODqyBiYXNlNjQg5paH5a2X5YiX44Gu44Kx44O844K5XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgZGVjb2RlcyB0byBhYm91dCAldiBieXRlcywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbc2l6ZSwgX3BmX3Vkc3pfbGltaXRdKSxcXG5cXHRfcGZfdWRzel9maXgsIF9wZl91ZHN6X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUsIHAgaW4gX3BmX3Vkc3pfcGF0aHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0dWQgOj0gcmVzb2x2ZShuYW1lLCBwKVxcblxcdGlzX3N0cmluZyh1ZClcXG5cXHRzaXplIDo9IF9wZl91ZHN6X2RlY29kZWQodWQpXFxuXFx0c2l6ZSA+IF9wZl91ZHN6X2xpbWl0XFxufVxcblxcbiMgVXNlckRhdGEg44GMIHtcXFwiRm46OkJhc2U2NFxcXCI6IFxcXCI8bGl0ZXJhbD5cXFwifSDjga7jgrHjg7zjgrnvvIjjgqjjg7PjgrPjg7zjg4nliY3jga7nlJ/jg5DjgqTjg4jmlbDjgafliKTlrprvvIlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi11c2VyZGF0YS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgcCxcXG5cXHRzcHJpbnRmKFxcXCJVc2VyRGF0YSBpcyAlZCBieXRlcyBiZWZvcmUgYmFzZTY0IGVuY29kaW5nLCBidXQgRUMyIGxpbWl0cyB1c2VyIGRhdGEgdG8gJWQgYnl0ZXM7IFJ1bkluc3RhbmNlcyBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtjb3VudChpbm5lciksIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19vYmplY3QodWQpXFxuXFx0aW5uZXIgOj0gb2JqZWN0LmdldCh1ZCwgXFxcIkZuOjpCYXNlNjRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhpbm5lcilcXG5cXHRjb3VudChpbm5lcikgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUtaW9wc1wiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQlMgSW9wcy9UaHJvdWdocHV0IG11c3QgbWF0Y2ggdGhlIHZvbHVtZSB0eXBlJ3Mgc3VwcG9ydGVkIHJhbmdlcyBhbmQgcmF0aW9zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3ZvbGlvcHNfZml4IDo9IFxcXCJNYXRjaCBJb3BzL1Rocm91Z2hwdXQgdG8gdGhlIHZvbHVtZSB0eXBlOiBncDMgMzAwMC04MDAwMCBJT1BTIChtYXggNTAwL0dpQiwgdGhyb3VnaHB1dCAxMjUtMjAwMCBNaUIvcyBhbmQgYXQgbW9zdCBJT1BTLzQpLCBpbzEgMTAwLTY0MDAwIChtYXggNTAvR2lCKSwgaW8yIDEwMC0yNTYwMDAgKG1heCAxMDAwL0dpQik7IGdwMi9zdDEvc2MxL3N0YW5kYXJkIGFjY2VwdCBuZWl0aGVyIHByb3BlcnR5XFxcIlxcblxcbl9wZl92b2xpb3BzX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vicy9sYXRlc3QvdXNlcmd1aWRlL2Vicy12b2x1bWUtdHlwZXMuaHRtbFxcXCJcXG5cXG5fcGZfdm9saW9wc19yYW5nZSA6PSB7XFxcImdwM1xcXCI6IFszMDAwLCA4MDAwMF0sIFxcXCJpbzFcXFwiOiBbMTAwLCA2NDAwMF0sIFxcXCJpbzJcXFwiOiBbMTAwLCAyNTYwMDBdfVxcblxcbl9wZl92b2xpb3BzX3Blcl9naWIgOj0ge1xcXCJncDNcXFwiOiA1MDAsIFxcXCJpbzFcXFwiOiA1MCwgXFxcImlvMlxcXCI6IDEwMDB9XFxuXFxuX3BmX3ZvbGlvcHNfb3V0KG4sIGxvLCBoaSkgaWYgbiA8IGxvXFxuXFxuX3BmX3ZvbGlvcHNfb3V0KG4sIGxvLCBoaSkgaWYgbiA+IGhpXFxuXFxuX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG5cXG4jIElPUFMg44GM5Z6L44GU44Go44Gu57W25a++44Os44Oz44K45aSWXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAlZC0lZCBmb3IgJXMgdm9sdW1lc1xcXCIsIFtuLCByWzBdLCByWzFdLCB2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHIgOj0gX3BmX3ZvbGlvcHNfcmFuZ2VbdnRdXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0X3BmX3ZvbGlvcHNfb3V0KG4sIHJbMF0sIHJbMV0pXFxufVxcblxcbiMgSU9QUyA6IOOCteOCpOOCuuavlOOBrui2hemBjlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBleGNlZWRzIHRoZSBtYXhpbXVtIHJhdGlvIG9mICVkIElPUFMgcGVyIEdpQiBmb3IgJXMgKFNpemUgJXYgR2lCIGFsbG93cyBhdCBtb3N0ICV2KVxcXCIsIFtuLCByYXRpbywgdnQsIHMsIHMgKiByYXRpb10pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHJhdGlvIDo9IF9wZl92b2xpb3BzX3Blcl9naWJbdnRdXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaXplXFxcIikpXFxuXFx0biA+IHMgKiByYXRpb1xcbn1cXG5cXG4jIElvcHMg44KS5Y+X44GR5LuY44GR44Gq44GE5Z6L44GrIElvcHMg44KS5oyH5a6aXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMywgaW8xLCBpbzIpOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGxcXFwiLCBbdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHR2dCBpbiB7XFxcImdwMlxcXCIsIFxcXCJzdDFcXFwiLCBcXFwic2MxXFxcIiwgXFxcInN0YW5kYXJkXFxcIn1cXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKVxcbn1cXG5cXG4jIFRocm91Z2hwdXQg44GvIGdwMyDlsILnlKhcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMgdm9sdW1lcyAodmFsaWQgb25seSBmb3IgZ3AzKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHZ0KVxcblxcdHZ0ICE9IFxcXCJncDNcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIilcXG59XFxuXFxuIyBncDMgVGhyb3VnaHB1dCDjga7ntbblr77jg6zjg7PjgrhcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlIDEyNS0yMDAwIGZvciBncDMgdm9sdW1lc1xcXCIsIFt0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0X3BmX3ZvbGlvcHNfb3V0KHQsIDEyNSwgMjAwMClcXG59XFxuXFxuIyBncDMgVGhyb3VnaHB1dCA6IElPUFMg5q+U77yI5pyA5aSnIDAuMjUgTWlCL3MgcGVyIElPUFPvvIlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAwLjI1IE1pQi9zIHBlciBwcm92aXNpb25lZCBJT1BTICgldiBJT1BTIGFsbG93cyBhdCBtb3N0ICV2KVxcXCIsIFt0LCBuLCBuIC8gNF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHQgKiA0ID4gblxcbn1cXG5cXG4jIGdwMyDjgacgSW9wcyDmnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggMzAwMO+8ieOBruOBqOOBjeOBriBUaHJvdWdocHV0IOavlFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBleGNlZWRzIDc1MCwgdGhlIG1heGltdW0gZm9yIHRoZSBkZWZhdWx0IDMwMDAgSU9QUyAoMC4yNSBNaUIvcyBwZXIgSU9QUyk7IHByb3Zpc2lvbiBJb3BzIGV4cGxpY2l0bHkgb3IgbG93ZXIgdGhlIHRocm91Z2hwdXRcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdG5vdCBfcGZfdm9saW9wc19oYXNfaW9wcyhuYW1lKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdHQgPiA3NTBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHMtcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiaW8xIGFuZCBpbzIgdm9sdW1lcyByZXF1aXJlIHRoZSBJb3BzIHByb3BlcnR5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBwZi1lYzItdm9sdW1lLWlvcHMgdmFsaWRhdGVzIElvcHMgdmFsdWVzOyB0aGlzIHJ1bGUgY292ZXJzIHRoZVxcbiMgY29uZGl0aW9uYWwgcmVxdWlyZW1lbnQgKGFic2VuY2UpIHRoYXQgdGhlIHNjaGVtYSBjYW5ub3QgZXhwcmVzcy5cXG5fcGZfZWMydmlyX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHMtcmVxdWlyZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVzIHZvbHVtZXMgcmVxdWlyZSBJb3BzOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGwgd2l0aCBcXFxcXFxcIlRoZSBwYXJhbWV0ZXIgaW9wcyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgJXMgdm9sdW1lcy5cXFxcXFxcIlxcXCIsIFt2dCwgdnRdKSxcXG5cXHRcXFwiU2V0IElvcHMgKGlvMTogMTAwLTY0MDAwLCBpbzI6IDEwMC0yNTYwMDApXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJpbzFcXFwiLCBcXFwiaW8yXFxcIn1cXG5cXHRfcGZfZWMydmlyX2Fic2VudChuYW1lLCBcXFwiSW9wc1xcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1rbXMtZW5jcnlwdGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkttc0tleUlkIG9uIGEgdm9sdW1lIHJlcXVpcmVzIEVuY3J5cHRlZCB0byBiZSB0cnVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6Vm9sdW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VjMnZrZV9iYWQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJFbmNyeXB0ZWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9lYzJ2a2VfYmFkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW5jcnlwdGVkXFxcIikgPT0gZmFsc2VcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUta21zLWVuY3J5cHRlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS21zS2V5SWRcXFwiLFxcblxcdFxcXCJLbXNLZXlJZCBpcyBzZXQgYnV0IEVuY3J5cHRlZCBpcyBub3QgdHJ1ZTsgRUMyIHJlamVjdHMgdGhlIHZvbHVtZSB3aXRoIFxcXFxcXFwiVGhlIHBhcmFtZXRlciBbS21zS2V5SWRdIHJlcXVpcmVzIHRoZSBwYXJhbWV0ZXIgRW5jcnlwdGVkIHRvIGJlIHNldC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBFbmNyeXB0ZWQ6IHRydWUgYWxvbmdzaWRlIEttc0tleUlkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVWb2x1bWUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJLbXNLZXlJZFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRfcGZfZWMydmtlX2JhZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi12b2x1bWUtc2l6ZS1taW5pbXVtXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVCUyB2b2x1bWUgc2l6ZSBtdXN0IG1lZXQgdGhlIHZvbHVtZSB0eXBlIG1pbmltdW0gKGlvMS9pbzIgNCBHaUIsIHN0MS9zYzEgMTI1IEdpQilcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgbWluaW11bXM6IHRoZSBoaXN0b3JpY2FsIDE2Mzg0IEdpQiBtYXhpbXVtIG5vIGxvbmdlciBob2xkc1xcbiMgKGEgMTcwMDAgR2lCIGdwMyBkZXBsb3llZCBjbGVhbiBvbiAyMDI2LTA5LTAzKS5cXG5fcGZfZWMydnNtX21pbiA6PSB7XFxcImlvMVxcXCI6IDQsIFxcXCJpbzJcXFwiOiA0LCBcXFwic3QxXFxcIjogMTI1LCBcXFwic2MxXFxcIjogMTI1fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1zaXplLW1pbmltdW1cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiLFxcblxcdHNwcmludGYoXFxcIlNpemUgJXYgR2lCIGlzIGJlbG93IHRoZSAldiBHaUIgbWluaW11bSBmb3IgJXMgdm9sdW1lcyAoXFxcXFxcXCIlcyB2b2x1bWVzIG11c3QgYmUgYXQgbGVhc3QgJXYgR2lCIGluIHNpemUuXFxcXFxcXCIpXFxcIiwgW3MsIG1uLCB2dCwgdnQsIG1uXSksXFxuXFx0XFxcIlJhaXNlIFNpemUgdG8gdGhlIHZvbHVtZSB0eXBlIG1pbmltdW1cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRtbiA6PSBfcGZfZWMydnNtX21pblt2dF1cXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiKSlcXG5cXHRzIDwgbW5cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjLWNpZHItYmxvY2stc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJWUEMgSVB2NCBDSURSIGJsb2NrIG5ldG1hc2sgbXVzdCBiZSBiZXR3ZWVuIC8xNiBhbmQgLzI4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lIHZhbGlkYXRlcyBzdWJuZXQgY29udGFpbm1lbnQgKEUzMDU5KSBhbmQgb3ZlcmxhcCAoRTMwNjApXFxuIyBidXQgYWNjZXB0cyBhbnkgVlBDIG5ldG1hc2s7IEVDMiByZWplY3RzIGFueXRoaW5nIG91dHNpZGUgLzE2Li4vMjguXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjLWNpZHItYmxvY2stc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ2lkckJsb2NrXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJWUEMgQ0lEUiBibG9jayAnJXMnIGhhcyBuZXRtYXNrIC8ldjsgRUMyIG9ubHkgYWNjZXB0cyAvMTYgdGhyb3VnaCAvMjggKFxcXFxcXFwiVGhlIENJRFIgJyVzJyBpcyBpbnZhbGlkLlxcXFxcXFwiKVxcXCIsIFtjLCBwLCBjXSksXFxuXFx0XFxcIlVzZSBhIG5ldG1hc2sgYmV0d2VlbiAvMTYgYW5kIC8yOFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENcXFwiKVxcblxcdGMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5DaWRyQmxvY2tcXFwiKVxcblxcdGlzX3N0cmluZyhjKVxcblxcdHJlZ2V4Lm1hdGNoKGBeWzAtOV0rXFxcXC5bMC05XStcXFxcLlswLTldK1xcXFwuWzAtOV0rL1swLTldKyRgLCBjKVxcblxcdHAgOj0gdG9fbnVtYmVyKHNwbGl0KGMsIFxcXCIvXFxcIilbMV0pXFxuXFx0X3BmX2VjMnZjc19vdXQocClcXG59XFxuXFxuX3BmX2VjMnZjc19vdXQocCkgaWYgcCA8IDE2XFxuXFxuX3BmX2VjMnZjc19vdXQocCkgaWYgcCA+IDI4XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjZS1nYXRld2F5LXNlcnZpY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2F0ZXdheSBWUEMgZW5kcG9pbnRzIG9ubHkgZXhpc3QgZm9yIFMzIGFuZCBEeW5hbW9EQlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBWcGNFbmRwb2ludFR5cGUgZGVmYXVsdHMgdG8gR2F0ZXdheSAobWVhc3VyZWQ6IGEgdHlwZS1sZXNzIGVuZHBvaW50XFxuIyBmYWlscyB3aXRoIFxcXCJFbmRwb2ludCB0eXBlIChHYXRld2F5KSAuLi5cXFwiIG1lc3NhZ2VzKS5cXG5fcGZfZWMydmdzX2dhdGV3YXkobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWcGNFbmRwb2ludFR5cGVcXFwiLCBcXFwiR2F0ZXdheVxcXCIpID09IFxcXCJHYXRld2F5XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGNlLWdhdGV3YXktc2VydmljZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIk9ubHkgUzMgYW5kIER5bmFtb0RCIG9mZmVyIEdhdGV3YXkgZW5kcG9pbnRzOyBcXFxcXFxcIiVzXFxcXFxcXCIgZmFpbHMgd2l0aCBcXFxcXFxcIkVuZHBvaW50IHR5cGUgKEdhdGV3YXkpIGRvZXMgbm90IG1hdGNoIGF2YWlsYWJsZSBzZXJ2aWNlIHR5cGVzXFxcXFxcXCJcXFwiLCBbY29uY2F0KFxcXCIuXFxcIiwgcGFydHMpXSksXFxuXFx0XFxcIlVzZSBjb20uYW1hem9uYXdzLjxyZWdpb24+LnMzIG9yIC5keW5hbW9kYiwgb3Igc3dpdGNoIFZwY0VuZHBvaW50VHlwZSB0byBJbnRlcmZhY2VcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC9wcml2YXRlbGluay9nYXRld2F5LWVuZHBvaW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZQQ0VuZHBvaW50XFxcIilcXG5cXHRfcGZfZWMydmdzX2dhdGV3YXkobmFtZSlcXG5cXHRzbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoc24pXFxuXFx0cGFydHMgOj0gc3BsaXQoc24sIFxcXCIuXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gNFxcblxcdHBhcnRzWzBdID09IFxcXCJjb21cXFwiXFxuXFx0cGFydHNbMV0gPT0gXFxcImFtYXpvbmF3c1xcXCJcXG5cXHRub3QgcGFydHNbM10gaW4ge1xcXCJzM1xcXCIsIFxcXCJkeW5hbW9kYlxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZwY2Utc2VydmljZS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVlBDIGVuZHBvaW50IHNlcnZpY2UgbmFtZXMgbXVzdCB1c2UgdGhlIGRlcGxveSByZWdpb24gdW5sZXNzIFNlcnZpY2VSZWdpb24gaXMgc2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWMydnNyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvcHJpdmF0ZWxpbmsvcHJpdmF0ZWxpbmstYWNjZXNzLWF3cy1zZXJ2aWNlcy5odG1sXFxcIlxcblxcbiMgT25seSBjb20uYW1hem9uYXdzLjxyZWdpb24+LjxzZXJ2aWNlPiBuYW1lcyB3aGVyZSB0aGUgdGhpcmQgc2VnbWVudCBpc1xcbiMgcmVnaW9uLXNoYXBlZDsgbmFtZXMgbGlrZSBjb20uYW1hem9uYXdzLnMzLWdsb2JhbC5hY2Nlc3Nwb2ludCBzdGF5IG91dC5cXG5fcGZfZWMydnNyX3BhcnRzKG5hbWUpIDo9IHBhcnRzIGlmIHtcXG5cXHRzbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoc24pXFxuXFx0cGFydHMgOj0gc3BsaXQoc24sIFxcXCIuXFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gNFxcblxcdHBhcnRzWzBdID09IFxcXCJjb21cXFwiXFxuXFx0cGFydHNbMV0gPT0gXFxcImFtYXpvbmF3c1xcXCJcXG5cXHRyZWdleC5tYXRjaChgXlthLXpdezJ9KC1bYS16XSspKy1bMC05XSskYCwgcGFydHNbMl0pXFxufVxcblxcbl9wZl9lYzJ2c3JfYWJzZW50KG5hbWUsIGtleSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGtleSwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12cGNlLXNlcnZpY2UtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXJ2aWNlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW5kcG9pbnQgc2VydmljZSAnJXMnIG5hbWVzIHJlZ2lvbiAlcyBidXQgdGhpcyBzdGFjayBkZXBsb3lzIHRvICVzOyB3aXRob3V0IFNlcnZpY2VSZWdpb24gdGhlIGxvb2t1cCBpcyByZWdpb25hbCBhbmQgdGhlIGNyZWF0ZSBmYWlsc1xcXCIsIFtjb25jYXQoXFxcIi5cXFwiLCBwYXJ0cyksIHBhcnRzWzJdLCByZWdpb25dKSxcXG5cXHRcXFwiVXNlIGNvbS5hbWF6b25hd3MuPGRlcGxveS1yZWdpb24+LjxzZXJ2aWNlPiwgb3Igc2V0IFNlcnZpY2VSZWdpb24gZm9yIGNyb3NzLXJlZ2lvbiBQcml2YXRlTGlua1xcXCIsXFxuXFx0X3BmX2VjMnZzcl91cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0cGFydHMgOj0gX3BmX2VjMnZzcl9wYXJ0cyhuYW1lKVxcblxcdHBhcnRzWzJdICE9IHJlZ2lvblxcblxcdF9wZl9lYzJ2c3JfYWJzZW50KG5hbWUsIFxcXCJTZXJ2aWNlUmVnaW9uXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdnBjZS10eXBlLWNvbmZpZ1wiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJuZXRJZHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gR2F0ZXdheSBlbmRwb2ludHMgKGFuZCBSb3V0ZVRhYmxlSWRzIG9ubHkgb24gR2F0ZXdheSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWUENFbmRwb2ludFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lYzJ2dGNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lYzItdnBjZW5kcG9pbnQuaHRtbFxcXCJcXG5cXG5fcGZfZWMydnRjX3R5cGUobmFtZSkgOj0gdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0dCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiVnBjRW5kcG9pbnRUeXBlXFxcIiwgXFxcIkdhdGV3YXlcXFwiKVxcbn1cXG5cXG5fcGZfZWMydnRjX2hhcyhuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS10eXBlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3VibmV0SWRzXFxcIixcXG5cXHRcXFwiQSBHYXRld2F5IGVuZHBvaW50IGNhbm5vdCB0YWtlIFN1Ym5ldElkcyAoXFxcXFxcXCJTdWJuZXQgSURzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgSW50ZXJmYWNlIGFuZCBHYXRld2F5TG9hZEJhbGFuY2VyIHR5cGUgVlBDIEVuZHBvaW50cy5cXFxcXFxcIilcXFwiLFxcblxcdFxcXCJSZW1vdmUgU3VibmV0SWRzLCBvciBzZXQgVnBjRW5kcG9pbnRUeXBlOiBJbnRlcmZhY2VcXFwiLFxcblxcdF9wZl9lYzJ2dGNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6VlBDRW5kcG9pbnRcXFwiKVxcblxcdF9wZl9lYzJ2dGNfdHlwZShuYW1lKSA9PSBcXFwiR2F0ZXdheVxcXCJcXG5cXHRfcGZfZWMydnRjX2hhcyhuYW1lLCBcXFwiU3VibmV0SWRzXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdnBjZS10eXBlLWNvbmZpZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm91dGVUYWJsZUlkc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSAlcyBlbmRwb2ludCBjYW5ub3QgdGFrZSBSb3V0ZVRhYmxlSWRzOyBvbmx5IEdhdGV3YXkgZW5kcG9pbnRzIGF0dGFjaCB0byByb3V0ZSB0YWJsZXNcXFwiLCBbdF0pLFxcblxcdFxcXCJSZW1vdmUgUm91dGVUYWJsZUlkcywgb3Igc2V0IFZwY0VuZHBvaW50VHlwZTogR2F0ZXdheVxcXCIsXFxuXFx0X3BmX2VjMnZ0Y191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWUENFbmRwb2ludFxcXCIpXFxuXFx0dCA6PSBfcGZfZWMydnRjX3R5cGUobmFtZSlcXG5cXHR0ICE9IFxcXCJHYXRld2F5XFxcIlxcblxcdGlzX3N0cmluZyh0KVxcblxcdF9wZl9lYzJ2dGNfaGFzKG5hbWUsIFxcXCJSb3V0ZVRhYmxlSWRzXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY2x1c3Rlci1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDUyBjbHVzdGVyIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChtYXggMjU1KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OkNsdXN0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jbHVzdGVyLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNsdXN0ZXJOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbHVzdGVyTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNsdXN0ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpDbHVzdGVyXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2x1c3Rlck5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTV9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250YWluZXJEZWZpbml0aW9ucyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNvbnRhaW5lclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NjZGVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfZWNzY2RlX21zZyA6PSBcXFwiUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBuZWVkcyBhdCBsZWFzdCBvbmUgY29udGFpbmVyOyB0aGUgc2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIGxpc3QgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiXFxuXFxuX3BmX2Vjc2NkZV9maXggOj0gXFxcIkFkZCBhdCBsZWFzdCBvbmUgZW50cnkgdG8gQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIG1hcmtzIG5vIFRhc2tEZWZpbml0aW9uIHByb3BlcnR5IGFzIHJlcXVpcmVkLCBzbyBhblxcbiMgYWJzZW50IG9yIGVtcHR5IENvbnRhaW5lckRlZmluaXRpb25zIHNhaWxzIHRocm91Z2ggc2NoZW1hIHZhbGlkYXRpb24gYW5kXFxuIyBkaWVzIGF0IHJlZ2lzdHJhdGlvbi4gZmxhdHRlbl9saXN0IHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgYWJzZW50IGFuZFxcbiMgZW1wdHkgYWxpa2UsIHNvIGJvdGggYmxvY2tzIHJlYWQgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoaW5wdXQucmVzb3VyY2VzKVxcbiMgdG8gdGVsbCBhIGxpdGVyYWwgZW1wdHkgbGlzdCBmcm9tIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBzdWNoIGFzIEZuOjpJZi5cXG5fcGZfZWNzY2RlX3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb250YWluZXJEZWZpbml0aW9uc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHJhdylcXG5cXHRjb3VudChyYXcpID09IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1vdmVyLXRhc2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgTWVtb3J5IG11c3Qgbm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzaW5nbGUgY29udGFpbmVyJ3MgaGFyZCBNZW1vcnkgbGltaXQgY2Fubm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnkuXFxuIyBUYXNrIE1lbW9yeSBhcnJpdmVzIGFzIGEgc3RyaW5nIChcXFwiNTEyXFxcIik7IHRvX251bWJlciBjb3ZlcnMgYm90aCBzcGVsbGluZ3MgYW5kXFxuIyBtYWtlcyB0aGUgcnVsZSBza2lwIHdoZW4gZWl0aGVyIHNpZGUgaXMgdW5yZXNvbHZhYmxlIG9yIEdCLXN1ZmZpeGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnkgJXYgYWJvdmUgdGhlIHRhc2stbGV2ZWwgTWVtb3J5ICV2OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgJ21lbW9yeScgc2V0dGluZyBmb3IgY29udGFpbmVyICclcycgaXMgZ3JlYXRlciB0aGFuIGZvciB0aGUgdGFza1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBjbSwgdG0sIGNuYW1lXSksXFxuXFx0XFxcIkxvd2VyIHRoZSBjb250YWluZXIgTWVtb3J5IHRvIGF0IG1vc3QgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LCBvciByYWlzZSB0aGUgdGFzay1sZXZlbCBNZW1vcnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dG0gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIikpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0Y20gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVxcXCIsIG51bGwpKVxcblxcdGNtID4gdG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgbmVlZHMgTWVtb3J5IG9yIE1lbW9yeVJlc2VydmF0aW9uIHdoZW4gdGhlIHRhc2sgc2V0cyBubyBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NtZW1yZXFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBXaGVuIHRoZSB0YXNrIGRlZmluaXRpb24gaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5LCBldmVyeSBjb250YWluZXIgbXVzdCBzZXRcXG4jIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbi4gUHJvdmluZyB0cnVlIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZFxcbiMgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcyk6IHJlc29sdmUoKSBpcyB1bmRlZmluZWQgZm9yIGEgbWlzc2luZyBrZXkgYW5kIGZvclxcbiMgYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGFsaWtlLCBzbyBpdCBjYW5ub3QgdGVsbCBcXFwiYWJzZW50XFxcIiBmcm9tIFxcXCJSZWYgdG8gYVxcbiMgcGFyYW1ldGVyXFxcIi4gVGhlIGlzX29iamVjdCBndWFyZCBmYWlscyBjbG9zZWQgaWYgdGhhdCBpbnRlcm5hbCBzaGFwZSBjaGFuZ2VzLlxcbl9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTWVtb3J5XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIG5laXRoZXIgTWVtb3J5IG5vciBNZW1vcnlSZXNlcnZhdGlvbiBhbmQgdGhlIHRhc2sgaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJBdCBsZWFzdCBvbmUgb2YgJ21lbW9yeScgb3IgJ21lbW9yeVJlc2VydmF0aW9uJyBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2NuYW1lXSksXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSwgb3IgZ2l2ZSB0aGUgY29udGFpbmVyIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvblxcXCIsXFxuXFx0X3BmX2Vjc21lbXJlcV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc21lbXJlcV90YXNrX21lbW9yeV9hYnNlbnQobmFtZSlcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1lbW9yeVJlc2VydmF0aW9uIG11c3Qgbm90IGV4Y2VlZCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWVtb3J5UmVzZXJ2YXRpb24gaXMgYSBzb2Z0IGZsb29yIGFuZCBNZW1vcnkgYSBoYXJkIGNlaWxpbmc7IHRoZSBzZXJ2aWNlXFxuIyByZWplY3RzIGEgZmxvb3IgYWJvdmUgdGhlIGNlaWxpbmcuIHRvX251bWJlciBmYWlscyAoYW5kIHRoZSBydWxlIHNraXBzKSB3aGVuXFxuIyBlaXRoZXIgdmFsdWUgaXMgYWJzZW50IG9yIHVucmVzb2x2YWJsZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIE1lbW9yeVJlc2VydmF0aW9uICV2IGFib3ZlIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiJ21lbW9yeScgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ21lbW9yeVJlc2VydmF0aW9uJ1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBtciwgbV0pLFxcblxcdFxcXCJMb3dlciBNZW1vcnlSZXNlcnZhdGlvbiB0byBhdCBtb3N0IE1lbW9yeSwgb3IgcmFpc2UgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRtciA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSlcXG5cXHRtciA+IG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWR1cGxpY2F0ZS1jb250YWluZXItbmFtZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgZGlhZ25vc3RpYyBwZXIgZHVwbGljYXRlZCBsYXRlciBvY2N1cnJlbmNlOyBvbmx5IGxpdGVyYWwgc3RyaW5nIG5hbWVzXFxuIyBjYW4gYmUgY29tcGFyZWQsIHNvIGEgUmVmLXZhbHVlZCBOYW1lIHNraXBzIGl0cyBwYWlycy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk5hbWVcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciBuYW1lICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblxcXFxcXFwiXFxcIiwgW25hXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgY29udGFpbmVyIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYSBkaXN0aW5jdCBOYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdG5hIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIk5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhuYSlcXG5cXHRuYSA9PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgbXVzdCBiZSAyMS0yMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZXBoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tZXBoZW1lcmFsc3RvcmFnZS5odG1sXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBjYXJyaWVzIG5vIG1pbmltdW0vbWF4aW11bSBmb3IgU2l6ZUluR2lCLCBzbyAyMS0yMDAgaXNcXG4jIGVuZm9yY2VkIG9ubHkgYXQgcmVnaXN0cmF0aW9uIHRpbWUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBiZWxvdyAyMTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRXBoZW1lcmFsU3RvcmFnZSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAyMVxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiVXNlIGEgc2l6ZSBiZXR3ZWVuIDIxIGFuZCAyMDAgR2lCLCBvciBkcm9wIEVwaGVtZXJhbFN0b3JhZ2UgdG8ga2VlcCB0aGUgZGVmYXVsdCAyMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzIDwgMjFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBhYm92ZSAyMDA7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbW9zdCAyMDBcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQlxcXCIsXFxuXFx0X3BmX2Vjc2VwaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIpKVxcblxcdHMgPiAyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdCBsZWFzdCBvbmUgY29udGFpbmVyIG11c3QgYmUgZXNzZW50aWFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVzc2VudGlhbCBkZWZhdWx0cyB0byB0cnVlLCBzbyB0aGUgcnVsZSBmaXJlcyBvbmx5IHdoZW4gZXZlcnkgY29udGFpbmVyIHNheXNcXG4jIEVzc2VudGlhbDogZmFsc2UgZXhwbGljaXRseS4gQSBjb250YWluZXIgd2hvc2UgRXNzZW50aWFsIGlzIHVucmVzb2x2YWJsZSAob3JcXG4jIGEgbm9uLWJvb2xlYW4pIGJyZWFrcyB0aGUgYGV2ZXJ5YCwgYW5kIHRoZSBydWxlIHNraXBzIOKAlCBhYnNlbmNlIG9mIGFuXFxuIyBlc3NlbnRpYWwgY29udGFpbmVyIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1lc3NlbnRpYWwtY29udGFpbmVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0XFxcIkV2ZXJ5IGNvbnRhaW5lciBzZXRzIEVzc2VudGlhbDogZmFsc2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIlRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IGhhdmUgYW55IGVzc2VudGlhbCBjb250YWluZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIk1hcmsgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciBFc3NlbnRpYWw6IHRydWUsIG9yIG9taXQgRXNzZW50aWFsIChpdCBkZWZhdWx0cyB0byB0cnVlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0aXRlbXMgOj0gW2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGMgaW4gaXRlbXMge1xcblxcdFxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIkVzc2VudGlhbFxcXCIsIG51bGwpID09IGZhbHNlXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLW5ldHdvcmstbW9kZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGYXJnYXRlIHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyZSBOZXR3b3JrTW9kZSAnYXdzdnBjJ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc25tX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCNuZXR3b3JrX21vZGVcXFwiXFxuXFxuIyByZXNvbHZlKCkgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwidW5yZXNvbHZhYmxlXFxcIiAoYm90aCB1bmRlZmluZWQpLCBzbyB0cnVlXFxuIyBhYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQ7IGEgUmVmLXZhbHVlZCBOZXR3b3JrTW9kZVxcbiMgbm8gbG9uZ2VyIHRyaXBzIHRoZSBub3Qtc2V0IGJsb2NrLlxcbl9wZl9lY3NubV9hYnNlbnQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJOZXR3b3JrTW9kZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrTW9kZSBpcyAnJXMnIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCB1c2UgJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbm1dKSxcXG5cXHRcXFwiU2V0IE5ldHdvcmtNb2RlIHRvICdhd3N2cGMnXFxcIixcXG5cXHRfcGZfZWNzbm1fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHJjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdGlzX2FycmF5KHJjKVxcblxcdFxcXCJGQVJHQVRFXFxcIiBpbiByY1xcblxcdG5tIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cXG4jIE5ldHdvcmtNb2RlIOacquaMh+WumuOBp+OCgiBSZWdpc3RlclRhc2tEZWZpbml0aW9uIOOBr1xcbiMgXFxcIkZhcmdhdGUgb25seSBzdXBwb3J0cyBuZXR3b3JrIG1vZGUgJ2F3c3ZwYycuXFxcIiDjgaflpLHmlZfjgZnjgovvvIgyMDI2LTA5LTAxIOWunyBBUEkg56K66KqN77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRcXFwiTmV0d29ya01vZGUgaXMgbm90IHNldCwgYnV0IHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyaW5nIEZBUkdBVEUgY29tcGF0aWJpbGl0eSBtdXN0IHNldCBpdCB0byAnYXdzdnBjJzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRfcGZfZWNzbm1fYWJzZW50KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZBUkdBVEUgY29tcGF0aWJpbGl0eSByZXF1aXJlcyB0YXNrLWxldmVsIENwdSBhbmQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZmFyZ2NtX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwNDcgY2hlY2tzIHRoZSBDcHUvTWVtb3J5IHBhaXJpbmcgb25seSB3aGVuIGJvdGggYXJlIHByZXNlbnQ7XFxuIyBsZWF2aW5nIG9uZSBvdXQgZW50aXJlbHkgaXMgY2F1Z2h0IGJ5IG5vdGhpbmcgYmVmb3JlIHJlZ2lzdHJhdGlvbi4gVHJ1ZVxcbiMgYWJzZW5jZSBuZWVkcyB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgcGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcXG4jIGZvciB0aGUgaWRpb20pLlxcbl9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSByYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdHJjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS10YXNrLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNwdVxcXCIsXFxuXFx0XFxcIlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzIGluY2x1ZGVzIEZBUkdBVEUgYnV0IHRoZSB0YXNrLWxldmVsIENwdSBpcyBtaXNzaW5nOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlcXVpcmVzIHRoYXQgJ2NwdScgYmUgZGVmaW5lZCBhdCB0aGUgdGFzayBsZXZlbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IHRhc2stbGV2ZWwgQ3B1IChhbmQgTWVtb3J5KSB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCBGYXJnYXRlIGNvbWJpbmF0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2ZhcmdjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9mYXJnYXRlKG5hbWUpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwgXFxcIkNwdVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZW1vcnlcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBNZW1vcnkgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdtZW1vcnknIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSAoYW5kIENwdSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJNZW1vcnlcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWNvZGVkZXBsb3ktbGJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ09ERV9ERVBMT1kgZGVwbG95bWVudCBjb250cm9sbGVyIHJlcXVpcmVzIGEgbG9hZCBiYWxhbmNlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEZpcmVzIG9uIGEgbWlzc2luZyBrZXkgb3IgYSBwcmVzZW50LWJ1dC1lbXB0eSBsaXN0OyBhbiB1bnJlc29sdmFibGVcXG4jIExvYWRCYWxhbmNlcnMgdmFsdWUgc3RheXMgc2lsZW50IChtYXJrZXIgb2JqZWN0cyBhcmUgXFxcInByZXNlbnRcXFwiKS5cXG5fcGZfZWNzY2RsYl9ub25lKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTG9hZEJhbGFuY2Vyc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX2Vjc2NkbGJfbm9uZShuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0bGJzIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJMb2FkQmFsYW5jZXJzXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShsYnMpXFxuXFx0Y291bnQobGJzKSA9PSAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtY29kZWRlcGxveS1sYlxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbnRyb2xsZXJcXFwiLFxcblxcdFxcXCJEZXBsb3ltZW50Q29udHJvbGxlciBpcyBDT0RFX0RFUExPWSBidXQgbm8gTG9hZEJhbGFuY2VycyBhcmUgY29uZmlndXJlZDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwidGhlIHNlcnZpY2UgcmVxdWlyZXMgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlciBvciBOZXR3b3JrIExvYWQgQmFsYW5jZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIExvYWRCYWxhbmNlcnMgZW50cnkgd2l0aCBhIHRhcmdldCBncm91cCwgb3IgdXNlIHRoZSBFQ1MgY29udHJvbGxlclxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVwbG95bWVudENvbnRyb2xsZXIuVHlwZVxcXCIpID09IFxcXCJDT0RFX0RFUExPWVxcXCJcXG5cXHRfcGZfZWNzY2RsYl9ub25lKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtZGFlbW9uLWRlc2lyZWQtY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiREFFTU9OIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZG9lcyBub3QgYWNjZXB0IERlc2lyZWRDb3VudFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIERlc2lyZWRDb3VudCAwIGZhaWxzIHRvbyAoc3YwM2IpIC0gYW55IHByZXNlbmNlIG9mIHRoZSBrZXkgaXMgdGhlIHZpb2xhdGlvbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWRhZW1vbi1kZXNpcmVkLWNvdW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXNpcmVkQ291bnRcXFwiLFxcblxcdFxcXCJTY2hlZHVsaW5nU3RyYXRlZ3kgaXMgREFFTU9OIGJ1dCBEZXNpcmVkQ291bnQgaXMgc2V0OyBDcmVhdGVTZXJ2aWNlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgZGFlbW9uIHNjaGVkdWxpbmcgc3RyYXRlZ3kgZG9lcyBub3Qgc3VwcG9ydCBhIGRlc2lyZWQgY291bnQgZm9yIHNlcnZpY2VzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgRGVzaXJlZENvdW50IGZyb20gREFFTU9OIHNlcnZpY2VzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TY2hlZHVsaW5nU3RyYXRlZ3lcXFwiKSA9PSBcXFwiREFFTU9OXFxcIlxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG5vdCBvYmplY3QuZ2V0KHByb3BzLCBcXFwiRGVzaXJlZENvdW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWRlcGxveW1lbnQtcGVyY2VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEZXBsb3ltZW50Q29uZmlndXJhdGlvbiBwZXJjZW50IGJvdW5kcyAobWluIDw9IDEwMCwgbWF4ID49IDEwMClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1kZXBsb3ltZW50LXBlcmNlbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb25maWd1cmF0aW9uLk1pbmltdW1IZWFsdGh5UGVyY2VudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWluaW11bUhlYWx0aHlQZXJjZW50ICV2IGV4Y2VlZHMgMTAwOyBDcmVhdGVTZXJ2aWNlIGZhaWxzIHdpdGggXFxcXFxcXCJtaW5pbXVtSGVhbHRoeVBlcmNlbnQgbXVzdCBiZSBhdCBtb3N0IDEwMFxcXFxcXFwiXFxcIiwgW21pbnBdKSxcXG5cXHRcXFwiS2VlcCBNaW5pbXVtSGVhbHRoeVBlcmNlbnQgYXQgMTAwIG9yIGJlbG93XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0bWlucCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NaW5pbXVtSGVhbHRoeVBlcmNlbnRcXFwiKSlcXG5cXHRtaW5wID4gMTAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZGVwbG95bWVudC1wZXJjZW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZXBsb3ltZW50Q29uZmlndXJhdGlvbi5NYXhpbXVtUGVyY2VudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWF4aW11bVBlcmNlbnQgJXYgaXMgYmVsb3cgMTAwOyBDcmVhdGVTZXJ2aWNlIGZhaWxzIHdpdGggXFxcXFxcXCJtYXhpbXVtUGVyY2VudCBtdXN0IGJlIGF0IGxlYXN0IDEwMFxcXFxcXFwiXFxcIiwgW21heHBdKSxcXG5cXHRcXFwiS2VlcCBNYXhpbXVtUGVyY2VudCBhdCAxMDAgb3IgYWJvdmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRtYXhwIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlcGxveW1lbnRDb25maWd1cmF0aW9uLk1heGltdW1QZXJjZW50XFxcIikpXFxuXFx0bWF4cCA8IDEwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1zZXJ2aWNlLWZhcmdhdGUtcGxhY2VtZW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlBsYWNlbWVudCBjb25zdHJhaW50cyBhbmQgc3RyYXRlZ2llcyBhcmUgbm90IHN1cHBvcnRlZCBvbiBGQVJHQVRFXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtZmFyZ2F0ZS1wbGFjZW1lbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBba2V5XSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgc2V0IGJ1dCB0aGUgRkFSR0FURSBsYXVuY2ggdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRhc2sgcGxhY2VtZW50OyBDcmVhdGVTZXJ2aWNlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW2tleV0pLFxcblxcdFxcXCJSZW1vdmUgcGxhY2VtZW50IGNvbnN0cmFpbnRzL3N0cmF0ZWdpZXMgZnJvbSBGYXJnYXRlIHNlcnZpY2VzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5MYXVuY2hUeXBlXFxcIikgPT0gXFxcIkZBUkdBVEVcXFwiXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJQbGFjZW1lbnRDb25zdHJhaW50c1xcXCIsIFxcXCJQbGFjZW1lbnRTdHJhdGVnaWVzXFxcIn1cXG5cXHRjb3VudChbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtrZXldKSldKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1sYXVuY2gtdHlwZS1jYXBhY2l0eS1wcm92aWRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYXVuY2hUeXBlIGFuZCBDYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3kgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLWxhdW5jaC10eXBlLWNhcGFjaXR5LXByb3ZpZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DYXBhY2l0eVByb3ZpZGVyU3RyYXRlZ3lcXFwiLFxcblxcdHNwcmludGYoXFxcIkxhdW5jaFR5cGUgJyVzJyBhbmQgQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5IGNhbm5vdCBib3RoIGJlIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiU3BlY2lmeWluZyBib3RoIGEgbGF1bmNoIHR5cGUgYW5kIGNhcGFjaXR5IHByb3ZpZGVyIHN0cmF0ZWd5IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsIFtsdF0pLFxcblxcdFxcXCJSZW1vdmUgTGF1bmNoVHlwZSBvciB0aGUgY2FwYWNpdHkgcHJvdmlkZXIgc3RyYXRlZ3lcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVNlcnZpY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHRsdCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyhsdClcXG5cXHRjb3VudChbcSB8IHNvbWUgcSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ2FwYWNpdHlQcm92aWRlclN0cmF0ZWd5XFxcIildKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1sYi10YXJnZXQtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgbG9hZCBiYWxhbmNlciBlbnRyeSB0YWtlcyBlaXRoZXIgVGFyZ2V0R3JvdXBBcm4gb3IgTG9hZEJhbGFuY2VyTmFtZSwgbm90IGJvdGhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpTZXJ2aWNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3Mtc2VydmljZS1sYi10YXJnZXQtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJzXFxcIixcXG5cXHRcXFwiQSBMb2FkQmFsYW5jZXJzIGVudHJ5IHNldHMgYm90aCBUYXJnZXRHcm91cEFybiBhbmQgTG9hZEJhbGFuY2VyTmFtZTsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwibG9hZEJhbGFuY2VyTmFtZSBhbmQgdGFyZ2V0R3JvdXBBcm4gY2Fubm90IGJvdGggYmUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIG9mIFRhcmdldEdyb3VwQXJuIChBTEIvTkxCKSBvciBMb2FkQmFsYW5jZXJOYW1lIChDTEIpIHBlciBlbnRyeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2Vyc1xcXCIpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRub3Qgb2JqZWN0LmdldChlbnRyeSwgXFxcIlRhcmdldEdyb3VwQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG5vdCBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiTG9hZEJhbGFuY2VyTmFtZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3Mtc2VydmljZS1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDUyBzZXJ2aWNlIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChtYXggMjU1KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNlcnZpY2VOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJTZXJ2aWNlTmFtZSAnJXMnIGlzIHJlamVjdGVkIGJ5IHRoZSBzZXJ2aWNlOiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLCBbdl0pLFxcblxcdFxcXCJSZW5hbWUgaXQgdG8gc2F0aXNmeSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUsIGF0IG1vc3QgMjU1IGNoYXJhY3RlcnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNsdXN0ZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpTZXJ2aWNlXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmljZU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTV9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtbmV0d29yay1jb25maWctbW9kZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOZXR3b3JrQ29uZmlndXJhdGlvbiByZXF1aXJlcyBhbiBhd3N2cGMgdGFzayBkZWZpbml0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6U2VydmljZVwiLFxuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUgc2hpcHMgRTMwNTIgZm9yIHRoZSBpbnZlcnNlIChhd3N2cGMgdGFzayBkZWZpbml0aW9uIHdpdGhvdXRcXG4jIE5ldHdvcmtDb25maWd1cmF0aW9uKTsgdGhpcyBkaXJlY3Rpb24gaXMgdW5ndWFyZGVkLiBPbmx5IGFuIGV4cGxpY2l0XFxuIyBub24tYXdzdnBjIE5ldHdvcmtNb2RlIGZpcmVzIC0gdGhlIGFic2VudC1tb2RlIGRlZmF1bHQgaXMgdW5iZW5jaGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLXNlcnZpY2UtbmV0d29yay1jb25maWctbW9kZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTmV0d29ya0NvbmZpZ3VyYXRpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIk5ldHdvcmtDb25maWd1cmF0aW9uIGlzIHNldCBidXQgdGhlIHJlZmVyZW5jZWQgdGFzayBkZWZpbml0aW9uIHVzZXMgTmV0d29ya01vZGUgJyVzJzsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiTmV0d29yayBDb25maWd1cmF0aW9uIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGdpdmVuIG5ldHdvcmtNb2RlIG9mIHRoaXMgdGFzayBkZWZpbml0aW9uLlxcXFxcXFwiXFxcIiwgW25tXSksXFxuXFx0XFxcIlVzZSBhbiBhd3N2cGMgdGFzayBkZWZpbml0aW9uLCBvciBkcm9wIE5ldHdvcmtDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTZXJ2aWNlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6U2VydmljZVxcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0bm90IG9iamVjdC5nZXQocHJvcHMsIFxcXCJOZXR3b3JrQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHR0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHR0ZCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRubSA6PSByZXNvbHZlKHRkLCBcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG5tKVxcblxcdG5tICE9IFxcXCJhd3N2cGNcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXNlcnZpY2UtcGxhdGZvcm0tdmVyc2lvbi1lYzJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUGxhdGZvcm1WZXJzaW9uIGlzIG5vdCBhbGxvd2VkIHdpdGggdGhlIEVDMiBsYXVuY2ggdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlNlcnZpY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1zZXJ2aWNlLXBsYXRmb3JtLXZlcnNpb24tZWMyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QbGF0Zm9ybVZlcnNpb25cXFwiLFxcblxcdFxcXCJMYXVuY2hUeXBlIGlzIEVDMiBidXQgUGxhdGZvcm1WZXJzaW9uIGlzIHNldDsgQ3JlYXRlU2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiVGhlIHBsYXRmb3JtIHZlcnNpb24gbXVzdCBiZSBudWxsIHdoZW4gc3BlY2lmeWluZyBhbiBFQzIgbGF1bmNoIHR5cGVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQbGF0Zm9ybVZlcnNpb24gKGl0IGFwcGxpZXMgdG8gRmFyZ2F0ZSBvbmx5KVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2VydmljZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlNlcnZpY2VcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTGF1bmNoVHlwZVxcXCIpID09IFxcXCJFQzJcXFwiXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0bm90IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQbGF0Zm9ybVZlcnNpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLXRhc2tkZWYtZmFtaWx5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhc2sgZGVmaW5pdGlvbiBGYW1pbHkgYWxsb3dzIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy10YXNrZGVmLWZhbWlseVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmFtaWx5XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGYW1pbHkgJyVzJyBpcyByZWplY3RlZCBieSB0aGUgc2VydmljZTogbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIiwgW3ZdKSxcXG5cXHRcXFwiUmVuYW1lIGl0IHRvIHNhdGlzZnkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlLCBhdCBtb3N0IDI1NSBjaGFyYWN0ZXJzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9SZWdpc3RlclRhc2tEZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GYW1pbHlcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTlfLV17MSwyNTV9JGAsIHYpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItYWxiLXN1Ym5ldC1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFwcGxpY2F0aW9uIGxvYWQgYmFsYW5jZXJzIG5lZWQgYXQgbGVhc3QgdHdvIHN1Ym5ldHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2VsYnNjX2FsYihuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlR5cGVcXFwiLCBcXFwiYXBwbGljYXRpb25cXFwiKSA9PSBcXFwiYXBwbGljYXRpb25cXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItYWxiLXN1Ym5ldC1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3VibmV0c1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGFwcGxpY2F0aW9uIGxvYWQgYmFsYW5jZXIgbGlzdHMgJXYgc3VibmV0KHMpOyBFTEIgcmVxdWlyZXMgYXQgbGVhc3QgdHdvIGluIGRpZmZlcmVudCBBWnMgKFxcXFxcXFwiQXQgbGVhc3QgdHdvIHN1Ym5ldHMgaW4gdHdvIGRpZmZlcmVudCBBdmFpbGFiaWxpdHkgWm9uZXMgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIilcXFwiLCBbY291bnQoc3VicyldKSxcXG5cXHRcXFwiTGlzdCB0d28gb3IgbW9yZSBzdWJuZXRzIGZyb20gZGlmZmVyZW50IEF2YWlsYWJpbGl0eSBab25lc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMb2FkQmFsYW5jZXIuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRfcGZfZWxic2NfYWxiKG5hbWUpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0c3VicyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiU3VibmV0c1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoc3VicylcXG5cXHRjb3VudChzdWJzKSA8IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1hcHAtY29va2llLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJhcHBfY29va2llIHN0aWNraW5lc3MgcmVxdWlyZXMgYSBjb29raWUgbmFtZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJhY25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL3N0aWNreS1zZXNzaW9ucy5odG1sXFxcIlxcblxcbl9wZl9lbGJhY25fYXR0cihuYW1lLCBrZXkpIDo9IHYgaWYge1xcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG9iamVjdC5nZXQoZW50cnksIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0ga2V5XFxuXFx0diA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVmFsdWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcbn1cXG5cXG5fcGZfZWxiYWNuX2hhcyhuYW1lLCBrZXkpIGlmIF9wZl9lbGJhY25fYXR0cihuYW1lLCBrZXkpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1hcHAtY29va2llLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIsXFxuXFx0XFxcInN0aWNraW5lc3MudHlwZSBhcHBfY29va2llIGhhcyBubyBzdGlja2luZXNzLmFwcF9jb29raWUuY29va2llX25hbWUgKFxcXFxcXFwiWW91IG11c3Qgc2V0IGFuIGFwcGxpY2F0aW9uIGNvb2tpZSBuYW1lIHRvIGVuYWJsZSBzdGlja2luZXNzIG9mIHR5cGUgJ2FwcF9jb29raWUnXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiQWRkIHRoZSBzdGlja2luZXNzLmFwcF9jb29raWUuY29va2llX25hbWUgYXR0cmlidXRlXFxcIixcXG5cXHRfcGZfZWxiYWNuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0X3BmX2VsYmFjbl9hdHRyKG5hbWUsIFxcXCJzdGlja2luZXNzLmVuYWJsZWRcXFwiKSA9PSBcXFwidHJ1ZVxcXCJcXG5cXHRfcGZfZWxiYWNuX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJhcHBfY29va2llXFxcIlxcblxcdG5vdCBfcGZfZWxiYWNuX2hhcyhuYW1lLCBcXFwic3RpY2tpbmVzcy5hcHBfY29va2llLmNvb2tpZV9uYW1lXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1oYy10aW1lb3V0LWludGVydmFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSGVhbHRoIGNoZWNrIHRpbWVvdXQgbXVzdCBiZSBzdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGludGVydmFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFcXVhbGl0eSBpcyByZWplY3RlZCB0b28gKGJlbmNoZWQpOiB0aGUgcmVxdWlyZW1lbnQgaXMgc3RyaWN0bHkgbGVzcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWhjLXRpbWVvdXQtaW50ZXJ2YWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhlYWx0aENoZWNrVGltZW91dFNlY29uZHNcXFwiLFxcblxcdHNwcmludGYoXFxcIkhlYWx0aENoZWNrVGltZW91dFNlY29uZHMgJXYgaXMgbm90IHNtYWxsZXIgdGhhbiBIZWFsdGhDaGVja0ludGVydmFsU2Vjb25kcyAldiAoXFxcXFxcXCJIZWFsdGggY2hlY2sgdGltZW91dCAnJXYnIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBpbnRlcnZhbCAnJXYnXFxcXFxcXCIpXFxcIiwgW3QsIGksIHQsIGldKSxcXG5cXHRcXFwiS2VlcCB0aGUgdGltZW91dCBzdHJpY3RseSBiZWxvdyB0aGUgaW50ZXJ2YWxcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFyZ2V0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tUaW1lb3V0U2Vjb25kc1xcXCIpKVxcblxcdGkgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tJbnRlcnZhbFNlY29uZHNcXFwiKSlcXG5cXHR0ID49IGlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYW1iZGEtdGFyZ2V0LXByb3RvY29sXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIHRhcmdldCBncm91cHMgY2Fubm90IHNwZWNpZnkgUHJvdG9jb2xcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxhbWJkYS10YXJnZXQtcHJvdG9jb2xcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIixcXG5cXHRcXFwiVGFyZ2V0VHlwZSBsYW1iZGEgY2Fubm90IHRha2UgUHJvdG9jb2wgKFxcXFxcXFwiUHJvdG9jb2wgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgdGFyZ2V0IGdyb3VwcyB3aXRoIHRhcmdldCB0eXBlICdsYW1iZGEnXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3RvY29sIGZyb20gdGhlIGxhbWJkYSB0YXJnZXQgZ3JvdXBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFyZ2V0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0VHlwZVxcXCIpID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlByb3RvY29sXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFMQiBpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0MDAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPCAxXFxuXFxuX3BmX2lkbGVfdGltZW91dF9vdXQobikgaWYgbiA+IDQwMDBcXG5cXG5fcGZfbm9uX2FsYihuYW1lKSBpZiB7XFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKVxcblxcdHQgIT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIGlzICV2IGJ1dCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMSBhbmQgNDAwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlcnMuaHRtbCNjb25uZWN0aW9uLWlkbGUtdGltZW91dFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRub3QgX3BmX25vbl9hbGIobmFtZSlcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlckF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2lkbGVfdGltZW91dF9vdXQobnVtKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWxiLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMb2FkIGJhbGFuY2VyIG5hbWVzIGFyZSBhdCBtb3N0IDMyIGFscGhhbnVtZXJpYy9oeXBoZW4gY2hhcnMgYW5kIGNhbm5vdCBiZWdpbiB3aXRoIGludGVybmFsLSBvciBhIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWxibmFtZV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMb2FkQmFsYW5jZXIuaHRtbFxcXCJcXG5cXG5fcGZfZWxibmFtZV9iYWQgY29udGFpbnMgW25hbWUsIG4sIHdoeV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRzdGFydHN3aXRoKG4sIFxcXCJpbnRlcm5hbC1cXFwiKVxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlZ2luIHdpdGggJ2ludGVybmFsLSdcXFwiXFxufVxcblxcbl9wZl9lbGJuYW1lX2JhZCBjb250YWlucyBbbmFtZSwgbiwgd2h5XSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdGVuZHN3aXRoKG4sIFxcXCItXFxcIilcXG5cXHR3aHkgOj0gXFxcImNhbm5vdCBlbmQgd2l0aCBhIGh5cGhlbigtKVxcXCJcXG59XFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0c3RhcnRzd2l0aChuLCBcXFwiLVxcXCIpXFxuXFx0d2h5IDo9IFxcXCJjYW5ub3QgYmVnaW4gd2l0aCBhIGh5cGhlbigtKVxcXCJcXG59XFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0Y291bnQobikgPiAzMlxcblxcdHdoeSA6PSBcXFwiY2Fubm90IGJlIGxvbmdlciB0aGFuICczMicgY2hhcmFjdGVyc1xcXCJcXG59XFxuXFxuX3BmX2VsYm5hbWVfYmFkIGNvbnRhaW5zIFtuYW1lLCBuLCB3aHldIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW0EtWmEtejAtOS1dKiRgLCBuKVxcblxcdHdoeSA6PSBcXFwiY2FuIG9ubHkgY29udGFpbiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoeXBoZW5zKC0pXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxiLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBsb2FkIGJhbGFuY2VyIG5hbWUgJyVzJyAlczsgRUxCIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsXFxcIiwgW24sIHdoeV0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGxvYWQgYmFsYW5jZXIgdG8gYXQgbW9zdCAzMiBhbHBoYW51bWVyaWMgb3IgaHlwaGVuIGNoYXJhY3RlcnMsIHdpdGhvdXQgYSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbiBvciB0aGUgcmVzZXJ2ZWQgaW50ZXJuYWwtIHByZWZpeFxcXCIsXFxuXFx0X3BmX2VsYm5hbWVfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgbiwgd2h5XSBpbiBfcGZfZWxibmFtZV9iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1saXN0ZW5lci1wcm90b2NvbC1sYi10eXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGlzdGVuZXIgcHJvdG9jb2xzIG11c3QgbWF0Y2ggdGhlIGxvYWQgYmFsYW5jZXIgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclwiLFxuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQWxsb3ctc2V0cyB2ZXJiYXRpbSBmcm9tIHRoZSB0d28gYmVuY2hlZCBzZXJ2aWNlIGVycm9ycy5cXG5fcGZfZWxibHB0X2FsbG93IDo9IHtcXFwiYXBwbGljYXRpb25cXFwiOiB7XFxcIkhUVFBcXFwiLCBcXFwiSFRUUFNcXFwifSwgXFxcIm5ldHdvcmtcXFwiOiB7XFxcIlRDUFxcXCIsIFxcXCJRVUlDXFxcIiwgXFxcIlRDUF9RVUlDXFxcIiwgXFxcIlVEUFxcXCIsIFxcXCJUQ1BfVURQXFxcIiwgXFxcIlRMU1xcXCJ9fVxcblxcbl9wZl9lbGJscHRfdHlwZShsYikgOj0gdCBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW2xiXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdHQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlR5cGVcXFwiLCBcXFwiYXBwbGljYXRpb25cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxpc3RlbmVyLXByb3RvY29sLWxiLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJMaXN0ZW5lciBwcm90b2NvbCAnJXMnIGlzIG5vdCB2YWxpZCBmb3IgYSAlcyBsb2FkIGJhbGFuY2VyIChhbGxvd2VkOiAldilcXFwiLCBbcHJvdG8sIHQsIGFsbG93XSksXFxuXFx0XFxcIlVzZSBIVFRQL0hUVFBTIG9uIGFwcGxpY2F0aW9uIExCcyBhbmQgVENQL1VEUC9UTFMvUVVJQyB2YXJpYW50cyBvbiBuZXR3b3JrIExCc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVMaXN0ZW5lci5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclxcXCIpXFxuXFx0bGIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBcm5cXFwiKVxcblxcdGxiIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0dCA6PSBfcGZfZWxibHB0X3R5cGUobGIpXFxuXFx0YWxsb3cgOj0gX3BmX2VsYmxwdF9hbGxvd1t0XVxcblxcdHByb3RvIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJvdG9jb2xcXFwiKVxcblxcdGlzX3N0cmluZyhwcm90bylcXG5cXHRub3QgcHJvdG8gaW4gYWxsb3dcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1ydWxlLXByaW9yaXR5LXVuaXF1ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpc3RlbmVyIHJ1bGVzIG9uIHRoZSBzYW1lIGxpc3RlbmVyIG11c3QgaGF2ZSBkaXN0aW5jdCBwcmlvcml0aWVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6Okxpc3RlbmVyUnVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgcmVzb2x2ZSgpIHR1cm5zIGEgUmVmL0dldEF0dCB0byBhIHNpYmxpbmcgbGlzdGVuZXIgaW50byBpdHMgbG9naWNhbFxcbiMgaWQsIHNvIGJvdGggUmVmLXdpcmVkIGFuZCBpZGVudGljYWwtbGl0ZXJhbCBMaXN0ZW5lckFybnMgY29tcGFyZSBlcXVhbC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXJ1bGUtcHJpb3JpdHktdW5pcXVlXFxcIiwgXFxcIkVSUk9SXFxcIiwgcjIsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJpb3JpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIlByaW9yaXR5ICV2IGlzIGFsc28gdXNlZCBieSAnJXMnIG9uIHRoZSBzYW1lIGxpc3RlbmVyIChcXFxcXFxcIlByaW9yaXR5ICcldicgaXMgY3VycmVudGx5IGluIHVzZVxcXFxcXFwiKVxcXCIsIFtwMSwgcjEsIHAxXSksXFxuXFx0XFxcIkdpdmUgZWFjaCBydWxlIG9uIGEgbGlzdGVuZXIgYSBkaXN0aW5jdCBwcmlvcml0eVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVSdWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSByMSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclJ1bGVcXFwiKVxcblxcdHNvbWUgcjIgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TGlzdGVuZXJSdWxlXFxcIilcXG5cXHRyMSA8IHIyXFxuXFx0bDEgOj0gcmVzb2x2ZShyMSwgXFxcIlByb3BlcnRpZXMuTGlzdGVuZXJBcm5cXFwiKVxcblxcdGwyIDo9IHJlc29sdmUocjIsIFxcXCJQcm9wZXJ0aWVzLkxpc3RlbmVyQXJuXFxcIilcXG5cXHRsMSA9PSBsMlxcblxcdHAxIDo9IHRvX251bWJlcihyZXNvbHZlKHIxLCBcXFwiUHJvcGVydGllcy5Qcmlvcml0eVxcXCIpKVxcblxcdHAyIDo9IHRvX251bWJlcihyZXNvbHZlKHIyLCBcXFwiUHJvcGVydGllcy5Qcmlvcml0eVxcXCIpKVxcblxcdHAxID09IHAyXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItc3RpY2tpbmVzcy10eXBlLXByb3RvY29sXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3RpY2tpbmVzcyB0eXBlIGxiX2Nvb2tpZSBuZWVkcyBhbiBIVFRQLXByb3RvY29sIHRhcmdldCBncm91cCwgc291cmNlX2lwIGEgVENQIG9uZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJzdHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL3N0aWNreS1zZXNzaW9ucy5odG1sXFxcIlxcblxcbl9wZl9lbGJzdHBfYXR0cihuYW1lLCBrZXkpIDo9IHYgaWYge1xcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRlbnRyeSA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGVudHJ5KVxcblxcdG9iamVjdC5nZXQoZW50cnksIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0ga2V5XFxuXFx0diA6PSBvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVmFsdWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh2KVxcbn1cXG5cXG4jIE9ubHkgdGhlIHR3byBiZW5jaGVkIHBhaXJzIGFyZSBjbGFpbWVkLlxcbl9wZl9lbGJzdHBfYmFkKG5hbWUpIDo9IFtcXFwibGJfY29va2llXFxcIiwgXFxcIlRDUFxcXCJdIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3RvY29sXFxcIikgPT0gXFxcIlRDUFxcXCJcXG5cXHRfcGZfZWxic3RwX2F0dHIobmFtZSwgXFxcInN0aWNraW5lc3MudHlwZVxcXCIpID09IFxcXCJsYl9jb29raWVcXFwiXFxufVxcblxcbl9wZl9lbGJzdHBfYmFkKG5hbWUpIDo9IFtcXFwic291cmNlX2lwXFxcIiwgXFxcIkhUVFBcXFwiXSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJIVFRQXFxcIlxcblxcdF9wZl9lbGJzdHBfYXR0cihuYW1lLCBcXFwic3RpY2tpbmVzcy50eXBlXFxcIikgPT0gXFxcInNvdXJjZV9pcFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1zdGlja2luZXNzLXR5cGUtcHJvdG9jb2xcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiU3RpY2tpbmVzcyB0eXBlICclcycgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGFyZ2V0IGdyb3VwcyB3aXRoIHRoZSAlcyBwcm90b2NvbFxcXCIsIFtwYWlyWzBdLCBwYWlyWzFdXSksXFxuXFx0XFxcIlVzZSBzb3VyY2VfaXAgc3RpY2tpbmVzcyBmb3IgVENQIHRhcmdldCBncm91cHMgYW5kIGNvb2tpZSBzdGlja2luZXNzIGZvciBIVFRQIG9uZXNcXFwiLFxcblxcdF9wZl9lbGJzdHBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRwYWlyIDo9IF9wZl9lbGJzdHBfYmFkKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGNwLWhlYWx0aC1jaGVjay1wYXRoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVENQIGhlYWx0aCBjaGVja3MgY2Fubm90IHRha2UgYSBoZWFsdGggY2hlY2sgcGF0aFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lbGJ0Y2hwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRhcmdldEdyb3VwLmh0bWxcXFwiXFxuXFxuX3BmX2VsYnRjaHBfdGNwX2hjKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSGVhbHRoQ2hlY2tQcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxuXFxuIyBIZWFsdGhDaGVja1Byb3RvY29sIGRlZmF1bHRzIHRvIHRoZSB0YXJnZXQgZ3JvdXAgcHJvdG9jb2wgKGJlbmNoZWQgdmlhIGUwNGIpLlxcbl9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkhlYWx0aENoZWNrUHJvdG9jb2xcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm90b2NvbFxcXCIpID09IFxcXCJUQ1BcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGNwLWhlYWx0aC1jaGVjay1wYXRoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5IZWFsdGhDaGVja1BhdGhcXFwiLFxcblxcdFxcXCJUaGUgZWZmZWN0aXZlIGhlYWx0aCBjaGVjayBwcm90b2NvbCBpcyBUQ1AsIHdoaWNoIGNhbm5vdCB0YWtlIEhlYWx0aENoZWNrUGF0aCAoXFxcXFxcXCJIZWFsdGggY2hlY2sgcGF0aHMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFRDUCBoZWFsdGggY2hlY2tzXFxcXFxcXCIpXFxcIixcXG5cXHRcXFwiUmVtb3ZlIEhlYWx0aENoZWNrUGF0aCwgb3IgdXNlIGFuIEhUVFAvSFRUUFMgaGVhbHRoIGNoZWNrIHByb3RvY29sXFxcIixcXG5cXHRfcGZfZWxidGNocF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdF9wZl9lbGJ0Y2hwX3RjcF9oYyhuYW1lKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJIZWFsdGhDaGVja1BhdGhcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctZGVyZWdpc3RyYXRpb24tZGVsYXktcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgZ3JvdXAgZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RlcmVnX2RlbGF5X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA+IDM2MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzIGlzICV2IGJ1dCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAzNjAwXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9lZGl0LXRhcmdldC1ncm91cC1hdHRyaWJ1dGVzLmh0bWwjZGVyZWdpc3RyYXRpb24tZGVsYXlcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9kZXJlZ19kZWxheV9vdXQobnVtKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYXJnZXQgZ3JvdXAgbmFtZXMgYXJlIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljL2h5cGhlbiBjaGFycyBhbmQgY2Fubm90IHN0YXJ0IG9yIGVuZCB3aXRoIGEgaHlwaGVuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3RnbmFtZV9iYWQobikgOj0gXFxcImNhbm5vdCBiZSBsb25nZXIgdGhhbiAzMiBjaGFyYWN0ZXJzXFxcIiBpZiBjb3VudChuKSA+IDMyXFxuXFxuX3BmX3RnbmFtZV9iYWQobikgOj0gXFxcIm1heSB1c2Ugb25seSBhbHBoYW51bWVyaWNzIGFuZCBoeXBoZW5zLCBhbmQgY2Fubm90IHN0YXJ0IG9yIGVuZCB3aXRoIGEgaHlwaGVuXFxcIiBpZiB7XFxuXFx0Y291bnQobikgPD0gMzJcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bQS1aYS16MC05XShbQS1aYS16MC05LV0qW0EtWmEtejAtOV0pPyRgLCBuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSB0YXJnZXQgZ3JvdXAgbmFtZSAnJXMnICVzOyBFTEIgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGxcXFwiLCBbbiwgd2h5XSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFyZ2V0IGdyb3VwIHRvIGF0IG1vc3QgMzIgYWxwaGFudW1lcmljIG9yIGh5cGhlbiBjaGFyYWN0ZXJzLCBub3Qgc3RhcnRpbmcgb3IgZW5kaW5nIHdpdGggYSBoeXBoZW5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFyZ2V0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHR3aHkgOj0gX3BmX3RnbmFtZV9iYWQobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1zbG93LXN0YXJ0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIHNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBtdXN0IGJlIDAgb3IgYmV0d2VlbiAzMCBhbmQgOTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIHtcXG5cXHRuID4gMFxcblxcdG4gPCAzMFxcbn1cXG5cXG5fcGZfc2xvd19zdGFydF9vdXQobikgaWYgbiA+IDkwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSAwIChkaXNhYmxlZCkgb3IgYmV0d2VlbiAzMCBhbmQgOTAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgdG8gMCBvciBhIHZhbHVlIGJldHdlZW4gMzAgYW5kIDkwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI3Nsb3ctc3RhcnQtbW9kZVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nsb3dfc3RhcnRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklucHV0VGVtcGxhdGUgcGxhY2Vob2xkZXJzIG11c3QgYmUgZGVjbGFyZWQgaW4gSW5wdXRQYXRoc01hcFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IDxwbGFjZWhvbGRlcj4gaW4gSW5wdXRUZW1wbGF0ZSBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXAsXFxuIyBleGNlcHQgdGhlIGF3cy5ldmVudHMuKiBwcmVkZWZpbmVkIHZhcmlhYmxlcy4gQW4gSW5wdXRQYXRoc01hcCB0aGF0IGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIChub3JtYWxpemVkIHdpdGggX18tcHJlZml4ZWQgbWFya2VyIGtleXMpIG1ha2VzIHRoZVxcbiMgZGVjbGFyZWQgc2V0IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbCkgOj0ge3N1YnN0cmluZyhmLCAxLCBjb3VudChmKSAtIDIpIHwgc29tZSBmIGluIHJlZ2V4LmZpbmRfbihgPChbQS1aYS16MC05Xy4tXSspPmAsIHRtcGwsIC0xKX1cXG5cXG5fcGZfZXZpdHBfcGxhaW5fbWFwKHBtKSBpZiB7XFxuXFx0aXNfb2JqZWN0KHBtKVxcblxcdGV2ZXJ5IGssIF8gaW4gcG0ge1xcblxcdFxcdG5vdCBzdGFydHN3aXRoKGssIFxcXCJfX1xcXCIpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1pbnB1dC10cmFuc2Zvcm1lci1wbGFjZWhvbGRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0cy4lZC5JbnB1dFRyYW5zZm9ybWVyLklucHV0VGVtcGxhdGVcXFwiLCBbdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIklucHV0VGVtcGxhdGUgdXNlcyA8JXM+IGJ1dCBJbnB1dFBhdGhzTWFwIGRvZXMgbm90IGRlY2xhcmUgaXQ7IFB1dFRhcmdldHMgZmFpbHMgd2l0aCBcXFxcXFxcIklucHV0VGVtcGxhdGUgZm9yIHRhcmdldCAlcyBjb250YWlucyBpbnZhbGlkIHBsYWNlaG9sZGVyICVzXFxcXFxcXCJcXFwiLCBbcCwgdGlkLCBwXSksXFxuXFx0c3ByaW50ZihcXFwiQWRkICclcycgdG8gSW5wdXRQYXRoc01hcCwgb3IgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlciBmcm9tIHRoZSB0ZW1wbGF0ZVxcXCIsIFtwXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLXRyYW5zZm9ybS10YXJnZXQtaW5wdXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldHNcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdGl0IDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIklucHV0VHJhbnNmb3JtZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChpdClcXG5cXHR0bXBsIDo9IG9iamVjdC5nZXQoaXQsIFxcXCJJbnB1dFRlbXBsYXRlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodG1wbClcXG5cXHRwbSA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRQYXRoc01hcFxcXCIsIHt9KVxcblxcdF9wZl9ldml0cF9wbGFpbl9tYXAocG0pXFxuXFx0c29tZSBwIGluIF9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbClcXG5cXHRub3Qgc3RhcnRzd2l0aChwLCBcXFwiYXdzLmV2ZW50cy5cXFwiKVxcblxcdG5vdCBwbVtwXVxcblxcdHRpZCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJZFxcXCIsIFxcXCI8dGFyZ2V0PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gZW1wdHkgRXZlbnRQYXR0ZXJuIGNvdW50cyBhcyBubyBwYXR0ZXJuIGF0IGFsbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUncyBGMzA1OCBmaXJlcyB3aGVuIHRoZSBFdmVudFBhdHRlcm4gS0VZIGlzIGFic2VudCwgYnV0IGFuIGVtcHR5XFxuIyBvYmplY3QgcGFzc2VzIHRoZSBzY2hlbWEgYW5kIHRoZSBoYW5kbGVyIHRoZW4gdHJlYXRzIGl0IGFzIG5vIHBhdHRlcm4gYXRcXG4jIGFsbC4gRmlyZXMgb25seSB3aGVuIFNjaGVkdWxlRXhwcmVzc2lvbiBpcyBhbHNvIGxpdGVyYWxseSBhYnNlbnQg4oCUIHRoZVxcbiMgYmVuY2gtdmVyaWZpZWQgc2hhcGUgKGFic2VuY2UgcHJvdmVuIHZpYSBpbnB1dC5yZXNvdXJjZXMsIHNlZSBBR0VOVFMubWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIsXFxuXFx0XFxcIkV2ZW50UGF0dGVybiBpcyBhbiBlbXB0eSBvYmplY3QsIHdoaWNoIHRoZSBoYW5kbGVyIHRyZWF0cyBhcyBubyBwYXR0ZXJuOyBQdXRSdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXJhbWV0ZXIocykgRXZlbnRQYXR0ZXJuIG9yIFNjaGVkdWxlRXhwcmVzc2lvbiBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBFdmVudFBhdHRlcm4gYXQgbGVhc3Qgb25lIG1hdGNoZXIgKGUuZy4gc291cmNlKSwgb3IgdXNlIFNjaGVkdWxlRXhwcmVzc2lvbiBpbnN0ZWFkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdGNvdW50KGVwKSA9PSAwXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlbnQgcGF0dGVybiB2YWx1ZXMgbXVzdCBiZSBhcnJheXMgb3Igb2JqZWN0cywgbm90IHNjYWxhcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX251bWJlcih2KVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfYm9vbGVhbih2KVxcblxcbiMgRXZlcnkgbWF0Y2hlciBpbiBhbiBldmVudCBwYXR0ZXJuIG11c3QgYmUgYW4gYXJyYXkgKG9yIGFuIG9iamVjdCBob2xkaW5nXFxuIyBvcGVyYXRvcnMpOyBhIGJhcmUgc2NhbGFyIGlzIHJlamVjdGVkIHBlciBrZXkuIE9ubHkgdGhlIHRvcCBsZXZlbCBpc1xcbiMgY2hlY2tlZCDigJQgdGhhdCBpcyB0aGUgYmVuY2gtdmVyaWZpZWQgc2NvcGUsIGFuZCBpdCBkb2RnZXMgb3BlcmF0b3Igb2JqZWN0c1xcbiMgbGlrZSB7XFxcInByZWZpeFxcXCI6IFxcXCIuLi5cXFwifSB0aGF0IGxlZ2FsbHkgY2Fycnkgc2NhbGFycyBkZWVwZXIgZG93bi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLXNjYWxhci12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm4uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkV2ZW50UGF0dGVybiBrZXkgJyVzJyBob2xkcyBhIGJhcmUgc2NhbGFyOyBQdXRSdWxlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkV2ZW50IHBhdHRlcm4gaXMgbm90IHZhbGlkLiBSZWFzb246IFxcXFxcXFxcXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcXFxcXFxcIlxcXCIsIFtrLCBrXSksXFxuXFx0c3ByaW50ZihcXFwiV3JhcCB0aGUgdmFsdWUgaW4gYW4gYXJyYXk6IFxcXFxcXFwiJXNcXFxcXFxcIjogWy4uLl1cXFwiLCBba10pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi1ldmVudC1wYXR0ZXJucy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFdmVudHM6OlJ1bGVcXFwiKVxcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuXFxcIilcXG5cXHRpc19vYmplY3QoZXApXFxuXFx0c29tZSBrLCB2IGluIGVwXFxuXFx0X3BmX2V2cHN2X3NjYWxhcih2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWZpcmVob3NlLWRmY2MtcmVxdWlyZWQtY29uZmlnc1wiLFxuICAgIFwic2VydmljZVwiOiBcImZpcmVob3NlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVuYWJsZWQgZm9ybWF0IGNvbnZlcnNpb24gbmVlZHMgaW5wdXQsIG91dHB1dCwgYW5kIHNjaGVtYSBjb25maWdzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0aHJlZSBzdWItY29uZmlndXJhdGlvbnMgYXJlIHVuY29uZGl0aW9uYWxseSByZXF1aXJlZCBvbmNlIEVuYWJsZWRcXG4jIGlzIHRydWU7IHRoZSBzZXJ2aWNlIHJlamVjdHMgZWFjaCBhYnNlbmNlIGluIHR1cm4uIFJlYWQgZnJvbSB0aGVcXG4jIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2ZoZGZjY19vdXRlcihuYW1lKSA6PSBjIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRjIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJFeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGMpXFxufVxcblxcbl9wZl9maGRmY2NfY29uZihuYW1lKSA6PSBjIGlmIHtcXG5cXHR4IDo9IF9wZl9maGRmY2Nfb3V0ZXIobmFtZSlcXG5cXHRjIDo9IG9iamVjdC5nZXQoeCwgXFxcIkRhdGFGb3JtYXRDb252ZXJzaW9uQ29uZmlndXJhdGlvblxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWRmY2MtcmVxdWlyZWQtY29uZmlnc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkRhdGFGb3JtYXRDb252ZXJzaW9uQ29uZmlndXJhdGlvbi4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiRGF0YSBmb3JtYXQgY29udmVyc2lvbiBpcyBlbmFibGVkIHdpdGhvdXQgJXM7IHRoZSBzdHJlYW0gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCIlcyBtdXN0IG5vdCBiZSBudWxsXFxcXFxcXCJcXFwiLCBbaywga10pLFxcblxcdFxcXCJTZXQgSW5wdXRGb3JtYXRDb25maWd1cmF0aW9uLCBPdXRwdXRGb3JtYXRDb25maWd1cmF0aW9uLCBhbmQgU2NoZW1hQ29uZmlndXJhdGlvbiB0b2dldGhlclxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMta2luZXNpc2ZpcmVob3NlLWRlbGl2ZXJ5c3RyZWFtLWRhdGFmb3JtYXRjb252ZXJzaW9uY29uZmlndXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRjIDo9IF9wZl9maGRmY2NfY29uZihuYW1lKVxcblxcdGNvZXJjZV90b19ib29sKG9iamVjdC5nZXQoYywgXFxcIkVuYWJsZWRcXFwiLCBmYWxzZSkpID09IHRydWVcXG5cXHRzb21lIGsgaW4ge1xcXCJJbnB1dEZvcm1hdENvbmZpZ3VyYXRpb25cXFwiLCBcXFwiT3V0cHV0Rm9ybWF0Q29uZmlndXJhdGlvblxcXCIsIFxcXCJTY2hlbWFDb25maWd1cmF0aW9uXFxcIn1cXG5cXHRvYmplY3QuZ2V0KGMsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1idWZmZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEeW5hbWljIHBhcnRpdGlvbmluZyBuZWVkcyBhIDY0IE1CIGJ1ZmZlciBmbG9vclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2NoZW1hIGZsb29yIGlzIDE7IHRoZSA2NCBmbG9vciBvbmx5IGFwcGxpZXMgd2l0aCBkeW5hbWljXFxuIyBwYXJ0aXRpb25pbmcgb24gLSBhIGNvbmRpdGlvbmFsIGJvdW5kIG5vIHNjaGVtYSBsYXllciBjYW4gZXhwcmVzcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWR5bmFtaWMtcGFydGl0aW9uaW5nLWJ1ZmZlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5CdWZmZXJpbmdIaW50cy5TaXplSW5NQnNcXFwiLFxcblxcdHNwcmludGYoXFxcIlNpemVJbk1CcyAldiB3aXRoIGR5bmFtaWMgcGFydGl0aW9uaW5nOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiQnVmZmVyaW5nSGludHMuU2l6ZUluTUJzIG11c3QgYmUgYXQgbGVhc3QgNjQgd2hlbiBEeW5hbWljIFBhcnRpdGlvbmluZyBpcyBlbmFibGVkLlxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiUmFpc2UgU2l6ZUluTUJzIHRvIGF0IGxlYXN0IDY0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1raW5lc2lzZmlyZWhvc2UtZGVsaXZlcnlzdHJlYW0tZHluYW1pY3BhcnRpdGlvbmluZ2NvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpc0ZpcmVob3NlOjpEZWxpdmVyeVN0cmVhbVxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLkR5bmFtaWNQYXJ0aXRpb25pbmdDb25maWd1cmF0aW9uLkVuYWJsZWRcXFwiKSkgPT0gdHJ1ZVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5CdWZmZXJpbmdIaW50cy5TaXplSW5NQnNcXFwiKSlcXG5cXHRzIDwgNjRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1keW5hbWljLXBhcnRpdGlvbmluZy1wcmVmaXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEeW5hbWljIHBhcnRpdGlvbmluZyBuZWVkcyBwYXJ0aXRpb24gbmFtZXNwYWNlcyBpbiB0aGUgcHJlZml4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFBhcnRpdGlvbmVkIGRlbGl2ZXJ5IGhhcyBub3doZXJlIHRvIHB1dCB0aGUga2V5cyB1bmxlc3MgdGhlIHByZWZpeFxcbiMgaW50ZXJwb2xhdGVzIHRoZW0gdmlhICF7cGFydGl0aW9uS2V5RnJvbS4uLn0gbmFtZXNwYWNlcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWZpcmVob3NlLWR5bmFtaWMtcGFydGl0aW9uaW5nLXByZWZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5QcmVmaXhcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZpeCAnJXMnIGhhcyBubyBwYXJ0aXRpb24gbmFtZXNwYWNlOyB0aGUgc3RyZWFtIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUzMgUHJlZml4IHNob3VsZCBjb250YWluIER5bmFtaWMgUGFydGl0aW9uaW5nIG5hbWVzcGFjZXMgd2hlbiBEeW5hbWljIFBhcnRpdGlvbmluZyBpcyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbcF0pLFxcblxcdFxcXCJJbnRlcnBvbGF0ZSBhdCBsZWFzdCBvbmUgIXtwYXJ0aXRpb25LZXlGcm9tUXVlcnk6Li4ufSBvciAhe3BhcnRpdGlvbktleUZyb21MYW1iZGE6Li4ufSBpbnRvIHRoZSBwcmVmaXhcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZmlyZWhvc2UvbGF0ZXN0L2Rldi9keW5hbWljLXBhcnRpdGlvbmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uRHluYW1pY1BhcnRpdGlvbmluZ0NvbmZpZ3VyYXRpb24uRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb24uUHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRub3QgY29udGFpbnMocCwgXFxcIiF7cGFydGl0aW9uS2V5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1raW5lc2lzLXNvdXJjZS1jb25maWdcIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLaW5lc2lzU3RyZWFtQXNTb3VyY2Ugc3RyZWFtcyBuZWVkIEtpbmVzaXNTdHJlYW1Tb3VyY2VDb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhpcyBkaXJlY3Rpb24gaXMgYSBkZXBsb3kgZmFpbHVyZSAtIERpcmVjdFB1dCB3aXRoIGEgKHNpbGVudGx5XFxuIyBpZ25vcmVkKSBzb3VyY2UgY29uZmlndXJhdGlvbiBkZXBsb3lzIGZpbmUgKGJlbmNoIGYwNikuIEFic2VuY2UgaXNcXG4jIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9maGtzY19taXNzaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2Uta2luZXNpcy1zb3VyY2UtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU291cmNlQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkRlbGl2ZXJ5U3RyZWFtVHlwZSBpcyBLaW5lc2lzU3RyZWFtQXNTb3VyY2UgYnV0IG5vIHNvdXJjZSBjb25maWd1cmF0aW9uIGlzIHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIktpbmVzaXNTb3VyY2VTdHJlYW1Db25maWcgaXMgbWFuZGF0b3J5IGZvciBLaW5lc2lzU3RyZWFtQXNTb3VyY2Ugc3RyZWFtIHR5cGUuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgS2luZXNpc1N0cmVhbVNvdXJjZUNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgc3RyZWFtIEFSTiBhbmQgcm9sZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlbGl2ZXJ5U3RyZWFtVHlwZVxcXCIpID09IFxcXCJLaW5lc2lzU3RyZWFtQXNTb3VyY2VcXFwiXFxuXFx0X3BmX2Zoa3NjX21pc3NpbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1vbmUtZGVzdGluYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJmaXJlaG9zZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGRlbGl2ZXJ5IHN0cmVhbSB0YWtlcyBleGFjdGx5IG9uZSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEJvdGggZGlyZWN0aW9ucyBkZXBsb3ktdmVyaWZpZWQ6IG5vbmUgc2V0LCBhbmQgdHdvIHNldC4gS2V5IHByZXNlbmNlIGlzXFxuIyByZWFkIGZyb20gdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2Zob2RfZGVzdHMgOj0ge1xcblxcdFxcXCJTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJSZWRzaGlmdERlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkVsYXN0aWNzZWFyY2hEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJBbWF6b25vcGVuc2VhcmNoc2VydmljZURlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkFtYXpvbk9wZW5TZWFyY2hTZXJ2ZXJsZXNzRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiU3BsdW5rRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSHR0cEVuZHBvaW50RGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiU25vd2ZsYWtlRGVzdGluYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiSWNlYmVyZ0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZmlyZWhvc2Utb25lLWRlc3RpbmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgZGVzdGluYXRpb24gY29uZmlndXJhdGlvbnMgYXJlIHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgc3VwcG9ydGVkIGZvciBhIEZpcmVob3NlXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgZXhhY3RseSBvbmUgKkRlc3RpbmF0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXFxcIilcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRuIDo9IGNvdW50KFtrIHwgc29tZSBrIGluIF9wZl9maG9kX2Rlc3RzOyBvYmplY3QuZ2V0KHByb3BzLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXSlcXG5cXHRuICE9IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1maXJlaG9zZS1zMy1iYWNrdXAtY29uZmlnXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZmlyZWhvc2VcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRW5hYmxpbmcgUzMgYmFja3VwIG5lZWRzIFMzQmFja3VwQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpLaW5lc2lzRmlyZWhvc2U6OkRlbGl2ZXJ5U3RyZWFtXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBCYWNrdXAgbW9kZSBwb2ludHMgZGVsaXZlcmllcyBhdCBhIHNlY29uZCBidWNrZXQgdGhhdCBtdXN0IGJlXFxuIyBjb25maWd1cmVkLiBTY29wZWQgdG8gdGhlIGJlbmNoZWQgRXh0ZW5kZWRTMyBkZXN0aW5hdGlvbi4gQWJzZW5jZSBpc1xcbiMgcHJvdmVuIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2Zoc2JjX291dGVyKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkV4dGVuZGVkUzNEZXN0aW5hdGlvbkNvbmZpZ3VyYXRpb25cXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1maXJlaG9zZS1zMy1iYWNrdXAtY29uZmlnXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FeHRlbmRlZFMzRGVzdGluYXRpb25Db25maWd1cmF0aW9uLlMzQmFja3VwQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIlMzQmFja3VwTW9kZSBpcyBFbmFibGVkIGJ1dCBTM0JhY2t1cENvbmZpZ3VyYXRpb24gaXMgbm90IHNldDsgdGhlIHN0cmVhbSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIGJhY2t1cCBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIHdoZW4gZW5hYmxpbmcgUzMgYmFja3VwLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFMzQmFja3VwQ29uZmlndXJhdGlvbiAoYnVja2V0IGFuZCByb2xlKSwgb3IgZHJvcCBTM0JhY2t1cE1vZGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWtpbmVzaXNmaXJlaG9zZS1kZWxpdmVyeXN0cmVhbS1leHRlbmRlZHMzZGVzdGluYXRpb25jb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXNGaXJlaG9zZTo6RGVsaXZlcnlTdHJlYW1cXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXh0ZW5kZWRTM0Rlc3RpbmF0aW9uQ29uZmlndXJhdGlvbi5TM0JhY2t1cE1vZGVcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHR4IDo9IF9wZl9maHNiY19vdXRlcihuYW1lKVxcblxcdG9iamVjdC5nZXQoeCwgXFxcIlMzQmFja3VwQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taWRlbnRpdHktcG9saWN5LW5vLXByaW5jaXBhbFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJZGVudGl0eSBwb2xpY2llcyBjYW5ub3QgY2FycnkgYSBQcmluY2lwYWwgZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIElkZW50aXR5IHBvbGljaWVzIGF0dGFjaCB0byB0aGVpciBwcmluY2lwYWwgaW1wbGljaXRseTsgdGhlIGZpZWxkXFxuIyBiZWxvbmdzIHRvIHJlc291cmNlLWJhc2VkIHBvbGljaWVzLlxcbl9wZl9paW5wX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWlucF9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWlucF9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWlucF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLWlkZW50aXR5LXBvbGljeS1uby1wcmluY2lwYWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5QcmluY2lwYWxcXFwiLCBbcGF0aCwgaV0pLFxcblxcdFxcXCJJZGVudGl0eSBwb2xpY3kgc3RhdGVtZW50IGhhcyBhIFByaW5jaXBhbCBmaWVsZDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUG9saWN5IGRvY3VtZW50IHNob3VsZCBub3Qgc3BlY2lmeSBhIHByaW5jaXBhbC5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlJlbW92ZSBQcmluY2lwYWwgKGlkZW50aXR5IHBvbGljaWVzIGFwcGx5IHRvIHRoZSBpZGVudGl0eSB0aGV5IGF0dGFjaCB0bylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2lpbnBfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9paW5wX3N0bXRzKGQpXFxuXFx0aXNfb2JqZWN0KHMpXFxuXFx0b2JqZWN0LmdldChzLCBcXFwiUHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgcGVyIGlkZW50aXR5IChyb2xlIDEwMjQwIC8gZ3JvdXAgNTEyMCAvIHVzZXIgMjA0OCBjaGFyYWN0ZXJzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6Um9sZVBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaW5saW5lX3BvbGljeV9saW1pdHMgOj0ge1xcblxcdFxcXCJBV1M6OklBTTo6UG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlUG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyUG9saWN5XFxcIjogMjA0OCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XFxcIjogNTEyMCxcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgaW5saW5lIHBvbGljeSBsaW1pdCBmb3IgJXMgaXMgJWQgKHJvbGU6IDEwMjQwLCBncm91cDogNTEyMCwgdXNlcjogMjA0OClcXFwiLCBbc2l6ZSwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIk1vdmUgc3RhdGVtZW50cyBpbnRvIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiB0aGUgZG9jdW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaW5saW5lX3BvbGljeV9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0taW5zdGFuY2UtcHJvZmlsZS1zaW5nbGUtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBbiBpbnN0YW5jZSBwcm9maWxlIGhvbGRzIGV4YWN0bHkgb25lIHJvbGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpJbnN0YW5jZVByb2ZpbGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBcXFwicXVvdGFcXFwiIGlzIGEgaGFyZCBsaW1pdCBvZiBvbmUgcm9sZTsgdGhlIHNjaGVtYSBoYXMgbm8gbWF4SXRlbXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5zdGFuY2UtcHJvZmlsZS1zaW5nbGUtcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm9sZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIHJvbGVzIG9uIG9uZSBpbnN0YW5jZSBwcm9maWxlOyB0aGUgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJDYW5ub3QgZXhjZWVkIHF1b3RhIGZvciBJbnN0YW5jZVNlc3Npb25zUGVySW5zdGFuY2VQcm9maWxlOiAxXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJLZWVwIGV4YWN0bHkgb25lIHJvbGUgcGVyIGluc3RhbmNlIHByb2ZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1pYW0taW5zdGFuY2Vwcm9maWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6SW5zdGFuY2VQcm9maWxlXFxcIilcXG5cXHRuIDo9IGNvdW50KGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Sb2xlc1xcXCIpKVxcblxcdG4gPiAxXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LWNvdW50XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hbmFnZWQgcG9saWNpZXMgcGVyIGlkZW50aXR5IGFyZSBjYXBwZWQgKGhhcmQgbWF4aW11bXMgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyXCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMg44OP44O844OJ5LiK6ZmQ77yIU2VydmljZSBRdW90YXMg44Gu44CMTWF4aW11bSBxdW90YeOAjT0g44Gd44KM5Lul5LiK5byV44GN5LiK44GS5LiN5Y+v6IO944Gq5YCk77yJOlxcbiMgICByb2xlIDI1IC8gdXNlciAyMCAvIGdyb3VwIDEw77yIZ3JvdXAg44GvIGFkanVzdGFibGU6IGZhbHNl44CB5a6f5ris44Gn44KC56K66KqN77yJ44CCXFxuIyDjg4fjg5Xjgqnjg6vjg4jvvIhyb2xlIDIwIC8gdXNlciAxMCAvIGdyb3VwIDEw77yJ6LaF44Gv44Ki44Kr44Km44Oz44OI44Gu44Kv44Kp44O844K/5byV44GN5LiK44GS5qyh56ys44GnXFxuIyDmiJDlip/jgZflvpfjgovjgZ/jgoEgRVJST1Ig44Gr44GX44Gq44GE77yIYmVuY2gg44Ki44Kr44Km44Oz44OI44GuIHJvbGU9MjAg44GnIDExIOWAi+aIkOWKn+OCkuWun+a4rOa4iOOBv++8ieOAglxcbl9wZl9pYW1wb2xfbGltaXRzIDo9IHtcXG5cXHRcXFwiQVdTOjpJQU06OlJvbGVcXFwiOiAyNSxcXG5cXHRcXFwiQVdTOjpJQU06OlVzZXJcXFwiOiAyMCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwXFxcIjogMTAsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LWNvdW50XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NYW5hZ2VkUG9saWN5QXJuc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgbWFuYWdlZCBwb2xpY2llcyBhcmUgYXR0YWNoZWQsIGJ1dCB0aGUgaGFyZCBtYXhpbXVtIGZvciAlcyBpcyAlZCAocXVvdGEgZGVmYXVsdHM6IHJvbGUgMjAsIHVzZXIgMTAsIGdyb3VwIDEwOyByYWlzYWJsZSBvbmx5IHVwIHRvIHRoZSBoYXJkIG1heGltdW0pOyBkZXBsb3ltZW50IGZhaWxzIHdpdGggTGltaXRFeGNlZWRlZFxcXCIsIFtuLCBydHlwZSwgbGltaXRdKSxcXG5cXHRcXFwiQ29uc29saWRhdGUgc3RhdGVtZW50cyBpbnRvIGZld2VyIG1hbmFnZWQgcG9saWNpZXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaWFtcG9sX2xpbWl0c1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRhcnIgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYW5hZ2VkUG9saWN5QXJuc1xcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG4gOj0gY291bnQoYXJyKVxcblxcdG4gPiBsaW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hbmFnZWQgcG9saWN5IGRvY3VtZW50cyBhcmUgbGltaXRlZCB0byA2MTQ0IGNoYXJhY3RlcnMgKHdoaXRlc3BhY2UgZXhjbHVkZWQpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3lEb2N1bWVudCBpcyAlZCBjaGFyYWN0ZXJzIChKU09OIHdpdGhvdXQgd2hpdGVzcGFjZSkgYnV0IHRoZSBtYW5hZ2VkIHBvbGljeSBsaW1pdCBpcyA2MTQ0XFxcIiwgW3NpemVdKSxcXG5cXHRcXFwiU3BsaXQgdGhlIGRvY3VtZW50IGludG8gbXVsdGlwbGUgbWFuYWdlZCBwb2xpY2llcyBvciBzaG9ydGVuIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCIpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gNjE0NFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJQU0gZW50aXR5IG5hbWVzIGFsbG93IG9ubHkgYWxwaGFudW1lcmljcyBhbmQgKz0sLkAtX1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwXCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2lhbW5hbWVfcGF0IDo9IGBeW0EtWmEtejAtOSs9LC5AXy1dKyRgXFxuXFxuX3BmX2lhbW5hbWVfcHJvcCh0LCBwcm9wKSA6PSBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX2lhbW5hbWVfcGF0LCB2KVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSlcXG59XFxuXFxuX3BmX2lhbW5hbWVfYmFkIGNvbnRhaW5zIF9wZl9pYW1uYW1lX3Byb3AoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIiwgXFxcIlJvbGVOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06OlVzZXJcXFwiLCBcXFwiVXNlck5hbWVcXFwiKVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBfcGZfaWFtbmFtZV9wcm9wKFxcXCJBV1M6OklBTTo6R3JvdXBcXFwiLCBcXFwiR3JvdXBOYW1lXFxcIilcXG5cXG5fcGZfaWFtbmFtZV9iYWQgY29udGFpbnMgX3BmX2lhbW5hbWVfcHJvcChcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiLCBcXFwiTWFuYWdlZFBvbGljeU5hbWVcXFwiKVxcblxcbl9wZl9pYW1uYW1lX2JhZCBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpSb2xlXFxcIiwgXFxcIkFXUzo6SUFNOjpVc2VyXFxcIiwgXFxcIkFXUzo6SUFNOjpHcm91cFxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0diA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgcmVnZXgubWF0Y2goX3BmX2lhbW5hbWVfcGF0LCB2KVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lOYW1lXFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJJQU0gbmFtZSAnJXMnIGlzIHJlamVjdGVkOiBvbmx5IGFscGhhbnVtZXJpY3MgYW5kICsgPSAsIC4gQCBfIC0gYXJlIGFjY2VwdGVkIChub24tQVNDSUkgdGV4dCBzdWNoIGFzIEphcGFuZXNlIGlzIHJlamVjdGVkKVxcXCIsIFt2XSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgZW50aXR5IHVzaW5nIGFscGhhbnVtZXJpY3MgYW5kICsgPSAsIC4gQCBfIC0gb25seVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUm9sZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHZdIGluIF9wZl9pYW1uYW1lX2JhZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktYWN0aW9uLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBY3Rpb25zIG11c3QgY2FycnkgYSBzZXJ2aWNlIHByZWZpeFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBiYXJlIGFjdGlvbiBuYW1lIGhhcyBubyBzZXJ2aWNlIHRvIGF0dGFjaCB0by4gSW50cmluc2ljcyBpbnNpZGUgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgYXJlIG1hcmtlciBvYmplY3RzLCBzbyBpc19zdHJpbmcgbXV0ZXMgdGhlbS5cXG5fcGZfaWFmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaWFmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pYWZfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lhZl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pYWZfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2lhZl92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktYWN0aW9uLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgaGFzIG5vIHNlcnZpY2UgcHJlZml4OyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJBY3Rpb25zL0NvbmRpdGlvbnMgbXVzdCBiZSBwcmVmYWNlZCBieSBhIHZlbmRvciwgZS5nLiwgaWFtLCBzZGIsIGVjMiwgZXRjLlxcXFxcXFwiXFxcIiwgW2FdKSxcXG5cXHRcXFwiV3JpdGUgYWN0aW9ucyBhcyBzZXJ2aWNlOkFjdGlvbiAoZS5nLiBzMzpHZXRPYmplY3QpLCBvciAqXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pYWZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pYWZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIGEgaW4gX3BmX2lhZl92YWxzKG9iamVjdC5nZXQocywgXFxcIkFjdGlvblxcXCIsIFtdKSlcXG5cXHRpc19zdHJpbmcoYSlcXG5cXHRhICE9IFxcXCIqXFxcIlxcblxcdG5vdCBjb250YWlucyhhLCBcXFwiOlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1jb25kaXRpb24tb3BlcmF0b3JcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29uZGl0aW9uIG9wZXJhdG9ycyBjb21lIGZyb20gYSBjbG9zZWQgZ3JhbW1hclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQmFzZSBvcGVyYXRvcnMgcGx1cyB0aGUgSWZFeGlzdHMgc3VmZml4IGFuZCBzZXQtb3BlcmF0b3IgcHJlZml4ZXMuXFxuIyBBIHR5cG8gbGlrZSBTdHJpbmdFcXVhbC9TdHJpbmdFcXVhbHogaXMgdW5yZWFjaGFibGUgZm9yIGV2ZXJ5IG90aGVyXFxuIyBsYXllciBiZWNhdXNlIHRoZSBkb2N1bWVudCBpcyBvcGFxdWUganNvbi5cXG5fcGZfaWNvX2Jhc2UgOj0ge1xcblxcdFxcXCJTdHJpbmdFcXVhbHNcXFwiLCBcXFwiU3RyaW5nTm90RXF1YWxzXFxcIiwgXFxcIlN0cmluZ0VxdWFsc0lnbm9yZUNhc2VcXFwiLCBcXFwiU3RyaW5nTm90RXF1YWxzSWdub3JlQ2FzZVxcXCIsXFxuXFx0XFxcIlN0cmluZ0xpa2VcXFwiLCBcXFwiU3RyaW5nTm90TGlrZVxcXCIsXFxuXFx0XFxcIk51bWVyaWNFcXVhbHNcXFwiLCBcXFwiTnVtZXJpY05vdEVxdWFsc1xcXCIsIFxcXCJOdW1lcmljTGVzc1RoYW5cXFwiLCBcXFwiTnVtZXJpY0xlc3NUaGFuRXF1YWxzXFxcIixcXG5cXHRcXFwiTnVtZXJpY0dyZWF0ZXJUaGFuXFxcIiwgXFxcIk51bWVyaWNHcmVhdGVyVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkRhdGVFcXVhbHNcXFwiLCBcXFwiRGF0ZU5vdEVxdWFsc1xcXCIsIFxcXCJEYXRlTGVzc1RoYW5cXFwiLCBcXFwiRGF0ZUxlc3NUaGFuRXF1YWxzXFxcIixcXG5cXHRcXFwiRGF0ZUdyZWF0ZXJUaGFuXFxcIiwgXFxcIkRhdGVHcmVhdGVyVGhhbkVxdWFsc1xcXCIsXFxuXFx0XFxcIkJvb2xcXFwiLCBcXFwiQmluYXJ5RXF1YWxzXFxcIiwgXFxcIklwQWRkcmVzc1xcXCIsIFxcXCJOb3RJcEFkZHJlc3NcXFwiLFxcblxcdFxcXCJBcm5FcXVhbHNcXFwiLCBcXFwiQXJuTGlrZVxcXCIsIFxcXCJBcm5Ob3RFcXVhbHNcXFwiLCBcXFwiQXJuTm90TGlrZVxcXCIsIFxcXCJOdWxsXFxcIixcXG59XFxuXFxuX3BmX2ljb19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2ljb19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWNvX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pY29fc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG4jIFN0cmlwIGFuIG9wdGlvbmFsIEZvckFsbFZhbHVlczovRm9yQW55VmFsdWU6IHByZWZpeCwgdGhlbiBJZkV4aXN0cy5cXG5fcGZfaWNvX3VucHJlZml4ZWQob3ApIDo9IHBhcnRzW2NvdW50KHBhcnRzKSAtIDFdIGlmIHBhcnRzIDo9IHNwbGl0KG9wLCBcXFwiOlxcXCIpXFxuXFxuX3BmX2ljb19yb290KG9wKSA6PSBzdWJzdHJpbmcoYiwgMCwgY291bnQoYikgLSA4KSBpZiB7XFxuXFx0YiA6PSBfcGZfaWNvX3VucHJlZml4ZWQob3ApXFxuXFx0ZW5kc3dpdGgoYiwgXFxcIklmRXhpc3RzXFxcIilcXG59XFxuXFxuX3BmX2ljb19yb290KG9wKSA6PSBiIGlmIHtcXG5cXHRiIDo9IF9wZl9pY29fdW5wcmVmaXhlZChvcClcXG5cXHRub3QgZW5kc3dpdGgoYiwgXFxcIklmRXhpc3RzXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWNvbmRpdGlvbi1vcGVyYXRvclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuU3RhdGVtZW50LiVkLkNvbmRpdGlvblxcXCIsIFtwYXRoLCBpXSksXFxuXFx0c3ByaW50ZihcXFwiQ29uZGl0aW9uIG9wZXJhdG9yICclcycgZG9lcyBub3QgZXhpc3Q7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN5bnRheCBlcnJvcnMgaW4gcG9saWN5LlxcXFxcXFwiXFxcIiwgW29wXSksXFxuXFx0XFxcIlVzZSBhIGRvY3VtZW50ZWQgb3BlcmF0b3IgKFN0cmluZ0VxdWFscywgQXJuTGlrZSwgLi4uKSwgb3B0aW9uYWxseSB3aXRoIElmRXhpc3RzIG9yIGEgRm9yQWxsVmFsdWVzOi9Gb3JBbnlWYWx1ZTogcHJlZml4XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2ljb19kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2ljb19zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdGNvbmQgOj0gb2JqZWN0LmdldChzLCBcXFwiQ29uZGl0aW9uXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGNvbmQpXFxuXFx0c29tZSBvcCwgXyBpbiBjb25kXFxuXFx0aXNfc3RyaW5nKG9wKVxcblxcdG5vdCBfcGZfaWNvX3Jvb3Qob3ApIGluIF9wZl9pY29fYmFzZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktZHVwbGljYXRlLXNpZFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdGF0ZW1lbnQgSURzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHBvbGljeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUGFpcndpc2UgdW5pcXVlbmVzcyB3aXRoaW4gb25lIGRvY3VtZW50OyBzZXBhcmF0ZSBkb2N1bWVudHMgbWF5IHJldXNlXFxuIyBpZHMgZnJlZWx5Llxcbl9wZl9pZHNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9pZHNfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lkc19zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaWRzX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tcG9saWN5LWR1cGxpY2F0ZS1zaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5TaWRcXFwiLCBbcGF0aCwgal0pLFxcblxcdHNwcmludGYoXFxcIlNpZCAnJXMnIHJlcGVhdHMgd2l0aGluIG9uZSBwb2xpY3k7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlN0YXRlbWVudCBJRHMgKFNJRCkgaW4gYSBzaW5nbGUgcG9saWN5IG11c3QgYmUgdW5pcXVlLlxcXFxcXFwiXFxcIiwgW3NpZF0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IHN0YXRlbWVudCBpbiB0aGUgZG9jdW1lbnQgYSBkaXN0aW5jdCBTaWQgKG9yIGRyb3AgdGhlIGR1cGxpY2F0ZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZHNfZG9jc1xcblxcdHN0bXRzIDo9IF9wZl9pZHNfc3RtdHMoZClcXG5cXHRzb21lIFtpLCBhXSBpbiBzdG10c1xcblxcdHNvbWUgW2osIGJdIGluIHN0bXRzXFxuXFx0aSA8IGpcXG5cXHRpc19vYmplY3QoYSlcXG5cXHRpc19vYmplY3QoYilcXG5cXHRzaWQgOj0gb2JqZWN0LmdldChhLCBcXFwiU2lkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19zdHJpbmcoc2lkKVxcblxcdHNpZCA9PSBvYmplY3QuZ2V0KGIsIFxcXCJTaWRcXFwiLCBcXFwiX19wZl9vdGhlclxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1lZmZlY3QtY2FzZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFZmZlY3QgaXMgY2FzZS1zZW5zaXRpdmUgQWxsb3cgb3IgRGVueVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTG93ZXJjYXNlIGVmZmVjdHMgYXJlIGEgY2xhc3NpYyBoYW5kLXdyaXR0ZW4tSlNPTiB0eXBvIHRoZSBzY2hlbWFcXG4jIGNhbm5vdCBzZWUgKHRoZSBkb2N1bWVudCBpcyBvcGFxdWUganNvbikuXFxuX3BmX2llY19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2llY19kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWVjX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pZWNfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktZWZmZWN0LWNhc2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlN0YXRlbWVudC4lZC5FZmZlY3RcXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIkVmZmVjdCAnJXMnIGlzIG5vdCBBbGxvdyBvciBEZW55IChjYXNlLXNlbnNpdGl2ZSk7IHRoZSBwb2xpY3kgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIlRoZSBwb2xpY3kgZmFpbGVkIGxlZ2FjeSBwYXJzaW5nXFxcXFxcXCJcXFwiLCBbZWZdKSxcXG5cXHRcXFwiVXNlIEVmZmVjdDogQWxsb3cgb3IgRWZmZWN0OiBEZW55XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pZWNfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pZWNfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRlZiA6PSBvYmplY3QuZ2V0KHMsIFxcXCJFZmZlY3RcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX3N0cmluZyhlZilcXG5cXHRub3QgZWYgaW4ge1xcXCJBbGxvd1xcXCIsIFxcXCJEZW55XFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LWV4Y2x1c2l2ZS1maWVsZHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQWN0aW9uL05vdEFjdGlvbiBhbmQgUmVzb3VyY2UvTm90UmVzb3VyY2UgYXJlIGV4Y2x1c2l2ZSBwYWlyc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRWFjaCBwYWlyIGlzIGVpdGhlci1vciBwZXIgc3RhdGVtZW50OyBib3RoIGF0IG9uY2UgaXMgYSBzeW50YXggZXJyb3IuXFxuX3BmX2llZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2llZl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfaWVmX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pZWZfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG5fcGZfaWVmX3BhaXJzIDo9IHtbXFxcIkFjdGlvblxcXCIsIFxcXCJOb3RBY3Rpb25cXFwiXSwgW1xcXCJSZXNvdXJjZVxcXCIsIFxcXCJOb3RSZXNvdXJjZVxcXCJdfVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1leGNsdXNpdmUtZmllbGRzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuJXNcXFwiLCBbcGF0aCwgaSwgcGFpclsxXV0pLFxcblxcdHNwcmludGYoXFxcIlN0YXRlbWVudCBzZXRzIGJvdGggJXMgYW5kICVzOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJTeW50YXggZXJyb3JzIGluIHBvbGljeS5cXFxcXFxcIlxcXCIsIFtwYWlyWzBdLCBwYWlyWzFdXSksXFxuXFx0XFxcIktlZXAgb25lIG9mIHRoZSBwYWlyIHBlciBzdGF0ZW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX2llZl9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2llZl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHNvbWUgcGFpciBpbiBfcGZfaWVmX3BhaXJzXFxuXFx0b2JqZWN0LmdldChzLCBwYWlyWzBdLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzLCBwYWlyWzFdLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLXBvbGljeS1yZXNvdXJjZS1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVzb3VyY2VzIG11c3QgYmUgQVJOcyBvciAqXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IGxpdGVyYWwgc3RyaW5ncyBhcmUganVkZ2VkIC0gRm46OkdldEF0dCAvIEZuOjpTdWIgdmFsdWVzIHN1cmZhY2VcXG4jIGFzIG1hcmtlciBvYmplY3RzIGluIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKG1lYXN1cmVkKSwgc28gdGhlXFxuIyBpc19zdHJpbmcgZ3VhcmQgbXV0ZXMgdGhlbS5cXG5fcGZfaXJmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRzb21lIHAgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzXFxcIilcXG5cXHRpc19vYmplY3QocC52YWx1ZSlcXG5cXHRkIDo9IG9iamVjdC5nZXQocC52YWx1ZSwgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljaWVzLiVkLlBvbGljeURvY3VtZW50XFxcIiwgW3AuaW5kZXhdKVxcbn1cXG5cXG5fcGZfaXJmX2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9pcmZfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lyZl9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pcmZfdmFscyh2KSA6PSBbdl0gaWYgaXNfc3RyaW5nKHYpXFxuXFxuX3BmX2lyZl92YWxzKHYpIDo9IHYgaWYgaXNfYXJyYXkodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktcmVzb3VyY2UtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbcGF0aCwgaV0pLFxcblxcdHNwcmludGYoXFxcIlJlc291cmNlICclcycgaXMgbm90IGFuIEFSTjsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiUmVzb3VyY2UgJXMgbXVzdCBiZSBpbiBBUk4gZm9ybWF0IG9yICcqJy5cXFxcXFxcIlxcXCIsIFtyLCByXSksXFxuXFx0XFxcIlVzZSBhIGZ1bGwgQVJOIChhcm46Li4uKSBvciAqXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pcmZfZG9jc1xcblxcdHNvbWUgW2ksIHNdIGluIF9wZl9pcmZfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRzb21lIHIgaW4gX3BmX2lyZl92YWxzKG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgW10pKVxcblxcdGlzX3N0cmluZyhyKVxcblxcdHIgIT0gXFxcIipcXFwiXFxuXFx0bm90IHN0YXJ0c3dpdGgociwgXFxcImFybjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktc2lkLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQb2xpY3kgc3RhdGVtZW50IFNpZCBtdXN0IGJlIGFscGhhbnVtZXJpY1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwXCIsXG4gICAgICBcIkFXUzo6SUFNOjpQb2xpY3lcIixcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6Um9sZVxcXCIsIFxcXCJBV1M6OklBTTo6VXNlclxcXCIsIFxcXCJBV1M6OklBTTo6R3JvdXBcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHNvbWUgcCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWNpZXNcXFwiKVxcblxcdGlzX29iamVjdChwLnZhbHVlKVxcblxcdGQgOj0gb2JqZWN0LmdldChwLnZhbHVlLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWNpZXMuJWQuUG9saWN5RG9jdW1lbnRcXFwiLCBbcC5pbmRleF0pXFxufVxcblxcbl9wZl9zaWRmbXRfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuQXNzdW1lUm9sZVBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG5fcGZfc2lkZm10X2RvY3MgY29udGFpbnMgW25hbWUsIHBhdGgsIGRdIGlmIHtcXG5cXHRzb21lIHQgaW4ge1xcXCJBV1M6OklBTTo6UG9saWN5XFxcIiwgXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUodClcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiXFxufVxcblxcbl9wZl9zaWRmbXRfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX3NpZGZtdF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtaWFtLXBvbGljeS1zaWQtZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWQuU2lkXFxcIiwgW3BhdGgsIGldKSxcXG5cXHRzcHJpbnRmKFxcXCJTaWQgJyVzJyBpcyBub3QgYWxwaGFudW1lcmljOyBJQU0gcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJTdGF0ZW1lbnQgSURzIChTSUQpIG11c3QgYmUgYWxwaGEtbnVtZXJpY1xcXFxcXFwiXFxcIiwgW3NpZF0pLFxcblxcdFxcXCJVc2Ugb25seSBsZXR0ZXJzIGFuZCBkaWdpdHMgaW4gdGhlIFNpZCAoZHJvcCBoeXBoZW5zLCB1bmRlcnNjb3JlcyBhbmQgc3BhY2VzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgZF0gaW4gX3BmX3NpZGZtdF9kb2NzXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX3NpZGZtdF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHNpZCA6PSBvYmplY3QuZ2V0KHMsIFxcXCJTaWRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhzaWQpXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeWzAtOUEtWmEtel0qJGAsIHNpZClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tcG9saWN5LXN0YXRlbWVudC1yZXNvdXJjZS1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJZGVudGl0eSBwb2xpY3kgc3RhdGVtZW50cyBuZWVkIFJlc291cmNlIG9yIE5vdFJlc291cmNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIHN0YXRlbWVudCBzY29wZWQgdG8gbm90aGluZyBpcyByZWplY3RlZC5cXG5fcGZfaXNycl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lzcnJfZG9jcyBjb250YWlucyBbbmFtZSwgcGF0aCwgZF0gaWYge1xcblxcdHNvbWUgdCBpbiB7XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiLCBcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZSh0KVxcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIlBvbGljeURvY3VtZW50XFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KGQpXFxuXFx0cGF0aCA6PSBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCJcXG59XFxuXFxuX3BmX2lzcnJfc3RtdHMoZCkgOj0gW1swLCBzXV0gaWYge1xcblxcdHMgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19vYmplY3QocylcXG59XFxuXFxuX3BmX2lzcnJfc3RtdHMoZCkgOj0gb3V0IGlmIHtcXG5cXHRhcnIgOj0gb2JqZWN0LmdldChkLCBcXFwiU3RhdGVtZW50XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0b3V0IDo9IFtbaSwgc10gfCBzb21lIGksIHMgaW4gYXJyXVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktc3RhdGVtZW50LXJlc291cmNlLXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdGF0ZW1lbnQuJWRcXFwiLCBbcGF0aCwgaV0pLFxcblxcdFxcXCJTdGF0ZW1lbnQgaGFzIG5laXRoZXIgUmVzb3VyY2Ugbm9yIE5vdFJlc291cmNlOyB0aGUgcG9saWN5IGlzIHJlamVjdGVkIHdpdGggXFxcXFxcXCJQb2xpY3kgc3RhdGVtZW50IG11c3QgY29udGFpbiByZXNvdXJjZXMuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgUmVzb3VyY2UgKGFuIEFSTiBvciAqKSB0byB0aGUgc3RhdGVtZW50XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pc3JyX2RvY3NcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXNycl9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdG9iamVjdC5nZXQocywgXFxcIlJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdG9iamVjdC5nZXQocywgXFxcIk5vdFJlc291cmNlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1wb2xpY3ktdmVyc2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJQb2xpY3kgVmVyc2lvbiBtdXN0IGJlIDIwMTItMTAtMTcgb3IgMjAwOC0xMC0xN1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHZlcnNpb24gc3RyaW5nIGlzIGFuIGVudW0gb2YgdHdvIGRhdGVzOyBhbnl0aGluZyBlbHNlIGlzIGEgc3ludGF4XFxuIyBlcnJvciBhdCBjcmVhdGUuXFxuX3BmX2lwdl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OklBTTo6Um9sZVxcXCIpXFxuXFx0c29tZSBwIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY2llc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHAudmFsdWUpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHAudmFsdWUsIFxcXCJQb2xpY3lEb2N1bWVudFxcXCIsIHt9KVxcblxcdGlzX29iamVjdChkKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY2llcy4lZC5Qb2xpY3lEb2N1bWVudFxcXCIsIFtwLmluZGV4XSlcXG59XFxuXFxuX3BmX2lwdl9kb2NzIGNvbnRhaW5zIFtuYW1lLCBwYXRoLCBkXSBpZiB7XFxuXFx0c29tZSB0IGluIHtcXFwiQVdTOjpJQU06OlBvbGljeVxcXCIsIFxcXCJBV1M6OklBTTo6TWFuYWdlZFBvbGljeVxcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHQpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0ZCA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiUG9saWN5RG9jdW1lbnRcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoZClcXG5cXHRwYXRoIDo9IFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1wb2xpY3ktdmVyc2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuVmVyc2lvblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5IFZlcnNpb24gJyVzJyBkb2VzIG5vdCBleGlzdDsgdGhlIHBvbGljeSBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiU3ludGF4IGVycm9ycyBpbiBwb2xpY3kuXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdFxcXCJVc2UgVmVyc2lvbjogMjAxMi0xMC0xN1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfdmVyc2lvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGRdIGluIF9wZl9pcHZfZG9jc1xcblxcdHYgOj0gb2JqZWN0LmdldChkLCBcXFwiVmVyc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4ge1xcXCIyMDEyLTEwLTE3XFxcIiwgXFxcIjIwMDgtMTAtMTdcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS10cnVzdC1wb2xpY3ktbm8tcmVzb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVHJ1c3QgcG9saWNpZXMgY2Fubm90IGNhcnJ5IGEgUmVzb3VyY2UgZmllbGRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcm9sZSBpdHNlbGYgaXMgdGhlIHJlc291cmNlIG9mIGl0cyB0cnVzdCBwb2xpY3k7IGFuIGV4cGxpY2l0XFxuIyBSZXNvdXJjZSBmaWVsZCBpcyBwcm9oaWJpdGVkLlxcbl9wZl9pdG5yX3RydXN0KG5hbWUpIDo9IGQgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGQgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGQpXFxufVxcblxcbl9wZl9pdG5yX3N0bXRzKGQpIDo9IFtbMCwgc11dIGlmIHtcXG5cXHRzIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHMpXFxufVxcblxcbl9wZl9pdG5yX3N0bXRzKGQpIDo9IG91dCBpZiB7XFxuXFx0YXJyIDo9IG9iamVjdC5nZXQoZCwgXFxcIlN0YXRlbWVudFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpXFxuXFx0aXNfYXJyYXkoYXJyKVxcblxcdG91dCA6PSBbW2ksIHNdIHwgc29tZSBpLCBzIGluIGFycl1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tdHJ1c3QtcG9saWN5LW5vLXJlc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pLFxcblxcdFxcXCJUcnVzdCBwb2xpY3kgc3RhdGVtZW50IGhhcyBhIFJlc291cmNlIGZpZWxkOyB0aGUgcm9sZSBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkhhcyBwcm9oaWJpdGVkIGZpZWxkIFJlc291cmNlXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJSZW1vdmUgUmVzb3VyY2UgZnJvbSB0aGUgdHJ1c3QgcG9saWN5IHN0YXRlbWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpSb2xlXFxcIilcXG5cXHRkIDo9IF9wZl9pdG5yX3RydXN0KG5hbWUpXFxuXFx0c29tZSBbaSwgc10gaW4gX3BmX2l0bnJfc3RtdHMoZClcXG5cXHRpc19vYmplY3QocylcXG5cXHRvYmplY3QuZ2V0KHMsIFxcXCJSZXNvdXJjZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tdHJ1c3QtcG9saWN5LXNlcnZpY2UtcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiaWFtXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlcnZpY2UgcHJpbmNpcGFscyBsaXZlIHVuZGVyIGFtYXpvbmF3cy5jb21cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTaGFwZSBjaGVjayBvbmx5OiBldmVyeSBzZXJ2aWNlIHByaW5jaXBhbCBlbmRzIGluIC5hbWF6b25hd3MuY29tIChvclxcbiMgLmFtYXpvbmF3cy5jb20uY24gaW4gdGhlIENoaW5hIHBhcnRpdGlvbikuIFdoZXRoZXIgYSB3ZWxsLXNoYXBlZCBuYW1lXFxuIyBleGlzdHMgaXMgbGVmdCB0byB0aGUgc2VydmljZS5cXG5fcGZfaXRzcF90cnVzdChuYW1lKSA6PSBkIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRkIDo9IG9iamVjdC5nZXQocHJvcHMsIFxcXCJBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChkKVxcbn1cXG5cXG5fcGZfaXRzcF9zdG10cyhkKSA6PSBbWzAsIHNdXSBpZiB7XFxuXFx0cyA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX29iamVjdChzKVxcbn1cXG5cXG5fcGZfaXRzcF9zdG10cyhkKSA6PSBvdXQgaWYge1xcblxcdGFyciA6PSBvYmplY3QuZ2V0KGQsIFxcXCJTdGF0ZW1lbnRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRvdXQgOj0gW1tpLCBzXSB8IHNvbWUgaSwgcyBpbiBhcnJdXFxufVxcblxcbl9wZl9pdHNwX3ZhbHModikgOj0gW3ZdIGlmIGlzX3N0cmluZyh2KVxcblxcbl9wZl9pdHNwX3ZhbHModikgOj0gdiBpZiBpc19hcnJheSh2KVxcblxcbl9wZl9pdHNwX29rKHNwKSBpZiBlbmRzd2l0aChzcCwgXFxcIi5hbWF6b25hd3MuY29tXFxcIilcXG5cXG5fcGZfaXRzcF9vayhzcCkgaWYgZW5kc3dpdGgoc3AsIFxcXCIuYW1hem9uYXdzLmNvbS5jblxcXCIpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tdHJ1c3QtcG9saWN5LXNlcnZpY2UtcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUHJpbmNpcGFsLlNlcnZpY2VcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcIlNlcnZpY2UgcHJpbmNpcGFsICclcycgaXMgbm90IGFuIGFtYXpvbmF3cy5jb20gZG9tYWluOyB0aGUgcm9sZSBjcmVhdGUgZmFpbHMgd2l0aCAnSW52YWxpZCBwcmluY2lwYWwgaW4gcG9saWN5OiBcXFxcXFxcIlNFUlZJQ0VcXFxcXFxcIjpcXFxcXFxcIiVzXFxcXFxcXCInXFxcIiwgW3NwLCBzcF0pLFxcblxcdFxcXCJVc2UgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWUsIGUuZy4gbGFtYmRhLmFtYXpvbmF3cy5jb21cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3ByaW5jaXBhbC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06OlJvbGVcXFwiKVxcblxcdGQgOj0gX3BmX2l0c3BfdHJ1c3QobmFtZSlcXG5cXHRzb21lIFtpLCBzXSBpbiBfcGZfaXRzcF9zdG10cyhkKVxcblxcdGlzX29iamVjdChzKVxcblxcdHAgOj0gb2JqZWN0LmdldChzLCBcXFwiUHJpbmNpcGFsXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHApXFxuXFx0c29tZSBzcCBpbiBfcGZfaXRzcF92YWxzKG9iamVjdC5nZXQocCwgXFxcIlNlcnZpY2VcXFwiLCBbXSkpXFxuXFx0aXNfc3RyaW5nKHNwKVxcblxcdG5vdCBfcGZfaXRzcF9vayhzcClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtY29kZS1zMy1wYWlyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlMzLWJhc2VkIENvZGUgbmVlZHMgYm90aCBTM0J1Y2tldCBhbmQgUzNLZXlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgSGFsZiBhbiBTMyByZWZlcmVuY2UgY2Fubm90IGJlIGZldGNoZWQuIE9ubHkganVkZ2VkIHdoZW4gbmVpdGhlciBaaXBGaWxlXFxuIyBub3IgSW1hZ2VVcmkgaXMgcHJlc2VudCAodGhvc2Ugc2hhcGVzIGJlbG9uZyB0byB0aGUgZXhjbHVzaXZlIHJ1bGUpLlxcbl9wZl9sY3NwX2NvZGUobmFtZSkgOj0gYyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0YyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29kZVxcXCIsIHt9KVxcblxcdGlzX29iamVjdChjKVxcbn1cXG5cXG5fcGZfbGNzcF9oYXMoYywgaykgaWYgb2JqZWN0LmdldChjLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFxuX3BmX2xjc3BfaGFsZihjKSA6PSBbXFxcIlMzS2V5XFxcIiwgXFxcIlMzQnVja2V0XFxcIl0gaWYge1xcblxcdF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNCdWNrZXRcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlMzS2V5XFxcIilcXG59XFxuXFxuX3BmX2xjc3BfaGFsZihjKSA6PSBbXFxcIlMzQnVja2V0XFxcIiwgXFxcIlMzS2V5XFxcIl0gaWYge1xcblxcdF9wZl9sY3NwX2hhcyhjLCBcXFwiUzNLZXlcXFwiKVxcblxcdG5vdCBfcGZfbGNzcF9oYXMoYywgXFxcIlMzQnVja2V0XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtY29kZS1zMy1wYWlyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvZGUuJXNcXFwiLCBbbWlzc2luZ1swXV0pLFxcblxcdHNwcmludGYoXFxcIkNvZGUgaGFzICVzIGJ1dCBubyAlczsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiUzMgQnVja2V0IGFuZCBLZXkgYXJlIHJlcXVpcmVkIGZvciB1cGxvYWRpbmcgd2l0aCBTMyBwYXJhbWV0ZXJzLlxcXFxcXFwiXFxcIiwgW21pc3NpbmdbMV0sIG1pc3NpbmdbMF1dKSxcXG5cXHRcXFwiU2V0IGJvdGggUzNCdWNrZXQgYW5kIFMzS2V5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRjIDo9IF9wZl9sY3NwX2NvZGUobmFtZSlcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJaaXBGaWxlXFxcIilcXG5cXHRub3QgX3BmX2xjc3BfaGFzKGMsIFxcXCJJbWFnZVVyaVxcXCIpXFxuXFx0bWlzc2luZyA6PSBfcGZfbGNzcF9oYWxmKGMpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWNvZGUtemlwZmlsZS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIFppcEZpbGUgZXhjbHVkZXMgZXZlcnkgb3RoZXIgQ29kZSBwYXJhbWV0ZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgS2V5IHByZXNlbmNlIGluIHRoZSBDb2RlIG9iamVjdCBpcyB0aGUgdmlvbGF0aW9uOyBjaGVja2VkIGFnYWluc3QgdGhlXFxuIyBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sY3p4X290aGVyIDo9IHtcXFwiUzNCdWNrZXRcXFwiLCBcXFwiUzNLZXlcXFwiLCBcXFwiUzNPYmplY3RWZXJzaW9uXFxcIiwgXFxcIkltYWdlVXJpXFxcIn1cXG5cXG5fcGZfbGN6eF9jb2RlKG5hbWUpIDo9IGMgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdGMgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvZGVcXFwiLCB7fSlcXG5cXHRpc19vYmplY3QoYylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtY29kZS16aXBmaWxlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db2RlLiVzXFxcIiwgW2tdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb2RlIHNldHMgWmlwRmlsZSB0b2dldGhlciB3aXRoICVzOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJQbGVhc2UgZG8gbm90IHByb3ZpZGUgb3RoZXIgRnVuY3Rpb25Db2RlIHBhcmFtZXRlcnMgd2hlbiBwcm92aWRpbmcgYSBaaXBGaWxlLlxcXFxcXFwiXFxcIiwgW2tdKSxcXG5cXHRcXFwiS2VlcCB0aGUgaW5saW5lIFppcEZpbGUgYWxvbmUsIG9yIHN3aXRjaCBlbnRpcmVseSB0byB0aGUgUzMvaW1hZ2UgcmVmZXJlbmNlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRjIDo9IF9wZl9sY3p4X2NvZGUobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGMsIFxcXCJaaXBGaWxlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiBfcGZfbGN6eF9vdGhlclxcblxcdG9iamVjdC5nZXQoYywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxhbWJkYS1kbHEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkIGxldHRlciB0YXJnZXQgbXVzdCBzaXQgaW4gdGhlIGRlcGxveSByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVnaW9uIGNvbXBhcmlzb24gbmVlZHMgdGhlIGRlcGxveSByZWdpb24sIHdoaWNoIG9ubHkgdGhpcyBwYWNrIHNlZXNcXG4jIChkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIGluIGVuZm9yY2UgbW9kZTsgdGhlIHJ1bGVcXG4jIHNraXBzIHdpdGhvdXQgaXQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWRscS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEZWFkIGxldHRlciB0YXJnZXQgcmVnaW9uICclcycgaXMgbm90IHRoZSBkZXBsb3kgcmVnaW9uICclcyc7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgZGVhZCBsZXR0ZXIgcXVldWUgQVJOOiBUaGUgcmVzb3VyY2Ugc3BlY2lmaWVkIGJ5IHRoZSBUYXJnZXRBcm4gbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIExhbWJkYSBmdW5jdGlvbiBpdCdzIGFzc29jaWF0ZWQgd2l0aC5cXFxcXFxcIlxcXCIsIFtwYXJ0c1szXSwgcmVnaW9uXSksXFxuXFx0XFxcIlBvaW50IERlYWRMZXR0ZXJDb25maWcgYXQgYSBxdWV1ZSBvciB0b3BpYyBpbiB0aGUgc2FtZSByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1kZWFkbGV0dGVyY29uZmlnLmh0bWxcXFwiKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1szXSAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZGxxLXNlcnZpY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGRlYWQgbGV0dGVyIHRhcmdldCBtdXN0IGJlIGFuIFNRUyBxdWV1ZSBvciBTTlMgdG9waWNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2Ugc2VnbWVudCBsaXZlcyBpbnNpZGUgdGhlIEFSTiBzdHJpbmcsIGludmlzaWJsZSB0byBhbnlcXG4jIHNjaGVtYSBsYXllci5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1kbHEtc2VydmljZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVhZExldHRlckNvbmZpZy5UYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIkRlYWQgbGV0dGVyIHRhcmdldCBzZXJ2aWNlICclcycgaXMgbm90IHNxcyBvciBzbnM7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgZGVhZCBsZXR0ZXIgcXVldWUgQVJOOiBUaGUgc2VydmljZSBzcGVjaWZpZWQgYnkgdGhlIFRhcmdldEFybiBpcyBub3Qgc3VwcG9ydGVkIGZvciBkZWFkIGxldHRlciBjb25maWd1cmF0aW9uLlxcXFxcXFwiXFxcIiwgW3BhcnRzWzJdXSksXFxuXFx0XFxcIlBvaW50IERlYWRMZXR0ZXJDb25maWcgYXQgYW4gU1FTIHF1ZXVlIG9yIFNOUyB0b3BpYyBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1kZWFkbGV0dGVyY29uZmlnLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlYWRMZXR0ZXJDb25maWcuVGFyZ2V0QXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRub3QgcGFydHNbMl0gaW4ge1xcXCJzcXNcXFwiLCBcXFwic25zXFxcIn1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZWZzLXJlcXVpcmVzLXZwY1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNb3VudGluZyBFRlMgcmVxdWlyZXMgVnBjQ29uZmlnXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1vdW50aW5nIEVGUyByZXF1aXJlcyB0aGUgZnVuY3Rpb24gdG8gcnVuIGluc2lkZSBhIFZQQy4gS2V5IHByZXNlbmNlIGlzXFxuIyBjaGVja2VkIGFnYWluc3QgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xlZnN2X3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZWZzLXJlcXVpcmVzLXZwY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVnBjQ29uZmlnXFxcIixcXG5cXHRcXFwiRmlsZVN5c3RlbUNvbmZpZ3Mgd2l0aG91dCBWcGNDb25maWc7IHRoZSBmdW5jdGlvbiBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkZ1bmN0aW9uIG11c3QgYmUgY29uZmlndXJlZCB0byBleGVjdXRlIGluIGEgVlBDIHRvIHJlZmVyZW5jZSBhY2Nlc3MgcG9pbnQgLi4uIFBsZWFzZSB1cGRhdGUgdGhlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gdG8gaW5jbHVkZSBWUEMgc3VibmV0cyBhbmQgc2VjdXJpdHkgZ3JvdXBzLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIFZwY0NvbmZpZyB3aXRoIHN1Ym5ldHMgdGhhdCBoYXZlIEVGUyBtb3VudCB0YXJnZXRzIGluIHRoZWlyIEFac1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRwcm9wcyA6PSBfcGZfbGVmc3ZfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlsZVN5c3RlbUNvbmZpZ3NcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZwY0NvbmZpZ1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZW52LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbGltaXRlZCB0byA0MDk2IGJ5dGVzIGluIHRvdGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODquODhuODqeODq+aWh+Wtl+WIl+OBruOCreODvC/lgKTjgaDjgZHjgpLmlbDjgYjjgovvvIjjg4jjg7zjgq/jg7Pjga/jgrnjgq3jg4Pjg5fvvInjgILlkIjoqIjjgYzml6LjgasgNDA5NiDjgpLotoXjgYjjgaZcXG4jIOOBhOOCjOOBsOOAgeWun+mam+OBruODh+ODl+ODreOCpOOBp+OCguW/heOBmuWkseaVl+OBmeOCi++8iOWun+OCteOCpOOCuuOBr+aOqOWumuS7peS4iuOBq+OBl+OBi+OBquOCieOBquOBhO+8ieOAglxcbiMgTk9URTog44GT44Gu44Ko44Oz44K444Oz44GuIFJlZ28g44OR44O844K144Gv5YaF5YyF6KGo6KiY5YaF44GuIDIg5aSJ5pWwIHNvbWXvvIhzb21lIGssIHYgaW4gdmFyc++8ieOCklxcbiMg5Y+X44GR5LuY44GR44Gq44GE44Gf44KB44CBb2JqZWN0LmtleXMg57WM55Sx44Gn5pu444GP44CCXFxuX3BmX2xlbnZfc2l6ZSh2YXJzKSA6PSBzdW0oW3MgfFxcblxcdHNvbWUgayBpbiBvYmplY3Qua2V5cyh2YXJzKVxcblxcdGlzX3N0cmluZyh2YXJzW2tdKVxcblxcdHMgOj0gY291bnQoaykgKyBjb3VudCh2YXJzW2tdKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZW52LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvdGFsIGF0IGxlYXN0ICVkIGJ5dGVzIChsaXRlcmFsIGtleXMgYW5kIHZhbHVlcyksIGJ1dCBMYW1iZGEgbGltaXRzIHRoZSBlbnZpcm9ubWVudCB0byA0MDk2IGJ5dGVzOyBDcmVhdGVGdW5jdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFt0b3RhbF0pLFxcblxcdFxcXCJNb3ZlIGxhcmdlIHZhbHVlcyB0byBTU00gUGFyYW1ldGVyIFN0b3JlLCBTZWNyZXRzIE1hbmFnZXIsIG9yIGEgYnVuZGxlZCBjb25maWcgZmlsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2dldHRpbmdzdGFydGVkLWxpbWl0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR2YXJzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzXFxcIilcXG5cXHRpc19vYmplY3QodmFycylcXG5cXHR0b3RhbCA6PSBfcGZfbGVudl9zaXplKHZhcnMpXFxuXFx0dG90YWwgPiA0MDk2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVzbS1iYXRjaHNpemUtd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNRUyBiYXRjaCBzaXplcyBvdmVyIDEwIG5lZWQgYSBiYXRjaGluZyB3aW5kb3dcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFNRUy1vbmx5IGNvdXBsaW5nOiBiaWcgYmF0Y2hlcyBtdXN0IHdhaXQgZm9yIGEgd2luZG93LiBLaW5lc2lzIGFuZFxcbiMgRHluYW1vREIgc291cmNlcyB0YWtlIGxhcmdlIGJhdGNoZXMgd2l0aG91dCBvbmUsIGhlbmNlIHRoZSBTUVMgZ3VhcmQuXFxuX3BmX2xic3dfaXNfc3FzKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIikgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxufVxcblxcbl9wZl9sYnN3X2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRzcGxpdChhcm4sIFxcXCI6XFxcIilbMl0gPT0gXFxcInNxc1xcXCJcXG59XFxuXFxuX3BmX2xic3dfbm9fd2luZG93KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfbGJzd19ub193aW5kb3cobmFtZSkgaWYge1xcblxcdHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1heGltdW1CYXRjaGluZ1dpbmRvd0luU2Vjb25kc1xcXCIpKSA9PSAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1iYXRjaHNpemUtd2luZG93XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYXRjaFNpemVcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhdGNoU2l6ZSAldiB3aXRob3V0IGEgYmF0Y2hpbmcgd2luZG93OyB0aGUgbWFwcGluZyBjcmVhdGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcmVxdWVzdCBwcm92aWRlZDogTWF4aW11bSBiYXRjaCB3aW5kb3cgaW4gc2Vjb25kcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGlmIG1heGltdW0gYmF0Y2ggc2l6ZSBpcyBncmVhdGVyIHRoYW4gMTBcXFxcXFxcIlxcXCIsIFtiXSksXFxuXFx0XFxcIlNldCBNYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHMgKDEtMzAwKSwgb3Iga2VlcCBCYXRjaFNpemUgYXQgMTAgb3IgbGVzc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1ldmVudHNvdXJjZW1hcHBpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcXFwiKVxcblxcdF9wZl9sYnN3X2lzX3NxcyhuYW1lKVxcblxcdGIgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmF0Y2hTaXplXFxcIikpXFxuXFx0YiA+IDEwXFxuXFx0X3BmX2xic3dfbm9fd2luZG93KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVzbS1maWZvLWJhdGNoaW5nLXdpbmRvd1wiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGSUZPIHF1ZXVlcyByZWplY3QgYSBiYXRjaGluZyB3aW5kb3dcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEZJRk8gb3JkZXJpbmcgZm9yYmlkcyBob2xkaW5nIGEgYmF0Y2ggb3Blbi4gRklGTy1uZXNzIGNvbWVzIGZyb20gdGhlXFxuIyBxdWV1ZSBzaWJsaW5nJ3MgRmlmb1F1ZXVlIGZsYWcgb3IgdGhlIC5maWZvIGFybiBzdWZmaXguXFxuX3BmX2xmYndfaXNfZmlmbyhuYW1lKSBpZiB7XFxuXFx0cSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIilcXG5cXHRxIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdGNvZXJjZV90b19ib29sKHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikpID09IHRydWVcXG59XFxuXFxuX3BmX2xmYndfaXNfZmlmbyhuYW1lKSBpZiB7XFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aChhcm4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVzbS1maWZvLWJhdGNoaW5nLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzXFxcIixcXG5cXHRcXFwiQmF0Y2hpbmcgd2luZG93IG9uIGEgRklGTyBxdWV1ZSBzb3VyY2U7IHRoZSBtYXBwaW5nIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCByZXF1ZXN0IHByb3ZpZGVkOiBCYXRjaGluZyB3aW5kb3cgaXMgbm90IHN1cHBvcnRlZCBmb3IgRklGTyBxdWV1ZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgTWF4aW11bUJhdGNoaW5nV2luZG93SW5TZWNvbmRzLCBvciB1c2UgYSBzdGFuZGFyZCBxdWV1ZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1ldmVudHNvdXJjZW1hcHBpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcXFwiKVxcblxcdF9wZl9sZmJ3X2lzX2ZpZm8obmFtZSlcXG5cXHR0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXhpbXVtQmF0Y2hpbmdXaW5kb3dJblNlY29uZHNcXFwiKSkgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVzbS1zcXMtc3RhcnRpbmctcG9zaXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU1FTIGV2ZW50IHNvdXJjZXMgcmVqZWN0IFN0YXJ0aW5nUG9zaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpFdmVudFNvdXJjZU1hcHBpbmdcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFN0YXJ0aW5nUG9zaXRpb24gYmVsb25ncyB0byBzdHJlYW0gc291cmNlczsgcXVldWVzIGhhdmUgbm8gb2Zmc2V0cy5cXG4jIERldGVjdGVkIHZpYSBhbiBpbi10ZW1wbGF0ZSBxdWV1ZSBzaWJsaW5nIG9yIHRoZSBzcXMgYXJuIHNlZ21lbnQuXFxuX3BmX2xlc3BfaXNfc3FzKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50U291cmNlQXJuXFxcIikgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxufVxcblxcbl9wZl9sZXNwX2lzX3NxcyhuYW1lKSBpZiB7XFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRTb3VyY2VBcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0c3RhcnRzd2l0aChhcm4sIFxcXCJhcm46XFxcIilcXG5cXHRzcGxpdChhcm4sIFxcXCI6XFxcIilbMl0gPT0gXFxcInNxc1xcXCJcXG59XFxuXFxuX3BmX2xlc3Bfc2V0KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiU3RhcnRpbmdQb3NpdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZXNtLXNxcy1zdGFydGluZy1wb3NpdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU3RhcnRpbmdQb3NpdGlvblxcXCIsXFxuXFx0XFxcIlN0YXJ0aW5nUG9zaXRpb24gb24gYW4gU1FTIGV2ZW50IHNvdXJjZTsgdGhlIG1hcHBpbmcgY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHJlcXVlc3QgcHJvdmlkZWQ6IFN0YXJ0aW5nUG9zaXRpb24gaXMgbm90IHZhbGlkIGZvciBTUVMgZXZlbnQgc291cmNlcy5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgU3RhcnRpbmdQb3NpdGlvbiAoaXQgb25seSBhcHBsaWVzIHRvIEtpbmVzaXMvRHluYW1vREIvS2Fma2Egc291cmNlcylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1sYW1iZGEtZXZlbnRzb3VyY2VtYXBwaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RXZlbnRTb3VyY2VNYXBwaW5nXFxcIilcXG5cXHRfcGZfbGVzcF9pc19zcXMobmFtZSlcXG5cXHRfcGZfbGVzcF9zZXQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtbWVtb3J5LW1heFwiLFxuICAgIFwic2VydmljZVwiOiBcImxhbWJkYVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlTaXplIHRvcHMgb3V0IGF0IDEwMjQwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIGhhcyB0aGUgMTI4IGZsb29yIGJ1dCBpcyBtaXNzaW5nIHRoZSAxMDI0MCBjYXBcXG4jIChlbmdpbmUgY2xlYW4gb24gMjAwMDAsIEYzMDM0IG9uIDY0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS1tZW1vcnktbWF4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZW1vcnlTaXplXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJNZW1vcnlTaXplICV2IGlzIG92ZXIgdGhlIGNhcDsgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBmYWlscyB3aXRoIFxcXFxcXFwiJ01lbW9yeVNpemUnIHZhbHVlIGZhaWxlZCB0byBzYXRpc2Z5IGNvbnN0cmFpbnQ6IE1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMjQwXFxcXFxcXCJcXFwiLCBbbV0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAxMDI0MCBNQlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVNpemVcXFwiKSlcXG5cXHRtID4gMTAyNDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtdGltZW91dC1tYXhcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGltZW91dCB0b3BzIG91dCBhdCA5MDAgc2Vjb25kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBoYXMgdGhlIDEgZmxvb3IgYnV0IGlzIG1pc3NpbmcgdGhlIDkwMCBjYXAgKGVuZ2luZVxcbiMgY2xlYW4gb24gOTAxLCBGMzAzNCBvbiAwKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxhbWJkYS10aW1lb3V0LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGltZW91dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGltZW91dCAldiBpcyBvdmVyIHRoZSAxNS1taW51dGUgY2FwOyB0aGUgZnVuY3Rpb24gY3JlYXRlIGZhaWxzIHdpdGggXFxcXFxcXCJWYWx1ZSAnJXYnIGF0ICd0aW1lb3V0JyBmYWlsZWQgdG8gc2F0aXNmeSBjb25zdHJhaW50OiBNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA5MDBcXFxcXFxcIlxcXCIsIFt0LCB0XSksXFxuXFx0XFxcIlVzZSBhdCBtb3N0IDkwMCBzZWNvbmRzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cXFwiKVxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGltZW91dFxcXCIpKVxcblxcdHQgPiA5MDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sb2dzLWZpbHRlci1wYXR0ZXJuLWJyYWNrZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJsb2dzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZmlsdGVyIHBhdHRlcm4gc3RhcnRpbmcgd2l0aCAnWycgbXVzdCBlbmQgd2l0aCAnXSdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCIsXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnZnBiX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvRmlsdGVyQW5kUGF0dGVyblN5bnRheC5odG1sXFxcIlxcblxcbl9wZl9sZ2ZwYl9tc2coa2luZCkgOj0gc3ByaW50ZihcXFwiVGhlICVzIGZpbHRlciBwYXR0ZXJuIHN0YXJ0cyB3aXRoICdbJyBidXQgZG9lcyBub3QgZW5kIHdpdGggJ10nOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJZiBhIGZpbHRlciBwYXR0ZXJuIHN0YXJ0cyB3aXRoICdbJyBpdCBtdXN0IGVuZCB3aXRoICddJ1xcXFxcXFwiXFxcIiwgW2tpbmRdKVxcblxcbl9wZl9sZ2ZwYl9maXggOj0gXFxcIkNsb3NlIHRoZSBicmFja2V0IOKAlCBhIHNwYWNlLWRlbGltaXRlZCBwYXR0ZXJuIGlzIFtmaWVsZDEsIGZpZWxkMiwgLi4uXVxcXCJcXG5cXG4jIFRoZSBzYW1lIHBhcnNlciBydW5zIGZvciBtZXRyaWMgZmlsdGVycyBhbmQgc3Vic2NyaXB0aW9uIGZpbHRlcnMsIGFuZCBpdFxcbiMgcnVucyBiZWZvcmUgYW55IGRlc3RpbmF0aW9uIHZhbGlkYXRpb24gKGJlbmNoIGMwMS9jMDYpLiBPbmx5IHRoaXNcXG4jIHN0YXJ0L2VuZCBwYWlyaW5nIGlzIGNoZWNrZWQgaGVyZTsgYSBmdWxsIHBhdHRlcm4gcGFyc2VyIGlzIG91dCBvZiBzY29wZS5cXG5fcGZfbGdmcGJfdW5iYWxhbmNlZChwKSBpZiB7XFxuXFx0dCA6PSB0cmltX3NwYWNlKHApXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiW1xcXCIpXFxuXFx0bm90IGVuZHN3aXRoKHQsIFxcXCJdXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLWZpbHRlci1wYXR0ZXJuLWJyYWNrZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiLFxcblxcdF9wZl9sZ2ZwYl9tc2coXFxcIm1ldHJpY1xcXCIpLFxcblxcdF9wZl9sZ2ZwYl9maXgsIF9wZl9sZ2ZwYl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXFxcIilcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0X3BmX2xnZnBiX3VuYmFsYW5jZWQocClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLWZpbHRlci1wYXR0ZXJuLWJyYWNrZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiLFxcblxcdF9wZl9sZ2ZwYl9tc2coXFxcInN1YnNjcmlwdGlvblxcXCIpLFxcblxcdF9wZl9sZ2ZwYl9maXgsIF9wZl9sZ2ZwYl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXFxcIilcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHApXFxuXFx0X3BmX2xnZnBiX3VuYmFsYW5jZWQocClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sb2dzLW1ldHJpYy1kaW1lbnNpb25zLWRlZmF1bHQtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJEaW1lbnNpb25zIGFuZCBEZWZhdWx0VmFsdWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIERlZmF1bHRWYWx1ZSBpcyBlbWl0dGVkIHdoZW4gYSBsb2cgbGluZSBkb2VzIG5vdCBtYXRjaCwgYnV0IGEgZGltZW5zaW9uXFxuIyB2YWx1ZSBjYW4gb25seSBjb21lIGZyb20gYSBtYXRjaCDigJQgdGhlIHNlcnZpY2UgcmVqZWN0cyB0aGUgY29tYmluYXRpb24uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLW1ldHJpYy1kaW1lbnNpb25zLWRlZmF1bHQtZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLk1ldHJpY1RyYW5zZm9ybWF0aW9ucy4lZC5EZWZhdWx0VmFsdWVcXFwiLCBbdC5pbmRleF0pLFxcblxcdFxcXCJUaGUgbWV0cmljIHRyYW5zZm9ybWF0aW9uIHNldHMgYm90aCBEaW1lbnNpb25zIGFuZCBEZWZhdWx0VmFsdWU7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkludmFsaWQgbWV0cmljIHRyYW5zZm9ybWF0aW9uOiBkaW1lbnNpb25zIGFuZCBkZWZhdWx0IHZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgcHJvcGVydGllc1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiRHJvcCBEZWZhdWx0VmFsdWUgd2hlbiB0aGUgdHJhbnNmb3JtYXRpb24gaGFzIERpbWVuc2lvbnMsIG9yIGRyb3AgdGhlIERpbWVuc2lvbnNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWxvZ3MtbWV0cmljZmlsdGVyLW1ldHJpY3RyYW5zZm9ybWF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIkRlZmF1bHRWYWx1ZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRkaW1zIDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIkRpbWVuc2lvbnNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGRpbXMpXFxuXFx0Y291bnQoZGltcykgPiAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1zdWJzY3JpcHRpb24ta2luZXNpcy1yb2xlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgZGVzdGluYXRpb24gbmVlZHMgUm9sZUFyblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfbGdza3JfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9TdWJzY3JpcHRpb25GaWx0ZXJzLmh0bWxcXFwiXFxuXFxuIyBUaGUgZGVzdGluYXRpb24gaXMgcHJvdmFibHkgS2luZXNpcyB0d28gd2F5czogYSBsaXRlcmFsXFxuIyBhcm46PHBhcnRpdGlvbj46a2luZXNpczogc3RyaW5nLCBvciBhIFJlZi9HZXRBdHQgdGhhdCByZXNvbHZlKCkgdHVybnMgaW50b1xcbiMgdGhlIGxvZ2ljYWwgSUQgb2YgYW4gaW4tdGVtcGxhdGUgQVdTOjpLaW5lc2lzOjpTdHJlYW0uIFNjb3BlZCB0byBLaW5lc2lzIOKAlFxcbiMgdGhlIGJlbmNoIGVycm9yIG5hbWVzIFxcXCJ2ZW5kb3Iga2luZXNpc1xcXCI7IG90aGVyIHZlbmRvcnMgd2VyZSBub3QgbWVhc3VyZWQuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRwYXJ0cyA6PSBzcGxpdChkLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDNcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJraW5lc2lzXFxcIlxcbn1cXG5cXG5fcGZfbGdza3Jfa2luZXNpc19kZXN0KG5hbWUpIGlmIHtcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzdGluYXRpb25Bcm5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdGQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6S2luZXNpczo6U3RyZWFtXFxcIilcXG59XFxuXFxuIyBUcnVlIGFic2VuY2Ugb2YgUm9sZUFybiBuZWVkcyB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgQUdFTlRTLm1kKS5cXG5fcGZfbGdza3Jfcm9sZV9hYnNlbnQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJSb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUm9sZUFyblxcXCIsXFxuXFx0XFxcIlRoZSBzdWJzY3JpcHRpb24gZmlsdGVyIHRhcmdldHMgYSBLaW5lc2lzIHN0cmVhbSBidXQgc2V0cyBubyBSb2xlQXJuOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJkZXN0aW5hdGlvbkFybiBmb3IgdmVuZG9yIGtpbmVzaXMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCByb2xlQXJuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBSb2xlQXJuIGZvciBhIHJvbGUgdGhhdCBsb2dzLmFtYXpvbmF3cy5jb20gY2FuIGFzc3VtZSB3aXRoIGtpbmVzaXM6UHV0UmVjb3JkIG9uIHRoZSBzdHJlYW1cXFwiLFxcblxcdF9wZl9sZ3Nrcl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXFxcIilcXG5cXHRfcGZfbGdza3Jfa2luZXNpc19kZXN0KG5hbWUpXFxuXFx0X3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t0cmFja1wiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCYWNrdHJhY2sgb25seSB3b3JrcyBvbiBhdXJvcmEtbXlzcWwsIHdpdGggYSB3aW5kb3cgb2YgYXQgbW9zdCAyNTkyMDAgc2Vjb25kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9BdXJvcmFNeVNRTC5NYW5hZ2luZy5CYWNrdHJhY2suaHRtbFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdHJhY2tcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkJhY2t0cmFja1dpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiQmFja3RyYWNrIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGF1cm9yYS1teXNxbCAoXFxcXFxcXCJCYWNrdHJhY2sgaXMgbm90IGVuYWJsZWQgZm9yIHRoZSAlcyBlbmdpbmUuXFxcXFxcXCIpXFxcIiwgW2VuZ10pLFxcblxcdFxcXCJSZW1vdmUgQmFja3RyYWNrV2luZG93LCBvciB1c2UgdGhlIGF1cm9yYS1teXNxbCBlbmdpbmVcXFwiLFxcblxcdF9wZl9yZHNidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmFja3RyYWNrV2luZG93XFxcIikpXFxuXFx0biA+IDBcXG5cXHRlbmcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKVxcblxcdGlzX3N0cmluZyhlbmcpXFxuXFx0ZW5nICE9IFxcXCJhdXJvcmEtbXlzcWxcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t0cmFja1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQmFja3RyYWNrV2luZG93XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCYWNrdHJhY2tXaW5kb3cgJXYgaXMgb3V0c2lkZSAwLTI1OTIwMCBzZWNvbmRzICg3MiBob3VycylcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAyNTkyMDAgc2Vjb25kc1xcXCIsXFxuXFx0X3BmX3Jkc2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCQ2x1c3RlclxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKSA9PSBcXFwiYXVyb3JhLW15c3FsXFxcIlxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmFja3RyYWNrV2luZG93XFxcIikpXFxuXFx0biA+IDI1OTIwMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1iYWNrdXAtcmV0ZW50aW9uLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkJhY2t1cFJldGVudGlvblBlcmlvZCBtdXN0IGJlIGF0IG1vc3QgMzUgZGF5c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1iYWNrdXAtcmV0ZW50aW9uLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5CYWNrdXBSZXRlbnRpb25QZXJpb2RcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t1cFJldGVudGlvblBlcmlvZCAldiBleGNlZWRzIHRoZSBtYXhpbXVtOyBSRFMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiUmV0ZW50aW9uIHBlcmlvZCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzUuXFxcXFxcXCJcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYSByZXRlbnRpb24gcGVyaW9kIG9mIDM1IGRheXMgb3IgbGVzc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmFja3VwUmV0ZW50aW9uUGVyaW9kXFxcIikpXFxuXFx0biA+IDM1XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZHVyYXRpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGJhY2t1cCB3aW5kb3cgbXVzdCBiZSBhdCBsZWFzdCAzMCBtaW51dGVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgXFxcIkhIOk1NXFxcIiAtPiBtaW51dGVzIG9mIGRheTsgdW5kZWZpbmVkIGZvciBhbnl0aGluZyBlbHNlLiBEaWdpdHMgZ29cXG4jIHRocm91Z2ggYSBsb29rdXAgdGFibGUgYmVjYXVzZSB0b19udW1iZXIgcmVqZWN0cyBsZWFkaW5nIHplcm9zXFxuIyAodG9fbnVtYmVyKFxcXCIwM1xcXCIpIGlzIHVuZGVmaW5lZCBpbiB0aGUgZW5naW5lJ3MgUmVnbyBidWlsZCkuXFxuX3BmX3Jkc3dkX2RpZ2l0IDo9IHtcXFwiMFxcXCI6IDAsIFxcXCIxXFxcIjogMSwgXFxcIjJcXFwiOiAyLCBcXFwiM1xcXCI6IDMsIFxcXCI0XFxcIjogNCwgXFxcIjVcXFwiOiA1LCBcXFwiNlxcXCI6IDYsIFxcXCI3XFxcIjogNywgXFxcIjhcXFwiOiA4LCBcXFwiOVxcXCI6IDl9XFxuXFxuX3BmX3Jkc3dkX21pbih0KSA6PSBtIGlmIHtcXG5cXHRpc19zdHJpbmcodClcXG5cXHRyZWdleC5tYXRjaChgXihbMDFdWzAtOV18MlswLTNdKTpbMC01XVswLTldJGAsIHQpXFxuXFx0aCA6PSAoX3BmX3Jkc3dkX2RpZ2l0W3N1YnN0cmluZyh0LCAwLCAxKV0gKiAxMCkgKyBfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDEsIDEpXVxcblxcdG1pIDo9IChfcGZfcmRzd2RfZGlnaXRbc3Vic3RyaW5nKHQsIDMsIDEpXSAqIDEwKSArIF9wZl9yZHN3ZF9kaWdpdFtzdWJzdHJpbmcodCwgNCwgMSldXFxuXFx0bSA6PSAoaCAqIDYwKSArIG1pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZHVyYXRpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlByZWZlcnJlZEJhY2t1cFdpbmRvd1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiUHJlZmVycmVkQmFja3VwV2luZG93ICclcycgaXMgb25seSAldiBtaW51dGVzOyBSRFMgcmVxdWlyZXMgYXQgbGVhc3QgMzAgKFxcXFxcXFwiQmFja3VwIHdpbmRvdyBtdXN0IGJlIGF0IGxlYXN0IDMwIG1pbnV0ZXMuXFxcXFxcXCIpXFxcIiwgW3csIGRdKSxcXG5cXHRcXFwiV2lkZW4gdGhlIHdpbmRvdyB0byAzMCBtaW51dGVzIG9yIG1vcmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcodylcXG5cXHRwYXJ0cyA6PSBzcGxpdCh3LCBcXFwiLVxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRzIDo9IF9wZl9yZHN3ZF9taW4ocGFydHNbMF0pXFxuXFx0ZSA6PSBfcGZfcmRzd2RfbWluKHBhcnRzWzFdKVxcblxcdGQgOj0gKChlIC0gcykgKyAxNDQwKSAlIDE0NDBcXG5cXHRkIDwgMzBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtYmFja3VwLXdpbmRvdy1mb3JtYXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUHJlZmVycmVkQmFja3VwV2luZG93IG11c3QgYmUgaGgyNDptaS1oaDI0Om1pXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWJhY2t1cC13aW5kb3ctZm9ybWF0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIlByZWZlcnJlZEJhY2t1cFdpbmRvdyAnJXMnIGlzIG5vdCBoaDI0Om1pLWhoMjQ6bWkgKDI0SCBjbG9jayBVVEMpOyBSRFMgcmVqZWN0cyBpdCBhdCBjcmVhdGUgdGltZVxcXCIsIFt3XSksXFxuXFx0XFxcIlVzZSB0aGUgaGgyNDptaS1oaDI0Om1pIGZvcm0sIGUuZy4gMDM6MDAtMDQ6MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHR3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcodylcXG5cXHRub3QgcmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XS0oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB3KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJkcy1kYm5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcInBvc3RncmVzIERCTmFtZSBtdXN0IGJlZ2luIHdpdGggYSBsZXR0ZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBsZXR0ZXItc3RhcnQgaGFsZiBvZiB0aGUgc2VydmljZSBtZXNzYWdlIGlzIGNsYWltZWQ6IHRoZVxcbiMgXFxcIm9ubHkgYWxwaGFudW1lcmljXFxcIiBoYWxmIGlzIG1lYXN1cmFibHkgd3JvbmcgKGJlbmNoX2RiIGRlcGxveXMpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWRibmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRCTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiREJOYW1lICclcycgZG9lcyBub3QgYmVnaW4gd2l0aCBhIGxldHRlciAoXFxcXFxcXCJEQk5hbWUgbXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyXFxcXFxcXCIpOyB0aGUgQ3JlYXRlREJJbnN0YW5jZSBjYWxsIGZhaWxzXFxcIiwgW2RuXSksXFxuXFx0XFxcIlN0YXJ0IHRoZSBkYXRhYmFzZSBuYW1lIHdpdGggYSBsZXR0ZXJcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuZ2luZVxcXCIpID09IFxcXCJwb3N0Z3Jlc1xcXCJcXG5cXHRkbiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRCTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGRuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVpdYCwgZG4pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLWRlc2NyaXB0aW9uLXByaW50YWJsZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSRFMgZ3JvdXAgZGVzY3JpcHRpb25zIG11c3QgYmUgcHJpbnRhYmxlIEFTQ0lJXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJTdWJuZXRHcm91cFwiLFxuICAgICAgXCJBV1M6OlJEUzo6REJQYXJhbWV0ZXJHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNkZXNjX2JhZCBjb250YWlucyBbbmFtZSwgcGF0aCwgdl0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EQlN1Ym5ldEdyb3VwRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXltcXFxceDIwLVxcXFx4N2VdKiRgLCB2KVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cERlc2NyaXB0aW9uXFxcIlxcbn1cXG5cXG5fcGZfcmRzZGVzY19iYWQgY29udGFpbnMgW25hbWUsIHBhdGgsIHZdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlBhcmFtZXRlckdyb3VwXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdG5vdCByZWdleC5tYXRjaChgXltcXFxceDIwLVxcXFx4N2VdKiRgLCB2KVxcblxcdHBhdGggOj0gXFxcIlByb3BlcnRpZXMuRGVzY3JpcHRpb25cXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLWRlc2NyaXB0aW9uLXByaW50YWJsZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0cGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZXNjcmlwdGlvbiAnJXMnIGlzIHJlamVjdGVkOiBSRFMgdHJlYXRzIGFueSBub24tQVNDSUkgY2hhcmFjdGVyIGFzIGEgbm9uLXByaW50YWJsZSBjb250cm9sIGNoYXJhY3RlclxcXCIsIFt2XSksXFxuXFx0XFxcIldyaXRlIHRoZSBkZXNjcmlwdGlvbiBpbiBwcmludGFibGUgQVNDSUlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCU3VibmV0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCB2XSBpbiBfcGZfcmRzZGVzY19iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtZ3AzLWlvcHMtc3RvcmFnZS10aHJlc2hvbGRcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiZ3AzIGJlbG93IDQwMCBHaUIgY2Fubm90IHRha2UgY3VzdG9tIElvcHMgb3IgU3RvcmFnZVRocm91Z2hwdXQgKHBvc3RncmVzL215c3FsKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzZ3AzX2hhcyhuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Jkc2dwM19jdXN0b20obmFtZSkgaWYgX3BmX3Jkc2dwM19oYXMobmFtZSwgXFxcIklvcHNcXFwiKVxcblxcbl9wZl9yZHNncDNfY3VzdG9tKG5hbWUpIGlmIF9wZl9yZHNncDNfaGFzKG5hbWUsIFxcXCJTdG9yYWdlVGhyb3VnaHB1dFxcXCIpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtZ3AzLWlvcHMtc3RvcmFnZS10aHJlc2hvbGRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcImdwMyB3aXRoICV2IEdpQiBjYW5ub3QgdGFrZSBjdXN0b20gSW9wcy9TdG9yYWdlVGhyb3VnaHB1dCBiZWxvdyA0MDAgR2lCIGZvciBlbmdpbmUgJXMgKFxcXFxcXFwiWW91IGNhbid0IHNwZWNpZnkgSU9QUyBvciBzdG9yYWdlIHRocm91Z2hwdXQgLi4uIGxlc3MgdGhhbiA0MDAuXFxcXFxcXCIpXFxcIiwgW3MsIGVuZ10pLFxcblxcdFxcXCJEcm9wIHRoZSBjdXN0b20gSW9wcy9TdG9yYWdlVGhyb3VnaHB1dCwgb3IgYWxsb2NhdGUgYXQgbGVhc3QgNDAwIEdpQlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1N0b3JhZ2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRlbmcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FbmdpbmVcXFwiKVxcblxcdGVuZyBpbiB7XFxcInBvc3RncmVzXFxcIiwgXFxcIm15c3FsXFxcIn1cXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG9jYXRlZFN0b3JhZ2VcXFwiKSlcXG5cXHRzIDwgNDAwXFxuXFx0X3BmX3Jkc2dwM19jdXN0b20obmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtaW8xLWlvcHMtcmF0aW9cIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwicG9zdGdyZXMgaW8xIElvcHMgbWF5IG5vdCBleGNlZWQgNTAgcGVyIEdpQiBvZiBzdG9yYWdlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJJbnN0YW5jZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgYmVuY2hlZCBlbmdpbmUvdHlwZSBwYWlyOyB0aGUgaGlzdG9yaWNhbCA2NDAwMCBJT1BTIGNhcCBpc1xcbiMgZ29uZSAoODAwMDAgZGVwbG95ZWQgY2xlYW4gYXQgcmF0aW8gNDAgb24gMjAyNi0wOS0wMykuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtaW8xLWlvcHMtcmF0aW9cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgaXMgJXYgcGVyIEdpQiBmb3IgJXYgR2lCOyBwb3N0Z3JlcyBpbzEgYWxsb3dzIGF0IG1vc3QgNTAgKFxcXFxcXFwiSW52YWxpZCBpb3BzIHRvIHN0b3JhZ2UgKEdpQikgcmF0aW9cXFxcXFxcIilcXFwiLCBbbiwgbiAvIHMsIHNdKSxcXG5cXHRcXFwiS2VlcCBJb3BzIGF0IG9yIGJlbG93IDUwIHggQWxsb2NhdGVkU3RvcmFnZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L1VzZXJHdWlkZS9DSEFQX1N0b3JhZ2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVuZ2luZVxcXCIpID09IFxcXCJwb3N0Z3Jlc1xcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN0b3JhZ2VUeXBlXFxcIikgPT0gXFxcImlvMVxcXCJcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsbG9jYXRlZFN0b3JhZ2VcXFwiKSlcXG5cXHRzID4gMFxcblxcdG4gPiBzICogNTBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtaW9wcy1yZXF1aXJlZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJpbzEgYW5kIGlvMiBzdG9yYWdlIHJlcXVpcmUgdGhlIElvcHMgcHJvcGVydHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UkRTOjpEQkluc3RhbmNlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtaW9wcy1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiU3RvcmFnZVR5cGUgJXMgcmVxdWlyZXMgSW9wcyAoXFxcXFxcXCJUaGUgc3RvcmFnZSB0eXBlICVzIHJlcXVpcmVzIGlvcHMgdG8gYmUgc3BlY2lmaWVkLlxcXFxcXFwiKVxcXCIsIFtzdCwgc3RdKSxcXG5cXHRcXFwiU2V0IElvcHMgYWxvbmdzaWRlIHRoZSBwcm92aXNpb25lZC1JT1BTIHN0b3JhZ2UgdHlwZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcXFwiKVxcblxcdHN0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU3RvcmFnZVR5cGVcXFwiKVxcblxcdHN0IGluIHtcXFwiaW8xXFxcIiwgXFxcImlvMlxcXCJ9XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIklvcHNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXBhc3N3b3JkLXZhbGlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicmRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1hc3RlclVzZXJQYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0IDggY2hhcmFjdGVycyB3aXRob3V0ICcvJywgJ0AnLCAnXFxcXFxcXCInIG9yIHNwYWNlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIixcbiAgICAgIFwiQVdTOjpSRFM6OkRCQ2x1c3RlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yZHNwd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIlxcblxcbl9wZl9yZHNwd190eXBlcyA6PSB7XFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIiwgXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwifVxcblxcbl9wZl9yZHNwd19mb3JiaWRkZW4gOj0ge1xcXCIvXFxcIiwgXFxcIkBcXFwiLCBcXFwiXFxcXFxcXCJcXFwiLCBcXFwiIFxcXCJ9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtcGFzc3dvcmQtdmFsaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1hc3RlclVzZXJQYXNzd29yZFxcXCIsXFxuXFx0XFxcIk1hc3RlclVzZXJQYXNzd29yZCBpcyBzaG9ydGVyIHRoYW4gOCBjaGFyYWN0ZXJzOyBSRFMgcmVqZWN0cyBpdCBhdCBjcmVhdGUgdGltZVxcXCIsXFxuXFx0XFxcIlVzZSA4KyBjaGFyYWN0ZXJzLCBvciBhIFNlY3JldHMgTWFuYWdlciByZWZlcmVuY2VcXFwiLFxcblxcdF9wZl9yZHNwd191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIF9wZl9yZHNwd190eXBlc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRwdyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1hc3RlclVzZXJQYXNzd29yZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHB3KVxcblxcdGNvdW50KHB3KSA8IDhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtcGFzc3dvcmQtdmFsaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1hc3RlclVzZXJQYXNzd29yZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTWFzdGVyVXNlclBhc3N3b3JkIGNvbnRhaW5zICclcyc7IFJEUyBmb3JiaWRzICcvJywgJ0AnLCBkb3VibGUgcXVvdGVzIGFuZCBzcGFjZXNcXFwiLCBbY2hdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBmb3JiaWRkZW4gY2hhcmFjdGVyLCBvciB1c2UgYSBTZWNyZXRzIE1hbmFnZXIgcmVmZXJlbmNlXFxcIixcXG5cXHRfcGZfcmRzcHdfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiBfcGZfcmRzcHdfdHlwZXNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0cHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NYXN0ZXJVc2VyUGFzc3dvcmRcXFwiKVxcblxcdGlzX3N0cmluZyhwdylcXG5cXHRzb21lIGNoIGluIF9wZl9yZHNwd19mb3JiaWRkZW5cXG5cXHRjb250YWlucyhwdywgY2gpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcmRzLXBvcnQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGRhdGFiYXNlIHBvcnQgbXVzdCBiZSB3aXRoaW4gMTE1MC02NTUzNVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcmRzcG9ydF9vdXQobikgaWYgbiA8IDExNTBcXG5cXG5fcGZfcmRzcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9ydCAldiBpcyBvdXRzaWRlIDExNTAtNjU1MzUgKFxcXFxcXFwiSW52YWxpZCBlbmRwb2ludCBwb3J0ICV2LiBWYWxpZCByYW5nZSBpczogMTE1MC02NTUzNVxcXFxcXFwiKVxcXCIsIFtuLCBuXSksXFxuXFx0XFxcIlBpY2sgYSBwb3J0IGJldHdlZW4gMTE1MCBhbmQgNjU1MzVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCSW5zdGFuY2UuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkluc3RhbmNlXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvcnRcXFwiKSlcXG5cXHRfcGZfcmRzcG9ydF9vdXQobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtc2VydmVybGVzcy12Mi1jYXBhY2l0eVwiLFxuICAgIFwic2VydmljZVwiOiBcInJkc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZXJ2ZXJsZXNzIHYyIE1pbkNhcGFjaXR5IG11c3Qgbm90IGV4Y2VlZCBNYXhDYXBhY2l0eSwgYW5kIE1heENhcGFjaXR5IGlzIGF0IG1vc3QgMjU2XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJEUzo6REJDbHVzdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Jkc3N2Ml91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0F1cm9yYVVzZXJHdWlkZS9hdXJvcmEtc2VydmVybGVzcy12Mi5zZXR0aW5nLWNhcGFjaXR5Lmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc2VydmVybGVzcy12Mi1jYXBhY2l0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWluQ2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIk1pbkNhcGFjaXR5ICV2IGV4Y2VlZHMgTWF4Q2FwYWNpdHkgJXYgKFxcXFxcXFwibWluaW11bSBjYXBhY2l0eSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXhpbXVtIGNhcGFjaXR5XFxcXFxcXCIpXFxcIiwgW21uLCBteF0pLFxcblxcdFxcXCJLZWVwIE1pbkNhcGFjaXR5IDw9IE1heENhcGFjaXR5XFxcIixcXG5cXHRfcGZfcmRzc3YyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCQ2x1c3RlclxcXCIpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWluQ2FwYWNpdHlcXFwiKSlcXG5cXHRteCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXJ2ZXJsZXNzVjJTY2FsaW5nQ29uZmlndXJhdGlvbi5NYXhDYXBhY2l0eVxcXCIpKVxcblxcdG1uID4gbXhcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yZHMtc2VydmVybGVzcy12Mi1jYXBhY2l0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2VydmVybGVzc1YyU2NhbGluZ0NvbmZpZ3VyYXRpb24uTWF4Q2FwYWNpdHlcXFwiLFxcblxcdHNwcmludGYoXFxcIk1heENhcGFjaXR5ICV2IGlzIGFib3ZlIDI1NiBBQ1VzIChcXFxcXFxcIlRoZSB2YWxpZCBzY2FsaW5nIHJhbmdlIGZvciB0aGlzIGNsdXN0ZXIgaXMgMC4wIHRvIDI1Ni4wLlxcXFxcXFwiKVxcXCIsIFtteF0pLFxcblxcdFxcXCJVc2UgYXQgbW9zdCAyNTYgQUNVc1xcXCIsXFxuXFx0X3BmX3Jkc3N2Ml91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQkNsdXN0ZXJcXFwiKVxcblxcdG14IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNlcnZlcmxlc3NWMlNjYWxpbmdDb25maWd1cmF0aW9uLk1heENhcGFjaXR5XFxcIikpXFxuXFx0bXggPiAyNTZcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtc3VibmV0LWdyb3VwLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiREIgc3VibmV0IGdyb3VwIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgc3BhY2VzLCBkb3QsIHVuZGVyc2NvcmUgYW5kIGh5cGhlblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCU3VibmV0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJkcy1zdWJuZXQtZ3JvdXAtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cE5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkRCU3VibmV0R3JvdXBOYW1lICclcycgaXMgcmVqZWN0ZWQgd2l0aCBcXFxcXFxcIkludmFsaWQgc3VibmV0IGdyb3VwIG5hbWVcXFxcXFxcIjogUkRTIGFjY2VwdHMgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBzcGFjZXMsIGRvdCwgdW5kZXJzY29yZSBhbmQgaHlwaGVuXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBzdWJuZXQgZ3JvdXAgdXNpbmcgW2EtekEtWjAtOSAuXy1dIG9ubHlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZURCU3VibmV0R3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UkRTOjpEQlN1Ym5ldEdyb3VwXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuREJTdWJuZXRHcm91cE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhuKVxcblxcdG5vdCByZWdleC5tYXRjaChgXlthLXpBLVowLTkgLl8tXXsxLDI1NX0kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yZHMtd2luZG93LW92ZXJsYXBcIixcbiAgICBcInNlcnZpY2VcIjogXCJyZHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIGJhY2t1cCB3aW5kb3cgYW5kIHRoZSBtYWludGVuYW5jZSB3aW5kb3cgbXVzdCBub3Qgb3ZlcmxhcFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFxcXCJISDpNTVxcXCIgLT4gbWludXRlcyBvZiBkYXk7IHVuZGVmaW5lZCBmb3IgYW55dGhpbmcgZWxzZS4gRGlnaXRzIGdvXFxuIyB0aHJvdWdoIGEgbG9va3VwIHRhYmxlIGJlY2F1c2UgdG9fbnVtYmVyIHJlamVjdHMgbGVhZGluZyB6ZXJvc1xcbiMgKHRvX251bWJlcihcXFwiMDNcXFwiKSBpcyB1bmRlZmluZWQgaW4gdGhlIGVuZ2luZSdzIFJlZ28gYnVpbGQpLlxcbl9wZl9yZHN3b19kaWdpdCA6PSB7XFxcIjBcXFwiOiAwLCBcXFwiMVxcXCI6IDEsIFxcXCIyXFxcIjogMiwgXFxcIjNcXFwiOiAzLCBcXFwiNFxcXCI6IDQsIFxcXCI1XFxcIjogNSwgXFxcIjZcXFwiOiA2LCBcXFwiN1xcXCI6IDcsIFxcXCI4XFxcIjogOCwgXFxcIjlcXFwiOiA5fVxcblxcbl9wZl9yZHN3b19taW4odCkgOj0gbSBpZiB7XFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0cmVnZXgubWF0Y2goYF4oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSRgLCB0KVxcblxcdGggOj0gKF9wZl9yZHN3b19kaWdpdFtzdWJzdHJpbmcodCwgMCwgMSldICogMTApICsgX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCAxLCAxKV1cXG5cXHRtaSA6PSAoX3BmX3Jkc3dvX2RpZ2l0W3N1YnN0cmluZyh0LCAzLCAxKV0gKiAxMCkgKyBfcGZfcmRzd29fZGlnaXRbc3Vic3RyaW5nKHQsIDQsIDEpXVxcblxcdG0gOj0gKGggKiA2MCkgKyBtaVxcbn1cXG5cXG4jIFRoZSBiYWNrdXAgd2luZG93IHJlY3VycyBkYWlseSwgc28gYSBzYW1lLWRheSBtYWludGVuYW5jZSB3aW5kb3dcXG4jIG92ZXJsYXBzIHdoZW5ldmVyIHRoZSB0aW1lLW9mLWRheSBpbnRlcnZhbHMgaW50ZXJzZWN0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcmRzLXdpbmRvdy1vdmVybGFwXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRCYWNrdXBXaW5kb3dcXFwiLFxcblxcdHNwcmludGYoXFxcIkJhY2t1cCB3aW5kb3cgJXMgb3ZlcmxhcHMgbWFpbnRlbmFuY2Ugd2luZG93ICVzOyBSRFMgcmVqZWN0cyB0aGUgcGFpciAoXFxcXFxcXCJUaGUgYmFja3VwIHdpbmRvdyBhbmQgbWFpbnRlbmFuY2Ugd2luZG93IG11c3Qgbm90IG92ZXJsYXAuXFxcXFxcXCIpXFxcIiwgW2J3LCBtd10pLFxcblxcdFxcXCJTZXBhcmF0ZSB0aGUgdHdvIHdpbmRvd3MgaW4gdGltZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25SRFMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlREJJbnN0YW5jZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSRFM6OkRCSW5zdGFuY2VcXFwiKVxcblxcdGJ3IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUHJlZmVycmVkQmFja3VwV2luZG93XFxcIilcXG5cXHRpc19zdHJpbmcoYncpXFxuXFx0YnAgOj0gc3BsaXQoYncsIFxcXCItXFxcIilcXG5cXHRjb3VudChicCkgPT0gMlxcblxcdGJzIDo9IF9wZl9yZHN3b19taW4oYnBbMF0pXFxuXFx0YmUgOj0gX3BmX3Jkc3dvX21pbihicFsxXSlcXG5cXHRicyA8IGJlXFxuXFx0bXcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5QcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvd1xcXCIpXFxuXFx0aXNfc3RyaW5nKG13KVxcblxcdG1wIDo9IHNwbGl0KGxvd2VyKG13KSwgXFxcIi1cXFwiKVxcblxcdGNvdW50KG1wKSA9PSAyXFxuXFx0bTEgOj0gc3BsaXQobXBbMF0sIFxcXCI6XFxcIilcXG5cXHRtMiA6PSBzcGxpdChtcFsxXSwgXFxcIjpcXFwiKVxcblxcdGNvdW50KG0xKSA9PSAzXFxuXFx0Y291bnQobTIpID09IDNcXG5cXHRtMVswXSA9PSBtMlswXVxcblxcdG1zIDo9IF9wZl9yZHN3b19taW4oc3ByaW50ZihcXFwiJXM6JXNcXFwiLCBbbTFbMV0sIG0xWzJdXSkpXFxuXFx0bWUgOj0gX3BmX3Jkc3dvX21pbihzcHJpbnRmKFxcXCIlczolc1xcXCIsIFttMlsxXSwgbTJbMl1dKSlcXG5cXHRtcyA8IG1lXFxuXFx0YnMgPCBtZVxcblxcdG1zIDwgYmVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDbG91ZEZyb250IGFsaWFzIHRhcmdldCBtdXN0IHVzZSBob3N0ZWQgem9uZSBaMkZEVE5EQVRBUVlXMlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGlzIGFsaWFzZWQgdGhyb3VnaCB0aGUgc2luZ2xlIGdsb2JhbCBob3N0ZWRcXG4jIHpvbmUgWjJGRFROREFUQVFZVzIuIEFueSBvdGhlciBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgKGFuIEFMQidzIHJlZ2lvbmFsXFxuIyB6b25lIGlkIGlzIHRoZSBjbGFzc2ljIHBhc3RlIGVycm9yKSBmYWlscyBhdCBkZXBsb3kgdGltZSB3aXRoIFxcXCJ0aGUgYWxpYXNcXG4jIHRhcmdldCBuYW1lIGRvZXMgbm90IGxpZSB3aXRoaW4gdGhlIHRhcmdldCB6b25lXFxcIi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtYWxpYXMtY2xvdWRmcm9udC16b25lLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhbGlhcyB0YXJnZXRzIGEgQ2xvdWRGcm9udCBkb21haW4sIHNvIEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCBtdXN0IGJlIFoyRkRUTkRBVEFRWVcyLCBub3QgJyVzJ1xcXCIsIFt6aWRdKSxcXG5cXHRcXFwiU2V0IEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCB0byBaMkZEVE5EQVRBUVlXMiAoaW4gdGhlIENESywgcm91dGU1M190YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQgZG9lcyB0aGlzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9jZl9yZWdpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRkbnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5ETlNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoZG5zKVxcblxcdGVuZHN3aXRoKHRyaW1fc3VmZml4KGxvd2VyKGRucyksIFxcXCIuXFxcIiksIFxcXCIuY2xvdWRmcm9udC5uZXRcXFwiKVxcblxcdHppZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHppZClcXG5cXHR6aWQgIT0gXFxcIloyRkRUTkRBVEFRWVcyXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtYXBleC1jbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDTkFNRSByZWNvcmQgaXMgbm90IHBlcm1pdHRlZCBhdCB0aGUgem9uZSBhcGV4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX2FwZXhfbm9ybShuKSA6PSB0cmltX3N1ZmZpeChsb3dlcihuKSwgXFxcIi5cXFwiKVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDIzIGNhdGNoZXMgYW4gYXBleCBDTkFNRSBvbmx5IHdoZW4gdGhlIHJlY29yZCBjYXJyaWVzIGFcXG4jIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUuIENESyBMMiBhbHdheXMgbGlua3MgcmVjb3JkcyB3aXRoXFxuIyBIb3N0ZWRab25lSWQ6IHtcXFwiUmVmXFxcIjogPHpvbmU+fSwgd2hpY2ggRTMwMjMgZG9lcyBub3Qgc2VlIChtZWFzdXJlZCAyMDI2LTA5LTAyLFxcbiMgZW5naW5lIDEuNy4wLWJldGEpLiByZXNvbHZlKCkgdHVybnMgc3VjaCBhIFJlZiBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELFxcbiMgc28gd2hlbiB0aGF0IElEIG5hbWVzIGEgSG9zdGVkWm9uZSBpbiB0aGUgc2FtZSB0ZW1wbGF0ZSB3ZSBjYW4gcmVhZCBpdHNcXG4jIGxpdGVyYWwgTmFtZSBhbmQgZG8gdGhlIGFwZXggY29tcGFyaXNvbiBvdXJzZWx2ZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleCAoJyVzJyk7IHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggXFxcXFxcXCJSUlNldCBvZiB0eXBlIENOQU1FIC4uLiBpcyBub3QgcGVybWl0dGVkIGF0IGFwZXhcXFxcXFxcIlxcXCIsIFtyZWNOYW1lXSksXFxuXFx0XFxcIlVzZSBhbiBhbGlhcyBBL0FBQUEgcmVjb3JkIGZvciB0aGUgYXBleCAoQWxpYXNUYXJnZXQpLCBvciBtb3ZlIHRoZSBDTkFNRSB0byBhIHN1YmRvbWFpblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZXNvdXJjZS1yZWNvcmQtc2V0cy1jaG9vc2luZy1hbGlhcy1ub24tYWxpYXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0enJlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHpyZWYpXFxuXFx0enJlZiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXFxcIilcXG5cXHR6b25lTmFtZSA6PSByZXNvbHZlKHpyZWYsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6b25lTmFtZSlcXG5cXHRyZWNOYW1lIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlY05hbWUpXFxuXFx0X3BmX3I1M19hcGV4X25vcm0ocmVjTmFtZSkgPT0gX3BmX3I1M19hcGV4X25vcm0oem9uZU5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1nZW9sb2NhdGlvbi1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBleHByZXNzZXMgdGhpcyBhcyBhIG9uZU9mLCB3aGljaCB0aGUgc2VydmVyLXNpZGVcXG4jIHByZS1kZXBsb3kgdmFsaWRhdGlvbiBlbmZvcmNlcyAoXFxcIjIgc3Vic2NoZW1hcyBtYXRjaGVkIGluc3RlYWQgb2Ygb25lXFxcIikgYnV0XFxuIyB0aGUgYnVuZGxlZCBlbmdpbmUgZG9lcyBub3QgZXZhbHVhdGUg4oCUIGhlbmNlIHVwc3RyZWFtOiBwZW5kaW5nLWVuZ2luZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIsXFxuXFx0XFxcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGU7IENsb3VkRm9ybWF0aW9uIHJlamVjdHMgdGhlIHJlY29yZCBzZXQgYmVmb3JlIHByb3Zpc2lvbmluZ1xcXCIsXFxuXFx0XFxcIktlZXAgZWl0aGVyIHRoZSBDb250aW5lbnRDb2RlIG9yIHRoZSBDb3VudHJ5Q29kZSAoYWRkIFN1YmRpdmlzaW9uQ29kZSBvbmx5IG5leHQgdG8gQ291bnRyeUNvZGUgVVMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1yb3V0ZTUzLXJlY29yZHNldC1nZW9sb2NhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGdlbyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlb0xvY2F0aW9uXFxcIilcXG5cXHRpc19vYmplY3QoZ2VvKVxcblxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGdlbywgXFxcIkNvbnRpbmVudENvZGVcXFwiLCBudWxsKSlcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb3VudHJ5Q29kZVxcXCIsIG51bGwpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1wiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGlWYWx1ZUFuc3dlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBBbGlhc1RhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0XFxcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXQ7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIk11bHRpdmFsdWUgYW5zd2VyIHJyc2V0IHNob3VsZCBub3QgYmUgYW4gYWxpYXMgcnJzZXRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBwbGFpbiBtdWx0aXZhbHVlIHJlY29yZHMgd2l0aCBSZXNvdXJjZVJlY29yZHMsIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlciBhbmQga2VlcCB0aGUgYWxpYXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5TIHJlY29yZHMgdGFrZSBubyByb3V0aW5nIHBvbGljeTsgQ05BTUUgY2Fubm90IGJlIG11bHRpdmFsdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M190eXBvbF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M190eXBvbF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfdHlwb2xfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG4jIE9ubHkgY29tYmluYXRpb25zIHRoYXQgZmFpbGVkIG9uIGEgcmVhbCBkZXBsb3kgYXJlIGZsYWdnZWQuIFNPQS9EUyB3aXRoIGFcXG4jIHJvdXRpbmcgcG9saWN5IGFyZSBhbHNvIGRvY3VtZW50ZWQgYXMgdW5zdXBwb3J0ZWQgYnV0IHdlcmUgbm90IG1lYXN1cmVkLCBzb1xcbiMgdGhleSBhcmUgZGVsaWJlcmF0ZWx5IGxlZnQgb3V0IChzZWUgdGhlIGRpc2NvdmVyeSBpc3N1ZSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQW4gTlMgcmVjb3JkIGNhbm5vdCB1c2UgYSByb3V0aW5nIHBvbGljeTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwidGhpcyB0eXBlIG9mIFJSU2V0IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBhIHNpbXBsZSByZWNvcmQgc2V0IGZvciBOUyByZWNvcmRzIChubyBXZWlnaHQvUmVnaW9uL0ZhaWxvdmVyL0dlb0xvY2F0aW9uL011bHRpVmFsdWVBbnN3ZXIvQ2lkclJvdXRpbmdDb25maWcpXFxcIixcXG5cXHRfcGZfcjUzX3R5cG9sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJOU1xcXCJcXG5cXHRfcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQSBDTkFNRSByZWNvcmQgY2Fubm90IHVzZSB0aGUgbXVsdGl2YWx1ZSBhbnN3ZXIgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJQb2ludCB0aGUgbXVsdGl2YWx1ZSByZWNvcmRzIGF0IEEvQUFBQSAob3IgYW5vdGhlciBzdXBwb3J0ZWQgdHlwZSksIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZWNvcmQgc2V0IG5lZWRzIEFsaWFzVGFyZ2V0IG9yIHRoZSBmdWxsIFRUTCtSZXNvdXJjZVJlY29yZHMgcGFpclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3ZhbHNyY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuIyBUaGUgc2VydmljZSBleHBlY3RzIFxcXCJleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmRcXG4jIFJlc291cmNlUmVjb3Jkc11dXFxcIiAoVHJhZmZpY1BvbGljeUluc3RhbmNlSWQgaGFzIG5vIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5KS5cXG4jIFRoZSBUVEwrQWxpYXNUYXJnZXQgY29tYmluYXRpb24gaXMgYWxyZWFkeSB0aGUgZW5naW5lJ3MgRTMwMjksIHNvIHRoaXMgcnVsZVxcbiMgY292ZXJzIHRoZSByZW1haW5pbmcgc2hhcGVzOiBhbGlhcyBwbHVzIHJlY29yZHMsIGFuZCBhbiBpbmNvbXBsZXRlIG5vbi1hbGlhc1xcbiMgZ3JvdXAgKHJlY29yZHMgd2l0aG91dCBUVEwsIFRUTCB3aXRob3V0IHJlY29yZHMsIG9yIG5laXRoZXIpLlxcbl9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcblxcbl9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKSBpZiB7XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVFRMXFxcIikgIT0gbnVsbFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdFxcXCJBbGlhc1RhcmdldCBhbmQgUmVzb3VyY2VSZWNvcmRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmU7IHRoZSBzZXJ2aWNlIGV4cGVjdHMgZXhhY3RseSBvbmUgb2YgQWxpYXNUYXJnZXQgb3IgVFRMLXBsdXMtUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiS2VlcCB0aGUgQWxpYXNUYXJnZXQgYW5kIGRyb3AgUmVzb3VyY2VSZWNvcmRzLCBvciBtYWtlIGl0IGEgcGxhaW4gcmVjb3JkIHdpdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdF9wZl9yNTNfdmFsc3JjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdFxcXCJBIG5vbi1hbGlhcyByZWNvcmQgc2V0IG5lZWRzIGJvdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHM7IHRoZSBzZXJ2aWNlIHJlamVjdHMgYW4gaW5jb21wbGV0ZSBwYWlyIHdpdGggXFxcXFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmQgUmVzb3VyY2VSZWNvcmRzXV0gLi4uIGZvdW5kIG5vbmVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNwZWNpZnkgVFRMIGFuZCBSZXNvdXJjZVJlY29yZHMgdG9nZXRoZXIsIG9yIHVzZSBBbGlhc1RhcmdldCBpbnN0ZWFkXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRub3QgX3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpXFxufVxcblxcbl9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpIGlmIHtcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBjYW4gdXNlIG9ubHkgb25lIHJvdXRpbmcgcG9saWN5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZW5mb3JjZXMgXFxcIkV4cGVjdGVkIGV4YWN0bHkgb25lIG9mIFtXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsXFxuIyBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgR2VvUHJveGltaXR5TG9jYXRpb24sIG9yIENpZHJSb3V0aW5nQ29uZmlnXVxcXCIuXFxuIyBHZW9Qcm94aW1pdHlMb2NhdGlvbiBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSwgc28gZml2ZSByZW1haW4gaGVyZS5cXG4jIE11bHRpVmFsdWVBbnN3ZXI6IGZhbHNlIGlzIHRyZWF0ZWQgYXMgYWJzZW50IOKAlCBvbmx5IHRydWUgc2VsZWN0cyB0aGUgcG9saWN5Llxcbl9wZl9yNTNfcG9seF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHByb3ApIGlmIHtcXG5cXHRwcm9wICE9IFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIlxcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG5fcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSkgOj0gcHMgaWYge1xcblxcdHBzIDo9IFtwIHwgc29tZSBwIGluIGFycmF5LmNvbmNhdChfcGZfcjUzX3BvbHhfcHJvcHMsIFtcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJdKTsgX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgcCldXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeSwgYnV0ICV2IGFyZSBhbGwgc3BlY2lmaWVkXFxcIiwgW3BzXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgb2YgV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLCBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgb3IgQ2lkclJvdXRpbmdDb25maWcgYW5kIHNwbGl0IHRoZSByZXN0IGludG8gc2VwYXJhdGUgcmVjb3JkIHNldHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHBzIDo9IF9wZl9yNTNfcG9seF9wb2xpY2llcyhuYW1lKVxcblxcdGNvdW50KHBzKSA+IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNldElkZW50aWZpZXIgYW5kIGEgcm91dGluZyBwb2xpY3kgbXVzdCBhcHBlYXIgdG9nZXRoZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19zaWRwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG5fcGZfcjUzX3NpZHBfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfc2lkcF9wcm9wc1xcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJBIHJvdXRpbmcgcG9saWN5IGlzIGNvbmZpZ3VyZWQgYnV0IFNldElkZW50aWZpZXIgaXMgbWlzc2luZzsgdGhlIENoYW5nZVJlc291cmNlUmVjb3JkU2V0cyBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJNaXNzaW5nIGZpZWxkICdTZXRJZGVudGlmaWVyJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgU2V0SWRlbnRpZmllciB0aGF0IGlzIHVuaXF1ZSBhbW9uZyB0aGUgcmVjb3JkIHNldHMgc2hhcmluZyB0aGlzIE5hbWUgYW5kIFR5cGVcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcblxcdG5vdCBpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiU2V0SWRlbnRpZmllciBpcyBzcGVjaWZpZWQgYnV0IG5vIHJvdXRpbmcgcG9saWN5IGlzOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBmaW5kcyBub25lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFNldElkZW50aWZpZXIgZnJvbSB0aGlzIHNpbXBsZSByZWNvcmQgc2V0LCBvciBhZGQgdGhlIHJvdXRpbmcgcG9saWN5IGl0IHdhcyBtZWFudCBmb3JcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxuXFx0bm90IF9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My10dGwtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRUTCBtdXN0IGZpdCBpbiAzMiBiaXRzICgwLi4yMTQ3NDgzNjQ3IHNlY29uZHMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIGlzIGVuZm9yY2VkOiB0aGUgc2VydmljZSByZWplY3RlZCA5OTk5OTk5OTk5IHdpdGhcXG4jIFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyMTQ3NDgzNjQ3XFxcIi4gTmVnYXRpdmUgVFRMcyBhcmVcXG4jIHVudGVzdGVkLCBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXR0bC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVFRMXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUVEwgbXVzdCBiZSBhdCBtb3N0IDIxNDc0ODM2NDcgc2Vjb25kcywgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFRUTCB0byBhIDMyLWJpdCB2YWx1ZTsgYW55dGhpbmcgYWJvdmUgYSBkYXkgcmFyZWx5IGhlbHBzIGNhY2hpbmcgYW55d2F5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIodClcXG5cXHRuID4gMjE0NzQ4MzY0N1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXZWlnaHQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgMzAwIHdpdGggXFxcIk1lbWJlclxcbiMgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyNTVcXFwiLiBOZWdhdGl2ZSB3ZWlnaHRzIGFyZSB1bnRlc3RlZCxcXG4jIHNvIHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgZmxhZ2dlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiLFxcblxcdHNwcmludGYoXFxcIldlaWdodCBtdXN0IGJlIGF0IG1vc3QgMjU1LCBnb3QgJXZcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgV2VpZ2h0IHRvIGEgdmFsdWUgaW4gWzAsIDI1NV07IHdlaWdodHMgYXJlIHJlbGF0aXZlLCBzbyBzY2FsZSB0aGUgZ3JvdXAgZG93biBwcm9wb3J0aW9uYWxseVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHcpXFxuXFx0biA+IDI1NVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIb3N0ZWRab25lTmFtZSBtdXN0IGVuZCB3aXRoIGEgdHJhaWxpbmcgZG90XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24gbG9va3MgdGhlIHpvbmUgdXAgYnkgdGhlIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUgYW5kIGRvZXMgbm90XFxuIyBub3JtYWxpemUgdGhlIHRyYWlsaW5nIGRvdDogdGhlIHNhbWUgc3RhY2sgZGVwbG95ZWQgY2xlYW4gd2l0aFxcbiMgXFxcInpvbmUuZXhhbXBsZS5cXFwiIGFuZCBmYWlsZWQgd2l0aCBOb3RGb3VuZCBmb3IgXFxcInpvbmUuZXhhbXBsZVxcXCIgKDIwMjYtMDktMDIpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My16b25lbmFtZS10cmFpbGluZy1kb3RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIb3N0ZWRab25lTmFtZSAnJXMnIGlzIG1pc3NpbmcgdGhlIHRyYWlsaW5nIGRvdCwgc28gQ2xvdWRGb3JtYXRpb24gZmFpbHMgdGhlIGxvb2t1cCB3aXRoIFxcXFxcXFwiTm8gaG9zdGVkIHpvbmUgd2l0aCBuYW1lIC4uLiBmb3VuZFxcXFxcXFwiXFxcIiwgW3puXSksXFxuXFx0c3ByaW50ZihcXFwiVXNlICclcy4nICh3aXRoIHRoZSB0cmFpbGluZyBkb3QpXFxcIiwgW3puXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0em4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHpuKVxcblxcdHpuICE9IFxcXCJcXFwiXFxuXFx0bm90IGVuZHN3aXRoKHpuLCBcXFwiLlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRyYW5zZmVyIEFjY2VsZXJhdGlvbiByZWplY3RzIGJ1Y2tldCBuYW1lcyB3aXRoIHBlcmlvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGVuZHBvaW50cyBhcmUgRE5TLWJhc2VkLCBzbyBidWNrZXQgbmFtZXMgY29udGFpbmluZ1xcbiMgcGVyaW9kcyBhcmUgcmVqZWN0ZWQgYXQgY3JlYXRpb24uIE9ubHkgYSBsaXRlcmFsIEJ1Y2tldE5hbWUgaXMgY2hlY2thYmxlO1xcbiMgQ0RLLWdlbmVyYXRlZCBuYW1lcyBuZXZlciBjb250YWluIHBlcmlvZHMgYW55d2F5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCdWNrZXQgbmFtZSAnJXMnIGNvbnRhaW5zIHBlcmlvZHMsIHdoaWNoIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBkb2VzIG5vdCBzdXBwb3J0OyBDcmVhdGVCdWNrZXQgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBidWNrZXRzIHdpdGggcGVyaW9kcyAoLikgaW4gdGhlaXIgbmFtZXNcXFxcXFxcIlxcXCIsIFtibl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGJ1Y2tldCB3aXRob3V0IHBlcmlvZHMsIG9yIGRyb3AgQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS90cmFuc2Zlci1hY2NlbGVyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbi5BY2NlbGVyYXRpb25TdGF0dXNcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHRibiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJ1Y2tldE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhibilcXG5cXHRjb250YWlucyhibiwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0LWxldmVsIGFjdGlvbnMgbmVlZCBhbiBvYmplY3QtbGV2ZWwgUmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQW4gb2JqZWN0LWxldmVsIGFjdGlvbiB3aG9zZSBzdGF0ZW1lbnQgbGlzdHMgb25seSBidWNrZXQtbGV2ZWwgQVJOcyBhcHBsaWVzXFxuIyB0byBub3RoaW5nLCBhbmQgUzMgcmVqZWN0cyB0aGUgcG9saWN5LiBBIGJ1Y2tldC1sZXZlbCBBUk4gaXMgcHJvdmFibGUgdHdvXFxuIyB3YXlzOiBhIGxpdGVyYWwgYXJuOi4uLjpzMzo6Om5hbWUgd2l0aCBubyBcXFwiL1xcXCIgaW4gdGhlIG5hbWUgcGFydCwgb3IgYSB2YWx1ZVxcbiMgdGhhdCByZXNvbHZlKCkgdHVybnMgaW50byB0aGUgbG9naWNhbCBJRCBvZiBhbiBpbi10ZW1wbGF0ZSBidWNrZXQgKFJlZiBhbmRcXG4jIEZuOjpHZXRBdHQgQXJuIGJvdGggZG8g4oCUIHRoZSBHZXRBdHQgb2YgYSBidWNrZXQgaXMgaXRzIGJ1Y2tldCBBUk4pLiBGaXJlc1xcbiMgb25seSB3aGVuIGV2ZXJ5IHJlc291cmNlIGluIHRoZSBzdGF0ZW1lbnQgaXMgcHJvdmFibHkgYnVja2V0LWxldmVsLCBzb1xcbiMgdW5yZXNvbHZhYmxlIGVudHJpZXMgKGUuZy4gRm46OlN1YiBcXFwiJHtCLkFybn0vKlxcXCIpIG11dGUgdGhlIHN0YXRlbWVudC5cXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmdldG9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpwdXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6ZGVsZXRlb2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgbG93ZXIoYSkgaW4ge1xcXCJzMzphYm9ydG11bHRpcGFydHVwbG9hZFxcXCIsIFxcXCJzMzpyZXN0b3Jlb2JqZWN0XFxcIiwgXFxcInMzOmxpc3RtdWx0aXBhcnR1cGxvYWRwYXJ0c1xcXCJ9XFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYgciBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXG5fcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKSBpZiB7XFxuXFx0c3RhcnRzd2l0aChyLCBcXFwiYXJuOlxcXCIpXFxuXFx0Y29udGFpbnMociwgXFxcIjpzMzo6OlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQociwgXFxcIjo6OlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRub3QgY29udGFpbnMocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxuX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIGkpIDo9IFthXSBpZiB7XFxuXFx0YSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtpXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBhY3RzIGlmIHtcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0YWN0cyA6PSBbdiB8IHNvbWUgaXQgaW4gaXRlbXM7IHYgOj0gaXQudmFsdWU7IGlzX3N0cmluZyh2KV1cXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gW3JdIGlmIHtcXG5cXHRyIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhyKVxcbn1cXG5cXG5fcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBpKSA6PSBycyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0cnMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2UuJWRcXFwiLCBbaSwgaXQuaW5kZXhdKSk7IGlzX3N0cmluZyh2KV1cXG5cXHRjb3VudChycykgPT0gY291bnQoaXRlbXMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYnVja2V0LXBvbGljeS1hY3Rpb24tcmVzb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3N0LmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgdGFyZ2V0cyBvYmplY3RzIGJ1dCB0aGUgc3RhdGVtZW50J3MgcmVzb3VyY2VzIGFyZSBhbGwgYnVja2V0LWxldmVsIEFSTnM7IFMzIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiQWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIGFueSByZXNvdXJjZShzKSBpbiBzdGF0ZW1lbnRcXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIkFkZCB0aGUgb2JqZWN0IGZvcm0gb2YgdGhlIEFSTiAoYXBwZW5kIC8qIG9yIGEga2V5IHBhdHRlcm4pIHRvIFJlc291cmNlLCBvciBkcm9wIHRoZSBvYmplY3QtbGV2ZWwgYWN0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdHNvbWUgYSBpbiBfcGZfczNicGFyX2FjdGlvbnMobmFtZSwgc3QuaW5kZXgpXFxuXFx0X3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpXFxuXFx0cnMgOj0gX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgc3QuaW5kZXgpXFxuXFx0Y291bnQocnMpID4gMFxcblxcdGV2ZXJ5IHIgaW4gcnMge1xcblxcdFxcdF9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzIG5lZWQgYSBQcmluY2lwYWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVzb3VyY2UtYmFzZWQgcG9saWNpZXMgcmVxdWlyZSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgaW4gZXZlcnlcXG4jIHN0YXRlbWVudCDigJQgdW5saWtlIGlkZW50aXR5IHBvbGljaWVzLCB3aGVyZSBjZm4tbGludC1ncmFkZSBjaGVja3MgYXJlXFxuIyB0dW5lZC4gQW4gdW5yZXNvbHZhYmxlIFByaW5jaXBhbCB2YWx1ZSBzdGlsbCBjb3VudHMgYXMgcHJlc2VudC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZFxcXCIsIFtzdC5pbmRleF0pLFxcblxcdFxcXCJUaGUgc3RhdGVtZW50IGhhcyBuZWl0aGVyIFByaW5jaXBhbCBub3IgTm90UHJpbmNpcGFsOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgUHJpbmNpcGFsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgdG8gdGhlIHN0YXRlbWVudCDigJQgYnVja2V0IHBvbGljaWVzIGFsd2F5cyBuYW1lIHdobyB0aGV5IGFwcGx5IHRvXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzdC52YWx1ZSwgXFxcIk5vdFByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpZmVjeWNsZSBhcmNoaXZlIHRyYW5zaXRpb25zIG11c3QgY29tZSAzMCsgZGF5cyBhZnRlciBJQSwgYW5kIGV4cGlyYXRpb24gYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Mzb3JkX2ZpeCA6PSBcXFwiT3JkZXIgdGhlIGxpZmVjeWNsZSBkYXlzIHNvIGFyY2hpdmUgdHJhbnNpdGlvbnMgY29tZSBhdCBsZWFzdCAzMCBkYXlzIGFmdGVyIElBIHRyYW5zaXRpb25zIGFuZCBleHBpcmF0aW9uIGNvbWVzIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cXFwiXFxuXFxuX3BmX3Mzb3JkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbGlmZWN5Y2xlLXRyYW5zaXRpb24tZ2VuZXJhbC1jb25zaWRlcmF0aW9ucy5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5UcmFuc2l0aW9uc1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVHJhbnNpdGlvbiB0byAlcyBhdCAldiBkYXlzIGlzIGxlc3MgdGhhbiAzMCBkYXlzIGFmdGVyIHRoZSAlcyB0cmFuc2l0aW9uIGF0ICV2IGRheXM7IFMzIHJlcXVpcmVzIG9iamVjdHMgdG8gc3RheSBhdCBsZWFzdCAzMCBkYXlzIGluIElBIHN0b3JhZ2VcXFwiLCBbc2MyLCBkMiwgc2MxLCBkMV0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdDEgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDEpXFxuXFx0c2MxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzEgaW4ge1xcXCJTVEFOREFSRF9JQVxcXCIsIFxcXCJPTkVaT05FX0lBXFxcIn1cXG5cXHRyYXcxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcxICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZDEgOj0gdG9fbnVtYmVyKHJhdzEpXFxuXFx0c29tZSB0MiBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MilcXG5cXHRzYzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMiBpbiB7XFxcIkdMQUNJRVJcXFwiLCBcXFwiREVFUF9BUkNISVZFXFxcIn1cXG5cXHRyYXcyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcyICE9IG51bGxcXG5cXHRkMiA6PSB0b19udW1iZXIocmF3MilcXG5cXHRkMiA8IGQxICsgMzBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgKCV2KSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBUcmFuc2l0aW9uSW5EYXlzICgldik7IFMzIHJlamVjdHMgbGlmZWN5Y2xlIHJ1bGVzIHRoYXQgZXhwaXJlIG9iamVjdHMgYmVmb3JlIG9yIHdoZW4gdGhleSB0cmFuc2l0aW9uXFxcIiwgW2UsIGRdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3ZSA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdlICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZSA6PSB0b19udW1iZXIocmF3ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdCBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0KVxcblxcdHJhd2QgOj0gb2JqZWN0LmdldCh0LCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZCAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3ZClcXG5cXHRlIDw9IGRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4cGlyYXRpb25JbkRheXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgRXhwaXJhdGlvbkluRGF5cyBhcyBhIGJhcmUgaW50ZWdlciB3aXRoIG5vXFxuIyBtaW5pbXVtLCBzbyAwIGFuZCBuZWdhdGl2ZXMgcmVhY2ggdGhlIHNlcnZpY2UuIE9ubHkgdGhlIEV4cGlyYXRpb24gYWN0aW9uXFxuIyB3YXMgYmVuY2gtdmVyaWZpZWQ7IG90aGVyIGRheSBmaWVsZHMgYXJlIGxlZnQgYWxvbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgaXMgJXY7IFMzIHJlamVjdHMgdGhlIHJ1bGUgd2l0aCBcXFxcXFxcIidEYXlzJyBmb3IgRXhwaXJhdGlvbiBhY3Rpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcXFxcXFxcIlxcXCIsIFtkXSksXFxuXFx0XFxcIlVzZSBhbiBFeHBpcmF0aW9uSW5EYXlzIG9mIDEgb3IgbW9yZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXcpXFxuXFx0ZCA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBsaWZlY3ljbGUgcnVsZSBuZWVkcyBhdCBsZWFzdCBvbmUgYWN0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0ZW4gYWN0aW9uIGZpZWxkcywgdmVyYmF0aW0gZnJvbSB0aGUgc2VydmljZSBlcnJvci4gQSBmaWVsZCB3aG9zZSB2YWx1ZVxcbiMgaXMgYW4gdW5yZXNvbHZhYmxlIGludHJpbnNpYyBzdGlsbCBjb3VudHMgYXMgcHJlc2VudCAoZmFpbCBjbG9zZWQpLlxcbl9wZl9zM2xuYV9hY3Rpb25zIDo9IHtcXG5cXHRcXFwiQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkRhdGVcXFwiLFxcblxcdFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIixcXG5cXHRcXFwiRXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlclxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNcXFwiLFxcblxcdFxcXCJUcmFuc2l0aW9uXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvbnNcXFwiLFxcbn1cXG5cXG5fcGZfczNsbmFfaGFzX2FjdGlvbihydWxlKSBpZiB7XFxuXFx0c29tZSBrIGluIF9wZl9zM2xuYV9hY3Rpb25zXFxuXFx0b2JqZWN0LmdldChydWxlLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWRcXFwiLCBbci5pbmRleF0pLFxcblxcdFxcXCJUaGUgbGlmZWN5Y2xlIHJ1bGUgc3BlY2lmaWVzIG5vIGFjdGlvbjsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mIFtFeHBpcmF0aW9uRGF0ZSxFeHBpcmF0aW9uSW5EYXlzLEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCxUcmFuc2l0aW9uLC4uLl0gbmVlZHMgdG8gYmUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYW4gZXhwaXJhdGlvbiwgdHJhbnNpdGlvbiwgb3IgYWJvcnQtaW5jb21wbGV0ZS1tdWx0aXBhcnQtdXBsb2FkIGFjdGlvbiB0byB0aGUgcnVsZSwgb3IgcmVtb3ZlIHRoZSBydWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtcnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdG5vdCBfcGZfczNsbmFfaGFzX2FjdGlvbihyLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW5vdGlmaWNhdGlvbi1vdmVybGFwcGluZy1maWx0ZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm90aWZpY2F0aW9uIGVudHJpZXMgbXVzdCBub3Qgb3ZlcmxhcCBmb3IgdGhlIHNhbWUgZXZlbnQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTMyBrZWVwcyBvbmUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gcGVyIGJ1Y2tldCBhbmQgcmVqZWN0cyBpdCB3aGVuIHR3b1xcbiMgZW50cmllcyAoYWNyb3NzIHF1ZXVlL3RvcGljL2xhbWJkYSBhbGlrZSkgY291bGQgbWF0Y2ggdGhlIHNhbWUgb2JqZWN0IGV2ZW50OlxcbiMgb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgQU5EIG92ZXJsYXBwaW5nIHByZWZpeGVzIEFORCBvdmVybGFwcGluZyBzdWZmaXhlcy5cXG4jIEEgbWlzc2luZyBmaWx0ZXIgc2lkZSBtZWFucyBcXFwiXFxcIiBhbmQgb3ZlcmxhcHMgZXZlcnl0aGluZy4gUGFpcnMgd2l0aCBhblxcbiMgdW5yZXNvbHZhYmxlIGV2ZW50IG9yIGZpbHRlciB2YWx1ZSBhcmUgc2tpcHBlZCDigJQgb3ZlcmxhcCBjYW5ub3QgYmUgcHJvdmVuLlxcblxcbl9wZl9zM25vX2NvbmZpZ3MobmFtZSkgOj0gYXJyYXkuY29uY2F0KGFycmF5LmNvbmNhdChcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5RdWV1ZUNvbmZpZ3VyYXRpb25zXFxcIildLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLlRvcGljQ29uZmlndXJhdGlvbnNcXFwiKV0pLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLkxhbWJkYUNvbmZpZ3VyYXRpb25zXFxcIildKVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IHJ1bGVzIGlmIHtcXG5cXHRmIDo9IG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGYpXFxuXFx0ayA6PSBvYmplY3QuZ2V0KGYsIFxcXCJTM0tleVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGspXFxuXFx0cnVsZXMgOj0gb2JqZWN0LmdldChrLCBcXFwiUnVsZXNcXFwiLCBbXSlcXG5cXHRpc19hcnJheShydWxlcylcXG59XFxuXFxuX3BmX3Mzbm9fcnVsZXMoYykgOj0gW10gaWYge1xcblxcdG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSB2IGlmIHtcXG5cXHR2cyA6PSBbeCB8IHNvbWUgciBpbiBfcGZfczNub19ydWxlcyhjKTsgaXNfb2JqZWN0KHIpOyBsb3dlcihvYmplY3QuZ2V0KHIsIFxcXCJOYW1lXFxcIiwgXFxcIlxcXCIpKSA9PSBraW5kOyB4IDo9IG9iamVjdC5nZXQociwgXFxcIlZhbHVlXFxcIiwgbnVsbCldXFxuXFx0Y291bnQodnMpID4gMFxcblxcdHYgOj0gdnNbMF1cXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSBcXFwiXFxcIiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA9PSAwXFxufVxcblxcbl9wZl9zM25vX3ByZV9vdmVybGFwKGEsIGIpIGlmIHN0YXJ0c3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGIsIGEpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19zdWZfb3ZlcmxhcChhLCBiKSBpZiBlbmRzd2l0aChiLCBhKVxcblxcbiMgXFxcInMzOk9iamVjdENyZWF0ZWQ6KlxcXCIgY292ZXJzIFxcXCJzMzpPYmplY3RDcmVhdGVkOlB1dFxcXCI7IGRyb3AgdGhlIHRyYWlsaW5nIFxcXCIqXFxcIlxcbiMgYW5kIHByZWZpeC1tYXRjaC5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYgZTEgPT0gZTJcXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUxLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTIsIHN1YnN0cmluZyhlMSwgMCwgY291bnQoZTEpIC0gMSkpXFxufVxcblxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiB7XFxuXFx0ZW5kc3dpdGgoZTIsIFxcXCI6KlxcXCIpXFxuXFx0c3RhcnRzd2l0aChlMSwgc3Vic3RyaW5nKGUyLCAwLCBjb3VudChlMikgLSAxKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHdvIG5vdGlmaWNhdGlvbiBlbnRyaWVzIGZvciBvdmVybGFwcGluZyBldmVudCB0eXBlcyAoJyVzJyBhbmQgJyVzJykgaGF2ZSBvdmVybGFwcGluZyBwcmVmaXgvc3VmZml4IGZpbHRlcnM7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkNvbmZpZ3VyYXRpb24gaXMgYW1iaWd1b3VzbHkgZGVmaW5lZC4gQ2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcgc3VmZml4ZXMgaW4gdHdvIHJ1bGVzIGlmIHRoZSBwcmVmaXhlcyBhcmUgb3ZlcmxhcHBpbmcgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGUuXFxcXFxcXCJcXFwiLCBbZTEsIGUyXSksXFxuXFx0XFxcIk1ha2UgdGhlIHByZWZpeGVzIG9yIHN1ZmZpeGVzIGRpc2pvaW50LCBvciBtZXJnZSB0aGUgdHdvIGVudHJpZXMgaW50byBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9ub3RpZmljYXRpb24taG93LXRvLWZpbHRlcmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRjcyA6PSBfcGZfczNub19jb25maWdzKG5hbWUpXFxuXFx0c29tZSBpLCBhIGluIGNzXFxuXFx0c29tZSBqLCBiIGluIGNzXFxuXFx0aSA8IGpcXG5cXHRlMSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUxKVxcblxcdGUyIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkV2ZW50XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZTIpXFxuXFx0X3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpXFxuXFx0cDEgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChhLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDEpXFxuXFx0cDIgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChiLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDIpXFxuXFx0X3BmX3Mzbm9fcHJlX292ZXJsYXAocDEsIHAyKVxcblxcdHMxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMxKVxcblxcdHMyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMyKVxcblxcdF9wZl9zM25vX3N1Zl9vdmVybGFwKHMxLCBzMilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBuZWVkcyB2ZXJzaW9uaW5nIGVuYWJsZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gb24gaXRzIG93biBkb2VzIE5PVCByZXF1aXJlIE9iamVjdExvY2tFbmFibGVkIOKAlFxcbiMgUzMgYWNjZXB0cyBPYmplY3QgTG9jayBvbiBhbiBleGlzdGluZyB2ZXJzaW9uZWQgYnVja2V0IChiZW5jaCBzMDViIGRlcGxveWVkXFxuIyBjbGVhbikuIFdoYXQgaXQgZG9lcyByZXF1aXJlIGlzIHZlcnNpb25pbmcuIFdoZW4gT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZVxcbiMgdGhlIGJ1Y2tldCBpcyBjcmVhdGVkIGxvY2stZW5hYmxlZCBhbmQgdmVyc2lvbmluZyBjb21lcyB3aXRoIGl0LCBzbyB0aGUgcnVsZVxcbiMgZmlyZXMgb25seSB3aGVuIGxvY2stZW5hYmxlbWVudCBpcyBwcm92YWJseSBvZmYgKGtleSBsaXRlcmFsbHkgYWJzZW50IG9yXFxuIyBsaXRlcmFsIGZhbHNlKSBhbmQgdmVyc2lvbmluZyBpcyBwcm92YWJseSBub3QgZW5hYmxlZC5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk9iamVjdExvY2tFbmFibGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSBmYWxzZVxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gaXMgc2V0IG9uIGEgYnVja2V0IHdob3NlIHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlZlcnNpb25pbmcgbXVzdCBiZSAnRW5hYmxlZCcgb24gdGhlIGJ1Y2tldCB0byBhcHBseSBhIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb25cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnLCBvciBzZXQgT2JqZWN0TG9ja0VuYWJsZWQ6IHRydWUgdG8gY3JlYXRlIHRoZSBidWNrZXQgbG9jay1lbmFibGVkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXHRfcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKVxcblxcdF9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0IExvY2sgZm9yYmlkcyBzdXNwZW5kaW5nIHZlcnNpb25pbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0IExvY2sgZm9yY2UtZW5hYmxlcyB2ZXJzaW9uaW5nIGF0IGNyZWF0aW9uLCBzbyBhIHRlbXBsYXRlIHRoYXQgYWxzb1xcbiMgc3VzcGVuZHMgdmVyc2lvbmluZyBjb250cmFkaWN0cyBpdHNlbGYgYW5kIHRoZSBoYW5kbGVyJ3MgUHV0QnVja2V0VmVyc2lvbmluZ1xcbiMgY2FsbCBpcyByZWplY3RlZC4gRmlyZXMgb25seSBvbiBhIGxpdGVyYWwgXFxcIlN1c3BlbmRlZFxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiLFxcblxcdFxcXCJPYmplY3RMb2NrRW5hYmxlZCBpcyB0cnVlIGJ1dCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiBzdXNwZW5kcyB2ZXJzaW9uaW5nOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJBbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgb24gdGhpcyBidWNrZXQsIHNvIHRoZSB2ZXJzaW9uaW5nIHN0YXRlIGNhbm5vdCBiZSBjaGFuZ2VkLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgKG9yIGRyb3AgaXQg4oCUIE9iamVjdCBMb2NrIGVuYWJsZXMgdmVyc2lvbmluZyBpdHNlbGYpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLWRlc3QtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSByZXBsaWNhdGlvbiBkZXN0aW5hdGlvbiBidWNrZXQgbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBkZXN0aW5hdGlvbiBzaWRlIG9mIHdoYXQgcGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZyBjaGVja3Mgb25cXG4jIHRoZSBzb3VyY2UuIERlc3RpbmF0aW9uLkJ1Y2tldCBpcyBub3JtYWxseSBGbjo6R2V0QXR0L1JlZiB0byBhbiBpbi10ZW1wbGF0ZVxcbiMgYnVja2V0OyByZXNvbHZlKCkgdHVybnMgYm90aCBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELCBzbyB0aGVcXG4jIGRlc3RpbmF0aW9uJ3Mgb3duIHByb3BlcnRpZXMgYXJlIHJlYWRhYmxlLiBFeHRlcm5hbCBkZXN0aW5hdGlvbiBBUk5zIHJlc29sdmVcXG4jIHRvIHN0cmluZ3MgdGhhdCBhcmUgbm90IGxvZ2ljYWwgSURzIGFuZCBza2lwLiBWZXJzaW9uaW5nIGlzIFxcXCJub3QgZW5hYmxlZFxcXCJcXG4jIHdoZW4gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gaXMgbGl0ZXJhbGx5IGFic2VudCAocHJvdmVuIHZpYVxcbiMgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKSBvciBTdGF0dXMgcmVzb2x2ZXMgdG8gXFxcIlN1c3BlbmRlZFxcXCI7IGFuXFxuIyB1bnJlc29sdmFibGUgU3RhdHVzIHNraXBzLlxcbl9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW2Rlc3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHJlc29sdmUoZGVzdCwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiUmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0ICclcycgZG9lcyBub3QgaGF2ZSB2ZXJzaW9uaW5nIGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkRlc3RpbmF0aW9uIGJ1Y2tldCBtdXN0IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbZGVzdF0pLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyBvbiB0aGUgZGVzdGluYXRpb24gYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRkZXN0IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRGVzdGluYXRpb24uQnVja2V0XFxcIiwgW3IuaW5kZXhdKSlcXG5cXHRpc19zdHJpbmcoZGVzdClcXG5cXHRkZXN0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdF9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdmVyc2lvbmluZyB0byBiZSBlbmFibGVkIG9uIHRoZSBzb3VyY2UgYnVja2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOmBleWPjeOBq+OBmeOCi+OBruOBryBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiDjgYzmloflrZfjganjgYrjgorkuI3lnKjvvIhpbnB1dC5yZXNvdXJjZXMg44GnXFxuIyDoqLzmmI7jgIFBR0VOVFMubWQg5Y+C54Wn77yJ44GL44CBU3RhdHVzIOOBjOODquODhuODqeODq+OBpyBcXFwiU3VzcGVuZGVkXFxcIiDjga7jgajjgY3jgaDjgZHjgIJcXG4jIOacquino+axuuODiOODvOOCr+ODs+OBryBPSyDmibHjgYTvvIhyZXNvbHZlKCkg44Gv44Kt44O85LiN5Zyo44Go5pyq6Kej5rG644Gu5Lih5pa544GnIHVuZGVmaW5lZCDjgatcXG4jIOOBquOCi+OBn+OCgeOAgWBub3QgcmVzb2x2ZSguLi4pYCDjgafjga/kuI3lnKjjgpLoqLzmmI7jgafjgY3jgarjgYQg4oCUIDIwMjYtMDktMDIg5a6f5ris77yJ44CCXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIGlzIHNldCBidXQgYnVja2V0IHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYXQgZGVwbG95IHRpbWUgKEludmFsaWRSZXF1ZXN0OiBWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQpXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIHNvdXJjZSBidWNrZXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9yZXBsaWNhdGlvbi1yZXF1aXJlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIHdlYnNpdGUgc2V0dGluZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gcmVkaXJlY3RzIHRoZSB3aG9sZSBzaXRlLCBzbyBTMyByZWplY3RzIGFueSBzaWJsaW5nXFxuIyB3ZWJzaXRlIHNldHRpbmcgYWxvbmdzaWRlIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtd2Vic2l0ZS1yZWRpcmVjdC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIldlYnNpdGVDb25maWd1cmF0aW9uIGNvbWJpbmVzIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyB3aXRoICVzOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJbSW5kZXhEb2N1bWVudCwgRXJyb3JEb2N1bWVudCwgUm91dGluZ1J1bGVzXSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpZiBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBba10pLFxcblxcdFxcXCJLZWVwIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyBhbG9uZSwgb3IgZHJvcCBpdCBhbmQgY29uZmlndXJlIHRoZSB3ZWJzaXRlIHdpdGggSW5kZXhEb2N1bWVudC9FcnJvckRvY3VtZW50L1JvdXRpbmdSdWxlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXdlYnNpdGVjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHdjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdGlzX29iamVjdCh3YylcXG5cXHRvYmplY3QuZ2V0KHdjLCBcXFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiB7XFxcIkluZGV4RG9jdW1lbnRcXFwiLCBcXFwiRXJyb3JEb2N1bWVudFxcXCIsIFxcXCJSb3V0aW5nUnVsZXNcXFwifVxcblxcdG9iamVjdC5nZXQod2MsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic2NoZWR1bGVyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZMRVhJQkxFIG1vZGUgbmVlZHMgTWF4aW11bVdpbmRvd0luTWludXRlcywgT0ZGIGZvcmJpZHMgaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zY2hmd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtc2NoZWR1bGVyLXNjaGVkdWxlLWZsZXhpYmxldGltZXdpbmRvdy5odG1sXFxcIlxcblxcbl9wZl9zY2hmd19mdHcobmFtZSkgOj0gZnR3IGlmIHtcXG5cXHRmdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3dcXFwiKVxcblxcdGlzX29iamVjdChmdHcpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93Lk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLFxcblxcdFxcXCJGbGV4aWJsZVRpbWVXaW5kb3cuTW9kZSBpcyBGTEVYSUJMRSBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBtaXNzaW5nOyBDcmVhdGVTY2hlZHVsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWF4aW11bVdpbmRvd0luTWludXRlcyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gRkxFWElCTEVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBNYXhpbXVtV2luZG93SW5NaW51dGVzICgxLTE0NDApLCBvciBzd2l0Y2ggTW9kZSB0byBPRkZcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiRkxFWElCTEVcXFwiXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgT0ZGIGJ1dCBNYXhpbXVtV2luZG93SW5NaW51dGVzIGlzIHNldDsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBub3QgYmUgcHJvdmlkZWQgd2hlbiBGbGV4aWJsZVRpbWVXaW5kb3dNb2RlIGlzIHNldCB0byBPRkZcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgTWF4aW11bVdpbmRvd0luTWludXRlcywgb3Igc3dpdGNoIE1vZGUgdG8gRkxFWElCTEVcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiT0ZGXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFNjaGVkdWxlciByYXRlKCkgdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMjcgdmFsaWRhdGVzIHJhdGUoKSBib3VuZHMgZm9yIEFXUzo6RXZlbnRzOjpSdWxlIGJ1dCBub3RcXG4jIGZvciBBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGUg4oCUIHNhbWUgY29uc3RyYWludCBmYW1pbHksIGRpZmZlcmVudCByZXNvdXJjZS5cXG4jIE9ubHkgdGhlIHZhbHVlIGJvdW5kIGlzIGNoZWNrZWQgaGVyZTsgdW5pdCBzcGVsbGluZ3MgZGlmZmVyIGJldHdlZW4gdGhlIHR3b1xcbiMgc2VydmljZXMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIGZvciBTY2hlZHVsZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZWR1bGVFeHByZXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcmF0ZSB2YWx1ZSBpbiAnJXMnIGlzIG5vdCBwb3NpdGl2ZTsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgU2NoZWR1bGUgRXhwcmVzc2lvbiAlcy5cXFxcXFxcIlxcXCIsIFtleHByLCBleHByXSksXFxuXFx0XFxcIlVzZSBhIHJhdGUgb2YgMSBvciBtb3JlIChlLmcuIHJhdGUoNSBtaW51dGVzKSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2NoZWR1bGVyL2xhdGVzdC9Vc2VyR3VpZGUvc2NoZWR1bGUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZXhwciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKGV4cHIpXFxuXFx0dCA6PSB0cmltX3NwYWNlKGV4cHIpXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwicmF0ZShcXFwiKVxcblxcdGVuZHN3aXRoKHQsIFxcXCIpXFxcIilcXG5cXHRpbm5lciA6PSB0cmltX3NwYWNlKHN1YnN0cmluZyh0LCA1LCBjb3VudCh0KSAtIDYpKVxcblxcdHBhcnRzIDo9IHNwbGl0KGlubmVyLCBcXFwiIFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocGFydHNbMF0pXFxuXFx0biA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIVFRQL1MgRGVsaXZlcnlQb2xpY3kgcmV0cnkgdmFsdWVzOiBtaW5EZWxheVRhcmdldCA+PSAxLCBtYXhEZWxheVRhcmdldCA8PSAzNjAwIGFuZCA+PSBtaW5EZWxheVRhcmdldCwgbnVtUmV0cmllcyAwLi4xMDAgYW5kIGF0IGxlYXN0IHRoZSBzdW0gb2YgdGhlIHBoYXNlIHJldHJpZXMsIHBoYXNlIGNvdW50cyA+PSAwLCBiYWNrb2ZmRnVuY3Rpb24gb25lIG9mIGFyaXRobWV0aWN8ZXhwb25lbnRpYWx8Z2VvbWV0cmljfGxpbmVhciwgbWF4UmVjZWl2ZXNQZXJTZWNvbmQgPj0gMSAoc3Vic2NyaXB0aW9uIERlbGl2ZXJ5UG9saWN5IGFuZCB0b3BpYyBEZWxpdmVyeVBvbGljeS5odHRwKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiLFxuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtbWVzc2FnZS1kZWxpdmVyeS1yZXRyaWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2RwX2ZpeCA6PSBcXFwiS2VlcCB0aGUgcmV0cnkgcG9saWN5IGluc2lkZSB0aGUgZG9jdW1lbnRlZCByYW5nZXMgKHNlZSB0aGUgZGVsaXZlcnkgcG9saWN5IHRhYmxlKVxcXCJcXG5cXG4jIFtuYW1lLCBwYXRoIHByZWZpeCwgaGVhbHRoeVJldHJ5UG9saWN5IG9iamVjdCwgdGhyb3R0bGVQb2xpY3kgb2JqZWN0IG9yIG51bGxdXFxuX3BmX3Nuc2RwX29iaih2KSA6PSB2IGlmIGlzX29iamVjdCh2KVxcblxcbl9wZl9zbnNkcF9vYmoodikgOj0gbyBpZiB7XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0byA6PSBqc29uLnVubWFyc2hhbCh2KVxcblxcdGlzX29iamVjdChvKVxcbn1cXG5cXG5fcGZfc25zZHBfcG9sIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVBvbGljeVxcXCIsIGRwXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRkcCA6PSBfcGZfc25zZHBfb2JqKG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJEZWxpdmVyeVBvbGljeVxcXCIsIG51bGwpKVxcbn1cXG5cXG5fcGZfc25zZHBfcG9sIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllcy5EZWxpdmVyeVBvbGljeS5odHRwXFxcIiwgZHBdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0dG9wIDo9IF9wZl9zbnNkcF9vYmoob2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIkRlbGl2ZXJ5UG9saWN5XFxcIiwgbnVsbCkpXFxuXFx0ZHAgOj0gb2JqZWN0LmdldCh0b3AsIFxcXCJodHRwXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoZHApXFxufVxcblxcbl9wZl9zbnNkcF9yZXRyeSBjb250YWlucyBbbmFtZSwgcGF0aCwgaHJdIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBkcF0gaW4gX3BmX3Nuc2RwX3BvbFxcblxcdHNvbWUga2V5IGluIFtcXFwiaGVhbHRoeVJldHJ5UG9saWN5XFxcIiwgXFxcImRlZmF1bHRIZWFsdGh5UmV0cnlQb2xpY3lcXFwiXVxcblxcdGhyIDo9IG9iamVjdC5nZXQoZHAsIGtleSwgbnVsbClcXG5cXHRpc19vYmplY3QoaHIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtwLCBrZXldKVxcbn1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibWluRGVsYXlUYXJnZXRcXFwiLCAxXVxcblxcbl9wZl9zbnNkcF9taW4gY29udGFpbnMgW1xcXCJudW1SZXRyaWVzXFxcIiwgMF1cXG5cXG5fcGZfc25zZHBfbWluIGNvbnRhaW5zIFtcXFwibnVtTm9EZWxheVJldHJpZXNcXFwiLCAwXVxcblxcbl9wZl9zbnNkcF9taW4gY29udGFpbnMgW1xcXCJudW1NaW5EZWxheVJldHJpZXNcXFwiLCAwXVxcblxcbl9wZl9zbnNkcF9taW4gY29udGFpbnMgW1xcXCJudW1NYXhEZWxheVJldHJpZXNcXFwiLCAwXVxcblxcbl9wZl9zbnNkcF9tYXggY29udGFpbnMgW1xcXCJtYXhEZWxheVRhcmdldFxcXCIsIDM2MDBdXFxuXFxuX3BmX3Nuc2RwX21heCBjb250YWlucyBbXFxcIm51bVJldHJpZXNcXFwiLCAxMDBdXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZGVsaXZlcnktcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy4lc1xcXCIsIFtwYXRoLCBmXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgYmVsb3cgJXY7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IC4uLiVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICV2XFxcXFxcXCJcXFwiLCBbZiwgdiwgbSwgZiwgbV0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0c29tZSBbZiwgbV0gaW4gX3BmX3Nuc2RwX21pblxcblxcdHYgOj0gb2JqZWN0LmdldChociwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2IDwgbVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1kZWxpdmVyeS1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLiVzXFxcIiwgW3BhdGgsIGZdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBhYm92ZSAldjsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogLi4uJXMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXZcXFxcXFxcIlxcXCIsIFtmLCB2LCBtLCBmLCBtXSksXFxuXFx0X3BmX3Nuc2RwX2ZpeCwgX3BmX3Nuc2RwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGhyXSBpbiBfcGZfc25zZHBfcmV0cnlcXG5cXHRzb21lIFtmLCBtXSBpbiBfcGZfc25zZHBfbWF4XFxuXFx0diA6PSBvYmplY3QuZ2V0KGhyLCBmLCBudWxsKVxcblxcdGlzX251bWJlcih2KVxcblxcdHYgPiBtXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMubWF4RGVsYXlUYXJnZXRcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIm1heERlbGF5VGFyZ2V0ICV2IGlzIGJlbG93IG1pbkRlbGF5VGFyZ2V0ICV2OyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi5tYXhEZWxheVRhcmdldCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5EZWxheVRhcmdldFxcXFxcXFwiXFxcIiwgW214LCBtbl0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0bW4gOj0gb2JqZWN0LmdldChociwgXFxcIm1pbkRlbGF5VGFyZ2V0XFxcIiwgbnVsbClcXG5cXHRteCA6PSBvYmplY3QuZ2V0KGhyLCBcXFwibWF4RGVsYXlUYXJnZXRcXFwiLCBudWxsKVxcblxcdGlzX251bWJlcihtbilcXG5cXHRpc19udW1iZXIobXgpXFxuXFx0bXggPCBtblxcbn1cXG5cXG5fcGZfc25zZHBfcGhhc2UoaHIsIGYpIDo9IHYgaWYge1xcblxcdHYgOj0gb2JqZWN0LmdldChociwgZiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG59XFxuXFxuX3BmX3Nuc2RwX3BoYXNlKGhyLCBmKSA6PSAwIGlmIG5vdCBpc19udW1iZXIob2JqZWN0LmdldChociwgZiwgbnVsbCkpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZGVsaXZlcnktcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5udW1SZXRyaWVzXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJudW1SZXRyaWVzICV2IGlzIGJlbG93IHRoZSBwaGFzZSB0b3RhbCAldiAobnVtTm9EZWxheVJldHJpZXMgKyBudW1NaW5EZWxheVJldHJpZXMgKyBudW1NYXhEZWxheVJldHJpZXMpOyB0aGUgY3JlYXRlIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIkRlbGl2ZXJ5UG9saWN5OiAuLi5udW1SZXRyaWVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRvdGFsIG9mIG51bU1pbkRlbGF5UmV0cmllcywgbnVtTm9EZWxheVJldHJpZXMgYW5kIG51bU1heERlbGF5UmV0cmllc1xcXFxcXFwiXFxcIiwgW24sIHRvdGFsXSksXFxuXFx0X3BmX3Nuc2RwX2ZpeCwgX3BmX3Nuc2RwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIGhyXSBpbiBfcGZfc25zZHBfcmV0cnlcXG5cXHRuIDo9IG9iamVjdC5nZXQoaHIsIFxcXCJudW1SZXRyaWVzXFxcIiwgbnVsbClcXG5cXHRpc19udW1iZXIobilcXG5cXHR0b3RhbCA6PSAoX3BmX3Nuc2RwX3BoYXNlKGhyLCBcXFwibnVtTm9EZWxheVJldHJpZXNcXFwiKSArIF9wZl9zbnNkcF9waGFzZShociwgXFxcIm51bU1pbkRlbGF5UmV0cmllc1xcXCIpKSArIF9wZl9zbnNkcF9waGFzZShociwgXFxcIm51bU1heERlbGF5UmV0cmllc1xcXCIpXFxuXFx0biA8IHRvdGFsXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuYmFja29mZkZ1bmN0aW9uXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJiYWNrb2ZmRnVuY3Rpb24gJyVzJyBpcyBub3QgYXJpdGhtZXRpYywgZXhwb25lbnRpYWwsIGdlb21ldHJpYyBvciBsaW5lYXI7IHRoZSBjcmVhdGUgY2FsbCBmYWlscyB3aXRoIFxcXFxcXFwiRGVsaXZlcnlQb2xpY3k6IC4uLiB0aGUgdmFsdWUgWyVzXSBpcyBub3QgYSB2YWxpZCBiYWNrb2ZmIGZ1bmN0aW9uXFxcXFxcXCJcXFwiLCBbYiwgYl0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBocl0gaW4gX3BmX3Nuc2RwX3JldHJ5XFxuXFx0YiA6PSBvYmplY3QuZ2V0KGhyLCBcXFwiYmFja29mZkZ1bmN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYilcXG5cXHRub3QgYiBpbiB7XFxcImFyaXRobWV0aWNcXFwiLCBcXFwiZXhwb25lbnRpYWxcXFwiLCBcXFwiZ2VvbWV0cmljXFxcIiwgXFxcImxpbmVhclxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWRlbGl2ZXJ5LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuJXMubWF4UmVjZWl2ZXNQZXJTZWNvbmRcXFwiLCBbcCwga2V5XSksXFxuXFx0c3ByaW50ZihcXFwibWF4UmVjZWl2ZXNQZXJTZWNvbmQgJXYgaXMgYmVsb3cgMTsgdGhlIGNyZWF0ZSBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJEZWxpdmVyeVBvbGljeTogdGhyb3R0bGVQb2xpY3kubWF4UmVjZWl2ZXNQZXJTZWNvbmQgbXVzdCBiZSA+PSAxXFxcXFxcXCJcXFwiLCBbdl0pLFxcblxcdF9wZl9zbnNkcF9maXgsIF9wZl9zbnNkcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwLCBkcF0gaW4gX3BmX3Nuc2RwX3BvbFxcblxcdHNvbWUga2V5IGluIFtcXFwidGhyb3R0bGVQb2xpY3lcXFwiLCBcXFwiZGVmYXVsdFRocm90dGxlUG9saWN5XFxcIl1cXG5cXHR0cCA6PSBvYmplY3QuZ2V0KGRwLCBrZXksIG51bGwpXFxuXFx0aXNfb2JqZWN0KHRwKVxcblxcdHYgOj0gb2JqZWN0LmdldCh0cCwgXFxcIm1heFJlY2VpdmVzUGVyU2Vjb25kXFxcIiwgbnVsbClcXG5cXHRpc19udW1iZXIodilcXG5cXHR2IDwgMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLW9ubHktYXR0cmlidXRlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLCBBcmNoaXZlUG9saWN5IGFuZCBGaWZvVGhyb3VnaHB1dFNjb3BlIGFyZSBGSUZPLW9ubHkgdG9waWMgYXR0cmlidXRlcywgYW5kIEFyY2hpdmVQb2xpY3kuTWVzc2FnZVJldGVudGlvblBlcmlvZCBpcyAxLi4zNjUgZGF5c1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVUb3BpYy5odG1sXFxcIlxcblxcbl9wZl9zbnNmb19maXggOj0gXFxcIlNldCBGaWZvVG9waWM6IHRydWUgKHdpdGggYSAqLmZpZm8gVG9waWNOYW1lKSBvciBkcm9wIHRoZSBGSUZPLW9ubHkgYXR0cmlidXRlczsga2VlcCB0aGUgYXJjaGl2ZSByZXRlbnRpb24gd2l0aGluIDEtMzY1IGRheXNcXFwiXFxuXFxuX3BmX3Nuc2ZvX3N0ZCh0KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9Ub3BpY1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nuc2ZvX3N0ZCh0KSBpZiByZXNvbHZlKHQsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLW9ubHktYXR0cmlidXRlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgc2V0IG9uIGEgc3RhbmRhcmQgdG9waWMgKEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZSk7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFVua25vd24gYXR0cmlidXRlICVzXFxcXFxcXCJcXFwiLCBbYXR0ciwgYXR0cl0pLFxcblxcdF9wZl9zbnNmb19maXgsIF9wZl9zbnNmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZvX3N0ZChuYW1lKVxcblxcdHNvbWUgYXR0ciBpbiBbXFxcIkNvbnRlbnRCYXNlZERlZHVwbGljYXRpb25cXFwiLCBcXFwiQXJjaGl2ZVBvbGljeVxcXCIsIFxcXCJGaWZvVGhyb3VnaHB1dFNjb3BlXFxcIl1cXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBhdHRyLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zbnNmb19hcmNoaXZlKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJBcmNoaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc25zZm9fYXJjaGl2ZShuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiQXJjaGl2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNmb19udW0odikgOj0gdiBpZiBpc19udW1iZXIodilcXG5cXG5fcGZfc25zZm9fbnVtKHYpIDo9IHRvX251bWJlcih2KSBpZiB7XFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0cmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgdilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby1vbmx5LWF0dHJpYnV0ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFyY2hpdmVQb2xpY3kuTWVzc2FnZVJldGVudGlvblBlcmlvZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQXJjaGl2ZVBvbGljeS5NZXNzYWdlUmV0ZW50aW9uUGVyaW9kICV2IGlzIG91dHNpZGUgMS4uMzY1IGRheXM7IENyZWF0ZVRvcGljIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IEFyY2hpdmVQb2xpY3k6IE1lc3NhZ2VSZXRlbnRpb25QZXJpb2QgdmFsdWUgaXMgaW52YWxpZFxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRfcGZfc25zZm9fZml4LCBfcGZfc25zZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdG4gOj0gX3BmX3Nuc2ZvX251bShvYmplY3QuZ2V0KF9wZl9zbnNmb19hcmNoaXZlKG5hbWUpLCBcXFwiTWVzc2FnZVJldGVudGlvblBlcmlvZFxcXCIsIG51bGwpKVxcblxcdF9wZl9zbnNmb19vdXQobilcXG59XFxuXFxuX3BmX3Nuc2ZvX291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9zbnNmb19vdXQobikgaWYgbiA+IDM2NVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tcXVldWUtb24tc3RhbmRhcmQtdG9waWNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBGSUZPIFNRUyBxdWV1ZSBjYW5ub3Qgc3Vic2NyaWJlIHRvIGEgc3RhbmRhcmQgdG9waWMgKGEgRklGTyB0b3BpYyBtYXkgZmFuIG91dCB0byBzdGFuZGFyZCBxdWV1ZXMsIG5vdCB0aGUgcmV2ZXJzZSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2Zxc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1maWZvLXRvcGljcy5odG1sXFxcIlxcblxcbl9wZl9zbnNmcXNfZml4IDo9IFxcXCJTdWJzY3JpYmUgdGhlIEZJRk8gcXVldWUgdG8gYSBGSUZPIHRvcGljLCBvciB1c2UgYSBzdGFuZGFyZCBxdWV1ZVxcXCJcXG5cXG5fcGZfc25zZnFzX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2Zxc19zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmcXNfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuIyB0b3BpYyBpcyBGSUZPOiBhbiBpbi10ZW1wbGF0ZSB0b3BpYyB3aXRoIEZpZm9Ub3BpYyB0cnVlLCBvciBhIGxpdGVyYWwgQVJOIGVuZGluZyBpbiAuZmlmb1xcbl9wZl9zbnNmcXNfdGZpZm8odCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cmVzb2x2ZSh0LCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcbn1cXG5cXG5fcGZfc25zZnFzX3RmaWZvKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG5fcGZfc25zZnFzX3RzdGQodCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9Ub3BpY1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nuc2Zxc190c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcbn1cXG5cXG5fcGZfc25zZnFzX3RzdGQodCkgaWYge1xcblxcdHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG5fcGZfc25zZnFzX3FmaWZvKGVwKSBpZiB7XFxuXFx0ZXAgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cmVzb2x2ZShlcCwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG59XFxuXFxuX3BmX3Nuc2Zxc19xZmlmbyhlcCkgaWYge1xcblxcdHN0YXJ0c3dpdGgoZXAsIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aChlcCwgXFxcIi5maWZvXFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby1xdWV1ZS1vbi1zdGFuZGFyZC10b3BpY1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pLFxcblxcdFxcXCJhIEZJRk8gcXVldWUgaXMgc3Vic2NyaWJlZCB0byBhIHN0YW5kYXJkIHRvcGljOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBFbmRwb2ludCBSZWFzb246IEZJRk8gU1FTIFF1ZXVlcyBjYW4gbm90IGJlIHN1YnNjcmliZWQgdG8gc3RhbmRhcmQgU05TIHRvcGljc1xcXFxcXFwiXFxcIixcXG5cXHRfcGZfc25zZnFzX2ZpeCwgX3BmX3Nuc2Zxc191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIHRvcGljXSBpbiBfcGZfc25zZnFzX3N1YlxcblxcdF9wZl9zbnNmcXNfdHN0ZCh0b3BpYylcXG5cXHRfcGZfc25zZnFzX3Byb3RvKG5hbWUsIHBhdGgpID09IFxcXCJzcXNcXFwiXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5FbmRwb2ludFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKGVwKVxcblxcdF9wZl9zbnNmcXNfcWZpZm8oZXApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGSUZPIHRvcGljIG5hbWVzIG11c3QgZW5kIHdpdGggJy5maWZvJyAoYW5kICcuZmlmbycgbmFtZXMgcmVxdWlyZSBGaWZvVG9waWMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZmlmb19maXggOj0gXFxcIkdpdmUgRklGTyB0b3BpY3MgYSBUb3BpY05hbWUgZW5kaW5nIGluICcuZmlmbycgKG9yIGRyb3AgVG9waWNOYW1lIHRvIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmUpLCBhbmQgc2V0IEZpZm9Ub3BpYzogdHJ1ZSB3aGVuZXZlciB0aGUgbmFtZSBlbmRzIGluICcuZmlmbydcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtY3JlYXRlLWZpZm8tdG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZmlmb190cnVlKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIEZpZm9Ub3BpYyDjgYzlrZjlnKjjgZfjgIHjg6rjg4bjg6njg6sgZmFsc2Ug5Lul5aSW77yIdHJ1ZSDjgoTjg4jjg7zjgq/jg7PvvInjgarjgonjgIxGSUZPIOOBi+OCguOBl+OCjOOBquOBhOOAjeaJseOBhFxcbl9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSkgaWYge1xcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKVxcblxcdG5vdCB2IGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkZpZm9Ub3BpYyBpcyB0cnVlIGJ1dCBUb3BpY05hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLmZpZm8nOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRfcGZfc25zZmlmb190cnVlKG5hbWUpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRub3QgZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBlbmRzIHdpdGggJy5maWZvJyBidXQgRmlmb1RvcGljIGlzIG5vdCB0cnVlOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgbmFtZSBhdCBkZXBsb3kgdGltZVxcXCIsIFt0bl0pLFxcblxcdF9wZl9zbnNmaWZvX2ZpeCwgX3BmX3Nuc2ZpZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0ZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxuXFx0bm90IF9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlmby10b3BpYy1wcm90b2NvbFwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEZJRk8gdG9waWMgb25seSBhY2NlcHRzIHNxcyBzdWJzY3JpcHRpb25zIChsYW1iZGEsIGh0dHAvaHR0cHMsIGVtYWlsLCBlbWFpbC1qc29uLCBzbXMsIGZpcmVob3NlIGFyZSByZWplY3RlZClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2Z0cF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2RnL3Nucy1maWZvLXRvcGljcy5odG1sXFxcIlxcblxcbl9wZl9zbnNmdHBfZml4IDo9IFxcXCJTdWJzY3JpYmUgYW4gU1FTIHF1ZXVlIChGSUZPIG9yIHN0YW5kYXJkKSB0byB0aGUgRklGTyB0b3BpYywgb3IgdXNlIGEgc3RhbmRhcmQgdG9waWMgZm9yIG90aGVyIHByb3RvY29sc1xcXCJcXG5cXG5fcGZfc25zZnRwX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2Z0cF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNmdHBfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuIyB0b3BpYyBpcyBGSUZPOiBhbiBpbi10ZW1wbGF0ZSB0b3BpYyB3aXRoIEZpZm9Ub3BpYyB0cnVlLCBvciBhIGxpdGVyYWwgQVJOIGVuZGluZyBpbiAuZmlmb1xcbl9wZl9zbnNmdHBfdGZpZm8odCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cmVzb2x2ZSh0LCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcbn1cXG5cXG5fcGZfc25zZnRwX3RmaWZvKHQpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJhcm46XFxcIilcXG5cXHRlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG5fcGZfc25zZnRwX3RzdGQodCkgaWYge1xcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkZpZm9Ub3BpY1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nuc2Z0cF90c3RkKHQpIGlmIHtcXG5cXHR0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHJlc29sdmUodCwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcbn1cXG5cXG5fcGZfc25zZnRwX3RzdGQodCkgaWYge1xcblxcdHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLXByb3RvY29sXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiYSBGSUZPIHRvcGljIGlzIHN1YnNjcmliZWQgd2l0aCBwcm90b2NvbCAlczsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogSW52YWxpZCBwcm90b2NvbCB0eXBlOiAlc1xcXFxcXFwiXFxcIiwgW3Byb3RvLCBwcm90b10pLFxcblxcdF9wZl9zbnNmdHBfZml4LCBfcGZfc25zZnRwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgdG9waWNdIGluIF9wZl9zbnNmdHBfc3ViXFxuXFx0X3BmX3Nuc2Z0cF90Zmlmbyh0b3BpYylcXG5cXHRwcm90byA6PSBfcGZfc25zZnRwX3Byb3RvKG5hbWUsIHBhdGgpXFxuXFx0cHJvdG8gIT0gXFxcInNxc1xcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtZmlsdGVyLXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGaWx0ZXJQb2xpY3kgc2hhcGU6IGF0IG1vc3QgNSBrZXlzLCBldmVyeSB2YWx1ZSBhbiBhcnJheSBvciBvYmplY3QsIG5vIGVtcHR5IGFycmF5cywgbm8gYXJyYXlzIGluc2lkZSBhcnJheXMsIG5lc3Rpbmcgb25seSB3aXRoIEZpbHRlclBvbGljeVNjb3BlIE1lc3NhZ2VCb2R5LCBhbmQgRmlsdGVyUG9saWN5U2NvcGUgaXMgTWVzc2FnZUF0dHJpYnV0ZXMgb3IgTWVzc2FnZUJvZHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLXN1YnNjcmlwdGlvbi1maWx0ZXItcG9saWNpZXMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZnBfZml4IDo9IFxcXCJLZWVwIHRoZSBmaWx0ZXIgcG9saWN5IHRvIDUga2V5cyBvZiBub24tZW1wdHkgYXJyYXlzIChvciBuZXN0ZWQgb2JqZWN0cyB3aXRoIEZpbHRlclBvbGljeVNjb3BlOiBNZXNzYWdlQm9keSlcXFwiXFxuXFxuX3BmX3Nuc2ZwX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2ZwX3N1YiBjb250YWlucyBbbmFtZSwgcGF0aCwgc3ViLCBuYW1lXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHNvbWUgcyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gcy52YWx1ZVxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvbi4lZFxcXCIsIFtzLmluZGV4XSlcXG59XFxuXFxuX3BmX3Nuc2ZwX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbl9wZl9zbnNmcF9wb2woc3ViKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KHN1YiwgXFxcIkZpbHRlclBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nuc2ZwX3BvbChzdWIpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoc3ViLCBcXFwiRmlsdGVyUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nuc2ZwX2VyciA6PSBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBGaWx0ZXJQb2xpY3k6IFxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3lcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBoYXMgJWQga2V5cyAobWF4aW11bSA1KTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc0ZpbHRlciBwb2xpY3kgY2FuIG5vdCBoYXZlIG1vcmUgdGhhbiA1IGtleXNcXFxcXFxcIlxcXCIsIFtuLCBfcGZfc25zZnBfZXJyXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdG4gOj0gY291bnQob2JqZWN0LmtleXMoX3BmX3Nuc2ZwX3BvbChzdWIpKSlcXG5cXHRuID4gNVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBoYXMgYSBzY2FsYXIgdmFsdWU7IGVhY2gga2V5IHRha2VzIGFuIGFycmF5IG9mIG1hdGNoIHZhbHVlcyAob3IgYW4gb2JqZWN0IHdpdGggRmlsdGVyUG9saWN5U2NvcGUgTWVzc2FnZUJvZHkpLCBhbmQgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcXFxcXFxcIlxcXCIsIFtrLCBfcGZfc25zZnBfZXJyLCBrXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdHNvbWUgaywgdiBpbiBfcGZfc25zZnBfcG9sKHN1YilcXG5cXHRub3QgaXNfYXJyYXkodilcXG5cXHRub3QgaXNfb2JqZWN0KHYpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpbHRlci1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkZpbHRlclBvbGljeS4lc1xcXCIsIFtwYXRoLCBrXSksXFxuXFx0c3ByaW50ZihcXFwiRmlsdGVyUG9saWN5IGtleSAnJXMnIGlzIGFuIGVtcHR5IGFycmF5OyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzRW1wdHkgYXJyYXlzIGFyZSBub3QgYWxsb3dlZFxcXFxcXFwiXFxcIiwgW2ssIF9wZl9zbnNmcF9lcnJdKSxcXG5cXHRfcGZfc25zZnBfZml4LCBfcGZfc25zZnBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZnBfc3ViXFxuXFx0c29tZSBrLCB2IGluIF9wZl9zbnNmcF9wb2woc3ViKVxcblxcdGlzX2FycmF5KHYpXFxuXFx0Y291bnQodikgPT0gMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBoYXMgYW4gYXJyYXkgaW5zaWRlIGl0cyBhcnJheTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc01hdGNoIHZhbHVlIG11c3QgYmUgU3RyaW5nLCBudW1iZXIsIHRydWUsIGZhbHNlLCBvciBudWxsXFxcXFxcXCJcXFwiLCBbaywgX3BmX3Nuc2ZwX2Vycl0pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRzb21lIGssIHYgaW4gX3BmX3Nuc2ZwX3BvbChzdWIpXFxuXFx0aXNfYXJyYXkodilcXG5cXHRzb21lIGUgaW4gdlxcblxcdGlzX2FycmF5KGUpXFxufVxcblxcbl9wZl9zbnNmcF9hdHRyX3Njb3BlKHN1YikgaWYgb2JqZWN0LmdldChzdWIsIFxcXCJGaWx0ZXJQb2xpY3lTY29wZVxcXCIsIFxcXCJNZXNzYWdlQXR0cmlidXRlc1xcXCIpID09IFxcXCJNZXNzYWdlQXR0cmlidXRlc1xcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWx0ZXItcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5GaWx0ZXJQb2xpY3kuJXNcXFwiLCBbcGF0aCwga10pLFxcblxcdHNwcmludGYoXFxcIkZpbHRlclBvbGljeSBrZXkgJyVzJyBuZXN0cyBhbiBvYmplY3Qgd2hpbGUgRmlsdGVyUG9saWN5U2NvcGUgaXMgTWVzc2FnZUF0dHJpYnV0ZXM7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBGaWx0ZXIgcG9saWN5IHNjb3BlIE1lc3NhZ2VBdHRyaWJ1dGVzIGRvZXMgbm90IHN1cHBvcnQgbmVzdGVkIGZpbHRlciBwb2xpY3lcXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0X3BmX3Nuc2ZwX2ZpeCwgX3BmX3Nuc2ZwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZwX3N1YlxcblxcdF9wZl9zbnNmcF9hdHRyX3Njb3BlKHN1YilcXG5cXHRzb21lIGssIHYgaW4gX3BmX3Nuc2ZwX3BvbChzdWIpXFxuXFx0aXNfb2JqZWN0KHYpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpbHRlci1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkZpbHRlclBvbGljeVNjb3BlXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGaWx0ZXJQb2xpY3lTY29wZSAnJXMnIGlzIG5vdCBNZXNzYWdlQXR0cmlidXRlcyBvciBNZXNzYWdlQm9keTsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IEZpbHRlclBvbGljeVNjb3BlOiBJbnZhbGlkIHZhbHVlIFslc10uIFBsZWFzZSB1c2UgZWl0aGVyIE1lc3NhZ2VCb2R5IG9yIE1lc3NhZ2VBdHRyaWJ1dGVzXFxcXFxcXCJcXFwiLCBbcywgc10pLFxcblxcdF9wZl9zbnNmcF9maXgsIF9wZl9zbnNmcF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNmcF9zdWJcXG5cXHRzIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuRmlsdGVyUG9saWN5U2NvcGVcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhzKVxcblxcdG5vdCBzIGluIHtcXFwiTWVzc2FnZUF0dHJpYnV0ZXNcXFwiLCBcXFwiTWVzc2FnZUJvZHlcXFwifVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maXJlaG9zZS1zdWJzY3JpcHRpb24tcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpcmVob3NlIHN1YnNjcmlwdGlvbiByZXF1aXJlcyBTdWJzY3JpcHRpb25Sb2xlQXJuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNmaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfU3Vic2NyaWJlLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZoX2ZpeCA6PSBcXFwiU2V0IFN1YnNjcmlwdGlvblJvbGVBcm4gdG8gYSByb2xlIFNOUyBjYW4gYXNzdW1lIHRoYXQgbWF5IHdyaXRlIHRvIHRoZSBkZWxpdmVyeSBzdHJlYW1cXFwiXFxuXFxuX3BmX3Nuc2ZoX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc2ZoX3N1YiBjb250YWlucyBbbmFtZSwgcGF0aCwgc3ViLCBuYW1lXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHNvbWUgcyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gcy52YWx1ZVxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvbi4lZFxcXCIsIFtzLmluZGV4XSlcXG59XFxuXFxuX3BmX3Nuc2ZoX3Byb3RvKG5hbWUsIHBhdGgpIDo9IHAgaWYge1xcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5Qcm90b2NvbFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpcmVob3NlLXN1YnNjcmlwdGlvbi1yb2xlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5TdWJzY3JpcHRpb25Sb2xlQXJuXFxcIiwgW3BhdGhdKSxcXG5cXHRcXFwiUHJvdG9jb2wgZmlyZWhvc2UgaGFzIG5vIFN1YnNjcmlwdGlvblJvbGVBcm47IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IERlbGl2ZXJ5IHByb3RvY29sIGZpcmVob3NlIGNhbiBvbmx5IGJlIHN1YnNjcmliZWQgd2l0aCBzdWJzY3JpcHRpb24gcm9sZSBhcm5cXFxcXFxcIlxcXCIsXFxuXFx0X3BmX3Nuc2ZoX2ZpeCwgX3BmX3Nuc2ZoX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2ZoX3N1YlxcblxcdF9wZl9zbnNmaF9wcm90byhuYW1lLCBwYXRoKSA9PSBcXFwiZmlyZWhvc2VcXFwiXFxuXFx0b2JqZWN0LmdldChzdWIsIFxcXCJTdWJzY3JpcHRpb25Sb2xlQXJuXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1yYXctbWVzc2FnZS1kZWxpdmVyeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSYXdNZXNzYWdlRGVsaXZlcnkgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHNxcywgaHR0cCwgaHR0cHMgYW5kIGZpcmVob3NlIHN1YnNjcmlwdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cIixcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc3Jhd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfU3Vic2NyaWJlLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3Jhd19maXggOj0gXFxcIkRyb3AgUmF3TWVzc2FnZURlbGl2ZXJ5IGZvciBlbWFpbCAvIGVtYWlsLWpzb24gLyBzbXMgLyBsYW1iZGEgLyBhcHBsaWNhdGlvbiBzdWJzY3JpcHRpb25zXFxcIlxcblxcbl9wZl9zbnNyYXdfc3ViIGNvbnRhaW5zIFtuYW1lLCBcXFwiUHJvcGVydGllc1xcXCIsIHN1YiwgdG9waWNdIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHN1YiA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChzdWIpXFxuXFx0dG9waWMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY0FyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHRvcGljKVxcbn1cXG5cXG5fcGZfc25zcmF3X3N1YiBjb250YWlucyBbbmFtZSwgcGF0aCwgc3ViLCBuYW1lXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHNvbWUgcyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuU3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gcy52YWx1ZVxcblxcdGlzX29iamVjdChzdWIpXFxuXFx0cGF0aCA6PSBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvbi4lZFxcXCIsIFtzLmluZGV4XSlcXG59XFxuXFxuX3BmX3Nuc3Jhd19wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1yYXctbWVzc2FnZS1kZWxpdmVyeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuUmF3TWVzc2FnZURlbGl2ZXJ5XFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJSYXdNZXNzYWdlRGVsaXZlcnkgaXMgdHJ1ZSBvbiBhICVzIHN1YnNjcmlwdGlvbjsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IERlbGl2ZXJ5IHByb3RvY29sIFslc10gZG9lcyBub3Qgc3VwcG9ydCByYXcgbWVzc2FnZSBkZWxpdmVyeS5cXFxcXFxcIlxcXCIsIFtwcm90bywgcHJvdG9dKSxcXG5cXHRfcGZfc25zcmF3X2ZpeCwgX3BmX3Nuc3Jhd191cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNyYXdfc3ViXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5SYXdNZXNzYWdlRGVsaXZlcnlcXFwiLCBbcGF0aF0pKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcdHByb3RvIDo9IF9wZl9zbnNyYXdfcHJvdG8obmFtZSwgcGF0aClcXG5cXHRub3QgcHJvdG8gaW4ge1xcXCJzcXNcXFwiLCBcXFwiaHR0cFxcXCIsIFxcXCJodHRwc1xcXCIsIFxcXCJmaXJlaG9zZVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXN1YnNjcmlwdGlvbi1lbmRwb2ludFwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTdWJzY3JpcHRpb24gUHJvdG9jb2wgaXMgb25lIG9mIHRoZSBuaW5lIFNOUyBwcm90b2NvbHMgYW5kIHRoZSBFbmRwb2ludCBtYXRjaGVzIGl0OiBhbiBBUk4gb2YgdGhlIHJpZ2h0IHNlcnZpY2UgZm9yIHNxcy9sYW1iZGEvZmlyZWhvc2UvYXBwbGljYXRpb24sIGFuIGVtYWlsIGFkZHJlc3MsIGEgVVJMIHdpdGggdGhlIHNhbWUgc2NoZW1lIGZvciBodHRwL2h0dHBzLCBhIHBob25lIG51bWJlciBmb3Igc21zXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNlcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zbnMvbGF0ZXN0L2FwaS9BUElfU3Vic2NyaWJlLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2VwX2ZpeCA6PSBcXFwiR2l2ZSB0aGUgc3Vic2NyaXB0aW9uIHRoZSBlbmRwb2ludCBmb3JtIGl0cyBwcm90b2NvbCBleHBlY3RzIChGbjo6R2V0QXR0IFF1ZXVlLkFybiBmb3Igc3FzLCBodHRwczovLyBVUkwgZm9yIGh0dHBzLCAuLi4pXFxcIlxcblxcbl9wZl9zbnNlcF9zdWIgY29udGFpbnMgW25hbWUsIFxcXCJQcm9wZXJ0aWVzXFxcIiwgc3ViLCB0b3BpY10gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHN1YilcXG5cXHR0b3BpYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljQXJuXFxcIilcXG5cXHRpc19zdHJpbmcodG9waWMpXFxufVxcblxcbl9wZl9zbnNlcF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNlcF9wcm90byhuYW1lLCBwYXRoKSA6PSBwIGlmIHtcXG5cXHRwIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiJXMuUHJvdG9jb2xcXFwiLCBbcGF0aF0pKVxcblxcdGlzX3N0cmluZyhwKVxcbn1cXG5cXG5fcGZfc25zZXBfcHJvdG9jb2xzIDo9IHtcXFwiaHR0cFxcXCIsIFxcXCJodHRwc1xcXCIsIFxcXCJlbWFpbFxcXCIsIFxcXCJlbWFpbC1qc29uXFxcIiwgXFxcInNtc1xcXCIsIFxcXCJzcXNcXFwiLCBcXFwiYXBwbGljYXRpb25cXFwiLCBcXFwibGFtYmRhXFxcIiwgXFxcImZpcmVob3NlXFxcIn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tZW5kcG9pbnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJQcm90b2NvbCAnJXMnIGlzIG5vdCBhbiBTTlMgcHJvdG9jb2w7IFN1YnNjcmliZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEFtYXpvbiBTTlMgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHByb3RvY29sIHN0cmluZzogJXNcXFxcXFxcIlxcXCIsIFtwcm90bywgcHJvdG9dKSxcXG5cXHRfcGZfc25zZXBfZml4LCBfcGZfc25zZXBfdXJsKSBpZiB7XFxuXFx0c29tZSBbbmFtZSwgcGF0aCwgc3ViLCBfXSBpbiBfcGZfc25zZXBfc3ViXFxuXFx0cHJvdG8gOj0gX3BmX3Nuc2VwX3Byb3RvKG5hbWUsIHBhdGgpXFxuXFx0bm90IHByb3RvIGluIF9wZl9zbnNlcF9wcm90b2NvbHNcXG59XFxuXFxuIyBbcHJvdG9jb2wsIGVuZHBvaW50IHBhdHRlcm4sIHNlcnZpY2UgZXJyb3JdXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwic3FzXFxcIiwgXFxcIl5hcm46W146XSs6c3FzOlxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogU1FTIGVuZHBvaW50IEFSTlxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwibGFtYmRhXFxcIiwgXFxcIl5hcm46W146XSs6bGFtYmRhOlxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogTGFtYmRhIGVuZHBvaW50IEFSTlxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiZmlyZWhvc2VcXFwiLCBcXFwiXmFybjpbXjpdKzpmaXJlaG9zZTpcXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEZpcmVob3NlIGVuZHBvaW50IEFSTlxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiYXBwbGljYXRpb25cXFwiLCBcXFwiXmFybjpbXjpdKzpzbnM6W146XSo6W146XSo6ZW5kcG9pbnQvXFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBcHBsaWNhdGlvbiBlbmRwb2ludCBhcm4gaW52YWxpZFxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiZW1haWxcXFwiLCBcXFwiXlteQCBdK0BbXkAgXSskXFxcIiwgXFxcIkludmFsaWQgcGFyYW1ldGVyOiBFbWFpbCBhZGRyZXNzXFxcIl1cXG5cXG5fcGZfc25zZXBfc2hhcGUgY29udGFpbnMgW1xcXCJlbWFpbC1qc29uXFxcIiwgXFxcIl5bXkAgXStAW15AIF0rJFxcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW1haWwgYWRkcmVzc1xcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwiaHR0cFxcXCIsIFxcXCJeaHR0cDovL1xcXCIsIFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogRW5kcG9pbnQgbXVzdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHByb3RvY29sXFxcIl1cXG5cXG5fcGZfc25zZXBfc2hhcGUgY29udGFpbnMgW1xcXCJodHRwc1xcXCIsIFxcXCJeaHR0cHM6Ly9cXFwiLCBcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEVuZHBvaW50IG11c3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBwcm90b2NvbFxcXCJdXFxuXFxuX3BmX3Nuc2VwX3NoYXBlIGNvbnRhaW5zIFtcXFwic21zXFxcIiwgXFxcIl5bK10/WzAtOV1bMC05IC1dKiRcXFwiLCBcXFwiSW52YWxpZCBTTVMgZW5kcG9pbnRcXFwiXVxcblxcbiMgT25seSBsaXRlcmFsIGVuZHBvaW50cyBhcmUganVkZ2VkOiBhIFJlZiAvIEZuOjpHZXRBdHQgdG8gYSByZXNvdXJjZSBpbiB0aGVcXG4jIHRlbXBsYXRlIHJlc29sdmVzIHRvIHRoYXQgcmVzb3VyY2UncyBsb2dpY2FsIElEIGFuZCBpcyBza2lwcGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1lbmRwb2ludFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuRW5kcG9pbnRcXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcIkVuZHBvaW50ICclcycgZG9lcyBub3QgaGF2ZSB0aGUgZm9ybSB0aGUgJXMgcHJvdG9jb2wgZXhwZWN0czsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCIlc1xcXFxcXFwiXFxcIiwgW2VwLCBwcm90bywgZXJyXSksXFxuXFx0X3BmX3Nuc2VwX2ZpeCwgX3BmX3Nuc2VwX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc2VwX3N1YlxcblxcdHByb3RvIDo9IF9wZl9zbnNlcF9wcm90byhuYW1lLCBwYXRoKVxcblxcdHNvbWUgW3AyLCBwYXR0ZXJuLCBlcnJdIGluIF9wZl9zbnNlcF9zaGFwZVxcblxcdHAyID09IHByb3RvXFxuXFx0ZXAgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCIlcy5FbmRwb2ludFxcXCIsIFtwYXRoXSkpXFxuXFx0aXNfc3RyaW5nKGVwKVxcblxcdG5vdCBlcCBpbiBvYmplY3Qua2V5cyhpbnB1dC5yZXNvdXJjZXMpXFxuXFx0bm90IGNvbnRhaW5zKGVwLCBcXFwiJHtcXFwiKVxcblxcdG5vdCByZWdleC5tYXRjaChwYXR0ZXJuLCBlcClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZHJpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU3Vic2NyaXB0aW9uIFJlZHJpdmVQb2xpY3kgbmVlZHMgZGVhZExldHRlclRhcmdldEFybiwgd2hpY2ggbXVzdCBiZSBhbiBTUVMgcXVldWUgQVJOIGluIHRoZSBkZXBsb3kgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXCIsXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNzcmRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtZGVhZC1sZXR0ZXItcXVldWVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3NyZF9maXggOj0gXFxcIlNldCBkZWFkTGV0dGVyVGFyZ2V0QXJuIHRvIEZuOjpHZXRBdHQgUXVldWUuQXJuIG9mIGEgcXVldWUgaW4gdGhpcyBzdGFja1xcXCJcXG5cXG5fcGZfc25zc3JkX3N1YiBjb250YWlucyBbbmFtZSwgXFxcIlByb3BlcnRpZXNcXFwiLCBzdWIsIHRvcGljXSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6U3Vic2NyaXB0aW9uXFxcIilcXG5cXHRzdWIgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHRvcGljIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdGlzX3N0cmluZyh0b3BpYylcXG59XFxuXFxuX3BmX3Nuc3NyZF9zdWIgY29udGFpbnMgW25hbWUsIHBhdGgsIHN1YiwgbmFtZV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRzb21lIHMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0c3ViIDo9IHMudmFsdWVcXG5cXHRpc19vYmplY3Qoc3ViKVxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiUHJvcGVydGllcy5TdWJzY3JpcHRpb24uJWRcXFwiLCBbcy5pbmRleF0pXFxufVxcblxcbl9wZl9zbnNzcmRfcHJvdG8obmFtZSwgcGF0aCkgOj0gcCBpZiB7XFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIiVzLlByb3RvY29sXFxcIiwgW3BhdGhdKSlcXG5cXHRpc19zdHJpbmcocClcXG59XFxuXFxuX3BmX3Nuc3NyZF9wb2woc3ViKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KHN1YiwgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zbnNzcmRfcG9sKHN1YikgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChzdWIsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocmF3KVxcblxcdHBvbCA6PSBqc29uLnVubWFyc2hhbChyYXcpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZHJpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJlZHJpdmVQb2xpY3lcXFwiLCBbcGF0aF0pLFxcblxcdFxcXCJSZWRyaXZlUG9saWN5IGhhcyBubyBkZWFkTGV0dGVyVGFyZ2V0QXJuOyBTdWJzY3JpYmUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogUmVkcml2ZVBvbGljeTogTWlzc2luZyBkZWFkTGV0dGVyVGFyZ2V0QXJuIGF0dHJpYnV0ZVxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc25zc3JkX2ZpeCwgX3BmX3Nuc3NyZF91cmwpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNzcmRfc3ViXFxuXFx0cG9sIDo9IF9wZl9zbnNzcmRfcG9sKHN1YilcXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWRyaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBbcGF0aF0pLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gJyVzJyBpcyBub3QgYW4gU1FTIHF1ZXVlIEFSTjsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFJlZHJpdmVQb2xpY3k6IGRlYWRMZXR0ZXJUYXJnZXRBcm4gbXVzdCBiZSBhIFNRUyBxdWV1ZVxcXFxcXFwiXFxcIiwgW2Fybl0pLFxcblxcdF9wZl9zbnNzcmRfZml4LCBfcGZfc25zc3JkX3VybCkgaWYge1xcblxcdHNvbWUgW25hbWUsIHBhdGgsIHN1YiwgX10gaW4gX3BmX3Nuc3NyZF9zdWJcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChfcGZfc25zc3JkX3BvbChzdWIpLCBcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRub3QgY29udGFpbnMoYXJuLCBcXFwiJHtcXFwiKVxcblxcdG5vdCByZWdleC5tYXRjaChcXFwiXmFybjpbXjpdKzpzcXM6XFxcIiwgYXJuKVxcbn1cXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uIChlbmZvcmNlIG1vZGUgb25seTsgc2VlIEFHRU5UUy5tZCkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtc3Vic2NyaXB0aW9uLXJlZHJpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsIFtwYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiZGVhZExldHRlclRhcmdldEFybiBpcyBpbiAnJXMnIGJ1dCB0aGUgc3Vic2NyaXB0aW9uIGRlcGxveXMgdG8gJyVzJzsgU3Vic2NyaWJlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogQXR0cmlidXRlcyBSZWFzb246IFJlZHJpdmVQb2xpY3k6IGRlYWRMZXR0ZXJUYXJnZXRBcm4gbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIHN1YnNjcmlwdGlvblxcXFxcXFwiXFxcIiwgW3BhcnRzWzNdLCByZWdpb25dKSxcXG5cXHRfcGZfc25zc3JkX2ZpeCwgX3BmX3Nuc3NyZF91cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIFtuYW1lLCBwYXRoLCBzdWIsIF9dIGluIF9wZl9zbnNzcmRfc3ViXFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoX3BmX3Nuc3NyZF9wb2woc3ViKSwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1syXSA9PSBcXFwic3FzXFxcIlxcblxcdHBhcnRzWzNdICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1zdWJzY3JpcHRpb24tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlN1YnNjcmlwdGlvbi5SZWdpb24gbXVzdCBiZSB0aGUgdG9waWMncyByZWdpb24gKHRoZSByZWdpb24gaW4gYSBsaXRlcmFsIFRvcGljQXJuLCBvciB0aGUgZGVwbG95IHJlZ2lvbiBmb3IgYSB0b3BpYyBpbiB0aGlzIHRlbXBsYXRlKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnNzcmdfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zbnMtc3Vic2NyaXB0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc3NyZ19maXggOj0gXFxcIlNldCBSZWdpb24gdG8gdGhlIHRvcGljJ3Mgb3duIHJlZ2lvbiwgb3IgZHJvcCBpdCBmb3IgYSB0b3BpYyBpbiB0aGlzIHN0YWNrXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXN1YnNjcmlwdGlvbi1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZ2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmVnaW9uICclcycgZGlmZmVycyBmcm9tIHRoZSB0b3BpYydzIHJlZ2lvbiAnJXMnIGluIFRvcGljQXJuOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuXFxcXFxcXCJcXFwiLCBbcmVnLCBwYXJ0c1szXV0pLFxcblxcdF9wZl9zbnNzcmdfZml4LCBfcGZfc25zc3JnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlN1YnNjcmlwdGlvblxcXCIpXFxuXFx0cmVnIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVnaW9uXFxcIilcXG5cXHRpc19zdHJpbmcocmVnKVxcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY0FyblxcXCIpXFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQodCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbM10gIT0gcmVnXFxufVxcblxcbiMgQSB0b3BpYyBjcmVhdGVkIGluIHRoaXMgdGVtcGxhdGUgbGl2ZXMgaW4gdGhlIGRlcGxveSByZWdpb24gKGVuZm9yY2UgbW9kZSBvbmx5OyBzZWUgQUdFTlRTLm1kKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1zdWJzY3JpcHRpb24tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWdpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlJlZ2lvbiAnJXMnIGRpZmZlcnMgZnJvbSB0aGUgZGVwbG95IHJlZ2lvbiAnJXMnIG9mIHRoZSB0b3BpYyBpbiB0aGlzIHRlbXBsYXRlOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuXFxcXFxcXCJcXFwiLCBbcmVnLCByZWdpb25dKSxcXG5cXHRfcGZfc25zc3JnX2ZpeCwgX3BmX3Nuc3NyZ191cmwpIGlmIHtcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpTdWJzY3JpcHRpb25cXFwiKVxcblxcdHJlZyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlZ2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlZylcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNBcm5cXFwiKVxcblxcdHQgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0cmVnICE9IHJlZ2lvblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRvcGljIERpc3BsYXlOYW1lIGlzIGF0IG1vc3QgMTAwIGNoYXJhY3RlcnMsIFNpZ25hdHVyZVZlcnNpb24gaXMgMSBvciAyLCBhbmQgVHJhY2luZ0NvbmZpZyBpcyBQYXNzVGhyb3VnaCBvciBBY3RpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U05TOjpUb3BpY1wiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbnN0YXZfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zbnMtdG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zdGF2X2ZpeCA6PSBcXFwiU2hvcnRlbiBEaXNwbGF5TmFtZSB0byAxMDAgY2hhcmFjdGVyczsgdXNlIFNpZ25hdHVyZVZlcnNpb24gXFxcXFxcXCIxXFxcXFxcXCIvXFxcXFxcXCIyXFxcXFxcXCIgYW5kIFRyYWNpbmdDb25maWcgUGFzc1Rocm91Z2gvQWN0aXZlXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXRvcGljLWF0dHJpYnV0ZS12YWx1ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3BsYXlOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJEaXNwbGF5TmFtZSBpcyAlZCBjaGFyYWN0ZXJzIGxvbmcgKG1heGltdW0gMTAwKTsgQ3JlYXRlVG9waWMgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogRGlzcGxheU5hbWVcXFxcXFxcIlxcXCIsIFtjb3VudCh2KV0pLFxcblxcdF9wZl9zbnN0YXZfZml4LCBfcGZfc25zdGF2X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzcGxheU5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh2KVxcblxcdGNvdW50KHYpID4gMTAwXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXRvcGljLWF0dHJpYnV0ZS12YWx1ZXNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNpZ25hdHVyZVZlcnNpb25cXFwiLFxcblxcdHNwcmludGYoXFxcIlNpZ25hdHVyZVZlcnNpb24gJyV2JyBpcyBub3QgMSBvciAyOyBDcmVhdGVUb3BpYyBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IEF0dHJpYnV0ZXMgUmVhc29uOiBTaWduYXR1cmVWZXJzaW9uOiBJbnZhbGlkIHZhbHVlLiBNdXN0IGJlIDEgb3IgMi5cXFxcXFxcIlxcXCIsIFt2XSksXFxuXFx0X3BmX3Nuc3Rhdl9maXgsIF9wZl9zbnN0YXZfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TaWduYXR1cmVWZXJzaW9uXFxcIilcXG5cXHRfcGZfc25zdGF2X3NjYWxhcih2KVxcblxcdG5vdCBzcHJpbnRmKFxcXCIldlxcXCIsIFt2XSkgaW4ge1xcXCIxXFxcIiwgXFxcIjJcXFwifVxcbn1cXG5cXG5fcGZfc25zdGF2X3NjYWxhcih2KSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfc25zdGF2X3NjYWxhcih2KSBpZiBpc19udW1iZXIodilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1hdHRyaWJ1dGUtdmFsdWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UcmFjaW5nQ29uZmlnXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUcmFjaW5nQ29uZmlnICclcycgaXMgbm90IFBhc3NUaHJvdWdoIG9yIEFjdGl2ZTsgQ3JlYXRlVG9waWMgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgcGFyYW1ldGVyOiBBdHRyaWJ1dGVzIFJlYXNvbjogSW52YWxpZCB0cmFjaW5nIGNvbmZpZyB2YWx1ZTogJXNcXFxcXFxcIlxcXCIsIFt2LCB2XSksXFxuXFx0X3BmX3Nuc3Rhdl9maXgsIF9wZl9zbnN0YXZfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UcmFjaW5nQ29uZmlnXFxcIilcXG5cXHRpc19zdHJpbmcodilcXG5cXHRub3QgdiBpbiB7XFxcIlBhc3NUaHJvdWdoXFxcIiwgXFxcIkFjdGl2ZVxcXCJ9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLXRvcGljLW5hbWUtZm9ybWF0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRvcGljIG5hbWVzIGFsbG93IG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVuIGFuZCB1bmRlcnNjb3JlIChwbHVzIGEgLmZpZm8gc3VmZml4KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsMjU2fSRgLCBuKVxcblxcbl9wZl9zbnNuYW1lX29rKG4pIGlmIHJlZ2V4Lm1hdGNoKGBeW2EtekEtWjAtOV8tXXsxLDI1MX1cXFxcLmZpZm8kYCwgbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1uYW1lLWZvcm1hdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBpcyByZWplY3RlZCB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljIE5hbWVcXFxcXFxcIjogU05TIGFjY2VwdHMgb25seSBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKGEgRklGTyB0b3BpYyBhZGRzIHRoZSAuZmlmbyBzdWZmaXgpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSB0b3BpYyB1c2luZyBbYS16QS1aMC05Xy1dIChhcHBlbmQgLmZpZm8gb25seSBmb3IgRklGTyB0b3BpY3MpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVUb3BpYy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgX3BmX3Nuc25hbWVfb2sobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zbnMtdG9waWMtcG9saWN5LXRvcGljc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUb3BpY1BvbGljeS5Ub3BpY3MgdGFrZXMgdG9waWMgQVJOcyAoUmVmIFRvcGljKSwgbm90IHRvcGljIG5hbWVzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zdHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1zbnMtdG9waWNwb2xpY3kuaHRtbFxcXCJcXG5cXG5fcGZfc25zdHBfZml4IDo9IFxcXCJMaXN0IHRvcGljcyB3aXRoIFJlZiAodGhlIEFSTiksIG5vdCBGbjo6R2V0QXR0IFRvcGljLlRvcGljTmFtZSBvciBhIGJhcmUgbmFtZVxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy10b3BpYy1wb2xpY3ktdG9waWNzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRvcGljcy4lZFxcXCIsIFtpXSksXFxuXFx0XFxcIlRvcGljcyBlbnRyeSBpcyB0aGUgdG9waWMgbmFtZSAoRm46OkdldEF0dCBUb3BpYy5Ub3BpY05hbWUpIGJ1dCBUb3BpY1BvbGljeSBleHBlY3RzIHRoZSB0b3BpYyBBUk47IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHBhcmFtZXRlcjogVG9waWNBcm4gUmVhc29uOiBBbiBBUk4gbXVzdCBoYXZlIGF0IGxlYXN0IDYgZWxlbWVudHMsIG5vdCAxXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zbnN0cF9maXgsIF9wZl9zbnN0cF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1BvbGljeVxcXCIpXFxuXFx0dHMgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlRvcGljc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkodHMpXFxuXFx0c29tZSBpLCB0IGluIHRzXFxuXFx0aXNfb2JqZWN0KHQpXFxuXFx0b2JqZWN0LmdldCh0LCBcXFwiX19raW5kXFxcIiwgbnVsbCkgPT0gXFxcImdldGF0dDpUb3BpY05hbWVcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLXRvcGljLXBvbGljeS10b3BpY3NcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVG9waWNzLiVkXFxcIiwgW2ldKSxcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY3MgZW50cnkgJyVzJyBpcyBub3QgYW4gQVJOOyB0aGUgcmVzb3VyY2UgaGFuZGxlciBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBwYXJhbWV0ZXI6IFRvcGljQXJuIFJlYXNvbjogQW4gQVJOIG11c3QgaGF2ZSBhdCBsZWFzdCA2IGVsZW1lbnRzXFxcXFxcXCJcXFwiLCBbdF0pLFxcblxcdF9wZl9zbnN0cF9maXgsIF9wZl9zbnN0cF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1BvbGljeVxcXCIpXFxuXFx0dHMgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlRvcGljc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkodHMpXFxuXFx0c29tZSBpLCB0IGluIHRzXFxuXFx0aXNfc3RyaW5nKHQpXFxuXFx0bm90IHN0YXJ0c3dpdGgodCwgXFxcImFybjpcXFwiKVxcblxcdG5vdCBjb250YWlucyh0LCBcXFwiJHtcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1kbHEtc2FtZS10eXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3FzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGVhZC1sZXR0ZXIgcXVldWUgbmFtZWQgYnkgYSBsaXRlcmFsIEFSTiBtdXN0IGJlIHRoZSBzYW1lIHR5cGUgYXMgaXRzIHNvdXJjZSAoRklGTyBmb3IgRklGTywgc3RhbmRhcmQgZm9yIHN0YW5kYXJkKTsgRm46OkdldEF0dCB3aXJpbmcgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzUwMlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc2RscV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzZGxxX2ZpeCA6PSBcXFwiUG9pbnQgYSBGSUZPIHF1ZXVlIGF0IGEgRklGTyBkZWFkLWxldHRlciBxdWV1ZSAoKi5maWZvKSBhbmQgYSBzdGFuZGFyZCBxdWV1ZSBhdCBhIHN0YW5kYXJkIG9uZVxcXCJcXG5cXG5fcGZfc3FzZGxxX2ZpZm8ocSkgaWYgcmVzb2x2ZShxLCBcXFwiUHJvcGVydGllcy5GaWZvUXVldWVcXFwiKSBpbiB7dHJ1ZSwgXFxcInRydWVcXFwifVxcblxcbiMgU3RhbmRhcmQgcXVldWU6IEZpZm9RdWV1ZSBhYnNlbnQgb3IgbGl0ZXJhbGx5IGZhbHNlIChhbiB1bnJlc29sdmFibGUgdmFsdWUgaXMgbmVpdGhlcikuXFxuX3BmX3Nxc2RscV9zdGQocSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1txXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJGaWZvUXVldWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zcXNkbHFfc3RkKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcblxcbiMgUmVkcml2ZVBvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNkbHFfcG9sKG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cG9sIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlUG9saWN5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzZGxxX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzNTAyIChDRk5fTElOVCkgYWxyZWFkeSBjb21wYXJlcyB0aGUgdHlwZXMgd2hlblxcbiMgZGVhZExldHRlclRhcmdldEFybiBpcyBGbjo6R2V0QXR0IG9mIGEgcXVldWUgaW4gdGhlIHRlbXBsYXRlICh2ZXJpZmllZFxcbiMgYWdhaW5zdCAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDUpLiBPbmx5IGEgbGl0ZXJhbCBBUk4g4oCUIGFuIGltcG9ydGVkIHF1ZXVlIOKAlFxcbiMgZXNjYXBlcyBpdCwgYW5kIHRoZSAuZmlmbyBzdWZmaXggdGVsbHMgdGhlIHR5cGUuXFxuX3BmX3Nxc2RscV9saXRlcmFsKG5hbWUpIDo9IGFybiBpZiB7XFxuXFx0YXJuIDo9IG9iamVjdC5nZXQoX3BmX3Nxc2RscV9wb2wobmFtZSksIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHJlZ2V4Lm1hdGNoKFxcXCJeYXJuOlteOl0rOnNxczpcXFwiLCBhcm4pXFxuXFx0bm90IGNvbnRhaW5zKGFybiwgXFxcIiR7XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZGxxLXNhbWUtdHlwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZVBvbGljeS5kZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJhIEZJRk8gcXVldWUgcG9pbnRzIGF0IHRoZSBzdGFuZGFyZCBkZWFkLWxldHRlciBxdWV1ZSAnJXMnOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVhZC1sZXR0ZXIgcXVldWUgbXVzdCBiZSBzYW1lIHR5cGUgb2YgcXVldWUgYXMgdGhlIHNvdXJjZS5cXFxcXFxcIlxcXCIsIFthcm5dKSxcXG5cXHRfcGZfc3FzZGxxX2ZpeCwgX3BmX3Nxc2RscV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0X3BmX3Nxc2RscV9maWZvKG5hbWUpXFxuXFx0YXJuIDo9IF9wZl9zcXNkbHFfbGl0ZXJhbChuYW1lKVxcblxcdG5vdCBlbmRzd2l0aChhcm4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLWRscS1zYW1lLXR5cGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiYSBzdGFuZGFyZCBxdWV1ZSBwb2ludHMgYXQgdGhlIEZJRk8gZGVhZC1sZXR0ZXIgcXVldWUgJyVzJzsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkRlYWQtbGV0dGVyIHF1ZXVlIG11c3QgYmUgc2FtZSB0eXBlIG9mIHF1ZXVlIGFzIHRoZSBzb3VyY2UuXFxcXFxcXCJcXFwiLCBbYXJuXSksXFxuXFx0X3BmX3Nxc2RscV9maXgsIF9wZl9zcXNkbHFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdF9wZl9zcXNkbHFfc3RkKG5hbWUpXFxuXFx0YXJuIDo9IF9wZl9zcXNkbHFfbGl0ZXJhbChuYW1lKVxcblxcdGVuZHN3aXRoKGFybiwgXFxcIi5maWZvXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtZmlmby1uYW1lLXN1ZmZpeFwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFF1ZXVlTmFtZSBlbmRpbmcgaW4gLmZpZm8gcmVxdWlyZXMgRmlmb1F1ZXVlOiB0cnVlIChhIEZJRk8gcXVldWUgd2l0aG91dCB0aGUgc3VmZml4IGlzIGVuZ2luZSBydWxlIEUyNTA0KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc3NmeF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3Fzc2Z4X2ZpeCA6PSBcXFwiU2V0IEZpZm9RdWV1ZTogdHJ1ZSBvciBkcm9wIHRoZSAuZmlmbyBzdWZmaXhcXFwiXFxuXFxuX3BmX3Nxc3NmeF9maWZvKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIFN0YW5kYXJkIHF1ZXVlOiBGaWZvUXVldWUgYWJzZW50IG9yIGxpdGVyYWxseSBmYWxzZSAoYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGlzIG5laXRoZXIpLlxcbl9wZl9zcXNzZnhfc3RkKHEpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbcV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlmb1F1ZXVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc3Fzc2Z4X3N0ZChxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG5cXG4jIFRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gKEZpZm9RdWV1ZSB0cnVlLCBuYW1lIHdpdGhvdXQgLmZpZm8pIGlzIHRoZSBlbmdpbmUnc1xcbiMgRTI1MDQgLyBFMzUwMTsgdmVyaWZpZWQgYWdhaW5zdCAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtZmlmby1uYW1lLXN1ZmZpeFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUXVldWVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJRdWV1ZU5hbWUgJyVzJyBlbmRzIHdpdGggLmZpZm8gYnV0IHRoZSBxdWV1ZSBpcyBzdGFuZGFyZCAoRmlmb1F1ZXVlIGlzIG5vdCB0cnVlKTsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIkNhbiBvbmx5IGluY2x1ZGUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIG9yIHVuZGVyc2NvcmVzLiAxIHRvIDgwIGluIGxlbmd0aFxcXFxcXFwiXFxcIiwgW25dKSxcXG5cXHRfcGZfc3Fzc2Z4X2ZpeCwgX3BmX3Nxc3NmeF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0ZW5kc3dpdGgobiwgXFxcIi5maWZvXFxcIilcXG5cXHRfcGZfc3Fzc2Z4X3N0ZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1maWZvLW9ubHktYXR0cmlidXRlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLCBEZWR1cGxpY2F0aW9uU2NvcGUgYW5kIEZpZm9UaHJvdWdocHV0TGltaXQgYXJlIEZJRk8tb25seSBxdWV1ZSBhdHRyaWJ1dGVzIChhbmQgdGhlIHR3byBlbnVtcyBhcmUgbWVzc2FnZUdyb3VwfHF1ZXVlIGFuZCBwZXJRdWV1ZXxwZXJNZXNzYWdlR3JvdXBJZClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNmb191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzZm9fZml4IDo9IFxcXCJTZXQgRmlmb1F1ZXVlOiB0cnVlIChhbmQgbmFtZSB0aGUgcXVldWUgKi5maWZvKSBvciBkcm9wIHRoZSBGSUZPLW9ubHkgYXR0cmlidXRlc1xcXCJcXG5cXG5fcGZfc3FzZm9fZmlmbyhxKSBpZiByZXNvbHZlKHEsIFxcXCJQcm9wZXJ0aWVzLkZpZm9RdWV1ZVxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBTdGFuZGFyZCBxdWV1ZTogRmlmb1F1ZXVlIGFic2VudCBvciBsaXRlcmFsbHkgZmFsc2UgKGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBpcyBuZWl0aGVyKS5cXG5fcGZfc3FzZm9fc3RkKHEpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbcV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiRmlmb1F1ZXVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfc3FzZm9fc3RkKHEpIGlmIHJlc29sdmUocSwgXFxcIlByb3BlcnRpZXMuRmlmb1F1ZXVlXFxcIikgaW4ge2ZhbHNlLCBcXFwiZmFsc2VcXFwifVxcblxcbl9wZl9zcXNmb19tc2cgOj0ge1xcblxcdFxcXCJDb250ZW50QmFzZWREZWR1cGxpY2F0aW9uXFxcIjogXFxcIlVua25vd24gQXR0cmlidXRlIENvbnRlbnRCYXNlZERlZHVwbGljYXRpb24uXFxcIixcXG5cXHRcXFwiRGVkdXBsaWNhdGlvblNjb3BlXFxcIjogXFxcIllvdSBjYW4gc3BlY2lmeSB0aGUgRGVkdXBsaWNhdGlvblNjb3BlIG9ubHkgd2hlbiBGaWZvUXVldWUgaXMgc2V0IHRvIHRydWUuXFxcIixcXG5cXHRcXFwiRmlmb1Rocm91Z2hwdXRMaW1pdFxcXCI6IFxcXCJZb3UgY2FuIHNwZWNpZnkgdGhlIEZpZm9UaHJvdWdocHV0TGltaXQgb25seSB3aGVuIEZpZm9RdWV1ZSBpcyBzZXQgdG8gdHJ1ZS5cXFwiLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1maWZvLW9ubHktYXR0cmlidXRlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgaXMgc2V0IG9uIGEgc3RhbmRhcmQgcXVldWUgKEZpZm9RdWV1ZSBpcyBub3QgdHJ1ZSk7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCIlc1xcXFxcXFwiXFxcIiwgW2F0dHIsIF9wZl9zcXNmb19tc2dbYXR0cl1dKSxcXG5cXHRfcGZfc3FzZm9fZml4LCBfcGZfc3FzZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdF9wZl9zcXNmb19zdGQobmFtZSlcXG5cXHRzb21lIGF0dHIsIF8gaW4gX3BmX3Nxc2ZvX21zZ1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIGF0dHIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc2ZvX2VudW0gY29udGFpbnMgW1xcXCJEZWR1cGxpY2F0aW9uU2NvcGVcXFwiLCB7XFxcIm1lc3NhZ2VHcm91cFxcXCIsIFxcXCJxdWV1ZVxcXCJ9XVxcblxcbl9wZl9zcXNmb19lbnVtIGNvbnRhaW5zIFtcXFwiRmlmb1Rocm91Z2hwdXRMaW1pdFxcXCIsIHtcXFwicGVyUXVldWVcXFwiLCBcXFwicGVyTWVzc2FnZUdyb3VwSWRcXFwifV1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1maWZvLW9ubHktYXR0cmlidXRlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJyVzJyBpcyBub3Qgb25lIG9mICV2OyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciAlcy4gUmVhc29uOiBub3QgYSBzdXBwb3J0ZWQgdmFsdWUuXFxcXFxcXCJcXFwiLCBbYXR0ciwgdiwgYWxsb3dlZCwgYXR0cl0pLFxcblxcdF9wZl9zcXNmb19maXgsIF9wZl9zcXNmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0c29tZSBbYXR0ciwgYWxsb3dlZF0gaW4gX3BmX3Nxc2ZvX2VudW1cXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFthdHRyXSkpXFxuXFx0aXNfc3RyaW5nKHYpXFxuXFx0bm90IHYgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1oaWdoLXRocm91Z2hwdXQtcGFpcmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGaWZvVGhyb3VnaHB1dExpbWl0IHBlck1lc3NhZ2VHcm91cElkIHJlcXVpcmVzIERlZHVwbGljYXRpb25TY29wZSBtZXNzYWdlR3JvdXBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNodF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L1NRU0RldmVsb3Blckd1aWRlL2hpZ2gtdGhyb3VnaHB1dC1maWZvLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc2h0X2ZpeCA6PSBcXFwiU2V0IERlZHVwbGljYXRpb25TY29wZTogbWVzc2FnZUdyb3VwIHRvZ2V0aGVyIHdpdGggRmlmb1Rocm91Z2hwdXRMaW1pdDogcGVyTWVzc2FnZUdyb3VwSWQgKGJvdGggYXJlIG5lZWRlZCBmb3IgaGlnaCB0aHJvdWdocHV0KVxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1oaWdoLXRocm91Z2hwdXQtcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmlmb1Rocm91Z2hwdXRMaW1pdFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRmlmb1Rocm91Z2hwdXRMaW1pdCBpcyBwZXJNZXNzYWdlR3JvdXBJZCBidXQgRGVkdXBsaWNhdGlvblNjb3BlIGlzICVzOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCB2YWx1ZSBmb3IgdGhlIHBhcmFtZXRlciBGaWZvVGhyb3VnaHB1dExpbWl0LiBSZWFzb246IFRvIHNldCBGaWZvVGhyb3VnaHB1dExpbWl0IHRvIHBlck1lc3NhZ2VHcm91cElkLCB0aGUgRGVkdXBsaWNhdGlvblNjb3BlIG11c3QgYmUgbWVzc2FnZUdyb3VwLlxcXFxcXFwiXFxcIiwgW3Nob3duXSksXFxuXFx0X3BmX3Nxc2h0X2ZpeCwgX3BmX3Nxc2h0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9UaHJvdWdocHV0TGltaXRcXFwiKSA9PSBcXFwicGVyTWVzc2FnZUdyb3VwSWRcXFwiXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0c2NvcGUgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkRlZHVwbGljYXRpb25TY29wZVxcXCIsIG51bGwpXFxuXFx0X3BmX3Nxc2h0X2JhZChzY29wZSlcXG5cXHRzaG93biA6PSBfcGZfc3FzaHRfc2hvdyhzY29wZSlcXG59XFxuXFxuX3BmX3Nxc2h0X2JhZChzY29wZSkgaWYgc2NvcGUgPT0gbnVsbFxcblxcbl9wZl9zcXNodF9iYWQoc2NvcGUpIGlmIHtcXG5cXHRpc19zdHJpbmcoc2NvcGUpXFxuXFx0c2NvcGUgIT0gXFxcIm1lc3NhZ2VHcm91cFxcXCJcXG59XFxuXFxuX3BmX3Nxc2h0X3Nob3coc2NvcGUpIDo9IFxcXCJhYnNlbnRcXFwiIGlmIHNjb3BlID09IG51bGxcXG5cXG5fcGZfc3FzaHRfc2hvdyhzY29wZSkgOj0gc3ByaW50ZihcXFwiJyVzJ1xcXCIsIFtzY29wZV0pIGlmIGlzX3N0cmluZyhzY29wZSlcXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1xdWV1ZS1uYW1lLWZvcm1hdFwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJRdWV1ZSBuYW1lcyBhbGxvdyBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbiBhbmQgdW5kZXJzY29yZSAobWF4IDgwLCBwbHVzIGEgLmZpZm8gc3VmZml4KVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsODB9JGAsIG4pXFxuXFxuX3BmX3Nxc25hbWVfb2sobikgaWYgcmVnZXgubWF0Y2goYF5bYS16QS1aMC05Xy1dezEsNzV9XFxcXC5maWZvJGAsIG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtbmFtZS1mb3JtYXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlF1ZXVlTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUXVldWVOYW1lICclcycgaXMgcmVqZWN0ZWQ6IFNRUyBhY2NlcHRzIDEtODAgY2hhcmFjdGVycyBvZiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW4gYW5kIHVuZGVyc2NvcmUgKGEgRklGTyBxdWV1ZSBhZGRzIHRoZSAuZmlmbyBzdWZmaXgpXFxcIiwgW25dKSxcXG5cXHRcXFwiUmVuYW1lIHRoZSBxdWV1ZSB1c2luZyBbYS16QS1aMC05Xy1dIHdpdGhpbiA4MCBjaGFyYWN0ZXJzIChhcHBlbmQgLmZpZm8gb25seSBmb3IgRklGTyBxdWV1ZXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU1NpbXBsZVF1ZXVlU2VydmljZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVRdWV1ZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUXVldWVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgX3BmX3Nxc25hbWVfb2sobilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1wiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJRdWV1ZVBvbGljeS5RdWV1ZXMgdGFrZXMgcXVldWUgVVJMcyAoUmVmIFF1ZXVlKSwgbmV2ZXIgQVJOcyAoRm46OkdldEF0dCBRdWV1ZS5Bcm4pLCBhbmQgbXVzdCBub3QgYmUgZW1wdHlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNxcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXNxcy1xdWV1ZXBvbGljeS5odG1sXFxcIlxcblxcbl9wZl9zcXNxcF9maXggOj0gXFxcIkxpc3QgdGhlIHF1ZXVlcyB3aXRoIFJlZiAodGhlIHF1ZXVlIFVSTCksIG5vdCBGbjo6R2V0QXR0IFF1ZXVlLkFyblxcXCJcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1xdWV1ZS1wb2xpY3ktcXVldWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5RdWV1ZXNcXFwiLFxcblxcdFxcXCJRdWV1ZXMgaXMgZW1wdHk7IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJRdWV1ZXMgYXJlIHJlcXVpcmVkXFxcXFxcXCJcXFwiLFxcblxcdF9wZl9zcXNxcF9maXgsIF9wZl9zcXNxcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVBvbGljeVxcXCIpXFxuXFx0cXMgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlF1ZXVlc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkocXMpXFxuXFx0Y291bnQocXMpID09IDBcXG59XFxuXFxuIyBGbjo6R2V0QXR0IGFwcGVhcnMgaW4gdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCBhcyBhIG1hcmtlciBvYmplY3Qgd2hvc2VcXG4jIF9fa2luZCBuYW1lcyB0aGUgYXR0cmlidXRlOyBSZWYgKHRoZSBVUkwpIGlzIFxcXCJyZXNvdXJjZVxcXCIuIExpdGVyYWwgQVJOcyBhcmVcXG4jIHN0cmluZ3MuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcXVldWUtcG9saWN5LXF1ZXVlc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5RdWV1ZXMuJWRcXFwiLCBbaV0pLFxcblxcdFxcXCJRdWV1ZXMgZW50cnkgaXMgdGhlIHF1ZXVlIEFSTiAoRm46OkdldEF0dCBRdWV1ZS5Bcm4pIGJ1dCBRdWV1ZVBvbGljeSBleHBlY3RzIHRoZSBxdWV1ZSBVUkw7IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgYWRkcmVzcyBhcm46YXdzOnNxczouLi4gaXMgbm90IHZhbGlkIGZvciB0aGlzIGVuZHBvaW50LlxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc3FzcXBfZml4LCBfcGZfc3FzcXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcXFwiKVxcblxcdHFzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJRdWV1ZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHFzKVxcblxcdHNvbWUgaSwgcSBpbiBxc1xcblxcdGlzX29iamVjdChxKVxcblxcdG9iamVjdC5nZXQocSwgXFxcIl9fa2luZFxcXCIsIG51bGwpID09IFxcXCJnZXRhdHQ6QXJuXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1xdWV1ZS1wb2xpY3ktcXVldWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlF1ZXVlcy4lZFxcXCIsIFtpXSksXFxuXFx0c3ByaW50ZihcXFwiUXVldWVzIGVudHJ5ICclcycgaXMgYW4gQVJOIGJ1dCBRdWV1ZVBvbGljeSBleHBlY3RzIHRoZSBxdWV1ZSBVUkwgKGh0dHBzOi8vc3FzLjxyZWdpb24+LmFtYXpvbmF3cy5jb20vPGFjY291bnQ+LzxuYW1lPik7IHRoZSByZXNvdXJjZSBoYW5kbGVyIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgYWRkcmVzcyAuLi4gaXMgbm90IHZhbGlkIGZvciB0aGlzIGVuZHBvaW50LlxcXFxcXFwiXFxcIiwgW3FdKSxcXG5cXHRfcGZfc3FzcXBfZml4LCBfcGZfc3FzcXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVQb2xpY3lcXFwiKVxcblxcdHFzIDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJRdWV1ZXNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHFzKVxcblxcdHNvbWUgaSwgcSBpbiBxc1xcblxcdGlzX3N0cmluZyhxKVxcblxcdHN0YXJ0c3dpdGgocSwgXFxcImFybjpcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWRyaXZlQWxsb3dQb2xpY3k6IHJlZHJpdmVQZXJtaXNzaW9uIGlzIHJlcXVpcmVkIChhbGxvd0FsbHxkZW55QWxsfGJ5UXVldWUpOyBieVF1ZXVlIG5lZWRzIDEuLjEwIHNvdXJjZVF1ZXVlQXJucyBhbmQgdGhlIG90aGVyIHR3byBmb3JiaWQgdGhlbVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTUVM6OlF1ZXVlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nxc3JhcF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcmFwX2ZpeCA6PSBcXFwiVXNlIGJ5UXVldWUgd2l0aCAxLTEwIHNvdXJjZVF1ZXVlQXJucywgb3IgYWxsb3dBbGwgLyBkZW55QWxsIHdpdGhvdXQgc291cmNlUXVldWVBcm5zXFxcIlxcblxcbiMgUmVkcml2ZUFsbG93UG9saWN5IGFycml2ZXMgYXMgYSBKU09OIG9iamVjdCBvciBhcyBhIEpTT04gc3RyaW5nIChib3RoIGFyZSB2YWxpZCBDbG91ZEZvcm1hdGlvbikuXFxuX3BmX3Nxc3JhcF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVBbGxvd1BvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JhcF9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVBbGxvd1BvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNyYXBfbXNnIDo9IFxcXCJBbWF6b24gU1FTIGNhbid0IGNyZWF0ZSB0aGUgcmVkcml2ZSBhbGxvdyBwb2xpY3lcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hbGxvdy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVBbGxvd1BvbGljeS5yZWRyaXZlUGVybWlzc2lvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUmVkcml2ZUFsbG93UG9saWN5IGhhcyBubyByZWRyaXZlUGVybWlzc2lvbjsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLCBhcyBpdCdzIGluIGFuIHVuc3VwcG9ydGVkIGZvcm1hdC5cXFxcXFxcIlxcXCIsIFtfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JhcF9wb2wobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFsbG93LXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZUFsbG93UG9saWN5LnJlZHJpdmVQZXJtaXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJyZWRyaXZlUGVybWlzc2lvbiAnJXMnIGlzIG5vdCBhbGxvd0FsbCwgZGVueUFsbCBvciBieVF1ZXVlOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMsIGFzIGl0J3MgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0LlxcXFxcXFwiXFxcIiwgW3Blcm0sIF9wZl9zcXNyYXBfbXNnXSksXFxuXFx0X3BmX3Nxc3JhcF9maXgsIF9wZl9zcXNyYXBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHBlcm0gOj0gb2JqZWN0LmdldChfcGZfc3FzcmFwX3BvbChuYW1lKSwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcocGVybSlcXG5cXHRub3QgcGVybSBpbiB7XFxcImFsbG93QWxsXFxcIiwgXFxcImRlbnlBbGxcXFwiLCBcXFwiYnlRdWV1ZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYWxsb3ctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVBcm5zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJyZWRyaXZlUGVybWlzc2lvbiBieVF1ZXVlIGhhcyAlZCBzb3VyY2VRdWV1ZUFybnMgKDEgdG8gMTAgcmVxdWlyZWQpOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiJXMuIFdoZW4geW91IHNwZWNpZnkgdGhlIGJ5UXVldWUgcGVybWlzc2lvbiB0eXBlLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgYmV0d2VlbiAxIGFuZCAxMCBzb3VyY2UgcXVldWUgQVJOcy5cXFxcXFxcIlxcXCIsIFtuLCBfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JhcF9wb2wobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcInJlZHJpdmVQZXJtaXNzaW9uXFxcIiwgbnVsbCkgPT0gXFxcImJ5UXVldWVcXFwiXFxuXFx0biA6PSBfcGZfc3FzcmFwX2NvdW50KG9iamVjdC5nZXQocG9sLCBcXFwic291cmNlUXVldWVBcm5zXFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nxc3JhcF9vdXQobilcXG59XFxuXFxuX3BmX3Nxc3JhcF9jb3VudCh2KSA6PSAwIGlmIHYgPT0gbnVsbFxcblxcbl9wZl9zcXNyYXBfY291bnQodikgOj0gY291bnQodikgaWYgaXNfYXJyYXkodilcXG5cXG5fcGZfc3FzcmFwX291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9zcXNyYXBfb3V0KG4pIGlmIG4gPiAxMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtYWxsb3ctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVBcm5zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJyZWRyaXZlUGVybWlzc2lvbiAlcyBkb2VzIG5vdCB0YWtlIHNvdXJjZVF1ZXVlQXJuczsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIiVzLiBZb3UgY2FuIHNwZWNpZnkgc291cmNlIHF1ZXVlIEFSTnMgb25seSB3aGVuIHRoZSBwZXJtaXNzaW9uIHR5cGUgaXMgYnlRdWV1ZS5cXFxcXFxcIlxcXCIsIFtwZXJtLCBfcGZfc3FzcmFwX21zZ10pLFxcblxcdF9wZl9zcXNyYXBfZml4LCBfcGZfc3FzcmFwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JhcF9wb2wobmFtZSlcXG5cXHRwZXJtIDo9IG9iamVjdC5nZXQocG9sLCBcXFwicmVkcml2ZVBlcm1pc3Npb25cXFwiLCBudWxsKVxcblxcdHBlcm0gaW4ge1xcXCJhbGxvd0FsbFxcXCIsIFxcXCJkZW55QWxsXFxcIn1cXG5cXHRvYmplY3QuZ2V0KHBvbCwgXFxcInNvdXJjZVF1ZXVlQXJuc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcmVkcml2ZS1hcm4tcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3FzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSBkZWFkLWxldHRlciB0YXJnZXQgYW5kIGV2ZXJ5IFJlZHJpdmVBbGxvd1BvbGljeSBzb3VyY2UgcXVldWUgbXVzdCBzaXQgaW4gdGhlIGRlcGxveSByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNycl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L1NRU0RldmVsb3Blckd1aWRlL3Nxcy1kZWFkLWxldHRlci1xdWV1ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcnJfZml4IDo9IFxcXCJSZWZlcmVuY2UgcXVldWVzIGluIHRoZSBzYW1lIHJlZ2lvbiAoRm46OkdldEF0dCBRdWV1ZS5Bcm4gb2YgcXVldWVzIGluIHRoaXMgc3RhY2spXFxcIlxcblxcbiMgUmVkcml2ZVBvbGljeSBhcnJpdmVzIGFzIGEgSlNPTiBvYmplY3Qgb3IgYXMgYSBKU09OIHN0cmluZyAoYm90aCBhcmUgdmFsaWQgQ2xvdWRGb3JtYXRpb24pLlxcbl9wZl9zcXNycl9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbl9wZl9zcXNycl9wb2wobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcnJfYWxsb3cobmFtZSkgOj0gcG9sIGlmIHtcXG5cXHRwb2wgOj0gb2JqZWN0LmdldChpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllcywgXFxcIlJlZHJpdmVBbGxvd1BvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JyX2FsbG93KG5hbWUpIDo9IHBvbCBpZiB7XFxuXFx0cmF3IDo9IG9iamVjdC5nZXQoaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXMsIFxcXCJSZWRyaXZlQWxsb3dQb2xpY3lcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhyYXcpXFxuXFx0cG9sIDo9IGpzb24udW5tYXJzaGFsKHJhdylcXG5cXHRpc19vYmplY3QocG9sKVxcbn1cXG5cXG5fcGZfc3FzcnJfcmVnaW9uKGFybikgOj0gcGFydHNbM10gaWYge1xcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1syXSA9PSBcXFwic3FzXFxcIlxcbn1cXG5cXG4jIFJlZ2lvbiBjb21wYXJpc29uIG5lZWRzIHRoZSBkZXBsb3kgcmVnaW9uLCB3aGljaCBvbmx5IHRoaXMgcGFjayBzZWVzXFxuIyAoZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBpbiBlbmZvcmNlIG1vZGU7IHRoZSBydWxlXFxuIyBza2lwcyB3aXRob3V0IGl0KS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLWFybi1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuZGVhZExldHRlclRhcmdldEFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiZGVhZExldHRlclRhcmdldEFybiBpcyBpbiAnJXMnIGJ1dCB0aGUgcXVldWUgZGVwbG95cyB0byAnJXMnOyBDcmVhdGVRdWV1ZSBmYWlscyB3aXRoIFxcXFxcXFwiRGVhZC1sZXR0ZXIgdGFyZ2V0IG11c3QgYmUgaW4gc2FtZSByZWdpb24gYXMgdGhlIHNvdXJjZS5cXFxcXFxcIlxcXCIsIFtyLCByZWdpb25dKSxcXG5cXHRfcGZfc3FzcnJfZml4LCBfcGZfc3FzcnJfdXJsKSBpZiB7XFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KF9wZl9zcXNycl9wb2wobmFtZSksIFxcXCJkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHIgOj0gX3BmX3Nxc3JyX3JlZ2lvbihhcm4pXFxuXFx0ciAhPSByZWdpb25cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtcmVkcml2ZS1hcm4tcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVBbGxvd1BvbGljeS5zb3VyY2VRdWV1ZUFybnMuJWRcXFwiLCBbaV0pLFxcblxcdHNwcmludGYoXFxcInNvdXJjZSBxdWV1ZSAnJXMnIGlzIGluICclcycgYnV0IHRoZSBxdWV1ZSBkZXBsb3lzIHRvICclcyc7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJBbGwgc291cmNlIHF1ZXVlIEFSTnMgbXVzdCBiZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlIGN1cnJlbnQgU1FTIHF1ZXVlLlxcXFxcXFwiXFxcIiwgW2FybiwgciwgcmVnaW9uXSksXFxuXFx0X3BmX3Nxc3JyX2ZpeCwgX3BmX3Nxc3JyX3VybCkgaWYge1xcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRhcm5zIDo9IG9iamVjdC5nZXQoX3BmX3Nxc3JyX2FsbG93KG5hbWUpLCBcXFwic291cmNlUXVldWVBcm5zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShhcm5zKVxcblxcdHNvbWUgaSwgYXJuIGluIGFybnNcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHIgOj0gX3BmX3Nxc3JyX3JlZ2lvbihhcm4pXFxuXFx0ciAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtcmVkcml2ZS1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJzcXNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkcml2ZVBvbGljeSBuZWVkcyBkZWFkTGV0dGVyVGFyZ2V0QXJuIChhbiBTUVMgcXVldWUgQVJOKSBhbmQgbWF4UmVjZWl2ZUNvdW50IGluIDEuLjEwMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNycF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlUXVldWUuaHRtbFxcXCJcXG5cXG5fcGZfc3FzcnBfZml4IDo9IFxcXCJTZXQgYm90aCBkZWFkTGV0dGVyVGFyZ2V0QXJuIChGbjo6R2V0QXR0IFF1ZXVlLkFybikgYW5kIG1heFJlY2VpdmVDb3VudCBiZXR3ZWVuIDEgYW5kIDEwMDBcXFwiXFxuXFxuIyBSZWRyaXZlUG9saWN5IGFycml2ZXMgYXMgYSBKU09OIG9iamVjdCBvciBhcyBhIEpTT04gc3RyaW5nIChib3RoIGFyZSB2YWxpZCBDbG91ZEZvcm1hdGlvbikuXFxuX3BmX3Nxc3JwX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHBvbCA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHBvbClcXG59XFxuXFxuX3BmX3Nxc3JwX3BvbChuYW1lKSA6PSBwb2wgaWYge1xcblxcdHJhdyA6PSBvYmplY3QuZ2V0KGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzLCBcXFwiUmVkcml2ZVBvbGljeVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHJhdylcXG5cXHRwb2wgOj0ganNvbi51bm1hcnNoYWwocmF3KVxcblxcdGlzX29iamVjdChwb2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlZHJpdmVQb2xpY3kuJXNcXFwiLCBba2V5XSksXFxuXFx0c3ByaW50ZihcXFwiUmVkcml2ZVBvbGljeSBoYXMgbm8gJXM7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJSZWRyaXZlIHBvbGljeSBkb2VzIG5vdCBjb250YWluIG1hbmRhdG9yeSBhdHRyaWJ1dGU6ICVzLlxcXFxcXFwiXFxcIiwgW2tleSwga2V5XSksXFxuXFx0X3BmX3Nxc3JwX2ZpeCwgX3BmX3Nxc3JwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JwX3BvbChuYW1lKVxcblxcdHNvbWUga2V5IGluIFtcXFwiZGVhZExldHRlclRhcmdldEFyblxcXCIsIFxcXCJtYXhSZWNlaXZlQ291bnRcXFwiXVxcblxcdG9iamVjdC5nZXQocG9sLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Nxc3JwX251bSh2KSA6PSB2IGlmIGlzX251bWJlcih2KVxcblxcbl9wZl9zcXNycF9udW0odikgOj0gdG9fbnVtYmVyKHYpIGlmIHtcXG5cXHRpc19zdHJpbmcodilcXG5cXHRyZWdleC5tYXRjaChcXFwiXlswLTldKyRcXFwiLCB2KVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNxcy1yZWRyaXZlLXBvbGljeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVkcml2ZVBvbGljeS5tYXhSZWNlaXZlQ291bnRcXFwiLFxcblxcdHNwcmludGYoXFxcIm1heFJlY2VpdmVDb3VudCAldiBpcyBvdXRzaWRlIDEuLjEwMDA7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIHZhbHVlIGZvciBtYXhSZWNlaXZlQ291bnQ6ICV2LCB2YWxpZCB2YWx1ZXMgYXJlIGZyb20gMSB0byAxMDAwIGJvdGggaW5jbHVzaXZlLlxcXFxcXFwiXFxcIiwgW24sIG5dKSxcXG5cXHRfcGZfc3FzcnBfZml4LCBfcGZfc3FzcnBfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNRUzo6UXVldWVcXFwiKVxcblxcdHBvbCA6PSBfcGZfc3FzcnBfcG9sKG5hbWUpXFxuXFx0biA6PSBfcGZfc3FzcnBfbnVtKG9iamVjdC5nZXQocG9sLCBcXFwibWF4UmVjZWl2ZUNvdW50XFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nxc3JwX291dChuKVxcbn1cXG5cXG5fcGZfc3FzcnBfb3V0KG4pIGlmIG4gPCAxXFxuXFxuX3BmX3Nxc3JwX291dChuKSBpZiBuID4gMTAwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc3FzLXJlZHJpdmUtcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZWRyaXZlUG9saWN5LmRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm4gJyVzJyBpcyBub3QgYW4gU1FTIHF1ZXVlIEFSTjsgQ3JlYXRlUXVldWUgZmFpbHMgd2l0aCBcXFxcXFxcIk9ubHkgU1FTIHF1ZXVlcyBhcmUgdmFsaWQgcmVzb3VyY2VzIGZvciBkZWFkTGV0dGVyVGFyZ2V0QXJuXFxcXFxcXCJcXFwiLCBbYXJuXSksXFxuXFx0X3BmX3Nxc3JwX2ZpeCwgX3BmX3Nxc3JwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTUVM6OlF1ZXVlXFxcIilcXG5cXHRwb2wgOj0gX3BmX3Nxc3JwX3BvbChuYW1lKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KHBvbCwgXFxcImRlYWRMZXR0ZXJUYXJnZXRBcm5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0bm90IGNvbnRhaW5zKGFybiwgXFxcIiR7XFxcIilcXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5hcm46W146XSs6c3FzOlxcXCIsIGFybilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zcXMtc3NlLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNxc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTcXNNYW5hZ2VkU3NlRW5hYmxlZDogdHJ1ZSBhbmQgS21zTWFzdGVyS2V5SWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAob25lIFNTRSB0eXBlIHBlciBxdWV1ZSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U1FTOjpRdWV1ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zcXNzc2VfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVF1ZXVlLmh0bWxcXFwiXFxuXFxuX3BmX3Nxc3NzZV9maXggOj0gXFxcIktlZXAgZWl0aGVyIFNxc01hbmFnZWRTc2VFbmFibGVkOiB0cnVlIChTU0UtU1FTKSBvciBLbXNNYXN0ZXJLZXlJZCAoU1NFLUtNUyk7IFNxc01hbmFnZWRTc2VFbmFibGVkOiBmYWxzZSB3aXRoIGEga2V5IGlzIGZpbmVcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zcXMtc3NlLWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS21zTWFzdGVyS2V5SWRcXFwiLFxcblxcdFxcXCJTcXNNYW5hZ2VkU3NlRW5hYmxlZCBpcyB0cnVlIGFuZCBLbXNNYXN0ZXJLZXlJZCBpcyBzZXQ7IENyZWF0ZVF1ZXVlIGZhaWxzIHdpdGggXFxcXFxcXCJZb3UgY2FuIHVzZSBvbmUgdHlwZSBvZiBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIChTU0UpIGF0IG9uZSB0aW1lLiBZb3UgY2FuIGVpdGhlciBlbmFibGUgS01TIFNTRSBvciBTUVMgU1NFLlxcXFxcXFwiXFxcIixcXG5cXHRfcGZfc3Fzc3NlX2ZpeCwgX3BmX3Nxc3NzZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U1FTOjpRdWV1ZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TcXNNYW5hZ2VkU3NlRW5hYmxlZFxcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIkttc01hc3RlcktleUlkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInN0ZXBmdW5jdGlvbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQVNMIE5leHQvRGVmYXVsdC9DaG9pY2VzIG11c3QgcmVmZXJlbmNlIGEgZGVmaW5lZCBzdGF0ZSAodG9wLWxldmVsIHN0YXRlczsgYSBkYW5nbGluZyBTdGFydEF0IGlzIGNvdmVyZWQgYnkgZW5naW5lIHJ1bGUgRTM2MDEpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zZm5fZml4IDo9IFxcXCJQb2ludCBOZXh0L0RlZmF1bHQvQ2hvaWNlcyBhdCBhbiBleGlzdGluZyBzdGF0ZSBuYW1lXFxcIlxcblxcbl9wZl9zZm5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2FtYXpvbi1zdGF0ZXMtbGFuZ3VhZ2Utc3RhdGVzLmh0bWxcXFwiXFxuXFxuX3BmX3Nmbl9hc2wobmFtZSkgOj0gYXNsIGlmIHtcXG5cXHRkZWYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIilcXG5cXHRpc19zdHJpbmcoZGVmKVxcblxcdGFzbCA6PSBqc29uLnVubWFyc2hhbChkZWYpXFxuXFx0aXNfb2JqZWN0KGFzbClcXG59XFxuXFxuX3BmX3Nmbl9kZWZpbmVkKGFzbCkgOj0ge3NuIHwgc29tZSBzbiwgXyBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KX1cXG5cXG4jIE5PVEU6IGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBkZWxpYmVyYXRlbHkgTk9UIGNoZWNrZWQgaGVyZSDigJQgdGhlIGVuZ2luZSdzXFxuIyBidWlsdC1pbiBydWxlIEUzNjAxIChFUlJPUi9DRk5fTElOVCkgYWxyZWFkeSBjb3ZlcnMgaXQuIFZlcmlmaWVkIGFnYWluc3RcXG4jIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUgMS43LjAtYmV0YSBvbiAyMDI2LTA5LTAxOiBFMzYwMSBmaXJlcyBmb3JcXG4jIFN0YXJ0QXQgb25seSBhbmQgZG9lcyBub3QgY2hlY2sgTmV4dC9EZWZhdWx0L0Nob2ljZXMsIHdoaWNoIGlzIHdoYXQgdGhpc1xcbiMgcnVsZSBhZGRzLlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIHJlZmVyZW5jZXMgc3RhdGUgJyVzJyB2aWEgJXMsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXQsIGtleV0pLFxcblxcdF9wZl9zZm5fZml4LCBfcGZfc2ZuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdGFzbCA6PSBfcGZfc2ZuX2FzbChuYW1lKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHN0KVxcblxcdHNvbWUga2V5IGluIHtcXFwiTmV4dFxcXCIsIFxcXCJEZWZhdWx0XFxcIn1cXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChzdCwga2V5LCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxuXFx0bm90IHRhcmdldCBpbiBfcGZfc2ZuX2RlZmluZWQoYXNsKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyBoYXMgYSBDaG9pY2UgcnVsZSByZWZlcmVuY2luZyBzdGF0ZSAnJXMnLCBidXQgbm8gc3RhdGUgd2l0aCB0aGF0IG5hbWUgaXMgZGVmaW5lZFxcXCIsIFtzbmFtZSwgdGFyZ2V0XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0Y2hvaWNlcyA6PSBvYmplY3QuZ2V0KHN0LCBcXFwiQ2hvaWNlc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KGNob2ljZXMpXFxuXFx0c29tZSBjIGluIGNob2ljZXNcXG5cXHRpc19vYmplY3QoYylcXG5cXHR0YXJnZXQgOj0gb2JqZWN0LmdldChjLCBcXFwiTmV4dFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtdGFncy1hd3MtcHJlZml4XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwidGFnc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWcga2V5cyBtYXkgbm90IHVzZSB0aGUgcmVzZXJ2ZWQgYXdzOiBwcmVmaXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIipcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRhZ3Mgc3Vydml2ZSBpbnRvIHRoZSB0ZW1wbGF0ZSBmcm9tIGV2ZXJ5IHNjb3BlIHRoYXQgY2FsbGVkIFRhZ3Mub2YoKSwgYW5kIHRoZVxcbiMgbWVyZ2UgaGFwcGVucyBpbiBjZm5Qcm9wZXJ0aWVzIGF0IHJlbmRlciB0aW1lIC0gYWZ0ZXIgdmFsaWRhdGVUcmVlIC0gc28gbm8gTDFcXG4jIG9yIEwyIHZhbGlkYXRpb24gY2FuIHNlZSB0aGUgZmluYWwga2V5IHNldC4gQXBwbGllcyB0byBldmVyeSByZXNvdXJjZSB0eXBlLlxcbl9wZl90YWdhd3NfYmFkIGNvbnRhaW5zIFtuYW1lLCBpZHgsIGtleV0gaWYge1xcblxcdHNvbWUgbmFtZSBpbiBvYmplY3Qua2V5cyhpbnB1dC5yZXNvdXJjZXMpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYWdzXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRrZXkgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiS2V5XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa2V5KVxcblxcdHN0YXJ0c3dpdGgobG93ZXIoa2V5KSwgXFxcImF3czpcXFwiKVxcblxcdGlkeCA6PSB0LmluZGV4XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtdGFncy1hd3MtcHJlZml4XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlRhZ3MuJWQuS2V5XFxcIiwgW2lkeF0pLFxcblxcdHNwcmludGYoXFxcIlRhZyBrZXkgJyVzJyB1c2VzIHRoZSByZXNlcnZlZCBhd3M6IHByZWZpeDsgQVdTIHJlamVjdHMgdGhlIGNyZWF0ZSBjYWxsIHdpdGggXFxcXFxcXCJhd3M6IHByZWZpeGVkIHRhZyBrZXkgbmFtZXMgYXJlIG5vdCBhbGxvd2VkIGZvciBleHRlcm5hbCB1c2UuXFxcXFxcXCJcXFwiLCBba2V5XSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgdGFnIGtleSBzbyBpdCBkb2VzIG5vdCBzdGFydCB3aXRoIGF3czpcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdGFnLWVkaXRvci9sYXRlc3QvdXNlcmd1aWRlL3RhZ2dpbmcuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIFtuYW1lLCBpZHgsIGtleV0gaW4gX3BmX3RhZ2F3c19iYWRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi10YWdzLWNvdW50LW1heFwiLFxuICAgIFwic2VydmljZVwiOiBcInRhZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZXNvdXJjZSBtYXkgY2FycnkgYXQgbW9zdCA1MCB0YWdzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCIqXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgQVdTLXdpZGUgbGltaXQgaXMgNTAgdXNlciB0YWdzIHBlciByZXNvdXJjZS4gQ291bnRlZCBvbiB0aGUgcmVuZGVyZWRcXG4jIHRlbXBsYXRlLCB3aGljaCBpcyB0aGUgb25seSBwbGFjZSB0aGUgbWVyZ2VkIFRhZ3Mub2YoKSByZXN1bHQgZXhpc3RzLlxcbl9wZl90YWdjb3VudF9iYWQgY29udGFpbnMgW25hbWUsIG5dIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gb2JqZWN0LmtleXMoaW5wdXQucmVzb3VyY2VzKVxcblxcdHRhZ3MgOj0gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhZ3NcXFwiKVxcblxcdG4gOj0gY291bnQodGFncylcXG5cXHRuID4gNTBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi10YWdzLWNvdW50LW1heFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFnc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiJWQgdGFncyBhcmUgYXR0YWNoZWQgdG8gdGhpcyByZXNvdXJjZTsgQVdTIGFsbG93cyBhdCBtb3N0IDUwIHBlciByZXNvdXJjZSBhbmQgcmVqZWN0cyB0aGUgY3JlYXRlIGNhbGwgKFxcXFxcXFwiTW9yZSB0aGFuIDUwIHRhZ3Mgc3BlY2lmaWVkLlxcXFxcXFwiKVxcXCIsIFtuXSksXFxuXFx0XFxcIlJlZHVjZSB0aGUgdGFnIHNldCB0byA1MCBvciBmZXdlciAtIHJlbWVtYmVyIHRoYXQgVGFncy5vZigpIGFkZHMgdGFncyBmcm9tIGV2ZXJ5IGVuY2xvc2luZyBzY29wZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS90YWctZWRpdG9yL2xhdGVzdC91c2VyZ3VpZGUvdGFnZ2luZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgW25hbWUsIG5dIGluIF9wZl90YWdjb3VudF9iYWRcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==
|