cdk-preflight 0.0.11 → 0.0.12

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 CHANGED
@@ -9598,6 +9598,6 @@
9598
9598
  "symbolId": "src/index:PreflightOptions"
9599
9599
  }
9600
9600
  },
9601
- "version": "0.0.11",
9602
- "fingerprint": "xy13VWrZZL7Y5e/fB9Pde3RmIs2GWukBgSfg7IJdd98="
9601
+ "version": "0.0.12",
9602
+ "fingerprint": "lAsrEG57Tjivm3zQ6NVjBTitVbr7jpC4vs845lejQAU="
9603
9603
  }
package/docs/rules.md CHANGED
@@ -41,6 +41,9 @@
41
41
  | `pf-elbv2-lb-idle-timeout-range` | AWS::ElasticLoadBalancingV2::LoadBalancer | ALB idle_timeout.timeout_seconds must be between 1 and 4000 | none |
42
42
  | `pf-elbv2-tg-deregistration-delay-range` | AWS::ElasticLoadBalancingV2::TargetGroup | Target group deregistration_delay.timeout_seconds must be between 0 and 3600 | none |
43
43
  | `pf-elbv2-tg-slow-start-range` | AWS::ElasticLoadBalancingV2::TargetGroup | Target group slow_start.duration_seconds must be 0 or between 30 and 900 | none |
44
+ | `pf-events-input-transformer-placeholders` | AWS::Events::Rule | InputTemplate placeholders must be declared in InputPathsMap | none |
45
+ | `pf-events-pattern-empty` | AWS::Events::Rule | An empty EventPattern counts as no pattern at all | none |
46
+ | `pf-events-pattern-scalar-value` | AWS::Events::Rule | Event pattern values must be arrays or objects, not scalars | none |
44
47
  | `pf-iam-inline-policy-size` | AWS::IAM::Policy<br>AWS::IAM::RolePolicy<br>AWS::IAM::UserPolicy<br>AWS::IAM::GroupPolicy | Inline policy documents are limited per identity (role 10240 / group 5120 / user 2048 characters) | none |
45
48
  | `pf-iam-managed-policy-count` | AWS::IAM::Role<br>AWS::IAM::User<br>AWS::IAM::Group | Managed policies per identity are capped (hard maximums role 25 / user 20 / group 10) | none |
46
49
  | `pf-iam-managed-policy-size` | AWS::IAM::ManagedPolicy | Managed policy documents are limited to 6144 characters (whitespace excluded) | none |
@@ -71,5 +74,7 @@
71
74
  | `pf-s3-replication-dest-versioning` | AWS::S3::Bucket | The replication destination bucket needs versioning enabled | none |
72
75
  | `pf-s3-replication-requires-versioning` | AWS::S3::Bucket | ReplicationConfiguration requires versioning to be enabled on the source bucket | none |
73
76
  | `pf-s3-website-redirect-exclusive` | AWS::S3::Bucket | RedirectAllRequestsTo excludes every other website setting | none |
77
+ | `pf-scheduler-flexible-window` | AWS::Scheduler::Schedule | FLEXIBLE mode needs MaximumWindowInMinutes, OFF forbids it | none |
78
+ | `pf-scheduler-rate-positive` | AWS::Scheduler::Schedule | A Scheduler rate() value must be positive | none |
74
79
  | `pf-sns-fifo-topic-name` | AWS::SNS::Topic | FIFO topic names must end with '.fifo' (and '.fifo' names require FifoTopic) | none |
75
80
  | `pf-sfn-asl-missing-state` | AWS::StepFunctions::StateMachine | ASL Next/Default/Choices must reference a defined state (top-level states; a dangling StartAt is covered by engine rule E3601) | none |
package/lib/index.js CHANGED
@@ -17,7 +17,7 @@ const rules_generated_1 = require("./rules.generated");
17
17
  * Preflight.apply(app);
18
18
  */
19
19
  class Preflight {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.11" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.12" };
21
21
  /**
22
22
  * Register the cdk-preflight rules on an App or Stage.
23
23
  */
@@ -412,6 +412,39 @@ exports.BUNDLED_RULES = [
412
412
  ],
413
413
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_slow_start_out(n) if n < 0\n\n_pf_slow_start_out(n) if {\n\tn > 0\n\tn < 30\n}\n\n_pf_slow_start_out(n) if n > 900\n\nviolation contains make_diag_full(\"pf-elbv2-tg-slow-start-range\", \"ERROR\", name,\n\tsprintf(\"Properties.TargetGroupAttributes.%d.Value\", [item.index]),\n\tsprintf(\"slow_start.duration_seconds is %v but must be 0 (disabled) or between 30 and 900 seconds\", [num]),\n\t\"Set slow_start.duration_seconds to 0 or a value between 30 and 900\",\n\t\"https://docs.aws.amazon.com/elasticloadbalancing/latest/application/edit-target-group-attributes.html#slow-start-mode\") if {\n\tsome name in resources_of_type(\"AWS::ElasticLoadBalancingV2::TargetGroup\")\n\tsome item in flatten_list(name, \"Properties.TargetGroupAttributes\")\n\tattr := item.value\n\tis_object(attr)\n\tobject.get(attr, \"Key\", \"\") == \"slow_start.duration_seconds\"\n\tnum := to_number(object.get(attr, \"Value\", null))\n\t_pf_slow_start_out(num)\n}\n"
414
414
  },
415
+ {
416
+ "id": "pf-events-input-transformer-placeholders",
417
+ "service": "events",
418
+ "severity": "ERROR",
419
+ "title": "InputTemplate placeholders must be declared in InputPathsMap",
420
+ "upstream": "none",
421
+ "resourceTypes": [
422
+ "AWS::Events::Rule"
423
+ ],
424
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# Every <placeholder> in InputTemplate must be declared in InputPathsMap,\n# except the aws.events.* predefined variables. An InputPathsMap that is an\n# unresolvable intrinsic (normalized with __-prefixed marker keys) makes the\n# declared set unknowable, so the rule skips.\n_pf_evitp_placeholders(tmpl) := {substring(f, 1, count(f) - 2) | some f in regex.find_n(`<([A-Za-z0-9_.-]+)>`, tmpl, -1)}\n\n_pf_evitp_plain_map(pm) if {\n\tis_object(pm)\n\tevery k, _ in pm {\n\t\tnot startswith(k, \"__\")\n\t}\n}\n\nviolation contains make_diag_full(\"pf-events-input-transformer-placeholders\", \"ERROR\", name,\n\tsprintf(\"Properties.Targets.%d.InputTransformer.InputTemplate\", [t.index]),\n\tsprintf(\"InputTemplate uses <%s> but InputPathsMap does not declare it; PutTargets fails with \\\"InputTemplate for target %s contains invalid placeholder %s\\\"\", [p, tid, p]),\n\tsprintf(\"Add '%s' to InputPathsMap, or remove the placeholder from the template\", [p]),\n\t\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-transform-target-input.html\") if {\n\tsome name in resources_of_type(\"AWS::Events::Rule\")\n\tsome t in flatten_list(name, \"Properties.Targets\")\n\tis_object(t.value)\n\tit := object.get(t.value, \"InputTransformer\", null)\n\tis_object(it)\n\ttmpl := object.get(it, \"InputTemplate\", null)\n\tis_string(tmpl)\n\tpm := object.get(it, \"InputPathsMap\", {})\n\t_pf_evitp_plain_map(pm)\n\tsome p in _pf_evitp_placeholders(tmpl)\n\tnot startswith(p, \"aws.events.\")\n\tnot pm[p]\n\ttid := object.get(t.value, \"Id\", \"<target>\")\n}\n"
425
+ },
426
+ {
427
+ "id": "pf-events-pattern-empty",
428
+ "service": "events",
429
+ "severity": "ERROR",
430
+ "title": "An empty EventPattern counts as no pattern at all",
431
+ "upstream": "none",
432
+ "resourceTypes": [
433
+ "AWS::Events::Rule"
434
+ ],
435
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n# The engine's F3058 fires when the EventPattern KEY is absent, but an empty\n# object passes the schema and the handler then treats it as no pattern at\n# all. Fires only when ScheduleExpression is also literally absent — the\n# bench-verified shape (absence proven via input.resources, see AGENTS.md).\nviolation contains make_diag_full(\"pf-events-pattern-empty\", \"ERROR\", name,\n\t\"Properties.EventPattern\",\n\t\"EventPattern is an empty object, which the handler treats as no pattern; PutRule fails with \\\"Parameter(s) EventPattern or ScheduleExpression must be specified\\\"\",\n\t\"Give EventPattern at least one matcher (e.g. source), or use ScheduleExpression instead\",\n\t\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html\") if {\n\tsome name in resources_of_type(\"AWS::Events::Rule\")\n\tep := resolve(name, \"Properties.EventPattern\")\n\tis_object(ep)\n\tcount(ep) == 0\n\tprops := input.resources[name].properties\n\tis_object(props)\n\tobject.get(props, \"ScheduleExpression\", \"__pf_absent\") == \"__pf_absent\"\n}\n"
436
+ },
437
+ {
438
+ "id": "pf-events-pattern-scalar-value",
439
+ "service": "events",
440
+ "severity": "ERROR",
441
+ "title": "Event pattern values must be arrays or objects, not scalars",
442
+ "upstream": "none",
443
+ "resourceTypes": [
444
+ "AWS::Events::Rule"
445
+ ],
446
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_evpsv_scalar(v) if is_string(v)\n\n_pf_evpsv_scalar(v) if is_number(v)\n\n_pf_evpsv_scalar(v) if is_boolean(v)\n\n# Every matcher in an event pattern must be an array (or an object holding\n# operators); a bare scalar is rejected per key. Only the top level is\n# checked — that is the bench-verified scope, and it dodges operator objects\n# like {\"prefix\": \"...\"} that legally carry scalars deeper down.\nviolation contains make_diag_full(\"pf-events-pattern-scalar-value\", \"ERROR\", name,\n\tsprintf(\"Properties.EventPattern.%s\", [k]),\n\tsprintf(\"EventPattern key '%s' holds a bare scalar; PutRule rejects it with \\\"Event pattern is not valid. Reason: \\\\\\\"%s\\\\\\\" must be an object or an array\\\"\", [k, k]),\n\tsprintf(\"Wrap the value in an array: \\\"%s\\\": [...]\", [k]),\n\t\"https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html\") if {\n\tsome name in resources_of_type(\"AWS::Events::Rule\")\n\tep := resolve(name, \"Properties.EventPattern\")\n\tis_object(ep)\n\tsome k, v in ep\n\t_pf_evpsv_scalar(v)\n}\n"
447
+ },
415
448
  {
416
449
  "id": "pf-iam-inline-policy-size",
417
450
  "service": "iam",
@@ -749,6 +782,28 @@ exports.BUNDLED_RULES = [
749
782
  ],
750
783
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n# RedirectAllRequestsTo redirects the whole site, so S3 rejects any sibling\n# website setting alongside it.\nviolation contains make_diag_full(\"pf-s3-website-redirect-exclusive\", \"ERROR\", name,\n\tsprintf(\"Properties.WebsiteConfiguration.%s\", [k]),\n\tsprintf(\"WebsiteConfiguration combines RedirectAllRequestsTo with %s; S3 rejects it with \\\"[IndexDocument, ErrorDocument, RoutingRules] should not be specified if RedirectAllRequestsTo is specified\\\"\", [k]),\n\t\"Keep RedirectAllRequestsTo alone, or drop it and configure the website with IndexDocument/ErrorDocument/RoutingRules\",\n\t\"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-s3-bucket-websiteconfiguration.html\") if {\n\tsome name in resources_of_type(\"AWS::S3::Bucket\")\n\twc := resolve(name, \"Properties.WebsiteConfiguration\")\n\tis_object(wc)\n\tobject.get(wc, \"RedirectAllRequestsTo\", \"__pf_absent\") != \"__pf_absent\"\n\tsome k in {\"IndexDocument\", \"ErrorDocument\", \"RoutingRules\"}\n\tobject.get(wc, k, \"__pf_absent\") != \"__pf_absent\"\n}\n"
751
784
  },
785
+ {
786
+ "id": "pf-scheduler-flexible-window",
787
+ "service": "scheduler",
788
+ "severity": "ERROR",
789
+ "title": "FLEXIBLE mode needs MaximumWindowInMinutes, OFF forbids it",
790
+ "upstream": "none",
791
+ "resourceTypes": [
792
+ "AWS::Scheduler::Schedule"
793
+ ],
794
+ "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_schfw_url := \"https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-scheduler-schedule-flexibletimewindow.html\"\n\n_pf_schfw_ftw(name) := ftw if {\n\tftw := resolve(name, \"Properties.FlexibleTimeWindow\")\n\tis_object(ftw)\n}\n\nviolation contains make_diag_full(\"pf-scheduler-flexible-window\", \"ERROR\", name,\n\t\"Properties.FlexibleTimeWindow.MaximumWindowInMinutes\",\n\t\"FlexibleTimeWindow.Mode is FLEXIBLE but MaximumWindowInMinutes is missing; CreateSchedule fails with \\\"MaximumWindowInMinutes must be provided when FlexibleTimeWindowMode is set to FLEXIBLE\\\"\",\n\t\"Set MaximumWindowInMinutes (1-1440), or switch Mode to OFF\",\n\t_pf_schfw_url) if {\n\tsome name in resources_of_type(\"AWS::Scheduler::Schedule\")\n\tftw := _pf_schfw_ftw(name)\n\tobject.get(ftw, \"Mode\", null) == \"FLEXIBLE\"\n\tobject.get(ftw, \"MaximumWindowInMinutes\", \"__pf_absent\") == \"__pf_absent\"\n}\n\nviolation contains make_diag_full(\"pf-scheduler-flexible-window\", \"ERROR\", name,\n\t\"Properties.FlexibleTimeWindow.MaximumWindowInMinutes\",\n\t\"FlexibleTimeWindow.Mode is OFF but MaximumWindowInMinutes is set; CreateSchedule fails with \\\"MaximumWindowInMinutes must not be provided when FlexibleTimeWindowMode is set to OFF\\\"\",\n\t\"Drop MaximumWindowInMinutes, or switch Mode to FLEXIBLE\",\n\t_pf_schfw_url) if {\n\tsome name in resources_of_type(\"AWS::Scheduler::Schedule\")\n\tftw := _pf_schfw_ftw(name)\n\tobject.get(ftw, \"Mode\", null) == \"OFF\"\n\tobject.get(ftw, \"MaximumWindowInMinutes\", \"__pf_absent\") != \"__pf_absent\"\n}\n"
795
+ },
796
+ {
797
+ "id": "pf-scheduler-rate-positive",
798
+ "service": "scheduler",
799
+ "severity": "ERROR",
800
+ "title": "A Scheduler rate() value must be positive",
801
+ "upstream": "none",
802
+ "resourceTypes": [
803
+ "AWS::Scheduler::Schedule"
804
+ ],
805
+ "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"
806
+ },
752
807
  {
753
808
  "id": "pf-sns-fifo-topic-name",
754
809
  "service": "sns",
@@ -772,4 +827,4 @@ exports.BUNDLED_RULES = [
772
827
  "rego": "package cdk_preflight\n\nimport rego.v1\n\n_pf_sfn_fix := \"Point Next/Default/Choices at an existing state name\"\n\n_pf_sfn_url := \"https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-states.html\"\n\n_pf_sfn_asl(name) := asl if {\n\tdef := resolve(name, \"Properties.DefinitionString\")\n\tis_string(def)\n\tasl := json.unmarshal(def)\n\tis_object(asl)\n}\n\n_pf_sfn_defined(asl) := {sn | some sn, _ in object.get(asl, \"States\", {})}\n\n# NOTE: a dangling StartAt is deliberately NOT checked here — the engine's\n# built-in rule E3601 (ERROR/CFN_LINT) already covers it. Verified against\n# @aws/cloudformation-validate 1.7.0-beta on 2026-09-01: E3601 fires for\n# StartAt only and does not check Next/Default/Choices, which is what this\n# rule adds.\n\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\t\"Properties.DefinitionString\",\n\tsprintf(\"state '%s' references state '%s' via %s, but no state with that name is defined\", [sname, target, key]),\n\t_pf_sfn_fix, _pf_sfn_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfn_asl(name)\n\tsome sname, st in object.get(asl, \"States\", {})\n\tis_object(st)\n\tsome key in {\"Next\", \"Default\"}\n\ttarget := object.get(st, key, null)\n\tis_string(target)\n\tnot target in _pf_sfn_defined(asl)\n}\n\nviolation contains make_diag_full(\"pf-sfn-asl-missing-state\", \"ERROR\", name,\n\t\"Properties.DefinitionString\",\n\tsprintf(\"state '%s' has a Choice rule referencing state '%s', but no state with that name is defined\", [sname, target]),\n\t_pf_sfn_fix, _pf_sfn_url) if {\n\tsome name in resources_of_type(\"AWS::StepFunctions::StateMachine\")\n\tasl := _pf_sfn_asl(name)\n\tsome sname, st in object.get(asl, \"States\", {})\n\tis_object(st)\n\tchoices := object.get(st, \"Choices\", [])\n\tis_array(choices)\n\tsome c in choices\n\tis_object(c)\n\ttarget := object.get(c, \"Next\", null)\n\tis_string(target)\n\tnot target in _pf_sfn_defined(asl)\n}\n"
773
828
  }
774
829
  ];
775
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUscUNBQXFDO1FBQzNDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHlFQUF5RTtRQUNsRixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixnQ0FBZ0M7U0FDakM7UUFDRCxNQUFNLEVBQUUsbzJCQUFvMkI7S0FDNzJCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsMkJBQTJCO1FBQ2pDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDRFQUE0RTtRQUNyRixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLGVBQWUsRUFBRTtZQUNmLGdDQUFnQztTQUNqQztRQUNELE1BQU0sRUFBRSwrNkJBQSs2QjtLQUN4N0I7SUFDRDtRQUNFLElBQUksRUFBRSwrQkFBK0I7UUFDckMsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHVEQUF1RDtRQUNoRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsNjZCQUE2NkI7S0FDdDdCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0RBQWtEO1FBQ3hELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwyRUFBMkU7UUFDcEYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsK0JBQStCO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFLHMvQkFBcy9CO0tBQy8vQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxTQUFT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IEdlbmVyYXRlZCBieSBzY3JpcHRzL2J1bmRsZS1ydWxlcy50cyBmcm9tIHJ1bGVzLyoqLiBEbyBub3QgZWRpdCBieSBoYW5kLlxuLy8gfn4gUmVnZW5lcmF0ZSB3aXRoOiBucHggcHJvamVuIGJ1bmRsZS1ydWxlc1xuLyogZXNsaW50LWRpc2FibGUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlZFJ1bGVEYXRhIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSB1cHN0cmVhbTogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZVR5cGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVnbzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQlVORExFRF9SVUxFUzogQnVuZGxlZFJ1bGVEYXRhW10gPSBbXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHYXRld2F5cyB3aXRoIEF1dGhvcml6ZXJUeXBlIENVU1RPTV9KV1QgcmVxdWlyZSBBdXRob3JpemVyQ29uZmlndXJhdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2d3and0X2hhc19jb25maWcobmFtZSkgaWYgaXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQXV0aG9yaXplckNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWFnZW50Y29yZS1nYXRld2F5LWp3dC1hdXRob3JpemVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcIkF1dGhvcml6ZXJUeXBlIGlzIENVU1RPTV9KV1QgYnV0IEF1dGhvcml6ZXJDb25maWd1cmF0aW9uIGlzIG1pc3Npbmc7IHRoZSBDcmVhdGVHYXRld2F5IEFQSSByZXF1aXJlcyBpdCBhbmQgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBhIFZhbGlkYXRpb25FeGNlcHRpb25cXFwiLFxcblxcdFxcXCJBZGQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24uQ3VzdG9tSldUQXV0aG9yaXplciAoZGlzY292ZXJ5VXJsIGFuZCBhbGxvd2VkQXVkaWVuY2UvYWxsb3dlZENsaWVudHMpLCBvciBzd2l0Y2ggQXV0aG9yaXplclR5cGUgdG8gQVdTX0lBTVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUdhdGV3YXkuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6R2F0ZXdheVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyVHlwZVxcXCIpID09IFxcXCJDVVNUT01fSldUXFxcIlxcblxcdG5vdCBfcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWFnZW50Y29yZS1ydW50aW1lLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJiZWRyb2NrLWFnZW50Y29yZVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBZ2VudENvcmUgUnVudGltZSBuYW1lcyBtdXN0IG1hdGNoIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IChubyBoeXBoZW5zKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6QmVkcm9ja0FnZW50Q29yZTo6UnVudGltZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24g44K544Kt44O844Oe44GvIEFnZW50UnVudGltZU5hbWUg44Gu44OR44K/44O844Oz44KS5oyB44Gf44Gq44GE77yI44Ko44Oz44K444Oz57Sg6YCa44KK44CBXFxuIyAyMDI2LTA5LTAxIOOBqyAxLjcuMC1iZXRhIOOBp+eiuuiqje+8ieOBjOOAgUNyZWF0ZUFnZW50UnVudGltZSBBUEkg44GvXFxuIyBbYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSDjgpLlvLfliLbjgZnjgovjgILjg4/jgqTjg5Xjg7PlhaXjgorjga4gQ0RLIOmiqOWRveWQjeOBjOWumueVquOBruatu+WboOOAglxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQWdlbnRSdW50aW1lTmFtZSAnJXMnIGlzIGludmFsaWQ6IGl0IG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY29udGFpbiBvbmx5IGxldHRlcnMsIGRpZ2l0cywgYW5kIHVuZGVyc2NvcmVzIChtYXggNDggY2hhcmFjdGVycywgaHlwaGVucyBhcmUgbm90IGFsbG93ZWQpOyBDcmVhdGVBZ2VudFJ1bnRpbWUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbl0pLFxcblxcdFxcXCJVc2UgYW4gdW5kZXJzY29yZS1zZXBhcmF0ZWQgbmFtZSBzdWNoIGFzICdteV9hZ2VudF9ydW50aW1lJ1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9iZWRyb2NrLWFnZW50Y29yZS1jb250cm9sL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUFnZW50UnVudGltZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXFxcIilcXG5cXHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWdlbnRSdW50aW1lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKG4pXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKGBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kYCwgbilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2xvdWRGcm9udCB2aWV3ZXIgY2VydGlmaWNhdGVzIG11c3QgbGl2ZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWFjbS1jZXJ0LXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IHJlcXVpcmVzIHRoZSBBQ00gY2VydGlmaWNhdGUgdG8gYmUgaW4gdXMtZWFzdC0xLCBidXQgdGhlIGNlcnRpZmljYXRlIGlzIGluICVzXFxcIiwgW3JlZ2lvbl0pLFxcblxcdFxcXCJJc3N1ZSBvciBpbXBvcnQgdGhlIGNlcnRpZmljYXRlIGluIHVzLWVhc3QtMSAoZS5nLiBhIGRlZGljYXRlZCB1cy1lYXN0LTEgc3RhY2spIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvY25hbWVzLWFuZC1odHRwcy1yZXF1aXJlbWVudHMuaHRtbCNodHRwcy1yZXF1aXJlbWVudHMtY2VydGlmaWNhdGUtaXNzdWVyXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdGFybiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5BY21DZXJ0aWZpY2F0ZUFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRzdGFydHN3aXRoKGFybiwgXFxcImFybjpcXFwiKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMl0gPT0gXFxcImFjbVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWFsaWFzZXMtcmVxdWlyZS1jdXN0b20tY2VydGlmaWNhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgZGlzdHJpYnV0aW9uIHdpdGggQWxpYXNlcyBjYW5ub3QgdXNlIHRoZSBDbG91ZEZyb250IGRlZmF1bHQgY2VydGlmaWNhdGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2FsaWFzY2VydF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tdmlld2VyY2VydGlmaWNhdGUuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2ZpeCA6PSBcXFwiQXR0YWNoIGFuIEFDTSBjZXJ0aWZpY2F0ZSAoQWNtQ2VydGlmaWNhdGVBcm4sIHVzLWVhc3QtMSkgb3IgYW4gSUFNIGNlcnRpZmljYXRlLCB0b2dldGhlciB3aXRoIFNzbFN1cHBvcnRNZXRob2QgYW5kIE1pbmltdW1Qcm90b2NvbFZlcnNpb25cXFwiXFxuXFxuX3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA6PSBjb3VudChbMSB8XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQWxpYXNlc1xcXCIpXFxuXSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlXFxcIixcXG5cXHRcXFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVxcXCIsXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9maXgsIF9wZl9jZl9hbGlhc2NlcnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0X3BmX2NmX2FsaWFzY2VydF9jb3VudChuYW1lKSA+IDBcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5WaWV3ZXJDZXJ0aWZpY2F0ZS5DbG91ZEZyb250RGVmYXVsdENlcnRpZmljYXRlXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtY2FjaGVkLW1ldGhvZHMtc3Vic2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZWRNZXRob2RzIG11c3QgYmUgYSBzdWJzZXQgb2YgQWxsb3dlZE1ldGhvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX21ldGhvZHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWNsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWNhY2hlYmVoYXZpb3IuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKSwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbiMgQ2xvdWRGcm9udCBkZWZhdWx0cyBBbGxvd2VkTWV0aG9kcyB0byBHRVQvSEVBRCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBvbWl0dGVkLFxcbiMgc28gYW4gb21pdHRlZCBBbGxvd2VkTWV0aG9kcyBzdGlsbCBjb25zdHJhaW5zIHdoYXQgbWF5IGJlIGNhY2hlZC5cXG5fcGZfY2ZfbWV0aG9kc19hbGxvd2VkKGIpIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkFsbG93ZWRNZXRob2RzXFxcIiwgW1xcXCJHRVRcXFwiLCBcXFwiSEVBRFxcXCJdKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkNhY2hlZE1ldGhvZHNcXFwiLCBbYi5wYXRoXSksXFxuXFx0c3ByaW50ZihcXFwiQ2FjaGVkTWV0aG9kcyBjb250YWlucyAlcywgd2hpY2ggaXMgbm90IGluIEFsbG93ZWRNZXRob2RzICV2XFxcIiwgW21ldGhvZCwgYWxsb3dlZF0pLFxcblxcdFxcXCJFdmVyeSBtZXRob2QgaW4gQ2FjaGVkTWV0aG9kcyBtdXN0IGFsc28gYXBwZWFyIGluIEFsbG93ZWRNZXRob2RzXFxcIixcXG5cXHRfcGZfY2ZfbWV0aG9kc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX21ldGhvZHNfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0Y2FjaGVkIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkNhY2hlZE1ldGhvZHNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KGNhY2hlZClcXG5cXHRhbGxvd2VkIDo9IF9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYilcXG5cXHRpc19hcnJheShhbGxvd2VkKVxcblxcdHNvbWUgbWV0aG9kIGluIGNhY2hlZFxcblxcdG5vdCBtZXRob2QgaW4gYWxsb3dlZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZGlzdHJpYnV0aW9uIG11c3QgYmUgaW4gdXMtZWFzdC0xXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9lZGdlcmVnaW9uX2ZpeCA6PSBcXFwiQ3JlYXRlIHRoZSBMYW1iZGFARWRnZSBmdW5jdGlvbiBpbiB1cy1lYXN0LTEgKGNsb3VkZnJvbnQuZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbiBkb2VzIHRoaXMgZm9yIHlvdSkgYW5kIGFzc29jaWF0ZSB0aGF0IHZlcnNpb24ncyBBUk5cXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvbGFtYmRhLWF0LWVkZ2UtZnVuY3Rpb24tcmVzdHJpY3Rpb25zLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtZWRnZS1sYW1iZGEtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9ucy4lZC5MYW1iZGFGdW5jdGlvbkFSTlxcXCIsIFtiLnBhdGgsIGEuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSBmdW5jdGlvbnMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMSwgYnV0IHRoaXMgZnVuY3Rpb24gaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0X3BmX2NmX2VkZ2VyZWdpb25fZml4LCBfcGZfY2ZfZWRnZXJlZ2lvbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2VyZWdpb25fYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDdcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cmVnaW9uIDo9IHBhcnRzWzNdXFxuXFx0cmVnaW9uICE9IFxcXCJcXFwiXFxuXFx0cmVnaW9uICE9IFxcXCJ1cy1lYXN0LTFcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJMYW1iZGFARWRnZSBhc3NvY2lhdGlvbnMgbXVzdCByZWZlcmVuY2UgYSB2ZXJzaW9uIEFSTiwgbm90IGFuIGFsaWFzIG9yICRMQVRFU1RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfZml4IDo9IFxcXCJBc3NvY2lhdGUgYSB2ZXJzaW9uIEFSTiAoaW4gdGhlIENESywgZm4uY3VycmVudFZlcnNpb24uZWRnZUFybikgaW5zdGVhZCBvZiB0aGUgdW5xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBhbiBhbGlhcywgb3IgJExBVEVTVFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXZlcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tbGFtYmRhZnVuY3Rpb25hc3NvY2lhdGlvbi5odG1sXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCJ9IHxcXG5cXHRcXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIpXSxcXG5cXHRbe1xcXCJwYXRoXFxcIjogc3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnMuJWRcXFwiLCBbaXQuaW5kZXhdKX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBMYW1iZGEgQVJOcyBzcGxpdCBpbnRvIDcgc2VnbWVudHMgd2hlbiB1bnF1YWxpZmllZFxcbiMgKGFybjpwYXJ0aXRpb246bGFtYmRhOnJlZ2lvbjphY2NvdW50OmZ1bmN0aW9uOm5hbWUpIGFuZCA4IHdoZW4gYSB2ZXJzaW9uIG9yXFxuIyBhbGlhcyBxdWFsaWZpZXIgaXMgYXBwZW5kZWQuIE9ubHkgYW4gYWxsLWRpZ2l0IHF1YWxpZmllciBpcyBhIHZlcnNpb24uXFxuX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKSA6PSBbe1xcXCJwYXRoXFxcIjogcGF0aCwgXFxcImFyblxcXCI6IGFybiwgXFxcInBhcnRzXFxcIjogcGFydHN9IHxcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCIlcy5MYW1iZGFGdW5jdGlvbkFzc29jaWF0aW9uc1xcXCIsIFtiLnBhdGhdKSlcXG5cXHRhcm4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwibGFtYmRhXFxcIlxcblxcdHBhcnRzWzVdID09IFxcXCJmdW5jdGlvblxcXCJcXG5cXHRwYXRoIDo9IHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pXFxuXVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRcXFwiTGFtYmRhQEVkZ2UgcmVxdWlyZXMgYSB2ZXJzaW9uLXF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGJ1dCB0aGlzIEFSTiBoYXMgbm8gcXVhbGlmaWVyXFxcIixcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA3XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS12ZXJzaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgaXQucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0ICclcycgaXMgYW4gYWxpYXMgb3IgJExBVEVTVFxcXCIsIFtxdWFsaWZpZXJdKSxcXG5cXHRfcGZfY2ZfZWRnZXZlcl9maXgsIF9wZl9jZl9lZGdldmVyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgaXQgaW4gX3BmX2NmX2VkZ2V2ZXJfYXJucyhuYW1lKVxcblxcdGNvdW50KGl0LnBhcnRzKSA9PSA4XFxuXFx0cXVhbGlmaWVyIDo9IGl0LnBhcnRzWzddXFxuXFx0bm90IHJlZ2V4Lm1hdGNoKFxcXCJeWzAtOV0rJFxcXCIsIHF1YWxpZmllcilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LW9yaWdpbi1ncm91cC1tZW1iZXItb3JpZ2luXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPcmlnaW4gZ3JvdXAgbWVtYmVycyBtdXN0IHJlZmVyZW5jZSBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gdGhlIGRpc3RyaWJ1dGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2Zfb2dtZW1iZXJfaWRzKG5hbWUpIDo9IHtpZCB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbnNcXFwiKVxcblxcdGlkIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJJZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlkKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtcy4lZC5NZW1iZXJzXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJPcmlnaW4gZ3JvdXAgbWVtYmVyICclcycgZG9lcyBub3QgbWF0Y2ggYW55IG9yaWdpbiBJZCBpbiB0aGUgZGlzdHJpYnV0aW9uXFxcIiwgW29pZF0pLFxcblxcdFxcXCJQb2ludCBldmVyeSBvcmlnaW4gZ3JvdXAgbWVtYmVyIGF0IHRoZSBJZCBvZiBhbiBvcmlnaW4gZGVjbGFyZWQgaW4gT3JpZ2luc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tb3JpZ2luZ3JvdXAuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5PcmlnaW5Hcm91cHMuSXRlbXNcXFwiKVxcblxcdG1lbWJlcnMgOj0gb2JqZWN0LmdldChvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJNZW1iZXJzXFxcIiwge30pLCBcXFwiSXRlbXNcXFwiLCBbXSlcXG5cXHRzb21lIG0gaW4gbWVtYmVyc1xcblxcdG9pZCA6PSBvYmplY3QuZ2V0KG0sIFxcXCJPcmlnaW5JZFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKG9pZClcXG5cXHRub3Qgb2lkIGluIF9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ2FjaGUgYmVoYXZpb3IgVFRMcyBtdXN0IHNhdGlzZnkgTWluVFRMIDw9IERlZmF1bHRUVEwgPD0gTWF4VFRMXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl90dGxfZml4IDo9IFxcXCJPcmRlciB0aGUgVFRMcyBhcyBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcXFwiXFxuXFxuX3BmX2NmX3R0bF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9FeHBpcmF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJNaW5UVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFttbiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRteCA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTWF4VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBteFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIERlZmF1bHRUVEwgKCV2KVxcXCIsIFttbiwgZGZdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdG1uIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNaW5UVExcXFwiLCBudWxsKSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG1uID4gZGZcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXR0bC1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIGIucGF0aCxcXG5cXHRzcHJpbnRmKFxcXCJEZWZhdWx0VFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTWF4VFRMICgldilcXFwiLCBbZGYsIG14XSksXFxuXFx0X3BmX2NmX3R0bF9maXgsIF9wZl9jZl90dGxfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBiIGluIF9wZl9jZl9iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRkZiA6PSB0b19udW1iZXIob2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRGVmYXVsdFRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRkZiA+IG14XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgV0FGdjIgd2ViIEFDTCBhdHRhY2hlZCB0byBDbG91ZEZyb250IG11c3QgYmUgZ2xvYmFsbHkgc2NvcGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBXQUZ2MiBBUk4gY2FycmllcyBpdHMgc2NvcGUgaW4gdGhlIHJlc291cmNlIHNlZ21lbnQ6XFxuIyAgIGFybjphd3M6d2FmdjI6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpnbG9iYWwvd2ViYWNsL25hbWUvaWQgICAgKENMT1VERlJPTlQpXFxuIyAgIGFybjphd3M6d2FmdjI6YXAtbm9ydGhlYXN0LTE6MTIzNDU2Nzg5MDEyOnJlZ2lvbmFsL3dlYmFjbC8uLi4gKFJFR0lPTkFMKVxcbiMgQ2xvdWRGcm9udCBhY2NlcHRzIG9ubHkgdGhlIGdsb2JhbCBmb3JtLiBDaGVja2luZyB0aGUgcmVnaW9uIGFsb25lIHdvdWxkIG1pc3NcXG4jIGEgUkVHSU9OQUwgd2ViIEFDTCB0aGF0IGhhcHBlbnMgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gdXMtZWFzdC0xLCB3aGljaCBpc1xcbiMgdGhlIGVhc3kgbWlzdGFrZSB0byBtYWtlLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC13YWZ2Mi13ZWJhY2wtc2NvcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5XZWJBQ0xJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQ2xvdWRGcm9udCBvbmx5IGFjY2VwdHMgYSBnbG9iYWxseSBzY29wZWQgd2ViIEFDTCwgYnV0IHRoaXMgQVJOIGlzIHNjb3BlZCAnJXMnXFxcIiwgW3Njb3BlXSksXFxuXFx0XFxcIkNyZWF0ZSB0aGUgd2ViIEFDTCB3aXRoIHNjb3BlIENMT1VERlJPTlQgaW4gdXMtZWFzdC0xICh3YWZ2Mi5DZm5XZWJBQ0wgd2l0aCBzY29wZTogJ0NMT1VERlJPTlQnKSBhbmQgcmVmZXJlbmNlIHRoYXQgQVJOXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utd2FmdjItd2ViYWNsLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwid2FmdjJcXFwiXFxuXFx0c2VnbWVudHMgOj0gc3BsaXQocGFydHNbNV0sIFxcXCIvXFxcIilcXG5cXHRzY29wZSA6PSBzZWdtZW50c1swXVxcblxcdHNjb3BlICE9IFxcXCJnbG9iYWxcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlcnkgQXR0cmlidXRlRGVmaW5pdGlvbnMgZW50cnkgbXVzdCBiZSB1c2VkIGJ5IGEga2V5IHNjaGVtYVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoOiBldmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlXFxuIyB1c2VkIGJ5IHRoZSB0YWJsZSBrZXkgc2NoZW1hIG9yIGFuIGluZGV4IGtleSBzY2hlbWEuIFRoZSBlbmdpbmUncyBFMzAzOVxcbiMgY2hlY2tzIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb25seSAoa2V5IGF0dHJpYnV0ZSBub3QgZGVmaW5lZCksIHNvIHRoZVxcbiMgY2xhc3NpYyBcXFwicmVtb3ZlZCBhIEdTSSwgbGVmdCB0aGUgYXR0cmlidXRlIGRlZmluaXRpb25cXFwiIG1pc3Rha2Ugc2FpbHMgdGhyb3VnaC5cXG5cXG5fcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0YSA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBwcm9wKSA6PSB7YSB8XFxuXFx0c29tZSBpeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQoaXgudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VzZWQobmFtZSkgOj0gKChfcGZfZGRiYWR1X3RhYmxlX2tleXMobmFtZSkgfFxcblxcdF9wZl9kZGJhZHVfaW5kZXhfa2V5cyhuYW1lLCBcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKSlcXG5cXG4jIEFueSB1bnJlc29sdmFibGUgQXR0cmlidXRlTmFtZSBpbiBhIGtleSBzY2hlbWEgbWVhbnMgdGhlIHVzZWQtc2V0IGlzXFxuIyBpbmNvbXBsZXRlLCBzbyB0aGUgcnVsZSBtdXN0IHN0YXkgc2lsZW50IHJhdGhlciB0aGFuIGd1ZXNzLlxcbl9wZl9kZGJhZHVfdW5yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG59XFxuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdG5vdCBpc19zdHJpbmcob2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWF0dHJpYnV0ZS1kZWZpbml0aW9ucy11c2FnZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtkLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgaXMgZGVmaW5lZCBidXQgdXNlZCBieSBubyBrZXkgc2NoZW1hOyBEeW5hbW9EQiByZXF1aXJlcyBhbiBleGFjdCBtYXRjaCBhbmQgZmFpbHMgd2l0aCBcXFxcXFxcIk51bWJlciBvZiBhdHRyaWJ1dGVzIGluIEtleVNjaGVtYSBkb2VzIG5vdCBleGFjdGx5IG1hdGNoIG51bWJlciBvZiBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgdW51c2VkIGRlZmluaXRpb24gKG5vbi1rZXkgYXR0cmlidXRlcyBzdWNoIGFzIGEgVFRMIGF0dHJpYnV0ZSBtdXN0IE5PVCBiZSBkZWNsYXJlZCksIG9yIGFkZCB0aGUgaW5kZXggdGhhdCB1c2VzIGl0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRub3QgX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJhZHVfdXNlZChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIEJpbGxpbmdNb2RlIChyZXF1aXJlZCBmb3IgUFJPVklTSU9ORUQsIGZvcmJpZGRlbiBmb3IgUEFZX1BFUl9SRVFVRVNUKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuX3BmX2RkYmJ0X2hhc19wdChuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiKSlcXG5cXG5fcGZfZGRiYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKVxcblxcbiMgQmlsbGluZ01vZGUg44GM44Oq44OG44Op44OrIFxcXCJQUk9WSVNJT05FRFxcXCLjgIHjgb7jgZ/jga/mnKrmjIflrprvvIjjg4fjg5Xjgqnjg6vjg4ggUFJPVklTSU9ORUTvvInjgIJcXG4jIOODiOODvOOCr+ODs+WApO+8iFJlZiDnrYnvvInjga/liKTlrprjgavkvb/jgo/jgarjgYTvvIjoqqTmpJznn6XpmLLmraLvvInjgIJcXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQUk9WSVNJT05FRFxcXCJcXG5cXG5fcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBzcGVjaWZpZWQgd2hlbiBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCwgb3Igc3dpdGNoIEJpbGxpbmdNb2RlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0X3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIixcXG5cXHRcXFwiQmlsbGluZ01vZGUgaXMgUFJPVklTSU9ORUQgKHRoZSBkZWZhdWx0KSBidXQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGlzIG1pc3Npbmc7IENyZWF0ZVRhYmxlIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIixcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCAoUmVhZENhcGFjaXR5VW5pdHMgLyBXcml0ZUNhcGFjaXR5VW5pdHMpLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0X3BmX2RkYmJ0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0bm90IF9wZl9kZGJidF9oYXNfcHQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1kdXBsaWNhdGUtYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXR0cmlidXRlRGVmaW5pdGlvbnMgbXVzdCBub3QgZGVmaW5lIHRoZSBzYW1lIGF0dHJpYnV0ZSB0d2ljZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnMuJWRcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkF0dHJpYnV0ZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJBbiBhdHRyaWJ1dGUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2FuXSksXFxuXFx0XFxcIktlZXAgYSBzaW5nbGUgZGVmaW5pdGlvbiBwZXIgYXR0cmlidXRlIG5hbWVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgYSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0YW4gOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFuKVxcblxcdG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSA9PSBhblxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2Vjb25kYXJ5IGluZGV4IG5hbWVzIG11c3QgYmUgdW5pcXVlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJkaW5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIlxcblxcbiMgRHVwbGljYXRlcyB3aXRoaW4gdGhlIHNhbWUgaW5kZXggbGlzdCBvbmx5OyBhIEdTSS9MU0kgY3Jvc3MtbGlzdCBjbGFzaCB3YXNcXG4jIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1pbmRleC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzLiVkLkluZGV4TmFtZVxcXCIsIFtwcm9wLCBiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiSW5kZXggbmFtZSAnJXMnIGlzIHVzZWQgbW9yZSB0aGFuIG9uY2U7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJEdXBsaWNhdGUgaW5kZXggbmFtZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgc2Vjb25kYXJ5IGluZGV4IGEgdW5pcXVlIEluZGV4TmFtZVxcXCIsXFxuXFx0X3BmX2RkYmRpbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHByb3AgaW4gW1xcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIiwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCJdXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdGEuaW5kZXggPCBiLmluZGV4XFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChhLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5hbWUpXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgbnVsbCkgPT0gaW5hbWVcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nbG9iYWwtdGFibGUtcmVwbGljYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHbG9iYWxUYWJsZSBSZXBsaWNhcyBtdXN0IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpHbG9iYWxUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IHdoZW4gdGhlIGVuZm9yY2UgcGx1Z2luXFxuIyBrbm93cyB0aGUgYXBwJ3MgY29uY3JldGUgcmVnaW9uIChzZWUgc3JjL3ByaXZhdGUvZW5mb3JjZS50cyk7IHdpdGhvdXQgaXQgdGhlXFxuIyByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIGFuZCB0aGlzIHJ1bGUgc2tpcHMuIFJlcGxpY2FzIHdpdGggdW5yZXNvbHZhYmxlXFxuIyBSZWdpb24gdmFsdWVzIGFsc28gbWFrZSB0aGUgcnVsZSBza2lwIOKAlCBhYnNlbmNlIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBSZXBsaWNhcyBsaXN0ICV2IGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlcGxveW1lbnQgcmVnaW9uICclcyc7IENyZWF0ZUdsb2JhbFRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgUmVwbGljYXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBjdXJyZW50IHJlZ2lvblxcXFxcXFwiXFxcIiwgW3JlcGxpY2FzLCByZWdpb25dKSxcXG5cXHRcXFwiQWRkIGEgcmVwbGljYSBlbnRyeSBmb3IgdGhlIHJlZ2lvbiB0aGUgc3RhY2sgZGVwbG95cyB0byAoQ0RLIFRhYmxlVjIgZG9lcyB0aGlzIGF1dG9tYXRpY2FsbHkpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItZ2xvYmFsdGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXFxcIilcXG5cXHRyZWdpb24gOj0gZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25cXG5cXHRpc19zdHJpbmcocmVnaW9uKVxcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2FzXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGl0IGluIGl0ZW1zIHtcXG5cXHRcXHRpc19zdHJpbmcob2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpKVxcblxcdH1cXG5cXHRyZXBsaWNhcyA6PSBbciB8IHNvbWUgaXQgaW4gaXRlbXM7IHIgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIlJlZ2lvblxcXCIsIG51bGwpXVxcblxcdG5vdCByZWdpb24gaW4gcmVwbGljYXNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR1NJIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB0YWJsZSBCaWxsaW5nTW9kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ2J0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLlJlYWRXcml0ZUNhcGFjaXR5TW9kZS5odG1sXFxcIlxcblxcbiMgR1NJLWxldmVsIGNvdW50ZXJwYXJ0IG9mIHBmLWR5bmFtb2RiLWJpbGxpbmctdGhyb3VnaHB1dCAod2hpY2ggY292ZXJzIHRoZVxcbiMgdGFibGUtbGV2ZWwgcGFpciBvbmx5KS4gU2FtZSB0b2tlbiBzYWZldHk6IGxpdGVyYWwgQmlsbGluZ01vZGUgb3IgYWJzZW50XFxuIyAoZGVmYXVsdCBQUk9WSVNJT05FRCk7IHRva2VuIHZhbHVlcyBuZXZlciBqdWRnZWQuXFxuX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSkgaWYgbm90IF9wZl9kZGJnYnRfYmlsbGluZ19wcmVzZW50KG5hbWUpXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBzcGVjaWZpZXMgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGJ1dCBCaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1Q7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2FuJ3QgYmUgdXNlZCB3aXRoIFBBWV9QRVJfUkVRVUVTVCBCaWxsaW5nTW9kZVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIlJlbW92ZSB0aGUgR1NJJ3MgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggdGhlIHRhYmxlIHRvIFBST1ZJU0lPTkVEXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUEFZX1BFUl9SRVFVRVNUXFxcIlxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIGlzIG1pc3NpbmcgUHJvdmlzaW9uZWRUaHJvdWdocHV0IHdoaWxlIHRoZSB0YWJsZSBiaWxscyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvcGVydHkgUHJvdmlzaW9uZWRUaHJvdWdocHV0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIiwgW2luYW1lXSksXFxuXFx0XFxcIkFkZCBQcm92aXNpb25lZFRocm91Z2hwdXQgdG8gdGhlIEdTSSwgb3Igc2V0IEJpbGxpbmdNb2RlIHRvIFBBWV9QRVJfUkVRVUVTVFxcXCIsXFxuXFx0X3BmX2RkYmdidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRub3QgaXNfb2JqZWN0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIG51bGwpKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5vbktleUF0dHJpYnV0ZXMgZ29lcyB3aXRoIElOQ0xVREUsIGFuZCBvbmx5IHdpdGggSU5DTFVERVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRiZ3BuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1wcm9qZWN0aW9uLmh0bWxcXFwiXFxuXFxuIyBHU0kgcHJvamVjdGlvbnMgb25seTogdGhlIExTSSBzaGFwZSBhbmQgdGhlIEtFWVNfT05MWStOb25LZXlBdHRyaWJ1dGVzIGNvbWJvXFxuIyB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1wcm9qZWN0aW9uLW5vbmtleVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb2plY3Rpb25cXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHVzZXMgUHJvamVjdGlvblR5cGUgSU5DTFVERSB3aXRob3V0IE5vbktleUF0dHJpYnV0ZXM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9qZWN0aW9uVHlwZSBpcyBJTkNMVURFLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBub3Qgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiTGlzdCB0aGUgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaW4gTm9uS2V5QXR0cmlidXRlcywgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIEFMTCAvIEtFWVNfT05MWVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSU5DTFVERVxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA9PSAwXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgY29tYmluZXMgUHJvamVjdGlvblR5cGUgQUxMIHdpdGggTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIEFMTCwgYnV0IE5vbktleUF0dHJpYnV0ZXMgaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiRHJvcCBOb25LZXlBdHRyaWJ1dGVzIChBTEwgYWxyZWFkeSBwcm9qZWN0cyBldmVyeXRoaW5nKSwgb3Igc3dpdGNoIFByb2plY3Rpb25UeXBlIHRvIElOQ0xVREVcXFwiLFxcblxcdF9wZl9kZGJncG5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRwcm9qIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIlByb2plY3Rpb25cXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChwcm9qKVxcblxcdG9iamVjdC5nZXQocHJvaiwgXFxcIlByb2plY3Rpb25UeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkFMTFxcXCJcXG5cXHRjb3VudChvYmplY3QuZ2V0KHByb2osIFxcXCJOb25LZXlBdHRyaWJ1dGVzXFxcIiwgW10pKSA+IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiS2V5U2NoZW1hIG11c3QgYmUgW0hBU0hdIG9yIFtIQVNILCBSQU5HRV1cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmtzaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBUYWJsZS1sZXZlbCBrZXkgc2NoZW1hIG9ubHk6IGluZGV4IGtleSBzY2hlbWFzIHByb2R1Y2UgZGlmZmVyZW50IHNlcnZpY2VcXG4jIGVycm9ycyBhbmQgd2VyZSBub3QgbWVhc3VyZWQgKGlzc3VlICMyMSkuXFxuX3BmX2RkYmtzaF90eXBlKG5hbWUsIGkpIDo9IGt0IGlmIHtcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdGl0LmluZGV4ID09IGlcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiS2V5VHlwZVxcXCIsIG51bGwpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGIta2V5LXNjaGVtYS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hLjAuS2V5VHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGZpcnN0IEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgSEFTSCwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIGZpcnN0IEtleVNjaGVtYUVsZW1lbnQgaXMgbm90IGEgSEFTSCBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlB1dCB0aGUgcGFydGl0aW9uIGtleSAoS2V5VHlwZSBIQVNIKSBmaXJzdCBhbmQgdGhlIG9wdGlvbmFsIHNvcnQga2V5IChSQU5HRSkgc2Vjb25kXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGt0IDo9IF9wZl9kZGJrc2hfdHlwZShuYW1lLCAwKVxcblxcdGlzX3N0cmluZyhrdClcXG5cXHRrdCAhPSBcXFwiSEFTSFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMS5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgc2Vjb25kIEtleVNjaGVtYSBlbGVtZW50IG11c3QgYmUgUkFOR0UsIGdvdCAnJXMnOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW52YWxpZCBLZXlTY2hlbWE6IFRoZSBzZWNvbmQgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBSQU5HRSBrZXkgdHlwZVxcXFxcXFwiXFxcIiwgW2t0XSksXFxuXFx0XFxcIlVzZSBleGFjdGx5IG9uZSBIQVNIIGVsZW1lbnQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgb25lIFJBTkdFIGVsZW1lbnRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDEpXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJSQU5HRVxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiLFxcblxcdHNwcmludGYoXFxcIktleVNjaGVtYSBjYW4gaG9sZCBhdCBtb3N0IDIgZWxlbWVudHMgKEhBU0ggKyBvcHRpb25hbCBSQU5HRSksIGdvdCAlZFxcXCIsIFtuXSksXFxuXFx0XFxcIk1vZGVsIGV4dHJhIGFjY2VzcyBwYXR0ZXJucyBhcyBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4ZXMgaW5zdGVhZFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRuIDo9IGNvdW50KFsxIHwgc29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKV0pXFxuXFx0biA+IDJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIEtpbmVzaXMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG11c3QgYmUgaW4gdGhlIHRhYmxlJ3MgcmVnaW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBLaW5lc2lzIERhdGEgU3RyZWFtcyBkZXN0aW5hdGlvbiBtdXN0IGxpdmUgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZVxcbiMgdGFibGUuIFRoZSBkZXBsb3ktdGltZSBmYWlsdXJlIG1vZGUgaXMgdWdseTogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIHRoZVxcbiMgc3RyZWFtaW5nIGRlc3RpbmF0aW9uIG5ldmVyIHN0YWJpbGl6ZXMsIGFuZCBDbG91ZEZvcm1hdGlvbiByb2xscyBiYWNrIG9uXFxuIyBOb3RTdGFiaWxpemVkIG1pbnV0ZXMgbGF0ZXIg4oCUIG5vdGhpbmcgbmFtZXMgdGhlIHJlZ2lvbiBtaXNtYXRjaC5cXG4jIGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uIGlzIGRlZmluZWQgb25seSBpbiBlbmZvcmNlIG1vZGUgd2l0aCBhXFxuIyBjb25jcmV0ZSByZWdpb247IG90aGVyd2lzZSB0aGlzIHJ1bGUgc2tpcHMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1raW5lc2lzLXN0cmVhbS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktpbmVzaXNTdHJlYW1TcGVjaWZpY2F0aW9uLlN0cmVhbUFyblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIEtpbmVzaXMgc3RyZWFtIGxpdmVzIGluICclcycgYnV0IHRoZSB0YWJsZSBkZXBsb3lzIHRvICclcyc7IHRoZSBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcyBhbmQgdGhlIHN0YWNrIHJvbGxzIGJhY2tcXFwiLCBbc3RyZWFtUmVnaW9uLCByZWdpb25dKSxcXG5cXHRcXFwiUG9pbnQgS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuIGF0IGEgc3RyZWFtIGluIHRoZSB0YWJsZSdzIG93biByZWdpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2tkcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHBhcnRzIDo9IHNwbGl0KGFybiwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSA2XFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG5cXHRzdHJlYW1SZWdpb24gOj0gcGFydHNbM11cXG5cXHRzdHJlYW1SZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRzdHJlYW1SZWdpb24gIT0gcmVnaW9uXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1wiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxTSSBrZXkgYXR0cmlidXRlcyBtdXN0IGJlIGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMzkgY2hlY2tzIHRhYmxlIGFuZCBHU0kga2V5IHNjaGVtYXMgYWdhaW5zdFxcbiMgQXR0cmlidXRlRGVmaW5pdGlvbnMgYnV0IGlzIGJsaW5kIHRvIExvY2FsU2Vjb25kYXJ5SW5kZXhlcyAobWVhc3VyZWRcXG4jIDIwMjYtMDktMDIsIDEuNy4wLWJldGEpLiBUaGlzIHJ1bGUgY292ZXJzIGV4YWN0bHkgdGhhdCBnYXAuXFxuXFxuX3BmX2RkYmxhZF9kZWZzKG5hbWUpIDo9IHthIHxcXG5cXHRzb21lIGQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhKVxcbn1cXG5cXG4jIElmIGFueSBkZWZpbml0aW9uJ3MgbmFtZSBpcyB1bnJlc29sdmFibGUgdGhlIHNldCBpcyBpbmNvbXBsZXRlIOKAlCBzdGF5IHNpbGVudC5cXG5fcGZfZGRibGFkX2RlZnNfcmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0ZXZlcnkgZCBpbiBbeCB8IHNvbWUgeCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKV0ge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzLiVkLktleVNjaGVtYVxcXCIsIFtsLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiTFNJIGtleSBhdHRyaWJ1dGUgJyVzJyBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSByZWZlcmVuY2VkIGluIGEgS2V5U2NoZW1hIGVsZW1lbnQgaXMgbm90IGRlZmluZWQgaW4gQXR0cmlidXRlRGVmaW5pdGlvbnNcXFxcXFxcIlxcXCIsIFthdHRyXSksXFxuXFx0XFxcIkFkZCB0aGUgYXR0cmlidXRlIHRvIEF0dHJpYnV0ZURlZmluaXRpb25zIChhbmQgbm93aGVyZSBlbHNlOiBvbmx5IGtleSBhdHRyaWJ1dGVzIGJlbG9uZyB0aGVyZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRjb3VudChfcGZfZGRibGFkX2RlZnMobmFtZSkpID4gMFxcblxcdF9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRhdHRyIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhhdHRyKVxcblxcdG5vdCBhdHRyIGluIF9wZl9kZGJsYWRfZGVmcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFuIExTSSBuZWVkcyBhIFJBTkdFIGtleSBhbmQgdGhlIHRhYmxlJ3MgbGVhZGluZyBoYXNoIGtleVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRibHNoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1sb2NhbHNlY29uZGFyeWluZGV4Lmh0bWxcXFwiXFxuXFxuX3BmX2RkYmxzaF9rZXl0eXBlcyhrcykgOj0ge2t0IHxcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRrdCA6PSBvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoa3QpXFxufVxcblxcbiMgT25seSBqdWRnZSBhIGtleSBzY2hlbWEgd2hvc2UgS2V5VHlwZXMgYXJlIGFsbCBsaXRlcmFsIHN0cmluZ3MuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlKGtzKSBpZiBjb3VudChfcGZfZGRibHNoX2tleXR5cGVzKGtzKSkgPiAwXFxuXFxuX3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcykgaWYge1xcblxcdGV2ZXJ5IGsgaW4ga3Mge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyBoYXMgbm8gUkFOR0Uga2V5OyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiSW5kZXggS2V5U2NoZW1hIGRvZXMgbm90IGhhdmUgYSByYW5nZSBrZXkgZm9yIGluZGV4XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSB0aGUgTFNJIGEgc29ydCBrZXk6IFt0YWJsZSBIQVNIIGtleSwgaXRzIG93biBSQU5HRSBrZXldXFxcIixcXG5cXHRfcGZfZGRibHNoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRjb3VudChrcykgPiAwXFxuXFx0X3BmX2RkYmxzaF9yZXNvbHZhYmxlX2FsbChrcylcXG5cXHRub3QgXFxcIlJBTkdFXFxcIiBpbiBfcGZfZGRibHNoX2tleXR5cGVzKGtzKVxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWxzaS1zaGFwZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMb2NhbCBzZWNvbmRhcnkgaW5kZXggJyVzJyB1c2VzIGhhc2gga2V5ICclcycgYnV0IHRoZSB0YWJsZSdzIGhhc2gga2V5IGlzICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBsZWFkaW5nIGhhc2gga2V5IGFzIHRhYmxlIEtleVNjaGVtYVxcXFxcXFwiXFxcIiwgW2luYW1lLCBsc2lIYXNoLCB0YWJsZUhhc2hdKSxcXG5cXHRcXFwiQW4gTFNJIG11c3QgcmV1c2UgdGhlIHRhYmxlJ3MgcGFydGl0aW9uIGtleTsgdXNlIGEgZ2xvYmFsIHNlY29uZGFyeSBpbmRleCBmb3IgYSBkaWZmZXJlbnQgaGFzaCBrZXlcXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSB0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5LZXlTY2hlbWFcXFwiKVxcblxcdHQuaW5kZXggPT0gMFxcblxcdHRhYmxlSGFzaCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFibGVIYXNoKVxcblxcdHNvbWUgbCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRrcyA6PSBvYmplY3QuZ2V0KGwudmFsdWUsIFxcXCJLZXlTY2hlbWFcXFwiLCBbXSlcXG5cXHRzb21lIGsgaW4ga3NcXG5cXHRvYmplY3QuZ2V0KGssIFxcXCJLZXlUeXBlXFxcIiwgbnVsbCkgPT0gXFxcIkhBU0hcXFwiXFxuXFx0bHNpSGFzaCA6PSBvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobHNpSGFzaClcXG5cXHRsc2lIYXNoICE9IHRhYmxlSGFzaFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFibGVOYW1lIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIChtaW5pbXVtIDMgY2hhcmFjdGVycykgaXMgZW5mb3JjZWQuIFRoZSAyNTUtY2hhclxcbiMgbWF4aW11bSBhbmQgdGhlIGNoYXJhY3RlciBwYXR0ZXJuIHdlcmUgbm90IG1lYXN1cmVkLiBOb3RlIHJlc29sdmUoKSB0dXJucyBhXFxuIyBSZWYtdG8tcmVzb3VyY2UgaW50byB0aGUgdGFyZ2V0J3MgbG9naWNhbCBJRDsgYSBsb2dpY2FsIElEIHNob3J0IGVub3VnaCB0b1xcbiMgdHJpcCB0aGlzIHJ1bGUgd2hpbGUgZmVlZGluZyBhIFRhYmxlTmFtZSBpcyB0cmVhdGVkIGFzIHRoZSBidWcgaXQgYWxtb3N0XFxuIyBjZXJ0YWlubHkgaXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi10YWJsZS1uYW1lLWxlbmd0aFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUYWJsZU5hbWUgJyVzJyBpcyBzaG9ydGVyIHRoYW4gMyBjaGFyYWN0ZXJzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWVtYmVyIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDNcXFxcXFxcIlxcXCIsIFt0bl0pLFxcblxcdFxcXCJVc2UgYSB0YWJsZSBuYW1lIG9mIGF0IGxlYXN0IDMgY2hhcmFjdGVycywgb3Igb21pdCBUYWJsZU5hbWUgYW5kIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlVGFibGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhYmxlTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGNvdW50KHRuKSA8IDNcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItc2ctcG9ydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWN1cml0eSBncm91cCBUQ1AvVURQIHBvcnRzIG11c3QgYmUgd2l0aGluIDAtNjU1MzUgYW5kIEZyb21Qb3J0IDw9IFRvUG9ydFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXCIsXG4gICAgICBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3NnX2ZpeCA6PSBcXFwiVXNlIGEgcG9ydCBiZXR3ZWVuIDAgYW5kIDY1NTM1IHdpdGggRnJvbVBvcnQgPD0gVG9Qb3J0XFxcIlxcblxcbl9wZl9zZ191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXV0aG9yaXplU2VjdXJpdHlHcm91cEluZ3Jlc3MuaHRtbFxcXCJcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfcG9ydF9vdXQobikgaWYgbiA+IDY1NTM1XFxuXFxuX3BmX3RjcF91ZHAocCkgaWYgcCBpbiB7XFxcInRjcFxcXCIsIFxcXCJ1ZHBcXFwiLCBcXFwiNlxcXCIsIFxcXCIxN1xcXCIsIDYsIDE3fVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuJXNcXFwiLCBbZGlyLCBpdGVtLmluZGV4LCBwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBwbmFtZSwgbnVsbCkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuRnJvbVBvcnRcXFwiLCBbZGlyLCBpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBcXFwiKVxcblxcdHNvbWUgZGlyIGluIHtcXFwiU2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiU2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW2Rpcl0pKVxcblxcdGVudHJ5IDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoZW50cnkpXFxuXFx0X3BmX3RjcF91ZHAob2JqZWN0LmdldChlbnRyeSwgXFxcIklwUHJvdG9jb2xcXFwiLCBudWxsKSlcXG5cXHRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiRnJvbVBvcnRcXFwiLCBudWxsKSlcXG5cXHR0IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGVudHJ5LCBcXFwiVG9Qb3J0XFxcIiwgbnVsbCkpXFxuXFx0ZiA+PSAwXFxuXFx0dCA8PSA2NTUzNVxcblxcdGYgPiB0XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSxcXG5cXHRzcHJpbnRmKFxcXCIlcyAldiBpcyBvdXRzaWRlIHRoZSB2YWxpZCBUQ1AvVURQIHBvcnQgcmFuZ2UgMC02NTUzNVxcXCIsIFtwbmFtZSwgbl0pLFxcblxcdF9wZl9zZ19maXgsIF9wZl9zZ191cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlIGluIHtcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBJbmdyZXNzXFxcIiwgXFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0X3BmX3RjcF91ZHAocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5JcFByb3RvY29sXFxcIikpXFxuXFx0c29tZSBwbmFtZSBpbiB7XFxcIkZyb21Qb3J0XFxcIiwgXFxcIlRvUG9ydFxcXCJ9XFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BuYW1lXSkpKVxcblxcdF9wZl9wb3J0X291dChuKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi1zZy1wb3J0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Gcm9tUG9ydFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRnJvbVBvcnQgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBUb1BvcnQgKCV2KVxcXCIsIFtmLCB0XSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRmIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIikpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub1BvcnRcXFwiKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjMlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFQzIgdXNlciBkYXRhIGlzIGxpbWl0ZWQgdG8gMTYzODQgYnl0ZXNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpJbnN0YW5jZVwiLFxuICAgICAgXCJBV1M6OkVDMjo6TGF1bmNoVGVtcGxhdGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdWRzel9maXggOj0gXFxcIktlZXAgdXNlciBkYXRhIHVuZGVyIDE2Mzg0IGJ5dGVzOyBtb3ZlIGxhcmdlIHBheWxvYWRzIHRvIFMzIGFuZCBmZXRjaCB0aGVtIGZyb20gYSBzbWFsbCBib290c3RyYXAgc2NyaXB0XFxcIlxcblxcbl9wZl91ZHN6X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2luc3RhbmNlZGF0YS1hZGQtdXNlci1kYXRhLmh0bWxcXFwiXFxuXFxuX3BmX3Vkc3pfbGltaXQgOj0gMTYzODRcXG5cXG4jIGJhc2U2NCDmloflrZfliJfjga7jg4fjgrPjg7zjg4nlvozjg5DjgqTjg4jmlbDvvIjjg5Hjg4fjgqPjg7PjgrDogIPmha7vvIlcXG5fcGZfdWRzel9kZWNvZGVkKHMpIDo9ICgoY291bnQocykgKiAzKSAvIDQpIC0gMiBpZiBlbmRzd2l0aChzLCBcXFwiPT1cXFwiKVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAxIGlmIHtcXG5cXHRlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFx0bm90IGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxufVxcblxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKGNvdW50KHMpICogMykgLyA0IGlmIG5vdCBlbmRzd2l0aChzLCBcXFwiPVxcXCIpXFxuXFxuX3BmX3Vkc3pfcGF0aHMgOj0ge1xcblxcdFxcXCJBV1M6OkVDMjo6SW5zdGFuY2VcXFwiOiBcXFwiUHJvcGVydGllcy5Vc2VyRGF0YVxcXCIsXFxuXFx0XFxcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLkxhdW5jaFRlbXBsYXRlRGF0YS5Vc2VyRGF0YVxcXCIsXFxufVxcblxcbiMgVXNlckRhdGEg44GM44Oq44OG44Op44OrIGJhc2U2NCDmloflrZfliJfjga7jgrHjg7zjgrlcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi11c2VyZGF0YS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgcCxcXG5cXHRzcHJpbnRmKFxcXCJVc2VyRGF0YSBkZWNvZGVzIHRvIGFib3V0ICV2IGJ5dGVzLCBidXQgRUMyIGxpbWl0cyB1c2VyIGRhdGEgdG8gJWQgYnl0ZXM7IFJ1bkluc3RhbmNlcyBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtzaXplLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfc3RyaW5nKHVkKVxcblxcdHNpemUgOj0gX3BmX3Vkc3pfZGVjb2RlZCh1ZClcXG5cXHRzaXplID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYwge1xcXCJGbjo6QmFzZTY0XFxcIjogXFxcIjxsaXRlcmFsPlxcXCJ9IOOBruOCseODvOOCue+8iOOCqOODs+OCs+ODvOODieWJjeOBrueUn+ODkOOCpOODiOaVsOOBp+WIpOWumu+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGlzICVkIGJ5dGVzIGJlZm9yZSBiYXNlNjQgZW5jb2RpbmcsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW2NvdW50KGlubmVyKSwgX3BmX3Vkc3pfbGltaXRdKSxcXG5cXHRfcGZfdWRzel9maXgsIF9wZl91ZHN6X3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUsIHAgaW4gX3BmX3Vkc3pfcGF0aHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0dWQgOj0gcmVzb2x2ZShuYW1lLCBwKVxcblxcdGlzX29iamVjdCh1ZClcXG5cXHRpbm5lciA6PSBvYmplY3QuZ2V0KHVkLCBcXFwiRm46OkJhc2U2NFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGlubmVyKVxcblxcdGNvdW50KGlubmVyKSA+IF9wZl91ZHN6X2xpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWMyLXZvbHVtZS1pb3BzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVCUyBJb3BzL1Rocm91Z2hwdXQgbXVzdCBtYXRjaCB0aGUgdm9sdW1lIHR5cGUncyBzdXBwb3J0ZWQgcmFuZ2VzIGFuZCByYXRpb3NcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUMyOjpWb2x1bWVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfdm9saW9wc19maXggOj0gXFxcIk1hdGNoIElvcHMvVGhyb3VnaHB1dCB0byB0aGUgdm9sdW1lIHR5cGU6IGdwMyAzMDAwLTgwMDAwIElPUFMgKG1heCA1MDAvR2lCLCB0aHJvdWdocHV0IDEyNS0yMDAwIE1pQi9zIGFuZCBhdCBtb3N0IElPUFMvNCksIGlvMSAxMDAtNjQwMDAgKG1heCA1MC9HaUIpLCBpbzIgMTAwLTI1NjAwMCAobWF4IDEwMDAvR2lCKTsgZ3AyL3N0MS9zYzEvc3RhbmRhcmQgYWNjZXB0IG5laXRoZXIgcHJvcGVydHlcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZWJzLXZvbHVtZS10eXBlcy5odG1sXFxcIlxcblxcbl9wZl92b2xpb3BzX3JhbmdlIDo9IHtcXFwiZ3AzXFxcIjogWzMwMDAsIDgwMDAwXSwgXFxcImlvMVxcXCI6IFsxMDAsIDY0MDAwXSwgXFxcImlvMlxcXCI6IFsxMDAsIDI1NjAwMF19XFxuXFxuX3BmX3ZvbGlvcHNfcGVyX2dpYiA6PSB7XFxcImdwM1xcXCI6IDUwMCwgXFxcImlvMVxcXCI6IDUwLCBcXFwiaW8yXFxcIjogMTAwMH1cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuIDwgbG9cXG5cXG5fcGZfdm9saW9wc19vdXQobiwgbG8sIGhpKSBpZiBuID4gaGlcXG5cXG5fcGZfdm9saW9wc19oYXNfaW9wcyhuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKVxcblxcbiMgSU9QUyDjgYzlnovjgZTjgajjga7ntbblr77jg6zjg7PjgrjlpJZcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgaXMgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlICVkLSVkIGZvciAlcyB2b2x1bWVzXFxcIiwgW24sIHJbMF0sIHJbMV0sIHZ0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0ciA6PSBfcGZfdm9saW9wc19yYW5nZVt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQobiwgclswXSwgclsxXSlcXG59XFxuXFxuIyBJT1BTIDog44K144Kk44K65q+U44Gu6LaF6YGOXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJJb3BzICV2IGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgJWQgSU9QUyBwZXIgR2lCIGZvciAlcyAoU2l6ZSAldiBHaUIgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW24sIHJhdGlvLCB2dCwgcywgcyAqIHJhdGlvXSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0cmF0aW8gOj0gX3BmX3ZvbGlvcHNfcGVyX2dpYlt2dF1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNpemVcXFwiKSlcXG5cXHRuID4gcyAqIHJhdGlvXFxufVxcblxcbiMgSW9wcyDjgpLlj5fjgZHku5jjgZHjgarjgYTlnovjgasgSW9wcyDjgpLmjIflrppcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMgdm9sdW1lcyAodmFsaWQgb25seSBmb3IgZ3AzLCBpbzEsIGlvMik7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdHZ0IGluIHtcXFwiZ3AyXFxcIiwgXFxcInN0MVxcXCIsIFxcXCJzYzFcXFwiLCBcXFwic3RhbmRhcmRcXFwifVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxufVxcblxcbiMgVGhyb3VnaHB1dCDjga8gZ3AzIOWwgueUqFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMpOyBFQzIgcmVqZWN0cyB0aGUgQ3JlYXRlVm9sdW1lIGNhbGxcXFwiLCBbdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRpc19zdHJpbmcodnQpXFxuXFx0dnQgIT0gXFxcImdwM1xcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IOOBrue1tuWvvuODrOODs+OCuFxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgMTI1LTIwMDAgZm9yIGdwMyB2b2x1bWVzXFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRfcGZfdm9saW9wc19vdXQodCwgMTI1LCAyMDAwKVxcbn1cXG5cXG4jIGdwMyBUaHJvdWdocHV0IDogSU9QUyDmr5TvvIjmnIDlpKcgMC4yNSBNaUIvcyBwZXIgSU9QU++8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhyb3VnaHB1dCAldiBNaUIvcyBleGNlZWRzIHRoZSBtYXhpbXVtIHJhdGlvIG9mIDAuMjUgTWlCL3MgcGVyIHByb3Zpc2lvbmVkIElPUFMgKCV2IElPUFMgYWxsb3dzIGF0IG1vc3QgJXYpXFxcIiwgW3QsIG4sIG4gLyA0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0biA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIikpXFxuXFx0dCAqIDQgPiBuXFxufVxcblxcbiMgZ3AzIOOBpyBJb3BzIOacquaMh+Wumu+8iOODh+ODleOCqeODq+ODiCAzMDAw77yJ44Gu44Go44GN44GuIFRocm91Z2hwdXQg5q+UXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgNzUwLCB0aGUgbWF4aW11bSBmb3IgdGhlIGRlZmF1bHQgMzAwMCBJT1BTICgwLjI1IE1pQi9zIHBlciBJT1BTKTsgcHJvdmlzaW9uIElvcHMgZXhwbGljaXRseSBvciBsb3dlciB0aGUgdGhyb3VnaHB1dFxcXCIsIFt0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpID09IFxcXCJncDNcXFwiXFxuXFx0bm90IF9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpXFxuXFx0dCA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIikpXFxuXFx0dCA+IDc1MFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItZGVmaW5pdGlvbnMtZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyRGVmaW5pdGlvbnMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBjb250YWluZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzY2RlX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2Vjc2NkZV9tc2cgOj0gXFxcIlJlZ2lzdGVyVGFza0RlZmluaXRpb24gbmVlZHMgYXQgbGVhc3Qgb25lIGNvbnRhaW5lcjsgdGhlIHNlcnZpY2UgZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBsaXN0IGNhbm5vdCBiZSBlbXB0eVxcXFxcXFwiXFxcIlxcblxcbl9wZl9lY3NjZGVfZml4IDo9IFxcXCJBZGQgYXQgbGVhc3Qgb25lIGVudHJ5IHRvIENvbnRhaW5lckRlZmluaXRpb25zXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBtYXJrcyBubyBUYXNrRGVmaW5pdGlvbiBwcm9wZXJ0eSBhcyByZXF1aXJlZCwgc28gYW5cXG4jIGFic2VudCBvciBlbXB0eSBDb250YWluZXJEZWZpbml0aW9ucyBzYWlscyB0aHJvdWdoIHNjaGVtYSB2YWxpZGF0aW9uIGFuZFxcbiMgZGllcyBhdCByZWdpc3RyYXRpb24uIGZsYXR0ZW5fbGlzdCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIGFic2VudCBhbmRcXG4jIGVtcHR5IGFsaWtlLCBzbyBib3RoIGJsb2NrcyByZWFkIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcylcXG4jIHRvIHRlbGwgYSBsaXRlcmFsIGVtcHR5IGxpc3QgZnJvbSBhbiB1bnJlc29sdmFibGUgdmFsdWUgc3VjaCBhcyBGbjo6SWYuXFxuX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKSA6PSBwcm9wcyBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NjZGVfbXNnLFxcblxcdF9wZl9lY3NjZGVfZml4LFxcblxcdF9wZl9lY3NjZGVfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHByb3BzIDo9IF9wZl9lY3NjZGVfcHJvcHMobmFtZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChwcm9wcywgXFxcIkNvbnRhaW5lckRlZmluaXRpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShyYXcpXFxuXFx0Y291bnQocmF3KSA9PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIE1lbW9yeSBtdXN0IG5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEEgc2luZ2xlIGNvbnRhaW5lcidzIGhhcmQgTWVtb3J5IGxpbWl0IGNhbm5vdCBleGNlZWQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LlxcbiMgVGFzayBNZW1vcnkgYXJyaXZlcyBhcyBhIHN0cmluZyAoXFxcIjUxMlxcXCIpOyB0b19udW1iZXIgY292ZXJzIGJvdGggc3BlbGxpbmdzIGFuZFxcbiMgbWFrZXMgdGhlIHJ1bGUgc2tpcCB3aGVuIGVpdGhlciBzaWRlIGlzIHVucmVzb2x2YWJsZSBvciBHQi1zdWZmaXhlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LW92ZXItdGFza1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlcXFwiLCBbYy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciAnJXMnIHNldHMgTWVtb3J5ICV2IGFib3ZlIHRoZSB0YXNrLWxldmVsIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiVGhlICdtZW1vcnknIHNldHRpbmcgZm9yIGNvbnRhaW5lciAnJXMnIGlzIGdyZWF0ZXIgdGhhbiBmb3IgdGhlIHRhc2tcXFxcXFxcIlxcXCIsIFtjbmFtZSwgY20sIHRtLCBjbmFtZV0pLFxcblxcdFxcXCJMb3dlciB0aGUgY29udGFpbmVyIE1lbW9yeSB0byBhdCBtb3N0IHRoZSB0YXNrLWxldmVsIE1lbW9yeSwgb3IgcmFpc2UgdGhlIHRhc2stbGV2ZWwgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHRtIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1lbW9yeVxcXCIpKVxcblxcdHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiKVxcblxcdGlzX29iamVjdChjLnZhbHVlKVxcblxcdGNtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRjbSA+IHRtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgY29udGFpbmVyIG5lZWRzIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbiB3aGVuIHRoZSB0YXNrIHNldHMgbm8gTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzbWVtcmVxX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgV2hlbiB0aGUgdGFzayBkZWZpbml0aW9uIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeSwgZXZlcnkgY29udGFpbmVyIG11c3Qgc2V0XFxuIyBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb24uIFByb3ZpbmcgdHJ1ZSBhYnNlbmNlIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWRcXG4jIGRvY3VtZW50IChpbnB1dC5yZXNvdXJjZXMpOiByZXNvbHZlKCkgaXMgdW5kZWZpbmVkIGZvciBhIG1pc3Npbmcga2V5IGFuZCBmb3JcXG4jIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBhbGlrZSwgc28gaXQgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwiUmVmIHRvIGFcXG4jIHBhcmFtZXRlclxcXCIuIFRoZSBpc19vYmplY3QgZ3VhcmQgZmFpbHMgY2xvc2VkIGlmIHRoYXQgaW50ZXJuYWwgc2hhcGUgY2hhbmdlcy5cXG5fcGZfZWNzbWVtcmVxX3Rhc2tfbWVtb3J5X2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk1lbW9yeVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXF1aXJlZFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZFxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBuZWl0aGVyIE1lbW9yeSBub3IgTWVtb3J5UmVzZXJ2YXRpb24gYW5kIHRoZSB0YXNrIGhhcyBubyB0YXNrLWxldmVsIE1lbW9yeTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mICdtZW1vcnknIG9yICdtZW1vcnlSZXNlcnZhdGlvbicgbXVzdCBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtjbmFtZV0pLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnksIG9yIGdpdmUgdGhlIGNvbnRhaW5lciBNZW1vcnkgb3IgTWVtb3J5UmVzZXJ2YXRpb25cXFwiLFxcblxcdF9wZl9lY3NtZW1yZXFfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkgPT0gbnVsbFxcblxcdGNuYW1lIDo9IG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNZW1vcnlSZXNlcnZhdGlvbiBtdXN0IG5vdCBleGNlZWQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE1lbW9yeVJlc2VydmF0aW9uIGlzIGEgc29mdCBmbG9vciBhbmQgTWVtb3J5IGEgaGFyZCBjZWlsaW5nOyB0aGUgc2VydmljZVxcbiMgcmVqZWN0cyBhIGZsb29yIGFib3ZlIHRoZSBjZWlsaW5nLiB0b19udW1iZXIgZmFpbHMgKGFuZCB0aGUgcnVsZSBza2lwcykgd2hlblxcbiMgZWl0aGVyIHZhbHVlIGlzIGFic2VudCBvciB1bnJlc29sdmFibGUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1yZXNlcnZhdGlvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5NZW1vcnlSZXNlcnZhdGlvblxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnlSZXNlcnZhdGlvbiAldiBhYm92ZSBNZW1vcnkgJXY7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIidtZW1vcnknIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICdtZW1vcnlSZXNlcnZhdGlvbidcXFxcXFxcIlxcXCIsIFtjbmFtZSwgbXIsIG1dKSxcXG5cXHRcXFwiTG93ZXIgTWVtb3J5UmVzZXJ2YXRpb24gdG8gYXQgbW9zdCBNZW1vcnksIG9yIHJhaXNlIE1lbW9yeVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5XFxcIiwgbnVsbCkpXFxuXFx0bXIgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgbnVsbCkpXFxuXFx0bXIgPiBtXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25lIGRpYWdub3N0aWMgcGVyIGR1cGxpY2F0ZWQgbGF0ZXIgb2NjdXJyZW5jZTsgb25seSBsaXRlcmFsIHN0cmluZyBuYW1lc1xcbiMgY2FuIGJlIGNvbXBhcmVkLCBzbyBhIFJlZi12YWx1ZWQgTmFtZSBza2lwcyBpdHMgcGFpcnMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZHVwbGljYXRlLWNvbnRhaW5lci1uYW1lc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9ucy4lZC5OYW1lXFxcIiwgW2IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgbmFtZSAnJXMnIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkNvbnRhaW5lciBuYW1lcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB0YXNrIGRlZmluaXRpb25cXFxcXFxcIlxcXCIsIFtuYV0pLFxcblxcdFxcXCJHaXZlIGV2ZXJ5IGNvbnRhaW5lciBpbiB0aGUgdGFzayBkZWZpbml0aW9uIGEgZGlzdGluY3QgTmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRuYSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcobmEpXFxuXFx0bmEgPT0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiTmFtZVxcXCIsIG51bGwpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVwaGVtZXJhbFN0b3JhZ2UgU2l6ZUluR2lCIG11c3QgYmUgMjEtMjAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2VwaF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWVwaGVtZXJhbHN0b3JhZ2UuaHRtbFxcXCJcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgY2FycmllcyBubyBtaW5pbXVtL21heGltdW0gZm9yIFNpemVJbkdpQiwgc28gMjEtMjAwIGlzXFxuIyBlbmZvcmNlZCBvbmx5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYmVsb3cgMjE7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbGVhc3QgMjFcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQiwgb3IgZHJvcCBFcGhlbWVyYWxTdG9yYWdlIHRvIGtlZXAgdGhlIGRlZmF1bHQgMjAgR2lCXFxcIixcXG5cXHRfcGZfZWNzZXBoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIikpXFxuXFx0cyA8IDIxXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWVwaGVtZXJhbC1zdG9yYWdlLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIsXFxuXFx0c3ByaW50ZihcXFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgJXYgaXMgYWJvdmUgMjAwOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJFcGhlbWVyYWxTdG9yYWdlIHNpemUgc2hvdWxkIGJlIGF0IG1vc3QgMjAwXFxcXFxcXCJcXFwiLCBbc10pLFxcblxcdFxcXCJVc2UgYSBzaXplIGJldHdlZW4gMjEgYW5kIDIwMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzID4gMjAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWVzc2VudGlhbC1jb250YWluZXJcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQXQgbGVhc3Qgb25lIGNvbnRhaW5lciBtdXN0IGJlIGVzc2VudGlhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBFc3NlbnRpYWwgZGVmYXVsdHMgdG8gdHJ1ZSwgc28gdGhlIHJ1bGUgZmlyZXMgb25seSB3aGVuIGV2ZXJ5IGNvbnRhaW5lciBzYXlzXFxuIyBFc3NlbnRpYWw6IGZhbHNlIGV4cGxpY2l0bHkuIEEgY29udGFpbmVyIHdob3NlIEVzc2VudGlhbCBpcyB1bnJlc29sdmFibGUgKG9yXFxuIyBhIG5vbi1ib29sZWFuKSBicmVha3MgdGhlIGBldmVyeWAsIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgYWJzZW5jZSBvZiBhblxcbiMgZXNzZW50aWFsIGNvbnRhaW5lciBjYW5ub3QgYmUgcHJvdmVuIHRoZW4uXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLFxcblxcdFxcXCJFdmVyeSBjb250YWluZXIgc2V0cyBFc3NlbnRpYWw6IGZhbHNlOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUYXNrIGRlZmluaXRpb24gZG9lc24ndCBoYXZlIGFueSBlc3NlbnRpYWwgY29udGFpbmVyXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJNYXJrIGF0IGxlYXN0IG9uZSBjb250YWluZXIgRXNzZW50aWFsOiB0cnVlLCBvciBvbWl0IEVzc2VudGlhbCAoaXQgZGVmYXVsdHMgdG8gdHJ1ZSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdGl0ZW1zIDo9IFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRldmVyeSBjIGluIGl0ZW1zIHtcXG5cXHRcXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJFc3NlbnRpYWxcXFwiLCBudWxsKSA9PSBmYWxzZVxcblxcdH1cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRmFyZ2F0ZSB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmUgTmV0d29ya01vZGUgJ2F3c3ZwYydcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NubV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Rhc2tfZGVmaW5pdGlvbl9wYXJhbWV0ZXJzLmh0bWwjbmV0d29ya19tb2RlXFxcIlxcblxcbiMgcmVzb2x2ZSgpIGNhbm5vdCB0ZWxsIFxcXCJhYnNlbnRcXFwiIGZyb20gXFxcInVucmVzb2x2YWJsZVxcXCIgKGJvdGggdW5kZWZpbmVkKSwgc28gdHJ1ZVxcbiMgYWJzZW5jZSBpcyBwcm92ZW4gYWdhaW5zdCB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50OyBhIFJlZi12YWx1ZWQgTmV0d29ya01vZGVcXG4jIG5vIGxvbmdlciB0cmlwcyB0aGUgbm90LXNldCBibG9jay5cXG5fcGZfZWNzbm1fYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTmV0d29ya01vZGVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiTmV0d29ya01vZGUgaXMgJyVzJyBidXQgdGFzayBkZWZpbml0aW9ucyByZXF1aXJpbmcgRkFSR0FURSBjb21wYXRpYmlsaXR5IG11c3QgdXNlICdhd3N2cGMnOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW25tXSksXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRubSA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIilcXG5cXHRpc19zdHJpbmcobm0pXFxuXFx0bm0gIT0gXFxcImF3c3ZwY1xcXCJcXG59XFxuXFxuIyBOZXR3b3JrTW9kZSDmnKrmjIflrprjgafjgoIgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiDjga9cXG4jIFxcXCJGYXJnYXRlIG9ubHkgc3VwcG9ydHMgbmV0d29yayBtb2RlICdhd3N2cGMnLlxcXCIg44Gn5aSx5pWX44GZ44KL77yIMjAyNi0wOS0wMSDlrp8gQVBJIOeiuuiqje+8iVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtbmV0d29yay1tb2RlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5OZXR3b3JrTW9kZVxcXCIsXFxuXFx0XFxcIk5ldHdvcmtNb2RlIGlzIG5vdCBzZXQsIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCBzZXQgaXQgdG8gJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJTZXQgTmV0d29ya01vZGUgdG8gJ2F3c3ZwYydcXFwiLFxcblxcdF9wZl9lY3NubV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cmMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXF1aXJlc0NvbXBhdGliaWxpdGllc1xcXCIpXFxuXFx0aXNfYXJyYXkocmMpXFxuXFx0XFxcIkZBUkdBVEVcXFwiIGluIHJjXFxuXFx0X3BmX2Vjc25tX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGQVJHQVRFIGNvbXBhdGliaWxpdHkgcmVxdWlyZXMgdGFzay1sZXZlbCBDcHUgYW5kIE1lbW9yeVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc2ZhcmdjbV91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWVjcy10YXNrZGVmaW5pdGlvbi5odG1sXFxcIlxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDQ3IGNoZWNrcyB0aGUgQ3B1L01lbW9yeSBwYWlyaW5nIG9ubHkgd2hlbiBib3RoIGFyZSBwcmVzZW50O1xcbiMgbGVhdmluZyBvbmUgb3V0IGVudGlyZWx5IGlzIGNhdWdodCBieSBub3RoaW5nIGJlZm9yZSByZWdpc3RyYXRpb24uIFRydWVcXG4jIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIHBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxuIyBmb3IgdGhlIGlkaW9tKS5cXG5fcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSkgaWYge1xcblxcdHNvbWUgcmMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRyYy52YWx1ZSA9PSBcXFwiRkFSR0FURVxcXCJcXG59XFxuXFxuX3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwga2V5KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywga2V5LCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5DcHVcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBDcHUgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdjcHUnIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIENwdSAoYW5kIE1lbW9yeSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJDcHVcXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1mYXJnYXRlLXRhc2stY3B1LW1lbW9yeVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIixcXG5cXHRcXFwiUmVxdWlyZXNDb21wYXRpYmlsaXRpZXMgaW5jbHVkZXMgRkFSR0FURSBidXQgdGhlIHRhc2stbGV2ZWwgTWVtb3J5IGlzIG1pc3Npbmc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkZhcmdhdGUgcmVxdWlyZXMgdGhhdCAnbWVtb3J5JyBiZSBkZWZpbmVkIGF0IHRoZSB0YXNrIGxldmVsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgdGFzay1sZXZlbCBNZW1vcnkgKGFuZCBDcHUpIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIEZhcmdhdGUgY29tYmluYXRpb25zXFxcIixcXG5cXHRfcGZfZWNzZmFyZ2NtX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRfcGZfZWNzZmFyZ2NtX2ZhcmdhdGUobmFtZSlcXG5cXHRfcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBcXFwiTWVtb3J5XFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlbGJ2MlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBTEIgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMb2FkQmFsYW5jZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaWRsZV90aW1lb3V0X291dChuKSBpZiBuIDwgMVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPiA0MDAwXFxuXFxuX3BmX25vbl9hbGIobmFtZSkgaWYge1xcblxcdHQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIilcXG5cXHR0ICE9IFxcXCJhcHBsaWNhdGlvblxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi1sYi1pZGxlLXRpbWVvdXQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTG9hZEJhbGFuY2VyQXR0cmlidXRlcy4lZC5WYWx1ZVxcXCIsIFtpdGVtLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDQwMDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDQwMDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2FwcGxpY2F0aW9uLWxvYWQtYmFsYW5jZXJzLmh0bWwjY29ubmVjdGlvbi1pZGxlLXRpbWVvdXRcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclxcXCIpXFxuXFx0bm90IF9wZl9ub25fYWxiKG5hbWUpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImlkbGVfdGltZW91dC50aW1lb3V0X3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9pZGxlX3RpbWVvdXRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX2RlcmVnX2RlbGF5X291dChuKSBpZiBuID4gMzYwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctZGVyZWdpc3RyYXRpb24tZGVsYXktcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzNjAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBkZXJlZ2lzdHJhdGlvbl9kZWxheS50aW1lb3V0X3NlY29uZHMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDM2MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNkZXJlZ2lzdHJhdGlvbi1kZWxheVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2RlcmVnX2RlbGF5X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRhcmdldCBncm91cCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgbXVzdCBiZSAwIG9yIGJldHdlZW4gMzAgYW5kIDkwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9zbG93X3N0YXJ0X291dChuKSBpZiB7XFxuXFx0biA+IDBcXG5cXHRuIDwgMzBcXG59XFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPiA5MDBcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLXRnLXNsb3ctc3RhcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgaXMgJXYgYnV0IG11c3QgYmUgMCAoZGlzYWJsZWQpIG9yIGJldHdlZW4gMzAgYW5kIDkwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgc2xvd19zdGFydC5kdXJhdGlvbl9zZWNvbmRzIHRvIDAgb3IgYSB2YWx1ZSBiZXR3ZWVuIDMwIGFuZCA5MDBcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2VkaXQtdGFyZ2V0LWdyb3VwLWF0dHJpYnV0ZXMuaHRtbCNzbG93LXN0YXJ0LW1vZGVcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXFxcIilcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldEdyb3VwQXR0cmlidXRlc1xcXCIpXFxuXFx0YXR0ciA6PSBpdGVtLnZhbHVlXFxuXFx0aXNfb2JqZWN0KGF0dHIpXFxuXFx0b2JqZWN0LmdldChhdHRyLCBcXFwiS2V5XFxcIiwgXFxcIlxcXCIpID09IFxcXCJzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHNcXFwiXFxuXFx0bnVtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGF0dHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpKVxcblxcdF9wZl9zbG93X3N0YXJ0X291dChudW0pXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLWlubGluZS1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJJbmxpbmUgcG9saWN5IGRvY3VtZW50cyBhcmUgbGltaXRlZCBwZXIgaWRlbnRpdHkgKHJvbGUgMTAyNDAgLyBncm91cCA1MTIwIC8gdXNlciAyMDQ4IGNoYXJhY3RlcnMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6UG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpSb2xlUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpVc2VyUG9saWN5XCIsXG4gICAgICBcIkFXUzo6SUFNOjpHcm91cFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pbmxpbmVfcG9saWN5X2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpQb2xpY3lcXFwiOiAxMDI0MCxcXG5cXHRcXFwiQVdTOjpJQU06OlJvbGVQb2xpY3lcXFwiOiAxMDI0MCxcXG5cXHRcXFwiQVdTOjpJQU06OlVzZXJQb2xpY3lcXFwiOiAyMDQ4LFxcblxcdFxcXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcXFwiOiA1MTIwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJQb2xpY3lEb2N1bWVudCBpcyAlZCBjaGFyYWN0ZXJzIChKU09OIHdpdGhvdXQgd2hpdGVzcGFjZSkgYnV0IHRoZSBpbmxpbmUgcG9saWN5IGxpbWl0IGZvciAlcyBpcyAlZCAocm9sZTogMTAyNDAsIGdyb3VwOiA1MTIwLCB1c2VyOiAyMDQ4KVxcXCIsIFtzaXplLCBydHlwZSwgbGltaXRdKSxcXG5cXHRcXFwiTW92ZSBzdGF0ZW1lbnRzIGludG8gbWFuYWdlZCBwb2xpY2llcyBvciBzaG9ydGVuIHRoZSBkb2N1bWVudFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcnR5cGUsIGxpbWl0IGluIF9wZl9pbmxpbmVfcG9saWN5X2xpbWl0c1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRkb2MgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGRvYylcXG5cXHRzaXplIDo9IGNvdW50KGpzb24ubWFyc2hhbChkb2MpKVxcblxcdHNpemUgPiBsaW1pdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljaWVzIHBlciBpZGVudGl0eSBhcmUgY2FwcGVkIChoYXJkIG1heGltdW1zIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTApXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OklBTTo6Um9sZVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODj+ODvOODieS4iumZkO+8iFNlcnZpY2UgUXVvdGFzIOOBruOAjE1heGltdW0gcXVvdGHjgI09IOOBneOCjOS7peS4iuW8leOBjeS4iuOBkuS4jeWPr+iDveOBquWApO+8iTpcXG4jICAgcm9sZSAyNSAvIHVzZXIgMjAgLyBncm91cCAxMO+8iGdyb3VwIOOBryBhZGp1c3RhYmxlOiBmYWxzZeOAgeWun+a4rOOBp+OCgueiuuiqje+8ieOAglxcbiMg44OH44OV44Kp44Or44OI77yIcm9sZSAyMCAvIHVzZXIgMTAgLyBncm91cCAxMO+8iei2heOBr+OCouOCq+OCpuODs+ODiOOBruOCr+OCqeODvOOCv+W8leOBjeS4iuOBkuasoeesrOOBp1xcbiMg5oiQ5Yqf44GX5b6X44KL44Gf44KBIEVSUk9SIOOBq+OBl+OBquOBhO+8iGJlbmNoIOOCouOCq+OCpuODs+ODiOOBriByb2xlPTIwIOOBpyAxMSDlgIvmiJDlip/jgpLlrp/muKzmuIjjgb/vvInjgIJcXG5fcGZfaWFtcG9sX2xpbWl0cyA6PSB7XFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlXFxcIjogMjUsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyXFxcIjogMjAsXFxuXFx0XFxcIkFXUzo6SUFNOjpHcm91cFxcXCI6IDEwLFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1jb3VudFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiLFxcblxcdHNwcmludGYoXFxcIiVkIG1hbmFnZWQgcG9saWNpZXMgYXJlIGF0dGFjaGVkLCBidXQgdGhlIGhhcmQgbWF4aW11bSBmb3IgJXMgaXMgJWQgKHF1b3RhIGRlZmF1bHRzOiByb2xlIDIwLCB1c2VyIDEwLCBncm91cCAxMDsgcmFpc2FibGUgb25seSB1cCB0byB0aGUgaGFyZCBtYXhpbXVtKTsgZGVwbG95bWVudCBmYWlscyB3aXRoIExpbWl0RXhjZWVkZWRcXFwiLCBbbiwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIkNvbnNvbGlkYXRlIHN0YXRlbWVudHMgaW50byBmZXdlciBtYW5hZ2VkIHBvbGljaWVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9pYW0tcXVvdGFzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgbGltaXQgaW4gX3BmX2lhbXBvbF9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0YXJyIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWFuYWdlZFBvbGljeUFybnNcXFwiKVxcblxcdGlzX2FycmF5KGFycilcXG5cXHRuIDo9IGNvdW50KGFycilcXG5cXHRuID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImlhbVwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNYW5hZ2VkIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgdG8gNjE0NCBjaGFyYWN0ZXJzICh3aGl0ZXNwYWNlIGV4Y2x1ZGVkKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWlhbS1tYW5hZ2VkLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgbWFuYWdlZCBwb2xpY3kgbGltaXQgaXMgNjE0NFxcXCIsIFtzaXplXSksXFxuXFx0XFxcIlNwbGl0IHRoZSBkb2N1bWVudCBpbnRvIG11bHRpcGxlIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiBpdFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpJQU06Ok1hbmFnZWRQb2xpY3lcXFwiKVxcblxcdGRvYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50XFxcIilcXG5cXHRpc19vYmplY3QoZG9jKVxcblxcdHNpemUgOj0gY291bnQoanNvbi5tYXJzaGFsKGRvYykpXFxuXFx0c2l6ZSA+IDYxNDRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sYW1iZGEtZW52LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsYW1iZGFcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbGltaXRlZCB0byA0MDk2IGJ5dGVzIGluIHRvdGFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxhbWJkYTo6RnVuY3Rpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOODquODhuODqeODq+aWh+Wtl+WIl+OBruOCreODvC/lgKTjgaDjgZHjgpLmlbDjgYjjgovvvIjjg4jjg7zjgq/jg7Pjga/jgrnjgq3jg4Pjg5fvvInjgILlkIjoqIjjgYzml6LjgasgNDA5NiDjgpLotoXjgYjjgaZcXG4jIOOBhOOCjOOBsOOAgeWun+mam+OBruODh+ODl+ODreOCpOOBp+OCguW/heOBmuWkseaVl+OBmeOCi++8iOWun+OCteOCpOOCuuOBr+aOqOWumuS7peS4iuOBq+OBl+OBi+OBquOCieOBquOBhO+8ieOAglxcbiMgTk9URTog44GT44Gu44Ko44Oz44K444Oz44GuIFJlZ28g44OR44O844K144Gv5YaF5YyF6KGo6KiY5YaF44GuIDIg5aSJ5pWwIHNvbWXvvIhzb21lIGssIHYgaW4gdmFyc++8ieOCklxcbiMg5Y+X44GR5LuY44GR44Gq44GE44Gf44KB44CBb2JqZWN0LmtleXMg57WM55Sx44Gn5pu444GP44CCXFxuX3BmX2xlbnZfc2l6ZSh2YXJzKSA6PSBzdW0oW3MgfFxcblxcdHNvbWUgayBpbiBvYmplY3Qua2V5cyh2YXJzKVxcblxcdGlzX3N0cmluZyh2YXJzW2tdKVxcblxcdHMgOj0gY291bnQoaykgKyBjb3VudCh2YXJzW2tdKVxcbl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sYW1iZGEtZW52LXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvdGFsIGF0IGxlYXN0ICVkIGJ5dGVzIChsaXRlcmFsIGtleXMgYW5kIHZhbHVlcyksIGJ1dCBMYW1iZGEgbGltaXRzIHRoZSBlbnZpcm9ubWVudCB0byA0MDk2IGJ5dGVzOyBDcmVhdGVGdW5jdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFt0b3RhbF0pLFxcblxcdFxcXCJNb3ZlIGxhcmdlIHZhbHVlcyB0byBTU00gUGFyYW1ldGVyIFN0b3JlLCBTZWNyZXRzIE1hbmFnZXIsIG9yIGEgYnVuZGxlZCBjb25maWcgZmlsZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2dldHRpbmdzdGFydGVkLWxpbWl0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXFxcIilcXG5cXHR2YXJzIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRW52aXJvbm1lbnQuVmFyaWFibGVzXFxcIilcXG5cXHRpc19vYmplY3QodmFycylcXG5cXHR0b3RhbCA6PSBfcGZfbGVudl9zaXplKHZhcnMpXFxuXFx0dG90YWwgPiA0MDk2XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibG9nc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGZpbHRlciBwYXR0ZXJuIHN0YXJ0aW5nIHdpdGggJ1snIG11c3QgZW5kIHdpdGggJ10nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiLFxuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ2ZwYl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL0ZpbHRlckFuZFBhdHRlcm5TeW50YXguaHRtbFxcXCJcXG5cXG5fcGZfbGdmcGJfbXNnKGtpbmQpIDo9IHNwcmludGYoXFxcIlRoZSAlcyBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgYnV0IGRvZXMgbm90IGVuZCB3aXRoICddJzsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSWYgYSBmaWx0ZXIgcGF0dGVybiBzdGFydHMgd2l0aCAnWycgaXQgbXVzdCBlbmQgd2l0aCAnXSdcXFxcXFxcIlxcXCIsIFtraW5kXSlcXG5cXG5fcGZfbGdmcGJfZml4IDo9IFxcXCJDbG9zZSB0aGUgYnJhY2tldCDigJQgYSBzcGFjZS1kZWxpbWl0ZWQgcGF0dGVybiBpcyBbZmllbGQxLCBmaWVsZDIsIC4uLl1cXFwiXFxuXFxuIyBUaGUgc2FtZSBwYXJzZXIgcnVucyBmb3IgbWV0cmljIGZpbHRlcnMgYW5kIHN1YnNjcmlwdGlvbiBmaWx0ZXJzLCBhbmQgaXRcXG4jIHJ1bnMgYmVmb3JlIGFueSBkZXN0aW5hdGlvbiB2YWxpZGF0aW9uIChiZW5jaCBjMDEvYzA2KS4gT25seSB0aGlzXFxuIyBzdGFydC9lbmQgcGFpcmluZyBpcyBjaGVja2VkIGhlcmU7IGEgZnVsbCBwYXR0ZXJuIHBhcnNlciBpcyBvdXQgb2Ygc2NvcGUuXFxuX3BmX2xnZnBiX3VuYmFsYW5jZWQocCkgaWYge1xcblxcdHQgOj0gdHJpbV9zcGFjZShwKVxcblxcdHN0YXJ0c3dpdGgodCwgXFxcIltcXFwiKVxcblxcdG5vdCBlbmRzd2l0aCh0LCBcXFwiXVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJtZXRyaWNcXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1maWx0ZXItcGF0dGVybi1icmFja2V0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIixcXG5cXHRfcGZfbGdmcGJfbXNnKFxcXCJzdWJzY3JpcHRpb25cXFwiKSxcXG5cXHRfcGZfbGdmcGJfZml4LCBfcGZfbGdmcGJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0cCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpbHRlclBhdHRlcm5cXFwiKVxcblxcdGlzX3N0cmluZyhwKVxcblxcdF9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBEZWZhdWx0VmFsdWUgaXMgZW1pdHRlZCB3aGVuIGEgbG9nIGxpbmUgZG9lcyBub3QgbWF0Y2gsIGJ1dCBhIGRpbWVuc2lvblxcbiMgdmFsdWUgY2FuIG9ubHkgY29tZSBmcm9tIGEgbWF0Y2gg4oCUIHRoZSBzZXJ2aWNlIHJlamVjdHMgdGhlIGNvbWJpbmF0aW9uLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1tZXRyaWMtZGltZW5zaW9ucy1kZWZhdWx0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5NZXRyaWNUcmFuc2Zvcm1hdGlvbnMuJWQuRGVmYXVsdFZhbHVlXFxcIiwgW3QuaW5kZXhdKSxcXG5cXHRcXFwiVGhlIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbiBzZXRzIGJvdGggRGltZW5zaW9ucyBhbmQgRGVmYXVsdFZhbHVlOyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJJbnZhbGlkIG1ldHJpYyB0cmFuc2Zvcm1hdGlvbjogZGltZW5zaW9ucyBhbmQgZGVmYXVsdCB2YWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHByb3BlcnRpZXNcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgRGVmYXVsdFZhbHVlIHdoZW4gdGhlIHRyYW5zZm9ybWF0aW9uIGhhcyBEaW1lbnNpb25zLCBvciBkcm9wIHRoZSBEaW1lbnNpb25zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sb2dzLW1ldHJpY2ZpbHRlci1tZXRyaWN0cmFuc2Zvcm1hdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHNvbWUgdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QodC52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEZWZhdWx0VmFsdWVcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0ZGltcyA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJEaW1lbnNpb25zXFxcIiwgbnVsbClcXG5cXHRpc19hcnJheShkaW1zKVxcblxcdGNvdW50KGRpbXMpID4gMFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3Mtc3Vic2NyaXB0aW9uLWtpbmVzaXMtcm9sZVwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBLaW5lc2lzIGRlc3RpbmF0aW9uIG5lZWRzIFJvbGVBcm5cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6TG9nczo6U3Vic2NyaXB0aW9uRmlsdGVyXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2xnc2tyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2xvZ3MvU3Vic2NyaXB0aW9uRmlsdGVycy5odG1sXFxcIlxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIGlzIHByb3ZhYmx5IEtpbmVzaXMgdHdvIHdheXM6IGEgbGl0ZXJhbFxcbiMgYXJuOjxwYXJ0aXRpb24+OmtpbmVzaXM6IHN0cmluZywgb3IgYSBSZWYvR2V0QXR0IHRoYXQgcmVzb2x2ZSgpIHR1cm5zIGludG9cXG4jIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIEFXUzo6S2luZXNpczo6U3RyZWFtLiBTY29wZWQgdG8gS2luZXNpcyDigJRcXG4jIHRoZSBiZW5jaCBlcnJvciBuYW1lcyBcXFwidmVuZG9yIGtpbmVzaXNcXFwiOyBvdGhlciB2ZW5kb3JzIHdlcmUgbm90IG1lYXN1cmVkLlxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0cGFydHMgOj0gc3BsaXQoZCwgXFxcIjpcXFwiKVxcblxcdGNvdW50KHBhcnRzKSA+PSAzXFxuXFx0cGFydHNbMF0gPT0gXFxcImFyblxcXCJcXG5cXHRwYXJ0c1syXSA9PSBcXFwia2luZXNpc1xcXCJcXG59XFxuXFxuX3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKSBpZiB7XFxuXFx0ZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlc3RpbmF0aW9uQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoZClcXG5cXHRkIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OktpbmVzaXM6OlN0cmVhbVxcXCIpXFxufVxcblxcbiMgVHJ1ZSBhYnNlbmNlIG9mIFJvbGVBcm4gbmVlZHMgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoc2VlIEFHRU5UUy5tZCkuXFxuX3BmX2xnc2tyX3JvbGVfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiUm9sZUFyblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJvbGVBcm5cXFwiLFxcblxcdFxcXCJUaGUgc3Vic2NyaXB0aW9uIGZpbHRlciB0YXJnZXRzIGEgS2luZXNpcyBzdHJlYW0gYnV0IHNldHMgbm8gUm9sZUFybjsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiZGVzdGluYXRpb25Bcm4gZm9yIHZlbmRvciBraW5lc2lzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgcm9sZUFyblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgUm9sZUFybiBmb3IgYSByb2xlIHRoYXQgbG9ncy5hbWF6b25hd3MuY29tIGNhbiBhc3N1bWUgd2l0aCBraW5lc2lzOlB1dFJlY29yZCBvbiB0aGUgc3RyZWFtXFxcIixcXG5cXHRfcGZfbGdza3JfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclxcXCIpXFxuXFx0X3BmX2xnc2tyX2tpbmVzaXNfZGVzdChuYW1lKVxcblxcdF9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtYWxpYXMtY2xvdWRmcm9udC16b25lLWlkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIENsb3VkRnJvbnQgYWxpYXMgdGFyZ2V0IG11c3QgdXNlIGhvc3RlZCB6b25lIFoyRkRUTkRBVEFRWVcyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRXZlcnkgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24gaXMgYWxpYXNlZCB0aHJvdWdoIHRoZSBzaW5nbGUgZ2xvYmFsIGhvc3RlZFxcbiMgem9uZSBaMkZEVE5EQVRBUVlXMi4gQW55IG90aGVyIEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCAoYW4gQUxCJ3MgcmVnaW9uYWxcXG4jIHpvbmUgaWQgaXMgdGhlIGNsYXNzaWMgcGFzdGUgZXJyb3IpIGZhaWxzIGF0IGRlcGxveSB0aW1lIHdpdGggXFxcInRoZSBhbGlhc1xcbiMgdGFyZ2V0IG5hbWUgZG9lcyBub3QgbGllIHdpdGhpbiB0aGUgdGFyZ2V0IHpvbmVcXFwiLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1hbGlhcy1jbG91ZGZyb250LXpvbmUtaWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIGFsaWFzIHRhcmdldHMgYSBDbG91ZEZyb250IGRvbWFpbiwgc28gQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIG11c3QgYmUgWjJGRFROREFUQVFZVzIsIG5vdCAnJXMnXFxcIiwgW3ppZF0pLFxcblxcdFxcXCJTZXQgQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkIHRvIFoyRkRUTkRBVEFRWVcyIChpbiB0aGUgQ0RLLCByb3V0ZTUzX3RhcmdldHMuQ2xvdWRGcm9udFRhcmdldCBkb2VzIHRoaXMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dlbmVyYWwvbGF0ZXN0L2dyL2NmX3JlZ2lvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGRucyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0LkROU05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhkbnMpXFxuXFx0ZW5kc3dpdGgodHJpbV9zdWZmaXgobG93ZXIoZG5zKSwgXFxcIi5cXFwiKSwgXFxcIi5jbG91ZGZyb250Lm5ldFxcXCIpXFxuXFx0emlkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQWxpYXNUYXJnZXQuSG9zdGVkWm9uZUlkXFxcIilcXG5cXHRpc19zdHJpbmcoemlkKVxcblxcdHppZCAhPSBcXFwiWjJGRFROREFUQVFZVzJcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1hcGV4LWNuYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIENOQU1FIHJlY29yZCBpcyBub3QgcGVybWl0dGVkIGF0IHRoZSB6b25lIGFwZXhcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCIsXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6SG9zdGVkWm9uZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfYXBleF9ub3JtKG4pIDo9IHRyaW1fc3VmZml4KGxvd2VyKG4pLCBcXFwiLlxcXCIpXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMjMgY2F0Y2hlcyBhbiBhcGV4IENOQU1FIG9ubHkgd2hlbiB0aGUgcmVjb3JkIGNhcnJpZXMgYVxcbiMgbGl0ZXJhbCBIb3N0ZWRab25lTmFtZS4gQ0RLIEwyIGFsd2F5cyBsaW5rcyByZWNvcmRzIHdpdGhcXG4jIEhvc3RlZFpvbmVJZDoge1xcXCJSZWZcXFwiOiA8em9uZT59LCB3aGljaCBFMzAyMyBkb2VzIG5vdCBzZWUgKG1lYXN1cmVkIDIwMjYtMDktMDIsXFxuIyBlbmdpbmUgMS43LjAtYmV0YSkuIHJlc29sdmUoKSB0dXJucyBzdWNoIGEgUmVmIGludG8gdGhlIHRhcmdldCdzIGxvZ2ljYWwgSUQsXFxuIyBzbyB3aGVuIHRoYXQgSUQgbmFtZXMgYSBIb3N0ZWRab25lIGluIHRoZSBzYW1lIHRlbXBsYXRlIHdlIGNhbiByZWFkIGl0c1xcbiMgbGl0ZXJhbCBOYW1lIGFuZCBkbyB0aGUgYXBleCBjb21wYXJpc29uIG91cnNlbHZlcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtYXBleC1jbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVHlwZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiQSBDTkFNRSByZWNvcmQgaXMgbm90IHBlcm1pdHRlZCBhdCB0aGUgem9uZSBhcGV4ICgnJXMnKTsgdGhlIGRlcGxveW1lbnQgZmFpbHMgd2l0aCBcXFxcXFxcIlJSU2V0IG9mIHR5cGUgQ05BTUUgLi4uIGlzIG5vdCBwZXJtaXR0ZWQgYXQgYXBleFxcXFxcXFwiXFxcIiwgW3JlY05hbWVdKSxcXG5cXHRcXFwiVXNlIGFuIGFsaWFzIEEvQUFBQSByZWNvcmQgZm9yIHRoZSBhcGV4IChBbGlhc1RhcmdldCksIG9yIG1vdmUgdGhlIENOQU1FIHRvIGEgc3ViZG9tYWluXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3Jlc291cmNlLXJlY29yZC1zZXRzLWNob29zaW5nLWFsaWFzLW5vbi1hbGlhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDTkFNRVxcXCJcXG5cXHR6cmVmIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZUlkXFxcIilcXG5cXHRpc19zdHJpbmcoenJlZilcXG5cXHR6cmVmIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcXFwiKVxcblxcdHpvbmVOYW1lIDo9IHJlc29sdmUoenJlZiwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHpvbmVOYW1lKVxcblxcdHJlY05hbWUgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5OYW1lXFxcIilcXG5cXHRpc19zdHJpbmcocmVjTmFtZSlcXG5cXHRfcGZfcjUzX2FwZXhfbm9ybShyZWNOYW1lKSA9PSBfcGZfcjUzX2FwZXhfbm9ybSh6b25lTmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWdlb2xvY2F0aW9uLWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiR2VvTG9jYXRpb24gY2Fubm90IHNwZWNpZnkgYm90aCBDb250aW5lbnRDb2RlIGFuZCBDb3VudHJ5Q29kZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIGV4cHJlc3NlcyB0aGlzIGFzIGEgb25lT2YsIHdoaWNoIHRoZSBzZXJ2ZXItc2lkZVxcbiMgcHJlLWRlcGxveSB2YWxpZGF0aW9uIGVuZm9yY2VzIChcXFwiMiBzdWJzY2hlbWFzIG1hdGNoZWQgaW5zdGVhZCBvZiBvbmVcXFwiKSBidXRcXG4jIHRoZSBidW5kbGVkIGVuZ2luZSBkb2VzIG5vdCBldmFsdWF0ZSDigJQgaGVuY2UgdXBzdHJlYW06IHBlbmRpbmctZW5naW5lLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1nZW9sb2NhdGlvbi1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkdlb0xvY2F0aW9uXFxcIixcXG5cXHRcXFwiR2VvTG9jYXRpb24gY2Fubm90IHNwZWNpZnkgYm90aCBDb250aW5lbnRDb2RlIGFuZCBDb3VudHJ5Q29kZTsgQ2xvdWRGb3JtYXRpb24gcmVqZWN0cyB0aGUgcmVjb3JkIHNldCBiZWZvcmUgcHJvdmlzaW9uaW5nXFxcIixcXG5cXHRcXFwiS2VlcCBlaXRoZXIgdGhlIENvbnRpbmVudENvZGUgb3IgdGhlIENvdW50cnlDb2RlIChhZGQgU3ViZGl2aXNpb25Db2RlIG9ubHkgbmV4dCB0byBDb3VudHJ5Q29kZSBVUylcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXJvdXRlNTMtcmVjb3Jkc2V0LWdlb2xvY2F0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0Z2VvIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuR2VvTG9jYXRpb25cXFwiKVxcblxcdGlzX29iamVjdChnZW8pXFxuXFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZ2VvLCBcXFwiQ29udGluZW50Q29kZVxcXCIsIG51bGwpKVxcblxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGdlbywgXFxcIkNvdW50cnlDb2RlXFxcIiwgbnVsbCkpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1tdWx0aXZhbHVlLWFsaWFzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJNdWx0aVZhbHVlQW5zd2VyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIEFsaWFzVGFyZ2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1tdWx0aXZhbHVlLWFsaWFzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIixcXG5cXHRcXFwiTXVsdGlWYWx1ZUFuc3dlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBBbGlhc1RhcmdldDsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiTXVsdGl2YWx1ZSBhbnN3ZXIgcnJzZXQgc2hvdWxkIG5vdCBiZSBhbiBhbGlhcyBycnNldFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiVXNlIHBsYWluIG11bHRpdmFsdWUgcmVjb3JkcyB3aXRoIFJlc291cmNlUmVjb3Jkcywgb3IgZHJvcCBNdWx0aVZhbHVlQW5zd2VyIGFuZCBrZWVwIHRoZSBhbGlhc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcblxcdGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0XFxcIikpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yZWNvcmQtdHlwZS1yb3V0aW5nLXBvbGljeVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTlMgcmVjb3JkcyB0YWtlIG5vIHJvdXRpbmcgcG9saWN5OyBDTkFNRSBjYW5ub3QgYmUgbXVsdGl2YWx1ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3R5cG9sX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG5fcGZfcjUzX3R5cG9sX3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRzb21lIHAgaW4gX3BmX3I1M190eXBvbF9wcm9wc1xcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M190eXBvbF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbiMgT25seSBjb21iaW5hdGlvbnMgdGhhdCBmYWlsZWQgb24gYSByZWFsIGRlcGxveSBhcmUgZmxhZ2dlZC4gU09BL0RTIHdpdGggYVxcbiMgcm91dGluZyBwb2xpY3kgYXJlIGFsc28gZG9jdW1lbnRlZCBhcyB1bnN1cHBvcnRlZCBidXQgd2VyZSBub3QgbWVhc3VyZWQsIHNvXFxuIyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbGVmdCBvdXQgKHNlZSB0aGUgZGlzY292ZXJ5IGlzc3VlKS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdFxcXCJBbiBOUyByZWNvcmQgY2Fubm90IHVzZSBhIHJvdXRpbmcgcG9saWN5OyB0aGUgc2VydmljZSByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJ0aGlzIHR5cGUgb2YgUlJTZXQgaXMgbm90IHN1cHBvcnRlZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiVXNlIGEgc2ltcGxlIHJlY29yZCBzZXQgZm9yIE5TIHJlY29yZHMgKG5vIFdlaWdodC9SZWdpb24vRmFpbG92ZXIvR2VvTG9jYXRpb24vTXVsdGlWYWx1ZUFuc3dlci9DaWRyUm91dGluZ0NvbmZpZylcXFwiLFxcblxcdF9wZl9yNTNfdHlwb2xfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UeXBlXFxcIikgPT0gXFxcIk5TXFxcIlxcblxcdF9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdFxcXCJBIENOQU1FIHJlY29yZCBjYW5ub3QgdXNlIHRoZSBtdWx0aXZhbHVlIGFuc3dlciByb3V0aW5nIHBvbGljeTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwidGhpcyB0eXBlIG9mIFJSU2V0IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlBvaW50IHRoZSBtdWx0aXZhbHVlIHJlY29yZHMgYXQgQS9BQUFBIChvciBhbm90aGVyIHN1cHBvcnRlZCB0eXBlKSwgb3IgZHJvcCBNdWx0aVZhbHVlQW5zd2VyXFxcIixcXG5cXHRfcGZfcjUzX3R5cG9sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJDTkFNRVxcXCJcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIHJlY29yZCBzZXQgbmVlZHMgQWxpYXNUYXJnZXQgb3IgdGhlIGZ1bGwgVFRMK1Jlc291cmNlUmVjb3JkcyBwYWlyXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9yNTNfdmFsc3JjX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG4jIFRoZSBzZXJ2aWNlIGV4cGVjdHMgXFxcImV4YWN0bHkgb25lIG9mIFtBbGlhc1RhcmdldCwgYWxsIG9mIFtUVEwsIGFuZFxcbiMgUmVzb3VyY2VSZWNvcmRzXV1cXFwiIChUcmFmZmljUG9saWN5SW5zdGFuY2VJZCBoYXMgbm8gQ2xvdWRGb3JtYXRpb24gcHJvcGVydHkpLlxcbiMgVGhlIFRUTCtBbGlhc1RhcmdldCBjb21iaW5hdGlvbiBpcyBhbHJlYWR5IHRoZSBlbmdpbmUncyBFMzAyOSwgc28gdGhpcyBydWxlXFxuIyBjb3ZlcnMgdGhlIHJlbWFpbmluZyBzaGFwZXM6IGFsaWFzIHBsdXMgcmVjb3JkcywgYW5kIGFuIGluY29tcGxldGUgbm9uLWFsaWFzXFxuIyBncm91cCAocmVjb3JkcyB3aXRob3V0IFRUTCwgVFRMIHdpdGhvdXQgcmVjb3Jkcywgb3IgbmVpdGhlcikuXFxuX3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0XFxcIikpXFxuXFxuX3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpIGlmIHtcXG5cXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlc291cmNlUmVjb3Jkc1xcXCIpXFxufVxcblxcbl9wZl9yNTNfdmFsc3JjX2hhc190dGwobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5UVExcXFwiKSAhPSBudWxsXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC12YWx1ZS1zb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0XFxcIkFsaWFzVGFyZ2V0IGFuZCBSZXNvdXJjZVJlY29yZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZTsgdGhlIHNlcnZpY2UgZXhwZWN0cyBleGFjdGx5IG9uZSBvZiBBbGlhc1RhcmdldCBvciBUVEwtcGx1cy1SZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdFxcXCJLZWVwIHRoZSBBbGlhc1RhcmdldCBhbmQgZHJvcCBSZXNvdXJjZVJlY29yZHMsIG9yIG1ha2UgaXQgYSBwbGFpbiByZWNvcmQgd2l0aCBUVEwgYW5kIFJlc291cmNlUmVjb3Jkc1xcXCIsXFxuXFx0X3BmX3I1M192YWxzcmNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpXFxuXFx0X3BmX3I1M192YWxzcmNfaGFzX3JyKG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0XFxcIkEgbm9uLWFsaWFzIHJlY29yZCBzZXQgbmVlZHMgYm90aCBUVEwgYW5kIFJlc291cmNlUmVjb3JkczsgdGhlIHNlcnZpY2UgcmVqZWN0cyBhbiBpbmNvbXBsZXRlIHBhaXIgd2l0aCBcXFxcXFxcIkV4cGVjdGVkIGV4YWN0bHkgb25lIG9mIFtBbGlhc1RhcmdldCwgYWxsIG9mIFtUVEwsIGFuZCBSZXNvdXJjZVJlY29yZHNdXSAuLi4gZm91bmQgbm9uZVxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU3BlY2lmeSBUVEwgYW5kIFJlc291cmNlUmVjb3JkcyB0b2dldGhlciwgb3IgdXNlIEFsaWFzVGFyZ2V0IGluc3RlYWRcXFwiLFxcblxcdF9wZl9yNTNfdmFsc3JjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdG5vdCBfcGZfcjUzX3ZhbHNyY19oYXNfYWxpYXMobmFtZSlcXG5cXHRub3QgX3BmX3I1M192YWxzcmNfY29tcGxldGUobmFtZSlcXG59XFxuXFxuX3BmX3I1M192YWxzcmNfY29tcGxldGUobmFtZSkgaWYge1xcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc190dGwobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXJvdXRpbmctcG9saWN5LWV4Y2x1c2l2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZWNvcmQgc2V0IGNhbiB1c2Ugb25seSBvbmUgcm91dGluZyBwb2xpY3lcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgc2VydmljZSBlbmZvcmNlcyBcXFwiRXhwZWN0ZWQgZXhhY3RseSBvbmUgb2YgW1dlaWdodCwgUmVnaW9uLCBGYWlsb3ZlcixcXG4jIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBHZW9Qcm94aW1pdHlMb2NhdGlvbiwgb3IgQ2lkclJvdXRpbmdDb25maWddXFxcIi5cXG4jIEdlb1Byb3hpbWl0eUxvY2F0aW9uIGlzIG5vdCBhIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5LCBzbyBmaXZlIHJlbWFpbiBoZXJlLlxcbiMgTXVsdGlWYWx1ZUFuc3dlcjogZmFsc2UgaXMgdHJlYXRlZCBhcyBhYnNlbnQg4oCUIG9ubHkgdHJ1ZSBzZWxlY3RzIHRoZSBwb2xpY3kuXFxuX3BmX3I1M19wb2x4X3Byb3BzIDo9IFtcXFwiV2VpZ2h0XFxcIiwgXFxcIlJlZ2lvblxcXCIsIFxcXCJGYWlsb3ZlclxcXCIsIFxcXCJHZW9Mb2NhdGlvblxcXCIsIFxcXCJDaWRyUm91dGluZ0NvbmZpZ1xcXCJdXFxuXFxuX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgcHJvcCkgaWYge1xcblxcdHByb3AgIT0gXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCIpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk11bHRpVmFsdWVBbnN3ZXJcXFwiKSA9PSB0cnVlXFxufVxcblxcbl9wZl9yNTNfcG9seF9wb2xpY2llcyhuYW1lKSA6PSBwcyBpZiB7XFxuXFx0cHMgOj0gW3AgfCBzb21lIHAgaW4gYXJyYXkuY29uY2F0KF9wZl9yNTNfcG9seF9wcm9wcywgW1xcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIl0pOyBfcGZfcjUzX3BvbHhfcHJlc2VudChuYW1lLCBwKV1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJvdXRpbmctcG9saWN5LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgcmVjb3JkIHNldCBjYW4gdXNlIG9ubHkgb25lIHJvdXRpbmcgcG9saWN5LCBidXQgJXYgYXJlIGFsbCBzcGVjaWZpZWRcXFwiLCBbcHNdKSxcXG5cXHRcXFwiS2VlcCBleGFjdGx5IG9uZSBvZiBXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsIEdlb0xvY2F0aW9uLCBNdWx0aVZhbHVlQW5zd2VyLCBvciBDaWRyUm91dGluZ0NvbmZpZyBhbmQgc3BsaXQgdGhlIHJlc3QgaW50byBzZXBhcmF0ZSByZWNvcmQgc2V0c1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0cHMgOj0gX3BmX3I1M19wb2x4X3BvbGljaWVzKG5hbWUpXFxuXFx0Y291bnQocHMpID4gMVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiU2V0SWRlbnRpZmllciBhbmQgYSByb3V0aW5nIHBvbGljeSBtdXN0IGFwcGVhciB0b2dldGhlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3NpZHBfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIlxcblxcbl9wZl9yNTNfc2lkcF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpIGlmIHtcXG5cXHRzb21lIHAgaW4gX3BmX3I1M19zaWRwX3Byb3BzXFxuXFx0cmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3BdKSkgIT0gbnVsbFxcbn1cXG5cXG5fcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtc2V0LWlkZW50aWZpZXItcGFpcmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2V0SWRlbnRpZmllclxcXCIsXFxuXFx0XFxcIkEgcm91dGluZyBwb2xpY3kgaXMgY29uZmlndXJlZCBidXQgU2V0SWRlbnRpZmllciBpcyBtaXNzaW5nOyB0aGUgQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzIGNhbGwgZmFpbHMgd2l0aCBcXFxcXFxcIk1pc3NpbmcgZmllbGQgJ1NldElkZW50aWZpZXInXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBTZXRJZGVudGlmaWVyIHRoYXQgaXMgdW5pcXVlIGFtb25nIHRoZSByZWNvcmQgc2V0cyBzaGFyaW5nIHRoaXMgTmFtZSBhbmQgVHlwZVxcXCIsXFxuXFx0X3BmX3I1M19zaWRwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdF9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpXFxuXFx0bm90IGlzX3N0cmluZyhyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJTZXRJZGVudGlmaWVyIGlzIHNwZWNpZmllZCBidXQgbm8gcm91dGluZyBwb2xpY3kgaXM7IHRoZSBzZXJ2aWNlIGV4cGVjdHMgZXhhY3RseSBvbmUgb2YgV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLCBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgb3IgQ2lkclJvdXRpbmdDb25maWcgYW5kIGZpbmRzIG5vbmVcXFwiLFxcblxcdFxcXCJSZW1vdmUgU2V0SWRlbnRpZmllciBmcm9tIHRoaXMgc2ltcGxlIHJlY29yZCBzZXQsIG9yIGFkZCB0aGUgcm91dGluZyBwb2xpY3kgaXQgd2FzIG1lYW50IGZvclxcXCIsXFxuXFx0X3BmX3I1M19zaWRwX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGlzX3N0cmluZyhyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiKSlcXG5cXHRub3QgX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXR0bC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVFRMIG11c3QgZml0IGluIDMyIGJpdHMgKDAuLjIxNDc0ODM2NDcgc2Vjb25kcylcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgaXMgZW5mb3JjZWQ6IHRoZSBzZXJ2aWNlIHJlamVjdGVkIDk5OTk5OTk5OTkgd2l0aFxcbiMgXFxcIk1lbWJlciBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDIxNDc0ODM2NDdcXFwiLiBOZWdhdGl2ZSBUVExzIGFyZVxcbiMgdW50ZXN0ZWQsIHNvIHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgZmxhZ2dlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtdHRsLXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UVExcXFwiLFxcblxcdHNwcmludGYoXFxcIlRUTCBtdXN0IGJlIGF0IG1vc3QgMjE0NzQ4MzY0NyBzZWNvbmRzLCBnb3QgJXZcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgVFRMIHRvIGEgMzItYml0IHZhbHVlOyBhbnl0aGluZyBhYm92ZSBhIGRheSByYXJlbHkgaGVscHMgY2FjaGluZyBhbnl3YXlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vUm91dGU1My9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVFRMXFxcIilcXG5cXHRuIDo9IHRvX251bWJlcih0KVxcblxcdG4gPiAyMTQ3NDgzNjQ3XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My13ZWlnaHQtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIldlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjU1XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIGlzIGVuZm9yY2VkOiB0aGUgc2VydmljZSByZWplY3RlZCAzMDAgd2l0aCBcXFwiTWVtYmVyXFxuIyBtdXN0IGhhdmUgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDI1NVxcXCIuIE5lZ2F0aXZlIHdlaWdodHMgYXJlIHVudGVzdGVkLFxcbiMgc28gdGhleSBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBmbGFnZ2VkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My13ZWlnaHQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLldlaWdodFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiV2VpZ2h0IG11c3QgYmUgYXQgbW9zdCAyNTUsIGdvdCAldlxcXCIsIFtuXSksXFxuXFx0XFxcIlNldCBXZWlnaHQgdG8gYSB2YWx1ZSBpbiBbMCwgMjU1XTsgd2VpZ2h0cyBhcmUgcmVsYXRpdmUsIHNvIHNjYWxlIHRoZSBncm91cCBkb3duIHByb3BvcnRpb25hbGx5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0dyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLldlaWdodFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIodylcXG5cXHRuID4gMjU1XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My16b25lbmFtZS10cmFpbGluZy1kb3RcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkhvc3RlZFpvbmVOYW1lIG11c3QgZW5kIHdpdGggYSB0cmFpbGluZyBkb3RcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDbG91ZEZvcm1hdGlvbiBsb29rcyB0aGUgem9uZSB1cCBieSB0aGUgbGl0ZXJhbCBIb3N0ZWRab25lTmFtZSBhbmQgZG9lcyBub3RcXG4jIG5vcm1hbGl6ZSB0aGUgdHJhaWxpbmcgZG90OiB0aGUgc2FtZSBzdGFjayBkZXBsb3llZCBjbGVhbiB3aXRoXFxuIyBcXFwiem9uZS5leGFtcGxlLlxcXCIgYW5kIGZhaWxlZCB3aXRoIE5vdEZvdW5kIGZvciBcXFwiem9uZS5leGFtcGxlXFxcIiAoMjAyNi0wOS0wMikuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXpvbmVuYW1lLXRyYWlsaW5nLWRvdFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuSG9zdGVkWm9uZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkhvc3RlZFpvbmVOYW1lICclcycgaXMgbWlzc2luZyB0aGUgdHJhaWxpbmcgZG90LCBzbyBDbG91ZEZvcm1hdGlvbiBmYWlscyB0aGUgbG9va3VwIHdpdGggXFxcXFxcXCJObyBob3N0ZWQgem9uZSB3aXRoIG5hbWUgLi4uIGZvdW5kXFxcXFxcXCJcXFwiLCBbem5dKSxcXG5cXHRzcHJpbnRmKFxcXCJVc2UgJyVzLicgKHdpdGggdGhlIHRyYWlsaW5nIGRvdClcXFwiLCBbem5dKSxcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHR6biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoem4pXFxuXFx0em4gIT0gXFxcIlxcXCJcXG5cXHRub3QgZW5kc3dpdGgoem4sIFxcXCIuXFxcIilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1hY2NlbGVyYXRlLWRvdHRlZC1uYW1lXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVHJhbnNmZXIgQWNjZWxlcmF0aW9uIHJlamVjdHMgYnVja2V0IG5hbWVzIHdpdGggcGVyaW9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUcmFuc2ZlciBBY2NlbGVyYXRpb24gZW5kcG9pbnRzIGFyZSBETlMtYmFzZWQsIHNvIGJ1Y2tldCBuYW1lcyBjb250YWluaW5nXFxuIyBwZXJpb2RzIGFyZSByZWplY3RlZCBhdCBjcmVhdGlvbi4gT25seSBhIGxpdGVyYWwgQnVja2V0TmFtZSBpcyBjaGVja2FibGU7XFxuIyBDREstZ2VuZXJhdGVkIG5hbWVzIG5ldmVyIGNvbnRhaW4gcGVyaW9kcyBhbnl3YXkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1hY2NlbGVyYXRlLWRvdHRlZC1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbi5BY2NlbGVyYXRpb25TdGF0dXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkJ1Y2tldCBuYW1lICclcycgY29udGFpbnMgcGVyaW9kcywgd2hpY2ggVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGRvZXMgbm90IHN1cHBvcnQ7IENyZWF0ZUJ1Y2tldCBmYWlscyB3aXRoIFxcXFxcXFwiUzMgVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGJ1Y2tldHMgd2l0aCBwZXJpb2RzICguKSBpbiB0aGVpciBuYW1lc1xcXFxcXFwiXFxcIiwgW2JuXSksXFxuXFx0XFxcIlJlbmFtZSB0aGUgYnVja2V0IHdpdGhvdXQgcGVyaW9kcywgb3IgZHJvcCBBY2NlbGVyYXRlQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3RyYW5zZmVyLWFjY2VsZXJhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFjY2VsZXJhdGVDb25maWd1cmF0aW9uLkFjY2VsZXJhdGlvblN0YXR1c1xcXCIpID09IFxcXCJFbmFibGVkXFxcIlxcblxcdGJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQnVja2V0TmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKGJuKVxcblxcdGNvbnRhaW5zKGJuLCBcXFwiLlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYnVja2V0LXBvbGljeS1hY3Rpb24tcmVzb3VyY2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3QtbGV2ZWwgYWN0aW9ucyBuZWVkIGFuIG9iamVjdC1sZXZlbCBSZXNvdXJjZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBbiBvYmplY3QtbGV2ZWwgYWN0aW9uIHdob3NlIHN0YXRlbWVudCBsaXN0cyBvbmx5IGJ1Y2tldC1sZXZlbCBBUk5zIGFwcGxpZXNcXG4jIHRvIG5vdGhpbmcsIGFuZCBTMyByZWplY3RzIHRoZSBwb2xpY3kuIEEgYnVja2V0LWxldmVsIEFSTiBpcyBwcm92YWJsZSB0d29cXG4jIHdheXM6IGEgbGl0ZXJhbCBhcm46Li4uOnMzOjo6bmFtZSB3aXRoIG5vIFxcXCIvXFxcIiBpbiB0aGUgbmFtZSBwYXJ0LCBvciBhIHZhbHVlXFxuIyB0aGF0IHJlc29sdmUoKSB0dXJucyBpbnRvIHRoZSBsb2dpY2FsIElEIG9mIGFuIGluLXRlbXBsYXRlIGJ1Y2tldCAoUmVmIGFuZFxcbiMgRm46OkdldEF0dCBBcm4gYm90aCBkbyDigJQgdGhlIEdldEF0dCBvZiBhIGJ1Y2tldCBpcyBpdHMgYnVja2V0IEFSTikuIEZpcmVzXFxuIyBvbmx5IHdoZW4gZXZlcnkgcmVzb3VyY2UgaW4gdGhlIHN0YXRlbWVudCBpcyBwcm92YWJseSBidWNrZXQtbGV2ZWwsIHNvXFxuIyB1bnJlc29sdmFibGUgZW50cmllcyAoZS5nLiBGbjo6U3ViIFxcXCIke0IuQXJufS8qXFxcIikgbXV0ZSB0aGUgc3RhdGVtZW50Llxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6Z2V0b2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOnB1dG9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpkZWxldGVvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBsb3dlcihhKSBpbiB7XFxcInMzOmFib3J0bXVsdGlwYXJ0dXBsb2FkXFxcIiwgXFxcInMzOnJlc3RvcmVvYmplY3RcXFwiLCBcXFwiczM6bGlzdG11bHRpcGFydHVwbG9hZHBhcnRzXFxcIn1cXG5cXG5fcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKSBpZiByIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcbl9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpIGlmIHtcXG5cXHRzdGFydHN3aXRoKHIsIFxcXCJhcm46XFxcIilcXG5cXHRjb250YWlucyhyLCBcXFwiOnMzOjo6XFxcIilcXG5cXHRwYXJ0cyA6PSBzcGxpdChyLCBcXFwiOjo6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPT0gMlxcblxcdG5vdCBjb250YWlucyhwYXJ0c1sxXSwgXFxcIi9cXFwiKVxcbn1cXG5cXG5fcGZfczNicGFyX2FjdGlvbnMobmFtZSwgaSkgOj0gW2FdIGlmIHtcXG5cXHRhIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuQWN0aW9uXFxcIiwgW2ldKSlcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIGkpIDo9IGFjdHMgaWYge1xcblxcdGl0ZW1zIDo9IFtpdCB8IHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtpXSkpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRhY3RzIDo9IFt2IHwgc29tZSBpdCBpbiBpdGVtczsgdiA6PSBpdC52YWx1ZTsgaXNfc3RyaW5nKHYpXVxcbn1cXG5cXG5fcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBpKSA6PSBbcl0gaWYge1xcblxcdHIgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtpXSkpXFxuXFx0aXNfc3RyaW5nKHIpXFxufVxcblxcbl9wZl9zM2JwYXJfcmVzb3VyY2VzKG5hbWUsIGkpIDo9IHJzIGlmIHtcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZVxcXCIsIFtpXSkpXVxcblxcdGNvdW50KGl0ZW1zKSA+IDBcXG5cXHRycyA6PSBbdiB8IHNvbWUgaXQgaW4gaXRlbXM7IHYgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5SZXNvdXJjZS4lZFxcXCIsIFtpLCBpdC5pbmRleF0pKTsgaXNfc3RyaW5nKHYpXVxcblxcdGNvdW50KHJzKSA9PSBjb3VudChpdGVtcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1idWNrZXQtcG9saWN5LWFjdGlvbi1yZXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbc3QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBY3Rpb24gJyVzJyB0YXJnZXRzIG9iamVjdHMgYnV0IHRoZSBzdGF0ZW1lbnQncyByZXNvdXJjZXMgYXJlIGFsbCBidWNrZXQtbGV2ZWwgQVJOczsgUzMgcmVqZWN0cyB0aGUgcG9saWN5IHdpdGggXFxcXFxcXCJBY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gYW55IHJlc291cmNlKHMpIGluIHN0YXRlbWVudFxcXFxcXFwiXFxcIiwgW2FdKSxcXG5cXHRcXFwiQWRkIHRoZSBvYmplY3QgZm9ybSBvZiB0aGUgQVJOIChhcHBlbmQgLyogb3IgYSBrZXkgcGF0dGVybikgdG8gUmVzb3VyY2UsIG9yIGRyb3AgdGhlIG9iamVjdC1sZXZlbCBhY3Rpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9idWNrZXQtcG9saWNpZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVxcXCIpXFxuXFx0c29tZSBzdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XFxcIilcXG5cXHRpc19vYmplY3Qoc3QudmFsdWUpXFxuXFx0c29tZSBhIGluIF9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBzdC5pbmRleClcXG5cXHRfcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSlcXG5cXHRycyA6PSBfcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBzdC5pbmRleClcXG5cXHRjb3VudChycykgPiAwXFxuXFx0ZXZlcnkgciBpbiBycyB7XFxuXFx0XFx0X3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocilcXG5cXHR9XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYnVja2V0LXBvbGljeS1wcmluY2lwYWxcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJCdWNrZXQgcG9saWN5IHN0YXRlbWVudHMgbmVlZCBhIFByaW5jaXBhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0UG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZXNvdXJjZS1iYXNlZCBwb2xpY2llcyByZXF1aXJlIFByaW5jaXBhbCAob3IgTm90UHJpbmNpcGFsKSBpbiBldmVyeVxcbiMgc3RhdGVtZW50IOKAlCB1bmxpa2UgaWRlbnRpdHkgcG9saWNpZXMsIHdoZXJlIGNmbi1saW50LWdyYWRlIGNoZWNrcyBhcmVcXG4jIHR1bmVkLiBBbiB1bnJlc29sdmFibGUgUHJpbmNpcGFsIHZhbHVlIHN0aWxsIGNvdW50cyBhcyBwcmVzZW50LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYnVja2V0LXBvbGljeS1wcmluY2lwYWxcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkXFxcIiwgW3N0LmluZGV4XSksXFxuXFx0XFxcIlRoZSBzdGF0ZW1lbnQgaGFzIG5laXRoZXIgUHJpbmNpcGFsIG5vciBOb3RQcmluY2lwYWw7IFMzIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiTWlzc2luZyByZXF1aXJlZCBmaWVsZCBQcmluY2lwYWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFByaW5jaXBhbCAob3IgTm90UHJpbmNpcGFsKSB0byB0aGUgc3RhdGVtZW50IOKAlCBidWNrZXQgcG9saWNpZXMgYWx3YXlzIG5hbWUgd2hvIHRoZXkgYXBwbHkgdG9cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9idWNrZXQtcG9saWNpZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVxcXCIpXFxuXFx0c29tZSBzdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XFxcIilcXG5cXHRpc19vYmplY3Qoc3QudmFsdWUpXFxuXFx0b2JqZWN0LmdldChzdC52YWx1ZSwgXFxcIlByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG5cXHRvYmplY3QuZ2V0KHN0LnZhbHVlLCBcXFwiTm90UHJpbmNpcGFsXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTGlmZWN5Y2xlIGFyY2hpdmUgdHJhbnNpdGlvbnMgbXVzdCBjb21lIDMwKyBkYXlzIGFmdGVyIElBLCBhbmQgZXhwaXJhdGlvbiBhZnRlciBldmVyeSB0cmFuc2l0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfczNvcmRfZml4IDo9IFxcXCJPcmRlciB0aGUgbGlmZWN5Y2xlIGRheXMgc28gYXJjaGl2ZSB0cmFuc2l0aW9ucyBjb21lIGF0IGxlYXN0IDMwIGRheXMgYWZ0ZXIgSUEgdHJhbnNpdGlvbnMgYW5kIGV4cGlyYXRpb24gY29tZXMgYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblxcXCJcXG5cXG5fcGZfczNvcmRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9saWZlY3ljbGUtdHJhbnNpdGlvbi1nZW5lcmFsLWNvbnNpZGVyYXRpb25zLmh0bWxcXFwiXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLlRyYW5zaXRpb25zXFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJUcmFuc2l0aW9uIHRvICVzIGF0ICV2IGRheXMgaXMgbGVzcyB0aGFuIDMwIGRheXMgYWZ0ZXIgdGhlICVzIHRyYW5zaXRpb24gYXQgJXYgZGF5czsgUzMgcmVxdWlyZXMgb2JqZWN0cyB0byBzdGF5IGF0IGxlYXN0IDMwIGRheXMgaW4gSUEgc3RvcmFnZVxcXCIsIFtzYzIsIGQyLCBzYzEsIGQxXSksXFxuXFx0X3BmX3Mzb3JkX2ZpeCwgX3BmX3Mzb3JkX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHRyYW5zIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIlRyYW5zaXRpb25zXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkodHJhbnMpXFxuXFx0c29tZSB0MSBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MSlcXG5cXHRzYzEgOj0gb2JqZWN0LmdldCh0MSwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMSBpbiB7XFxcIlNUQU5EQVJEX0lBXFxcIiwgXFxcIk9ORVpPTkVfSUFcXFwifVxcblxcdHJhdzEgOj0gb2JqZWN0LmdldCh0MSwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdzEgIT0gbnVsbCAjIHRvX251bWJlcihudWxsKSDjga8gMCDjgavjgarjgotcXG5cXHRkMSA6PSB0b19udW1iZXIocmF3MSlcXG5cXHRzb21lIHQyIGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQyKVxcblxcdHNjMiA6PSBvYmplY3QuZ2V0KHQyLCBcXFwiU3RvcmFnZUNsYXNzXFxcIiwgXFxcIlxcXCIpXFxuXFx0c2MyIGluIHtcXFwiR0xBQ0lFUlxcXCIsIFxcXCJERUVQX0FSQ0hJVkVcXFwifVxcblxcdHJhdzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlRyYW5zaXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhdzIgIT0gbnVsbFxcblxcdGQyIDo9IHRvX251bWJlcihyYXcyKVxcblxcdGQyIDwgZDEgKyAzMFxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1kYXlzLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRXhwaXJhdGlvbkluRGF5c1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRXhwaXJhdGlvbkluRGF5cyAoJXYpIG11c3QgYmUgZ3JlYXRlciB0aGFuIFRyYW5zaXRpb25JbkRheXMgKCV2KTsgUzMgcmVqZWN0cyBsaWZlY3ljbGUgcnVsZXMgdGhhdCBleHBpcmUgb2JqZWN0cyBiZWZvcmUgb3Igd2hlbiB0aGV5IHRyYW5zaXRpb25cXFwiLCBbZSwgZF0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXdlIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLCBudWxsKVxcblxcdHJhd2UgIT0gbnVsbCAjIHRvX251bWJlcihudWxsKSDjga8gMCDjgavjgarjgotcXG5cXHRlIDo9IHRvX251bWJlcihyYXdlKVxcblxcdHRyYW5zIDo9IG9iamVjdC5nZXQoci52YWx1ZSwgXFxcIlRyYW5zaXRpb25zXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkodHJhbnMpXFxuXFx0c29tZSB0IGluIHRyYW5zXFxuXFx0aXNfb2JqZWN0KHQpXFxuXFx0cmF3ZCA6PSBvYmplY3QuZ2V0KHQsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdkICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXdkKVxcblxcdGUgPD0gZFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWxpZmVjeWNsZS1leHBpcmF0aW9uLXBvc2l0aXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXhwaXJhdGlvbkluRGF5cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSB0eXBlcyBFeHBpcmF0aW9uSW5EYXlzIGFzIGEgYmFyZSBpbnRlZ2VyIHdpdGggbm9cXG4jIG1pbmltdW0sIHNvIDAgYW5kIG5lZ2F0aXZlcyByZWFjaCB0aGUgc2VydmljZS4gT25seSB0aGUgRXhwaXJhdGlvbiBhY3Rpb25cXG4jIHdhcyBiZW5jaC12ZXJpZmllZDsgb3RoZXIgZGF5IGZpZWxkcyBhcmUgbGVmdCBhbG9uZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWxpZmVjeWNsZS1leHBpcmF0aW9uLXBvc2l0aXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRXhwaXJhdGlvbkluRGF5c1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiRXhwaXJhdGlvbkluRGF5cyBpcyAldjsgUzMgcmVqZWN0cyB0aGUgcnVsZSB3aXRoIFxcXFxcXFwiJ0RheXMnIGZvciBFeHBpcmF0aW9uIGFjdGlvbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlclxcXFxcXFwiXFxcIiwgW2RdKSxcXG5cXHRcXFwiVXNlIGFuIEV4cGlyYXRpb25JbkRheXMgb2YgMSBvciBtb3JlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtcnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcgIT0gbnVsbFxcblxcdGQgOj0gdG9fbnVtYmVyKHJhdylcXG5cXHRkIDw9IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtcnVsZS1uby1hY3Rpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIGxpZmVjeWNsZSBydWxlIG5lZWRzIGF0IGxlYXN0IG9uZSBhY3Rpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHRlbiBhY3Rpb24gZmllbGRzLCB2ZXJiYXRpbSBmcm9tIHRoZSBzZXJ2aWNlIGVycm9yLiBBIGZpZWxkIHdob3NlIHZhbHVlXFxuIyBpcyBhbiB1bnJlc29sdmFibGUgaW50cmluc2ljIHN0aWxsIGNvdW50cyBhcyBwcmVzZW50IChmYWlsIGNsb3NlZCkuXFxuX3BmX3MzbG5hX2FjdGlvbnMgOj0ge1xcblxcdFxcXCJBYm9ydEluY29tcGxldGVNdWx0aXBhcnRVcGxvYWRcXFwiLFxcblxcdFxcXCJFeHBpcmF0aW9uRGF0ZVxcXCIsXFxuXFx0XFxcIkV4cGlyYXRpb25JbkRheXNcXFwiLFxcblxcdFxcXCJFeHBpcmVkT2JqZWN0RGVsZXRlTWFya2VyXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25FeHBpcmF0aW9uSW5EYXlzXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uXFxcIixcXG5cXHRcXFwiTm9uY3VycmVudFZlcnNpb25UcmFuc2l0aW9uc1xcXCIsXFxuXFx0XFxcIlRyYW5zaXRpb25cXFwiLFxcblxcdFxcXCJUcmFuc2l0aW9uc1xcXCIsXFxufVxcblxcbl9wZl9zM2xuYV9oYXNfYWN0aW9uKHJ1bGUpIGlmIHtcXG5cXHRzb21lIGsgaW4gX3BmX3MzbG5hX2FjdGlvbnNcXG5cXHRvYmplY3QuZ2V0KHJ1bGUsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtcnVsZS1uby1hY3Rpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZFxcXCIsIFtyLmluZGV4XSksXFxuXFx0XFxcIlRoZSBsaWZlY3ljbGUgcnVsZSBzcGVjaWZpZXMgbm8gYWN0aW9uOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJBdCBsZWFzdCBvbmUgb2YgW0V4cGlyYXRpb25EYXRlLEV4cGlyYXRpb25JbkRheXMsQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkLFRyYW5zaXRpb24sLi4uXSBuZWVkcyB0byBiZSBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhbiBleHBpcmF0aW9uLCB0cmFuc2l0aW9uLCBvciBhYm9ydC1pbmNvbXBsZXRlLW11bHRpcGFydC11cGxvYWQgYWN0aW9uIHRvIHRoZSBydWxlLCBvciByZW1vdmUgdGhlIHJ1bGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLXMzLWJ1Y2tldC1ydWxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0bm90IF9wZl9zM2xuYV9oYXNfYWN0aW9uKHIudmFsdWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbm90aWZpY2F0aW9uLW92ZXJsYXBwaW5nLWZpbHRlcnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJOb3RpZmljYXRpb24gZW50cmllcyBtdXN0IG5vdCBvdmVybGFwIGZvciB0aGUgc2FtZSBldmVudCB0eXBlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFMzIGtlZXBzIG9uZSBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBwZXIgYnVja2V0IGFuZCByZWplY3RzIGl0IHdoZW4gdHdvXFxuIyBlbnRyaWVzIChhY3Jvc3MgcXVldWUvdG9waWMvbGFtYmRhIGFsaWtlKSBjb3VsZCBtYXRjaCB0aGUgc2FtZSBvYmplY3QgZXZlbnQ6XFxuIyBvdmVybGFwcGluZyBldmVudCB0eXBlcyBBTkQgb3ZlcmxhcHBpbmcgcHJlZml4ZXMgQU5EIG92ZXJsYXBwaW5nIHN1ZmZpeGVzLlxcbiMgQSBtaXNzaW5nIGZpbHRlciBzaWRlIG1lYW5zIFxcXCJcXFwiIGFuZCBvdmVybGFwcyBldmVyeXRoaW5nLiBQYWlycyB3aXRoIGFuXFxuIyB1bnJlc29sdmFibGUgZXZlbnQgb3IgZmlsdGVyIHZhbHVlIGFyZSBza2lwcGVkIOKAlCBvdmVybGFwIGNhbm5vdCBiZSBwcm92ZW4uXFxuXFxuX3BmX3Mzbm9fY29uZmlncyhuYW1lKSA6PSBhcnJheS5jb25jYXQoYXJyYXkuY29uY2F0KFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLlF1ZXVlQ29uZmlndXJhdGlvbnNcXFwiKV0sXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uVG9waWNDb25maWd1cmF0aW9uc1xcXCIpXSksXFxuXFx0W2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb24uTGFtYmRhQ29uZmlndXJhdGlvbnNcXFwiKV0pXFxuXFxuX3BmX3Mzbm9fcnVsZXMoYykgOj0gcnVsZXMgaWYge1xcblxcdGYgOj0gb2JqZWN0LmdldChjLCBcXFwiRmlsdGVyXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoZilcXG5cXHRrIDo9IG9iamVjdC5nZXQoZiwgXFxcIlMzS2V5XFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QoaylcXG5cXHRydWxlcyA6PSBvYmplY3QuZ2V0KGssIFxcXCJSdWxlc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHJ1bGVzKVxcbn1cXG5cXG5fcGZfczNub19ydWxlcyhjKSA6PSBbXSBpZiB7XFxuXFx0b2JqZWN0LmdldChjLCBcXFwiRmlsdGVyXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNub19maWx0ZXJfdmFsKGMsIGtpbmQpIDo9IHYgaWYge1xcblxcdHZzIDo9IFt4IHwgc29tZSByIGluIF9wZl9zM25vX3J1bGVzKGMpOyBpc19vYmplY3Qocik7IGxvd2VyKG9iamVjdC5nZXQociwgXFxcIk5hbWVcXFwiLCBcXFwiXFxcIikpID09IGtpbmQ7IHggOj0gb2JqZWN0LmdldChyLCBcXFwiVmFsdWVcXFwiLCBudWxsKV1cXG5cXHRjb3VudCh2cykgPiAwXFxuXFx0diA6PSB2c1swXVxcbn1cXG5cXG5fcGZfczNub19maWx0ZXJfdmFsKGMsIGtpbmQpIDo9IFxcXCJcXFwiIGlmIHtcXG5cXHR2cyA6PSBbeCB8IHNvbWUgciBpbiBfcGZfczNub19ydWxlcyhjKTsgaXNfb2JqZWN0KHIpOyBsb3dlcihvYmplY3QuZ2V0KHIsIFxcXCJOYW1lXFxcIiwgXFxcIlxcXCIpKSA9PSBraW5kOyB4IDo9IG9iamVjdC5nZXQociwgXFxcIlZhbHVlXFxcIiwgbnVsbCldXFxuXFx0Y291bnQodnMpID09IDBcXG59XFxuXFxuX3BmX3Mzbm9fcHJlX292ZXJsYXAoYSwgYikgaWYgc3RhcnRzd2l0aChhLCBiKVxcblxcbl9wZl9zM25vX3ByZV9vdmVybGFwKGEsIGIpIGlmIHN0YXJ0c3dpdGgoYiwgYSlcXG5cXG5fcGZfczNub19zdWZfb3ZlcmxhcChhLCBiKSBpZiBlbmRzd2l0aChhLCBiKVxcblxcbl9wZl9zM25vX3N1Zl9vdmVybGFwKGEsIGIpIGlmIGVuZHN3aXRoKGIsIGEpXFxuXFxuIyBcXFwiczM6T2JqZWN0Q3JlYXRlZDoqXFxcIiBjb3ZlcnMgXFxcInMzOk9iamVjdENyZWF0ZWQ6UHV0XFxcIjsgZHJvcCB0aGUgdHJhaWxpbmcgXFxcIipcXFwiXFxuIyBhbmQgcHJlZml4LW1hdGNoLlxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiBlMSA9PSBlMlxcblxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiB7XFxuXFx0ZW5kc3dpdGgoZTEsIFxcXCI6KlxcXCIpXFxuXFx0c3RhcnRzd2l0aChlMiwgc3Vic3RyaW5nKGUxLCAwLCBjb3VudChlMSkgLSAxKSlcXG59XFxuXFxuX3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpIGlmIHtcXG5cXHRlbmRzd2l0aChlMiwgXFxcIjoqXFxcIilcXG5cXHRzdGFydHN3aXRoKGUxLCBzdWJzdHJpbmcoZTIsIDAsIGNvdW50KGUyKSAtIDEpKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLW5vdGlmaWNhdGlvbi1vdmVybGFwcGluZy1maWx0ZXJzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUd28gbm90aWZpY2F0aW9uIGVudHJpZXMgZm9yIG92ZXJsYXBwaW5nIGV2ZW50IHR5cGVzICgnJXMnIGFuZCAnJXMnKSBoYXZlIG92ZXJsYXBwaW5nIHByZWZpeC9zdWZmaXggZmlsdGVyczsgUzMgcmVqZWN0cyB0aGUgY29uZmlndXJhdGlvbiB3aXRoIFxcXFxcXFwiQ29uZmlndXJhdGlvbiBpcyBhbWJpZ3VvdXNseSBkZWZpbmVkLiBDYW5ub3QgaGF2ZSBvdmVybGFwcGluZyBzdWZmaXhlcyBpbiB0d28gcnVsZXMgaWYgdGhlIHByZWZpeGVzIGFyZSBvdmVybGFwcGluZyBmb3IgdGhlIHNhbWUgZXZlbnQgdHlwZS5cXFxcXFxcIlxcXCIsIFtlMSwgZTJdKSxcXG5cXHRcXFwiTWFrZSB0aGUgcHJlZml4ZXMgb3Igc3VmZml4ZXMgZGlzam9pbnQsIG9yIG1lcmdlIHRoZSB0d28gZW50cmllcyBpbnRvIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL25vdGlmaWNhdGlvbi1ob3ctdG8tZmlsdGVyaW5nLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdGNzIDo9IF9wZl9zM25vX2NvbmZpZ3MobmFtZSlcXG5cXHRzb21lIGksIGEgaW4gY3NcXG5cXHRzb21lIGosIGIgaW4gY3NcXG5cXHRpIDwgalxcblxcdGUxIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIkV2ZW50XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZTEpXFxuXFx0ZTIgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiRXZlbnRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhlMilcXG5cXHRfcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMilcXG5cXHRwMSA6PSBfcGZfczNub19maWx0ZXJfdmFsKGEudmFsdWUsIFxcXCJwcmVmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhwMSlcXG5cXHRwMiA6PSBfcGZfczNub19maWx0ZXJfdmFsKGIudmFsdWUsIFxcXCJwcmVmaXhcXFwiKVxcblxcdGlzX3N0cmluZyhwMilcXG5cXHRfcGZfczNub19wcmVfb3ZlcmxhcChwMSwgcDIpXFxuXFx0czEgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChhLnZhbHVlLCBcXFwic3VmZml4XFxcIilcXG5cXHRpc19zdHJpbmcoczEpXFxuXFx0czIgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChiLnZhbHVlLCBcXFwic3VmZml4XFxcIilcXG5cXHRpc19zdHJpbmcoczIpXFxuXFx0X3BmX3Mzbm9fc3VmX292ZXJsYXAoczEsIHMyKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW9iamVjdGxvY2stcmVxdWlyZXMtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9iamVjdExvY2tDb25maWd1cmF0aW9uIG5lZWRzIHZlcnNpb25pbmcgZW5hYmxlZFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBvbiBpdHMgb3duIGRvZXMgTk9UIHJlcXVpcmUgT2JqZWN0TG9ja0VuYWJsZWQg4oCUXFxuIyBTMyBhY2NlcHRzIE9iamVjdCBMb2NrIG9uIGFuIGV4aXN0aW5nIHZlcnNpb25lZCBidWNrZXQgKGJlbmNoIHMwNWIgZGVwbG95ZWRcXG4jIGNsZWFuKS4gV2hhdCBpdCBkb2VzIHJlcXVpcmUgaXMgdmVyc2lvbmluZy4gV2hlbiBPYmplY3RMb2NrRW5hYmxlZCBpcyB0cnVlXFxuIyB0aGUgYnVja2V0IGlzIGNyZWF0ZWQgbG9jay1lbmFibGVkIGFuZCB2ZXJzaW9uaW5nIGNvbWVzIHdpdGggaXQsIHNvIHRoZSBydWxlXFxuIyBmaXJlcyBvbmx5IHdoZW4gbG9jay1lbmFibGVtZW50IGlzIHByb3ZhYmx5IG9mZiAoa2V5IGxpdGVyYWxseSBhYnNlbnQgb3JcXG4jIGxpdGVyYWwgZmFsc2UpIGFuZCB2ZXJzaW9uaW5nIGlzIHByb3ZhYmx5IG5vdCBlbmFibGVkLlxcbl9wZl9zM29scnZfbm9fbG9ja19lbmFibGVkKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiT2JqZWN0TG9ja0VuYWJsZWRcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM29scnZfbm9fbG9ja19lbmFibGVkKG5hbWUpIGlmIHtcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tFbmFibGVkXFxcIikpID09IGZhbHNlXFxufVxcblxcbl9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJWZXJzaW9uaW5nQ29uZmlndXJhdGlvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLW9iamVjdGxvY2stcmVxdWlyZXMtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBpcyBzZXQgb24gYSBidWNrZXQgd2hvc2UgdmVyc2lvbmluZyBpcyBub3QgZW5hYmxlZDsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiVmVyc2lvbmluZyBtdXN0IGJlICdFbmFibGVkJyBvbiB0aGUgYnVja2V0IHRvIGFwcGx5IGEgT2JqZWN0IExvY2sgY29uZmlndXJhdGlvblxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcsIG9yIHNldCBPYmplY3RMb2NrRW5hYmxlZDogdHJ1ZSB0byBjcmVhdGUgdGhlIGJ1Y2tldCBsb2NrLWVuYWJsZWRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3QtbG9jay5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrQ29uZmlndXJhdGlvblxcXCIpKVxcblxcdF9wZl9zM29scnZfbm9fbG9ja19lbmFibGVkKG5hbWUpXFxuXFx0X3BmX3Mzb2xydl9iYWRfdmVyc2lvbmluZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW9iamVjdGxvY2stdmVyc2lvbmluZy1zdXNwZW5kZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3QgTG9jayBmb3JiaWRzIHN1c3BlbmRpbmcgdmVyc2lvbmluZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPYmplY3QgTG9jayBmb3JjZS1lbmFibGVzIHZlcnNpb25pbmcgYXQgY3JlYXRpb24sIHNvIGEgdGVtcGxhdGUgdGhhdCBhbHNvXFxuIyBzdXNwZW5kcyB2ZXJzaW9uaW5nIGNvbnRyYWRpY3RzIGl0c2VsZiBhbmQgdGhlIGhhbmRsZXIncyBQdXRCdWNrZXRWZXJzaW9uaW5nXFxuIyBjYWxsIGlzIHJlamVjdGVkLiBGaXJlcyBvbmx5IG9uIGEgbGl0ZXJhbCBcXFwiU3VzcGVuZGVkXFxcIi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLW9iamVjdGxvY2stdmVyc2lvbmluZy1zdXNwZW5kZWRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIsXFxuXFx0XFxcIk9iamVjdExvY2tFbmFibGVkIGlzIHRydWUgYnV0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uIHN1c3BlbmRzIHZlcnNpb25pbmc7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkFuIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb24gaXMgcHJlc2VudCBvbiB0aGlzIGJ1Y2tldCwgc28gdGhlIHZlcnNpb25pbmcgc3RhdGUgY2Fubm90IGJlIGNoYW5nZWQuXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyAob3IgZHJvcCBpdCDigJQgT2JqZWN0IExvY2sgZW5hYmxlcyB2ZXJzaW9uaW5nIGl0c2VsZilcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9vYmplY3QtbG9jay5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRjb2VyY2VfdG9fYm9vbChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tFbmFibGVkXFxcIikpID09IHRydWVcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtcmVwbGljYXRpb24tZGVzdC12ZXJzaW9uaW5nXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGhlIHJlcGxpY2F0aW9uIGRlc3RpbmF0aW9uIGJ1Y2tldCBuZWVkcyB2ZXJzaW9uaW5nIGVuYWJsZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIGRlc3RpbmF0aW9uIHNpZGUgb2Ygd2hhdCBwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nIGNoZWNrcyBvblxcbiMgdGhlIHNvdXJjZS4gRGVzdGluYXRpb24uQnVja2V0IGlzIG5vcm1hbGx5IEZuOjpHZXRBdHQvUmVmIHRvIGFuIGluLXRlbXBsYXRlXFxuIyBidWNrZXQ7IHJlc29sdmUoKSB0dXJucyBib3RoIGludG8gdGhlIHRhcmdldCdzIGxvZ2ljYWwgSUQsIHNvIHRoZVxcbiMgZGVzdGluYXRpb24ncyBvd24gcHJvcGVydGllcyBhcmUgcmVhZGFibGUuIEV4dGVybmFsIGRlc3RpbmF0aW9uIEFSTnMgcmVzb2x2ZVxcbiMgdG8gc3RyaW5ncyB0aGF0IGFyZSBub3QgbG9naWNhbCBJRHMgYW5kIHNraXAuIFZlcnNpb25pbmcgaXMgXFxcIm5vdCBlbmFibGVkXFxcIlxcbiMgd2hlbiBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiBpcyBsaXRlcmFsbHkgYWJzZW50IChwcm92ZW4gdmlhXFxuIyBpbnB1dC5yZXNvdXJjZXMsIHNlZSBBR0VOVFMubWQpIG9yIFN0YXR1cyByZXNvbHZlcyB0byBcXFwiU3VzcGVuZGVkXFxcIjsgYW5cXG4jIHVucmVzb2x2YWJsZSBTdGF0dXMgc2tpcHMuXFxuX3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbZGVzdF0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KSBpZiB7XFxuXFx0cmVzb2x2ZShkZXN0LCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLXJlcGxpY2F0aW9uLWRlc3QtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRGVzdGluYXRpb24uQnVja2V0XFxcIiwgW3IuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJSZXBsaWNhdGlvbiBkZXN0aW5hdGlvbiBidWNrZXQgJyVzJyBkb2VzIG5vdCBoYXZlIHZlcnNpb25pbmcgZW5hYmxlZDsgUzMgcmVqZWN0cyB0aGUgY29uZmlndXJhdGlvbiB3aXRoIFxcXFxcXFwiRGVzdGluYXRpb24gYnVja2V0IG11c3QgaGF2ZSB2ZXJzaW9uaW5nIGVuYWJsZWRcXFxcXFxcIlxcXCIsIFtkZXN0XSksXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnIG9uIHRoZSBkZXN0aW5hdGlvbiBidWNrZXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9yZXBsaWNhdGlvbi1yZXF1aXJlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGRlc3QgOj0gcmVzb2x2ZShuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5EZXN0aW5hdGlvbi5CdWNrZXRcXFwiLCBbci5pbmRleF0pKVxcblxcdGlzX3N0cmluZyhkZXN0KVxcblxcdGRlc3QgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0X3BmX3MzcmR2X2JhZF92ZXJzaW9uaW5nKGRlc3QpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlJlcGxpY2F0aW9uQ29uZmlndXJhdGlvbiByZXF1aXJlcyB2ZXJzaW9uaW5nIHRvIGJlIGVuYWJsZWQgb24gdGhlIHNvdXJjZSBidWNrZXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMg6YGV5Y+N44Gr44GZ44KL44Gu44GvIFZlcnNpb25pbmdDb25maWd1cmF0aW9uIOOBjOaWh+Wtl+OBqeOBiuOCiuS4jeWcqO+8iGlucHV0LnJlc291cmNlcyDjgadcXG4jIOiovOaYjuOAgUFHRU5UUy5tZCDlj4LnhafvvInjgYvjgIFTdGF0dXMg44GM44Oq44OG44Op44Or44GnIFxcXCJTdXNwZW5kZWRcXFwiIOOBruOBqOOBjeOBoOOBkeOAglxcbiMg5pyq6Kej5rG644OI44O844Kv44Oz44GvIE9LIOaJseOBhO+8iHJlc29sdmUoKSDjga/jgq3jg7zkuI3lnKjjgajmnKrop6Pmsbrjga7kuKHmlrnjgacgdW5kZWZpbmVkIOOBq1xcbiMg44Gq44KL44Gf44KB44CBYG5vdCByZXNvbHZlKC4uLilgIOOBp+OBr+S4jeWcqOOCkuiovOaYjuOBp+OBjeOBquOBhCDigJQgMjAyNi0wOS0wMiDlrp/muKzvvInjgIJcXG5fcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM3JlcGxfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1yZXBsaWNhdGlvbi1yZXF1aXJlcy12ZXJzaW9uaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gaXMgc2V0IGJ1dCBidWNrZXQgdmVyc2lvbmluZyBpcyBub3QgZW5hYmxlZDsgUzMgcmVqZWN0cyB0aGUgcmVwbGljYXRpb24gY29uZmlndXJhdGlvbiBhdCBkZXBsb3kgdGltZSAoSW52YWxpZFJlcXVlc3Q6IFZlcnNpb25pbmcgbXVzdCBiZSAnRW5hYmxlZCcgb24gdGhlIGJ1Y2tldClcXFwiLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyBvbiB0aGUgc291cmNlIGJ1Y2tldFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL3JlcGxpY2F0aW9uLXJlcXVpcmVtZW50cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXHRfcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtd2Vic2l0ZS1yZWRpcmVjdC1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZWRpcmVjdEFsbFJlcXVlc3RzVG8gZXhjbHVkZXMgZXZlcnkgb3RoZXIgd2Vic2l0ZSBzZXR0aW5nXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyByZWRpcmVjdHMgdGhlIHdob2xlIHNpdGUsIHNvIFMzIHJlamVjdHMgYW55IHNpYmxpbmdcXG4jIHdlYnNpdGUgc2V0dGluZyBhbG9uZ3NpZGUgaXQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy13ZWJzaXRlLXJlZGlyZWN0LWV4Y2x1c2l2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5XZWJzaXRlQ29uZmlndXJhdGlvbi4lc1xcXCIsIFtrXSksXFxuXFx0c3ByaW50ZihcXFwiV2Vic2l0ZUNvbmZpZ3VyYXRpb24gY29tYmluZXMgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIHdpdGggJXM7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIltJbmRleERvY3VtZW50LCBFcnJvckRvY3VtZW50LCBSb3V0aW5nUnVsZXNdIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGlmIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyBpcyBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtrXSksXFxuXFx0XFxcIktlZXAgUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGFsb25lLCBvciBkcm9wIGl0IGFuZCBjb25maWd1cmUgdGhlIHdlYnNpdGUgd2l0aCBJbmRleERvY3VtZW50L0Vycm9yRG9jdW1lbnQvUm91dGluZ1J1bGVzXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtd2Vic2l0ZWNvbmZpZ3VyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0d2MgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5XZWJzaXRlQ29uZmlndXJhdGlvblxcXCIpXFxuXFx0aXNfb2JqZWN0KHdjKVxcblxcdG9iamVjdC5nZXQod2MsIFxcXCJSZWRpcmVjdEFsbFJlcXVlc3RzVG9cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0c29tZSBrIGluIHtcXFwiSW5kZXhEb2N1bWVudFxcXCIsIFxcXCJFcnJvckRvY3VtZW50XFxcIiwgXFxcIlJvdXRpbmdSdWxlc1xcXCJ9XFxuXFx0b2JqZWN0LmdldCh3YywgaywgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXNucy1maWZvLXRvcGljLW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzbnNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRklGTyB0b3BpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICcuZmlmbycgKGFuZCAnLmZpZm8nIG5hbWVzIHJlcXVpcmUgRmlmb1RvcGljKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTTlM6OlRvcGljXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nuc2ZpZm9fZml4IDo9IFxcXCJHaXZlIEZJRk8gdG9waWNzIGEgVG9waWNOYW1lIGVuZGluZyBpbiAnLmZpZm8nIChvciBkcm9wIFRvcGljTmFtZSB0byBsZXQgQ2xvdWRGb3JtYXRpb24gZ2VuZXJhdGUgb25lKSwgYW5kIHNldCBGaWZvVG9waWM6IHRydWUgd2hlbmV2ZXIgdGhlIG5hbWUgZW5kcyBpbiAnLmZpZm8nXFxcIlxcblxcbl9wZl9zbnNmaWZvX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nucy9sYXRlc3QvZGcvc25zLWNyZWF0ZS1maWZvLXRvcGljLmh0bWxcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkZpZm9Ub3BpY1xcXCIpIGluIHt0cnVlLCBcXFwidHJ1ZVxcXCJ9XFxuXFxuIyBGaWZvVG9waWMg44GM5a2Y5Zyo44GX44CB44Oq44OG44Op44OrIGZhbHNlIOS7peWklu+8iHRydWUg44KE44OI44O844Kv44Oz77yJ44Gq44KJ44CMRklGTyDjgYvjgoLjgZfjgozjgarjgYTjgI3mibHjgYRcXG5fcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpIGlmIHtcXG5cXHR2IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIilcXG5cXHRub3QgdiBpbiB7ZmFsc2UsIFxcXCJmYWxzZVxcXCJ9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGaWZvVG9waWMgaXMgdHJ1ZSBidXQgVG9waWNOYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5maWZvJzsgU05TIHJlamVjdHMgdGhlIHRvcGljIGF0IGRlcGxveSB0aW1lXFxcIiwgW3RuXSksXFxuXFx0X3BmX3Nuc2ZpZm9fZml4LCBfcGZfc25zZmlmb191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U05TOjpUb3BpY1xcXCIpXFxuXFx0X3BmX3Nuc2ZpZm9fdHJ1ZShuYW1lKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0bm90IGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNucy1maWZvLXRvcGljLW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVG9waWNOYW1lICclcycgZW5kcyB3aXRoICcuZmlmbycgYnV0IEZpZm9Ub3BpYyBpcyBub3QgdHJ1ZTsgU05TIHJlamVjdHMgdGhlIHRvcGljIG5hbWUgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHR0biA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvcGljTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHRuKVxcblxcdGVuZHN3aXRoKHRuLCBcXFwiLmZpZm9cXFwiKVxcblxcdG5vdCBfcGZfc25zZmlmb19tYXliZV9maWZvKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic3RlcGZ1bmN0aW9uc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBU0wgTmV4dC9EZWZhdWx0L0Nob2ljZXMgbXVzdCByZWZlcmVuY2UgYSBkZWZpbmVkIHN0YXRlICh0b3AtbGV2ZWwgc3RhdGVzOyBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgY292ZXJlZCBieSBlbmdpbmUgcnVsZSBFMzYwMSlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nmbl9maXggOj0gXFxcIlBvaW50IE5leHQvRGVmYXVsdC9DaG9pY2VzIGF0IGFuIGV4aXN0aW5nIHN0YXRlIG5hbWVcXFwiXFxuXFxuX3BmX3Nmbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zdGVwLWZ1bmN0aW9ucy9sYXRlc3QvZGcvYW1hem9uLXN0YXRlcy1sYW5ndWFnZS1zdGF0ZXMuaHRtbFxcXCJcXG5cXG5fcGZfc2ZuX2FzbChuYW1lKSA6PSBhc2wgaWYge1xcblxcdGRlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiKVxcblxcdGlzX3N0cmluZyhkZWYpXFxuXFx0YXNsIDo9IGpzb24udW5tYXJzaGFsKGRlZilcXG5cXHRpc19vYmplY3QoYXNsKVxcbn1cXG5cXG5fcGZfc2ZuX2RlZmluZWQoYXNsKSA6PSB7c24gfCBzb21lIHNuLCBfIGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pfVxcblxcbiMgTk9URTogYSBkYW5nbGluZyBTdGFydEF0IGlzIGRlbGliZXJhdGVseSBOT1QgY2hlY2tlZCBoZXJlIOKAlCB0aGUgZW5naW5lJ3NcXG4jIGJ1aWx0LWluIHJ1bGUgRTM2MDEgKEVSUk9SL0NGTl9MSU5UKSBhbHJlYWR5IGNvdmVycyBpdC4gVmVyaWZpZWQgYWdhaW5zdFxcbiMgQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZSAxLjcuMC1iZXRhIG9uIDIwMjYtMDktMDE6IEUzNjAxIGZpcmVzIGZvclxcbiMgU3RhcnRBdCBvbmx5IGFuZCBkb2VzIG5vdCBjaGVjayBOZXh0L0RlZmF1bHQvQ2hvaWNlcywgd2hpY2ggaXMgd2hhdCB0aGlzXFxuIyBydWxlIGFkZHMuXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgcmVmZXJlbmNlcyBzdGF0ZSAnJXMnIHZpYSAlcywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldCwga2V5XSksXFxuXFx0X3BmX3Nmbl9maXgsIF9wZl9zZm5fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVxcXCIpXFxuXFx0YXNsIDo9IF9wZl9zZm5fYXNsKG5hbWUpXFxuXFx0c29tZSBzbmFtZSwgc3QgaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSlcXG5cXHRpc19vYmplY3Qoc3QpXFxuXFx0c29tZSBrZXkgaW4ge1xcXCJOZXh0XFxcIiwgXFxcIkRlZmF1bHRcXFwifVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KHN0LCBrZXksIG51bGwpXFxuXFx0aXNfc3RyaW5nKHRhcmdldClcXG5cXHRub3QgdGFyZ2V0IGluIF9wZl9zZm5fZGVmaW5lZChhc2wpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2ZuLWFzbC1taXNzaW5nLXN0YXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EZWZpbml0aW9uU3RyaW5nXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJzdGF0ZSAnJXMnIGhhcyBhIENob2ljZSBydWxlIHJlZmVyZW5jaW5nIHN0YXRlICclcycsIGJ1dCBubyBzdGF0ZSB3aXRoIHRoYXQgbmFtZSBpcyBkZWZpbmVkXFxcIiwgW3NuYW1lLCB0YXJnZXRdKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRjaG9pY2VzIDo9IG9iamVjdC5nZXQoc3QsIFxcXCJDaG9pY2VzXFxcIiwgW10pXFxuXFx0aXNfYXJyYXkoY2hvaWNlcylcXG5cXHRzb21lIGMgaW4gY2hvaWNlc1xcblxcdGlzX29iamVjdChjKVxcblxcdHRhcmdldCA6PSBvYmplY3QuZ2V0KGMsIFxcXCJOZXh0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXCJcbiAgfVxuXTtcbiJdfQ==
830
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMuZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bGVzLmdlbmVyYXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFhYSxRQUFBLGFBQWEsR0FBc0I7SUFDOUM7UUFDRSxJQUFJLEVBQUUscUNBQXFDO1FBQzNDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHlFQUF5RTtRQUNsRixVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZixnQ0FBZ0M7U0FDakM7UUFDRCxNQUFNLEVBQUUsbzJCQUFvMkI7S0FDNzJCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsMkJBQTJCO1FBQ2pDLFNBQVMsRUFBRSxtQkFBbUI7UUFDOUIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLDRFQUE0RTtRQUNyRixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLGVBQWUsRUFBRTtZQUNmLGdDQUFnQztTQUNqQztRQUNELE1BQU0sRUFBRSwrNkJBQSs2QjtLQUN4N0I7SUFDRDtRQUNFLElBQUksRUFBRSwrQkFBK0I7UUFDckMsU0FBUyxFQUFFLFlBQVk7UUFDdkIsVUFBVSxFQUFFLE9BQU87UUFDbkIsT0FBTyxFQUFFLHVEQUF1RDtRQUNoRSxVQUFVLEVBQUUsTUFBTTtRQUNsQixlQUFlLEVBQUU7WUFDZiwrQkFBK0I7U0FDaEM7UUFDRCxNQUFNLEVBQUUsNjZCQUE2NkI7S0FDdDdCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsa0RBQWtEO1FBQ3hELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE9BQU8sRUFBRSwyRUFBMkU7UUFDcEYsVUFBVSxFQUFFLE1BQU07UUFDbEIsZUFBZSxFQUFFO1lBQ2YsK0JBQStCO1NBQ2hDO1FBQ0QsTUFBTSxFQUFFLHMvQkFBcy9CO0tBQy8vQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHFDQUFxQztRQUMzQyxTQUFT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IGJ5IHNjcmlwdHMvYnVuZGxlLXJ1bGVzLnRzIGZyb20gcnVsZXMvKiouIERvIG5vdCBlZGl0IGJ5IGhhbmQuXG4vLyB+fiBSZWdlbmVyYXRlIHdpdGg6IG5weCBwcm9qZW4gYnVuZGxlLXJ1bGVzXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVkUnVsZURhdGEge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwc3RyZWFtOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWdvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBCVU5ETEVEX1JVTEVTOiBCdW5kbGVkUnVsZURhdGFbXSA9IFtcbiAge1xuICAgIFwiaWRcIjogXCJwZi1hZ2VudGNvcmUtZ2F0ZXdheS1qd3QtYXV0aG9yaXplclwiLFxuICAgIFwic2VydmljZVwiOiBcImJlZHJvY2stYWdlbnRjb3JlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdhdGV3YXlzIHdpdGggQXV0aG9yaXplclR5cGUgQ1VTVE9NX0pXVCByZXF1aXJlIEF1dGhvcml6ZXJDb25maWd1cmF0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OkdhdGV3YXlcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZ3dqd3RfaGFzX2NvbmZpZyhuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BdXRob3JpemVyQ29uZmlndXJhdGlvblxcXCIpKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtYWdlbnRjb3JlLWdhdGV3YXktand0LWF1dGhvcml6ZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiQXV0aG9yaXplclR5cGUgaXMgQ1VTVE9NX0pXVCBidXQgQXV0aG9yaXplckNvbmZpZ3VyYXRpb24gaXMgbWlzc2luZzsgdGhlIENyZWF0ZUdhdGV3YXkgQVBJIHJlcXVpcmVzIGl0IGFuZCB0aGUgZGVwbG95bWVudCBmYWlscyB3aXRoIGEgVmFsaWRhdGlvbkV4Y2VwdGlvblxcXCIsXFxuXFx0XFxcIkFkZCBBdXRob3JpemVyQ29uZmlndXJhdGlvbi5DdXN0b21KV1RBdXRob3JpemVyIChkaXNjb3ZlcnlVcmwgYW5kIGFsbG93ZWRBdWRpZW5jZS9hbGxvd2VkQ2xpZW50cyksIG9yIHN3aXRjaCBBdXRob3JpemVyVHlwZSB0byBBV1NfSUFNXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlR2F0ZXdheS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpHYXRld2F5XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkF1dGhvcml6ZXJUeXBlXFxcIikgPT0gXFxcIkNVU1RPTV9KV1RcXFwiXFxuXFx0bm90IF9wZl9nd2p3dF9oYXNfY29uZmlnKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtYWdlbnRjb3JlLXJ1bnRpbWUtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcImJlZHJvY2stYWdlbnRjb3JlXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFnZW50Q29yZSBSdW50aW1lIG5hbWVzIG11c3QgbWF0Y2ggW2EtekEtWl1bYS16QS1aMC05X117MCw0N30gKG5vIGh5cGhlbnMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpSdW50aW1lXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBDbG91ZEZvcm1hdGlvbiDjgrnjgq3jg7zjg57jga8gQWdlbnRSdW50aW1lTmFtZSDjga7jg5Hjgr/jg7zjg7PjgpLmjIHjgZ/jgarjgYTvvIjjgqjjg7Pjgrjjg7PntKDpgJrjgorjgIFcXG4jIDIwMjYtMDktMDEg44GrIDEuNy4wLWJldGEg44Gn56K66KqN77yJ44GM44CBQ3JlYXRlQWdlbnRSdW50aW1lIEFQSSDjga9cXG4jIFthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9IOOCkuW8t+WItuOBmeOCi+OAguODj+OCpOODleODs+WFpeOCiuOBriBDREsg6aKo5ZG95ZCN44GM5a6a55Wq44Gu5q275Zug44CCXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1hZ2VudGNvcmUtcnVudGltZS1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BZ2VudFJ1bnRpbWVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBZ2VudFJ1bnRpbWVOYW1lICclcycgaXMgaW52YWxpZDogaXQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjb250YWluIG9ubHkgbGV0dGVycywgZGlnaXRzLCBhbmQgdW5kZXJzY29yZXMgKG1heCA0OCBjaGFyYWN0ZXJzLCBoeXBoZW5zIGFyZSBub3QgYWxsb3dlZCk7IENyZWF0ZUFnZW50UnVudGltZSBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsIFtuXSksXFxuXFx0XFxcIlVzZSBhbiB1bmRlcnNjb3JlLXNlcGFyYXRlZCBuYW1lIHN1Y2ggYXMgJ215X2FnZW50X3J1bnRpbWUnXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2JlZHJvY2stYWdlbnRjb3JlLWNvbnRyb2wvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQWdlbnRSdW50aW1lLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkJlZHJvY2tBZ2VudENvcmU6OlJ1bnRpbWVcXFwiKVxcblxcdG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BZ2VudFJ1bnRpbWVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcobilcXG5cXHRub3QgcmVnZXgubWF0Y2goYF5bYS16QS1aXVthLXpBLVowLTlfXXswLDQ3fSRgLCBuKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtYWNtLWNlcnQtcmVnaW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDbG91ZEZyb250IHZpZXdlciBjZXJ0aWZpY2F0ZXMgbXVzdCBsaXZlIGluIHVzLWVhc3QtMVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtYWNtLWNlcnQtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGUuQWNtQ2VydGlmaWNhdGVBcm5cXFwiLFxcblxcdHNwcmludGYoXFxcIkNsb3VkRnJvbnQgcmVxdWlyZXMgdGhlIEFDTSBjZXJ0aWZpY2F0ZSB0byBiZSBpbiB1cy1lYXN0LTEsIGJ1dCB0aGUgY2VydGlmaWNhdGUgaXMgaW4gJXNcXFwiLCBbcmVnaW9uXSksXFxuXFx0XFxcIklzc3VlIG9yIGltcG9ydCB0aGUgY2VydGlmaWNhdGUgaW4gdXMtZWFzdC0xIChlLmcuIGEgZGVkaWNhdGVkIHVzLWVhc3QtMSBzdGFjaykgYW5kIHJlZmVyZW5jZSB0aGF0IEFSTlxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jbmFtZXMtYW5kLWh0dHBzLXJlcXVpcmVtZW50cy5odG1sI2h0dHBzLXJlcXVpcmVtZW50cy1jZXJ0aWZpY2F0ZS1pc3N1ZXJcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0YXJuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkFjbUNlcnRpZmljYXRlQXJuXFxcIilcXG5cXHRpc19zdHJpbmcoYXJuKVxcblxcdHN0YXJ0c3dpdGgoYXJuLCBcXFwiYXJuOlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1syXSA9PSBcXFwiYWNtXFxcIlxcblxcdHJlZ2lvbiA6PSBwYXJ0c1szXVxcblxcdHJlZ2lvbiAhPSBcXFwiXFxcIlxcblxcdHJlZ2lvbiAhPSBcXFwidXMtZWFzdC0xXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtYWxpYXNlcy1yZXF1aXJlLWN1c3RvbS1jZXJ0aWZpY2F0ZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBkaXN0cmlidXRpb24gd2l0aCBBbGlhc2VzIGNhbm5vdCB1c2UgdGhlIENsb3VkRnJvbnQgZGVmYXVsdCBjZXJ0aWZpY2F0ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi12aWV3ZXJjZXJ0aWZpY2F0ZS5odG1sXFxcIlxcblxcbl9wZl9jZl9hbGlhc2NlcnRfZml4IDo9IFxcXCJBdHRhY2ggYW4gQUNNIGNlcnRpZmljYXRlIChBY21DZXJ0aWZpY2F0ZUFybiwgdXMtZWFzdC0xKSBvciBhbiBJQU0gY2VydGlmaWNhdGUsIHRvZ2V0aGVyIHdpdGggU3NsU3VwcG9ydE1ldGhvZCBhbmQgTWluaW11bVByb3RvY29sVmVyc2lvblxcXCJcXG5cXG5fcGZfY2ZfYWxpYXNjZXJ0X2NvdW50KG5hbWUpIDo9IGNvdW50KFsxIHxcXG5cXHRzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5BbGlhc2VzXFxcIilcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1hbGlhc2VzLXJlcXVpcmUtY3VzdG9tLWNlcnRpZmljYXRlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuVmlld2VyQ2VydGlmaWNhdGVcXFwiLFxcblxcdFxcXCJBIGRpc3RyaWJ1dGlvbiB3aXRoIEFsaWFzZXMgY2Fubm90IHVzZSB0aGUgQ2xvdWRGcm9udCBkZWZhdWx0IGNlcnRpZmljYXRlXFxcIixcXG5cXHRfcGZfY2ZfYWxpYXNjZXJ0X2ZpeCwgX3BmX2NmX2FsaWFzY2VydF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRfcGZfY2ZfYWxpYXNjZXJ0X2NvdW50KG5hbWUpID4gMFxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLlZpZXdlckNlcnRpZmljYXRlLkNsb3VkRnJvbnREZWZhdWx0Q2VydGlmaWNhdGVcXFwiKSA9PSB0cnVlXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1jYWNoZWQtbWV0aG9kcy1zdWJzZXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkNhY2hlZE1ldGhvZHMgbXVzdCBiZSBhIHN1YnNldCBvZiBBbGxvd2VkTWV0aG9kc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfbWV0aG9kc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtY2xvdWRmcm9udC1kaXN0cmlidXRpb24tY2FjaGViZWhhdmlvci5odG1sXFxcIlxcblxcbl9wZl9jZl9tZXRob2RzX2JlaGF2aW9ycyhuYW1lKSA6PSBhcnJheS5jb25jYXQoXFxuXFx0W3tcXFwicGF0aFxcXCI6IFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5EZWZhdWx0Q2FjaGVCZWhhdmlvclxcXCIsIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pLCBcXFwidmFsdWVcXFwiOiBpdC52YWx1ZX0gfFxcblxcdFxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9yc1xcXCIpXSxcXG4pXFxuXFxuIyBDbG91ZEZyb250IGRlZmF1bHRzIEFsbG93ZWRNZXRob2RzIHRvIEdFVC9IRUFEIHdoZW4gdGhlIHByb3BlcnR5IGlzIG9taXR0ZWQsXFxuIyBzbyBhbiBvbWl0dGVkIEFsbG93ZWRNZXRob2RzIHN0aWxsIGNvbnN0cmFpbnMgd2hhdCBtYXkgYmUgY2FjaGVkLlxcbl9wZl9jZl9tZXRob2RzX2FsbG93ZWQoYikgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQWxsb3dlZE1ldGhvZHNcXFwiLCBbXFxcIkdFVFxcXCIsIFxcXCJIRUFEXFxcIl0pXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWNhY2hlZC1tZXRob2RzLXN1YnNldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiJXMuQ2FjaGVkTWV0aG9kc1xcXCIsIFtiLnBhdGhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDYWNoZWRNZXRob2RzIGNvbnRhaW5zICVzLCB3aGljaCBpcyBub3QgaW4gQWxsb3dlZE1ldGhvZHMgJXZcXFwiLCBbbWV0aG9kLCBhbGxvd2VkXSksXFxuXFx0XFxcIkV2ZXJ5IG1ldGhvZCBpbiBDYWNoZWRNZXRob2RzIG11c3QgYWxzbyBhcHBlYXIgaW4gQWxsb3dlZE1ldGhvZHNcXFwiLFxcblxcdF9wZl9jZl9tZXRob2RzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfbWV0aG9kc19iZWhhdmlvcnMobmFtZSlcXG5cXHRpc19vYmplY3QoYi52YWx1ZSlcXG5cXHRjYWNoZWQgOj0gb2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQ2FjaGVkTWV0aG9kc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoY2FjaGVkKVxcblxcdGFsbG93ZWQgOj0gX3BmX2NmX21ldGhvZHNfYWxsb3dlZChiKVxcblxcdGlzX2FycmF5KGFsbG93ZWQpXFxuXFx0c29tZSBtZXRob2QgaW4gY2FjaGVkXFxuXFx0bm90IG1ldGhvZCBpbiBhbGxvd2VkXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBkaXN0cmlidXRpb24gbXVzdCBiZSBpbiB1cy1lYXN0LTFcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX2VkZ2VyZWdpb25fZml4IDo9IFxcXCJDcmVhdGUgdGhlIExhbWJkYUBFZGdlIGZ1bmN0aW9uIGluIHVzLWVhc3QtMSAoY2xvdWRmcm9udC5leHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uIGRvZXMgdGhpcyBmb3IgeW91KSBhbmQgYXNzb2NpYXRlIHRoYXQgdmVyc2lvbidzIEFSTlxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9sYW1iZGEtYXQtZWRnZS1mdW5jdGlvbi1yZXN0cmljdGlvbnMuaHRtbFxcXCJcXG5cXG5fcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSkgOj0gYXJyYXkuY29uY2F0KFxcblxcdFt7XFxcInBhdGhcXFwiOiBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwifSB8XFxuXFx0XFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSl9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuQ2FjaGVCZWhhdmlvcnNcXFwiKV0sXFxuKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1lZGdlLWxhbWJkYS1yZWdpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zLiVkLkxhbWJkYUZ1bmN0aW9uQVJOXFxcIiwgW2IucGF0aCwgYS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIGZ1bmN0aW9ucyBtdXN0IGxpdmUgaW4gdXMtZWFzdC0xLCBidXQgdGhpcyBmdW5jdGlvbiBpcyBpbiAlc1xcXCIsIFtyZWdpb25dKSxcXG5cXHRfcGZfY2ZfZWRnZXJlZ2lvbl9maXgsIF9wZl9jZl9lZGdlcmVnaW9uX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXJlZ2lvbl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gN1xcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImxhbWJkYVxcXCJcXG5cXHRyZWdpb24gOj0gcGFydHNbM11cXG5cXHRyZWdpb24gIT0gXFxcIlxcXCJcXG5cXHRyZWdpb24gIT0gXFxcInVzLWVhc3QtMVxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYUBFZGdlIGFzc29jaWF0aW9ucyBtdXN0IHJlZmVyZW5jZSBhIHZlcnNpb24gQVJOLCBub3QgYW4gYWxpYXMgb3IgJExBVEVTVFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfY2ZfZWRnZXZlcl9maXggOj0gXFxcIkFzc29jaWF0ZSBhIHZlcnNpb24gQVJOIChpbiB0aGUgQ0RLLCBmbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuKSBpbnN0ZWFkIG9mIHRoZSB1bnF1YWxpZmllZCBmdW5jdGlvbiBBUk4sIGFuIGFsaWFzLCBvciAkTEFURVNUXFxcIlxcblxcbl9wZl9jZl9lZGdldmVyX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1sYW1iZGFmdW5jdGlvbmFzc29jaWF0aW9uLmh0bWxcXFwiXFxuXFxuX3BmX2NmX2VkZ2V2ZXJfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIn0gfFxcblxcdFxcdHNvbWUgXyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIildLFxcblxcdFt7XFxcInBhdGhcXFwiOiBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkRpc3RyaWJ1dGlvbkNvbmZpZy5DYWNoZUJlaGF2aW9ycy4lZFxcXCIsIFtpdC5pbmRleF0pfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG4jIExhbWJkYSBBUk5zIHNwbGl0IGludG8gNyBzZWdtZW50cyB3aGVuIHVucXVhbGlmaWVkXFxuIyAoYXJuOnBhcnRpdGlvbjpsYW1iZGE6cmVnaW9uOmFjY291bnQ6ZnVuY3Rpb246bmFtZSkgYW5kIDggd2hlbiBhIHZlcnNpb24gb3JcXG4jIGFsaWFzIHF1YWxpZmllciBpcyBhcHBlbmRlZC4gT25seSBhbiBhbGwtZGlnaXQgcXVhbGlmaWVyIGlzIGEgdmVyc2lvbi5cXG5fcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpIDo9IFt7XFxcInBhdGhcXFwiOiBwYXRoLCBcXFwiYXJuXFxcIjogYXJuLCBcXFwicGFydHNcXFwiOiBwYXJ0c30gfFxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfZWRnZXZlcl9iZWhhdmlvcnMobmFtZSlcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIiVzLkxhbWJkYUZ1bmN0aW9uQXNzb2NpYXRpb25zXFxcIiwgW2IucGF0aF0pKVxcblxcdGFybiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJMYW1iZGFGdW5jdGlvbkFSTlxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGFybilcXG5cXHRwYXJ0cyA6PSBzcGxpdChhcm4sIFxcXCI6XFxcIilcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJsYW1iZGFcXFwiXFxuXFx0cGFydHNbNV0gPT0gXFxcImZ1bmN0aW9uXFxcIlxcblxcdHBhdGggOj0gc3ByaW50ZihcXFwiJXMuTGFtYmRhRnVuY3Rpb25Bc3NvY2lhdGlvbnMuJWQuTGFtYmRhRnVuY3Rpb25BUk5cXFwiLCBbYi5wYXRoLCBhLmluZGV4XSlcXG5dXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdFxcXCJMYW1iZGFARWRnZSByZXF1aXJlcyBhIHZlcnNpb24tcXVhbGlmaWVkIGZ1bmN0aW9uIEFSTiwgYnV0IHRoaXMgQVJOIGhhcyBubyBxdWFsaWZpZXJcXFwiLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDdcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LWVkZ2UtbGFtYmRhLXZlcnNpb25cXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBpdC5wYXRoLFxcblxcdHNwcmludGYoXFxcIkxhbWJkYUBFZGdlIHJlcXVpcmVzIGEgdmVyc2lvbi1xdWFsaWZpZWQgZnVuY3Rpb24gQVJOLCBidXQgJyVzJyBpcyBhbiBhbGlhcyBvciAkTEFURVNUXFxcIiwgW3F1YWxpZmllcl0pLFxcblxcdF9wZl9jZl9lZGdldmVyX2ZpeCwgX3BmX2NmX2VkZ2V2ZXJfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblxcXCIpXFxuXFx0c29tZSBpdCBpbiBfcGZfY2ZfZWRnZXZlcl9hcm5zKG5hbWUpXFxuXFx0Y291bnQoaXQucGFydHMpID09IDhcXG5cXHRxdWFsaWZpZXIgOj0gaXQucGFydHNbN11cXG5cXHRub3QgcmVnZXgubWF0Y2goXFxcIl5bMC05XSskXFxcIiwgcXVhbGlmaWVyKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtb3JpZ2luLWdyb3VwLW1lbWJlci1vcmlnaW5cIixcbiAgICBcInNlcnZpY2VcIjogXCJjbG91ZGZyb250XCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk9yaWdpbiBncm91cCBtZW1iZXJzIG11c3QgcmVmZXJlbmNlIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiB0aGUgZGlzdHJpYnV0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkNsb3VkRnJvbnQ6OkRpc3RyaWJ1dGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9jZl9vZ21lbWJlcl9pZHMobmFtZSkgOj0ge2lkIHxcXG5cXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luc1xcXCIpXFxuXFx0aWQgOj0gb2JqZWN0LmdldChpdC52YWx1ZSwgXFxcIklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaWQpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC1vcmlnaW4tZ3JvdXAtbWVtYmVyLW9yaWdpblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuT3JpZ2luR3JvdXBzLkl0ZW1zLiVkLk1lbWJlcnNcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIk9yaWdpbiBncm91cCBtZW1iZXIgJyVzJyBkb2VzIG5vdCBtYXRjaCBhbnkgb3JpZ2luIElkIGluIHRoZSBkaXN0cmlidXRpb25cXFwiLCBbb2lkXSksXFxuXFx0XFxcIlBvaW50IGV2ZXJ5IG9yaWdpbiBncm91cCBtZW1iZXIgYXQgdGhlIElkIG9mIGFuIG9yaWdpbiBkZWNsYXJlZCBpbiBPcmlnaW5zXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1vcmlnaW5ncm91cC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLk9yaWdpbkdyb3Vwcy5JdGVtc1xcXCIpXFxuXFx0bWVtYmVycyA6PSBvYmplY3QuZ2V0KG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIk1lbWJlcnNcXFwiLCB7fSksIFxcXCJJdGVtc1xcXCIsIFtdKVxcblxcdHNvbWUgbSBpbiBtZW1iZXJzXFxuXFx0b2lkIDo9IG9iamVjdC5nZXQobSwgXFxcIk9yaWdpbklkXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcob2lkKVxcblxcdG5vdCBvaWQgaW4gX3BmX2NmX29nbWVtYmVyX2lkcyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiY2xvdWRmcm9udFwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDYWNoZSBiZWhhdmlvciBUVExzIG11c3Qgc2F0aXNmeSBNaW5UVEwgPD0gRGVmYXVsdFRUTCA8PSBNYXhUVExcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2NmX3R0bF9maXggOj0gXFxcIk9yZGVyIHRoZSBUVExzIGFzIE1pblRUTCA8PSBEZWZhdWx0VFRMIDw9IE1heFRUTFxcXCJcXG5cXG5fcGZfY2ZfdHRsX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL0V4cGlyYXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfY2ZfYmVoYXZpb3JzKG5hbWUpIDo9IGFycmF5LmNvbmNhdChcXG5cXHRbe1xcXCJwYXRoXFxcIjogXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkRlZmF1bHRDYWNoZUJlaGF2aW9yXFxcIiwgXFxcInZhbHVlXFxcIjogaXQudmFsdWV9IHxcXG5cXHRcXHRzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuRGVmYXVsdENhY2hlQmVoYXZpb3JcXFwiKV0sXFxuXFx0W3tcXFwicGF0aFxcXCI6IHNwcmludGYoXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzLiVkXFxcIiwgW2l0LmluZGV4XSksIFxcXCJ2YWx1ZVxcXCI6IGl0LnZhbHVlfSB8XFxuXFx0XFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLkNhY2hlQmVoYXZpb3JzXFxcIildLFxcbilcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIk1pblRUTCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1heFRUTCAoJXYpXFxcIiwgW21uLCBteF0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdG14IDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJNYXhUVExcXFwiLCBudWxsKSlcXG5cXHRtbiA+IG14XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtY2xvdWRmcm9udC10dGwtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBiLnBhdGgsXFxuXFx0c3ByaW50ZihcXFwiTWluVFRMICgldikgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRGVmYXVsdFRUTCAoJXYpXFxcIiwgW21uLCBkZl0pLFxcblxcdF9wZl9jZl90dGxfZml4LCBfcGZfY2ZfdHRsX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpDbG91ZEZyb250OjpEaXN0cmlidXRpb25cXFwiKVxcblxcdHNvbWUgYiBpbiBfcGZfY2ZfYmVoYXZpb3JzKG5hbWUpXFxuXFx0aXNfb2JqZWN0KGIudmFsdWUpXFxuXFx0bW4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1pblRUTFxcXCIsIG51bGwpKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bW4gPiBkZlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWNsb3VkZnJvbnQtdHRsLW9yZGVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgYi5wYXRoLFxcblxcdHNwcmludGYoXFxcIkRlZmF1bHRUVEwgKCV2KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBNYXhUVEwgKCV2KVxcXCIsIFtkZiwgbXhdKSxcXG5cXHRfcGZfY2ZfdHRsX2ZpeCwgX3BmX2NmX3R0bF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRzb21lIGIgaW4gX3BmX2NmX2JlaGF2aW9ycyhuYW1lKVxcblxcdGlzX29iamVjdChiLnZhbHVlKVxcblxcdGRmIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJEZWZhdWx0VFRMXFxcIiwgbnVsbCkpXFxuXFx0bXggOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIk1heFRUTFxcXCIsIG51bGwpKVxcblxcdGRmID4gbXhcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVwiLFxuICAgIFwic2VydmljZVwiOiBcImNsb3VkZnJvbnRcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBXQUZ2MiB3ZWIgQUNMIGF0dGFjaGVkIHRvIENsb3VkRnJvbnQgbXVzdCBiZSBnbG9iYWxseSBzY29wZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIFdBRnYyIEFSTiBjYXJyaWVzIGl0cyBzY29wZSBpbiB0aGUgcmVzb3VyY2Ugc2VnbWVudDpcXG4jICAgYXJuOmF3czp3YWZ2Mjp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmdsb2JhbC93ZWJhY2wvbmFtZS9pZCAgICAoQ0xPVURGUk9OVClcXG4jICAgYXJuOmF3czp3YWZ2MjphcC1ub3J0aGVhc3QtMToxMjM0NTY3ODkwMTI6cmVnaW9uYWwvd2ViYWNsLy4uLiAoUkVHSU9OQUwpXFxuIyBDbG91ZEZyb250IGFjY2VwdHMgb25seSB0aGUgZ2xvYmFsIGZvcm0uIENoZWNraW5nIHRoZSByZWdpb24gYWxvbmUgd291bGQgbWlzc1xcbiMgYSBSRUdJT05BTCB3ZWIgQUNMIHRoYXQgaGFwcGVucyB0byBoYXZlIGJlZW4gY3JlYXRlZCBpbiB1cy1lYXN0LTEsIHdoaWNoIGlzXFxuIyB0aGUgZWFzeSBtaXN0YWtlIHRvIG1ha2UuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1jbG91ZGZyb250LXdhZnYyLXdlYmFjbC1zY29wZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGlzdHJpYnV0aW9uQ29uZmlnLldlYkFDTElkXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJDbG91ZEZyb250IG9ubHkgYWNjZXB0cyBhIGdsb2JhbGx5IHNjb3BlZCB3ZWIgQUNMLCBidXQgdGhpcyBBUk4gaXMgc2NvcGVkICclcydcXFwiLCBbc2NvcGVdKSxcXG5cXHRcXFwiQ3JlYXRlIHRoZSB3ZWIgQUNMIHdpdGggc2NvcGUgQ0xPVURGUk9OVCBpbiB1cy1lYXN0LTEgKHdhZnYyLkNmbldlYkFDTCB3aXRoIHNjb3BlOiAnQ0xPVURGUk9OVCcpIGFuZCByZWZlcmVuY2UgdGhhdCBBUk5cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS13YWZ2Mi13ZWJhY2wuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Q2xvdWRGcm9udDo6RGlzdHJpYnV0aW9uXFxcIilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EaXN0cmlidXRpb25Db25maWcuV2ViQUNMSWRcXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJ3YWZ2MlxcXCJcXG5cXHRzZWdtZW50cyA6PSBzcGxpdChwYXJ0c1s1XSwgXFxcIi9cXFwiKVxcblxcdHNjb3BlIDo9IHNlZ21lbnRzWzBdXFxuXFx0c2NvcGUgIT0gXFxcImdsb2JhbFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1hdHRyaWJ1dGUtZGVmaW5pdGlvbnMtdXNhZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJFdmVyeSBBdHRyaWJ1dGVEZWZpbml0aW9ucyBlbnRyeSBtdXN0IGJlIHVzZWQgYnkgYSBrZXkgc2NoZW1hXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRHluYW1vREIgcmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2g6IGV2ZXJ5IEF0dHJpYnV0ZURlZmluaXRpb25zIGVudHJ5IG11c3QgYmVcXG4jIHVzZWQgYnkgdGhlIHRhYmxlIGtleSBzY2hlbWEgb3IgYW4gaW5kZXgga2V5IHNjaGVtYS4gVGhlIGVuZ2luZSdzIEUzMDM5XFxuIyBjaGVja3MgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvbmx5IChrZXkgYXR0cmlidXRlIG5vdCBkZWZpbmVkKSwgc28gdGhlXFxuIyBjbGFzc2ljIFxcXCJyZW1vdmVkIGEgR1NJLCBsZWZ0IHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvblxcXCIgbWlzdGFrZSBzYWlscyB0aHJvdWdoLlxcblxcbl9wZl9kZGJhZHVfdGFibGVfa2V5cyhuYW1lKSA6PSB7YSB8XFxuXFx0c29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuS2V5U2NoZW1hXFxcIilcXG5cXHRhIDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYSlcXG59XFxuXFxuX3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIHByb3ApIDo9IHthIHxcXG5cXHRzb21lIGl4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLiVzXFxcIiwgW3Byb3BdKSlcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmdldChpeC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdGEgOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9kZGJhZHVfdXNlZChuYW1lKSA6PSAoKF9wZl9kZGJhZHVfdGFibGVfa2V5cyhuYW1lKSB8XFxuXFx0X3BmX2RkYmFkdV9pbmRleF9rZXlzKG5hbWUsIFxcXCJHbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIikpIHxcXG5cXHRfcGZfZGRiYWR1X2luZGV4X2tleXMobmFtZSwgXFxcIkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpKVxcblxcbiMgQW55IHVucmVzb2x2YWJsZSBBdHRyaWJ1dGVOYW1lIGluIGEga2V5IHNjaGVtYSBtZWFucyB0aGUgdXNlZC1zZXQgaXNcXG4jIGluY29tcGxldGUsIHNvIHRoZSBydWxlIG11c3Qgc3RheSBzaWxlbnQgcmF0aGVyIHRoYW4gZ3Vlc3MuXFxuX3BmX2RkYmFkdV91bnJlc29sdmFibGUobmFtZSkgaWYge1xcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpKVxcbn1cXG5cXG5fcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKSBpZiB7XFxuXFx0c29tZSBwcm9wIGluIFtcXFwiR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIsIFxcXCJMb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiXVxcblxcdHNvbWUgaXggaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgayBpbiBvYmplY3QuZ2V0KGl4LnZhbHVlLCBcXFwiS2V5U2NoZW1hXFxcIiwgW10pXFxuXFx0bm90IGlzX3N0cmluZyhvYmplY3QuZ2V0KGssIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbCkpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItYXR0cmlidXRlLWRlZmluaXRpb25zLXVzYWdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkF0dHJpYnV0ZURlZmluaXRpb25zLiVkXFxcIiwgW2QuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJBdHRyaWJ1dGUgJyVzJyBpcyBkZWZpbmVkIGJ1dCB1c2VkIGJ5IG5vIGtleSBzY2hlbWE7IER5bmFtb0RCIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoIGFuZCBmYWlscyB3aXRoIFxcXFxcXFwiTnVtYmVyIG9mIGF0dHJpYnV0ZXMgaW4gS2V5U2NoZW1hIGRvZXMgbm90IGV4YWN0bHkgbWF0Y2ggbnVtYmVyIG9mIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2F0dHJdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSB1bnVzZWQgZGVmaW5pdGlvbiAobm9uLWtleSBhdHRyaWJ1dGVzIHN1Y2ggYXMgYSBUVEwgYXR0cmlidXRlIG11c3QgTk9UIGJlIGRlY2xhcmVkKSwgb3IgYWRkIHRoZSBpbmRleCB0aGF0IHVzZXMgaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi10YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdG5vdCBfcGZfZGRiYWR1X3VucmVzb2x2YWJsZShuYW1lKVxcblxcdHNvbWUgZCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGF0dHIgOj0gb2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGF0dHIpXFxuXFx0bm90IGF0dHIgaW4gX3BmX2RkYmFkdV91c2VkKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0IG11c3QgbWF0Y2ggQmlsbGluZ01vZGUgKHJlcXVpcmVkIGZvciBQUk9WSVNJT05FRCwgZm9yYmlkZGVuIGZvciBQQVlfUEVSX1JFUVVFU1QpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJidF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5SZWFkV3JpdGVDYXBhY2l0eU1vZGUuaHRtbFxcXCJcXG5cXG5fcGZfZGRiYnRfaGFzX3B0KG5hbWUpIGlmIGlzX29iamVjdChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIpKVxcblxcbl9wZl9kZGJidF9iaWxsaW5nX3ByZXNlbnQobmFtZSkgaWYgcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpXFxuXFxuIyBCaWxsaW5nTW9kZSDjgYzjg6rjg4bjg6njg6sgXFxcIlBST1ZJU0lPTkVEXFxcIuOAgeOBvuOBn+OBr+acquaMh+Wumu+8iOODh+ODleOCqeODq+ODiCBQUk9WSVNJT05FRO+8ieOAglxcbiMg44OI44O844Kv44Oz5YCk77yIUmVmIOetie+8ieOBr+WIpOWumuOBq+S9v+OCj+OBquOBhO+8iOiqpOaknOefpemYsuatou+8ieOAglxcbl9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBST1ZJU0lPTkVEXFxcIlxcblxcbl9wZl9kZGJidF9wcm92aXNpb25lZChuYW1lKSBpZiBub3QgX3BmX2RkYmJ0X2JpbGxpbmdfcHJlc2VudChuYW1lKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLFxcblxcdFxcXCJQcm92aXNpb25lZFRocm91Z2hwdXQgY2Fubm90IGJlIHNwZWNpZmllZCB3aGVuIEJpbGxpbmdNb2RlIGlzIFBBWV9QRVJfUkVRVUVTVDsgQ3JlYXRlVGFibGUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJSZW1vdmUgUHJvdmlzaW9uZWRUaHJvdWdocHV0LCBvciBzd2l0Y2ggQmlsbGluZ01vZGUgdG8gUFJPVklTSU9ORURcXFwiLFxcblxcdF9wZl9kZGJidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIikgPT0gXFxcIlBBWV9QRVJfUkVRVUVTVFxcXCJcXG5cXHRfcGZfZGRiYnRfaGFzX3B0KG5hbWUpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLFxcblxcdFxcXCJCaWxsaW5nTW9kZSBpcyBQUk9WSVNJT05FRCAodGhlIGRlZmF1bHQpIGJ1dCBQcm92aXNpb25lZFRocm91Z2hwdXQgaXMgbWlzc2luZzsgQ3JlYXRlVGFibGUgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLFxcblxcdFxcXCJBZGQgUHJvdmlzaW9uZWRUaHJvdWdocHV0IChSZWFkQ2FwYWNpdHlVbml0cyAvIFdyaXRlQ2FwYWNpdHlVbml0cyksIG9yIHNldCBCaWxsaW5nTW9kZSB0byBQQVlfUEVSX1JFUVVFU1RcXFwiLFxcblxcdF9wZl9kZGJidF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRfcGZfZGRiYnRfcHJvdmlzaW9uZWQobmFtZSlcXG5cXHRub3QgX3BmX2RkYmJ0X2hhc19wdChuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWR1cGxpY2F0ZS1hdHRyaWJ1dGUtZGVmaW5pdGlvbnNcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdHRyaWJ1dGVEZWZpbml0aW9ucyBtdXN0IG5vdCBkZWZpbmUgdGhlIHNhbWUgYXR0cmlidXRlIHR3aWNlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZHVwbGljYXRlLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9ucy4lZFxcXCIsIFtiLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQXR0cmlidXRlICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkFuIGF0dHJpYnV0ZSBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIEF0dHJpYnV0ZURlZmluaXRpb25zXFxcXFxcXCJcXFwiLCBbYW5dKSxcXG5cXHRcXFwiS2VlcCBhIHNpbmdsZSBkZWZpbml0aW9uIHBlciBhdHRyaWJ1dGUgbmFtZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBhIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0c29tZSBiIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRhbiA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJBdHRyaWJ1dGVOYW1lXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoYW4pXFxuXFx0b2JqZWN0LmdldChiLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpID09IGFuXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZHVwbGljYXRlLWluZGV4LW5hbWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJTZWNvbmRhcnkgaW5kZXggbmFtZXMgbXVzdCBiZSB1bmlxdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2RkYmRpbl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLWR5bmFtb2RiLXRhYmxlLmh0bWxcXFwiXFxuXFxuIyBEdXBsaWNhdGVzIHdpdGhpbiB0aGUgc2FtZSBpbmRleCBsaXN0IG9ubHk7IGEgR1NJL0xTSSBjcm9zcy1saXN0IGNsYXNoIHdhc1xcbiMgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZHVwbGljYXRlLWluZGV4LW5hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXMuJWQuSW5kZXhOYW1lXFxcIiwgW3Byb3AsIGIuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJJbmRleCBuYW1lICclcycgaXMgdXNlZCBtb3JlIHRoYW4gb25jZTsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkR1cGxpY2F0ZSBpbmRleCBuYW1lXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiR2l2ZSBldmVyeSBzZWNvbmRhcnkgaW5kZXggYSB1bmlxdWUgSW5kZXhOYW1lXFxcIixcXG5cXHRfcGZfZGRiZGluX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgcHJvcCBpbiBbXFxcIkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiLCBcXFwiTG9jYWxTZWNvbmRhcnlJbmRleGVzXFxcIl1cXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcHJvcF0pKVxcblxcdHNvbWUgYiBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpXFxuXFx0YS5pbmRleCA8IGIuaW5kZXhcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhpbmFtZSlcXG5cXHRvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBudWxsKSA9PSBpbmFtZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdsb2JhbC10YWJsZS1yZXBsaWNhLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdsb2JhbFRhYmxlIFJlcGxpY2FzIG11c3QgaW5jbHVkZSB0aGUgZGVwbG95bWVudCByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6Okdsb2JhbFRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvbiBpcyBkZWZpbmVkIG9ubHkgd2hlbiB0aGUgZW5mb3JjZSBwbHVnaW5cXG4jIGtub3dzIHRoZSBhcHAncyBjb25jcmV0ZSByZWdpb24gKHNlZSBzcmMvcHJpdmF0ZS9lbmZvcmNlLnRzKTsgd2l0aG91dCBpdCB0aGVcXG4jIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQgYW5kIHRoaXMgcnVsZSBza2lwcy4gUmVwbGljYXMgd2l0aCB1bnJlc29sdmFibGVcXG4jIFJlZ2lvbiB2YWx1ZXMgYWxzbyBtYWtlIHRoZSBydWxlIHNraXAg4oCUIGFic2VuY2UgY2Fubm90IGJlIHByb3ZlbiB0aGVuLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ2xvYmFsLXRhYmxlLXJlcGxpY2EtcmVnaW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXBsaWNhc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiVGhlIFJlcGxpY2FzIGxpc3QgJXYgZG9lcyBub3QgaW5jbHVkZSB0aGUgZGVwbG95bWVudCByZWdpb24gJyVzJzsgQ3JlYXRlR2xvYmFsVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlRoZSBSZXBsaWNhcyBzZWN0aW9uIG11c3QgY29udGFpbiBhbiBlbnRyeSBmb3IgdGhlIGN1cnJlbnQgcmVnaW9uXFxcXFxcXCJcXFwiLCBbcmVwbGljYXMsIHJlZ2lvbl0pLFxcblxcdFxcXCJBZGQgYSByZXBsaWNhIGVudHJ5IGZvciB0aGUgcmVnaW9uIHRoZSBzdGFjayBkZXBsb3lzIHRvIChDREsgVGFibGVWMiBkb2VzIHRoaXMgYXV0b21hdGljYWxseSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1keW5hbW9kYi1nbG9iYWx0YWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6R2xvYmFsVGFibGVcXFwiKVxcblxcdHJlZ2lvbiA6PSBkYXRhLmNka19wcmVmbGlnaHQuZGVwbG95X3JlZ2lvblxcblxcdGlzX3N0cmluZyhyZWdpb24pXFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXNcXFwiKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0ZXZlcnkgaXQgaW4gaXRlbXMge1xcblxcdFxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiUmVnaW9uXFxcIiwgbnVsbCkpXFxuXFx0fVxcblxcdHJlcGxpY2FzIDo9IFtyIHwgc29tZSBpdCBpbiBpdGVtczsgciA6PSBvYmplY3QuZ2V0KGl0LnZhbHVlLCBcXFwiUmVnaW9uXFxcIiwgbnVsbCldXFxuXFx0bm90IHJlZ2lvbiBpbiByZXBsaWNhc1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJHU0kgUHJvdmlzaW9uZWRUaHJvdWdocHV0IG11c3QgbWF0Y2ggdGhlIHRhYmxlIEJpbGxpbmdNb2RlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJnYnRfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0hvd0l0V29ya3MuUmVhZFdyaXRlQ2FwYWNpdHlNb2RlLmh0bWxcXFwiXFxuXFxuIyBHU0ktbGV2ZWwgY291bnRlcnBhcnQgb2YgcGYtZHluYW1vZGItYmlsbGluZy10aHJvdWdocHV0ICh3aGljaCBjb3ZlcnMgdGhlXFxuIyB0YWJsZS1sZXZlbCBwYWlyIG9ubHkpLiBTYW1lIHRva2VuIHNhZmV0eTogbGl0ZXJhbCBCaWxsaW5nTW9kZSBvciBhYnNlbnRcXG4jIChkZWZhdWx0IFBST1ZJU0lPTkVEKTsgdG9rZW4gdmFsdWVzIG5ldmVyIGp1ZGdlZC5cXG5fcGZfZGRiZ2J0X2JpbGxpbmdfcHJlc2VudChuYW1lKSBpZiByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJpbGxpbmdNb2RlXFxcIilcXG5cXG5fcGZfZGRiZ2J0X3Byb3Zpc2lvbmVkKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuQmlsbGluZ01vZGVcXFwiKSA9PSBcXFwiUFJPVklTSU9ORURcXFwiXFxuXFxuX3BmX2RkYmdidF9wcm92aXNpb25lZChuYW1lKSBpZiBub3QgX3BmX2RkYmdidF9iaWxsaW5nX3ByZXNlbnQobmFtZSlcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWdzaS1iaWxsaW5nLXRocm91Z2hwdXRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm92aXNpb25lZFRocm91Z2hwdXRcXFwiLCBbZy5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkdTSSAnJXMnIHNwZWNpZmllcyBQcm92aXNpb25lZFRocm91Z2hwdXQgYnV0IEJpbGxpbmdNb2RlIGlzIFBBWV9QRVJfUkVRVUVTVDsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb3BlcnR5IFByb3Zpc2lvbmVkVGhyb3VnaHB1dCBjYW4ndCBiZSB1c2VkIHdpdGggUEFZX1BFUl9SRVFVRVNUIEJpbGxpbmdNb2RlXFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiUmVtb3ZlIHRoZSBHU0kncyBQcm92aXNpb25lZFRocm91Z2hwdXQsIG9yIHN3aXRjaCB0aGUgdGFibGUgdG8gUFJPVklTSU9ORURcXFwiLFxcblxcdF9wZl9kZGJnYnRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5CaWxsaW5nTW9kZVxcXCIpID09IFxcXCJQQVlfUEVSX1JFUVVFU1RcXFwiXFxuXFx0c29tZSBnIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzXFxcIilcXG5cXHRpc19vYmplY3Qob2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgbnVsbCkpXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLWJpbGxpbmctdGhyb3VnaHB1dFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5HbG9iYWxTZWNvbmRhcnlJbmRleGVzLiVkLlByb3Zpc2lvbmVkVGhyb3VnaHB1dFxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgaXMgbWlzc2luZyBQcm92aXNpb25lZFRocm91Z2hwdXQgd2hpbGUgdGhlIHRhYmxlIGJpbGxzIFBST1ZJU0lPTkVEICh0aGUgZGVmYXVsdCk7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJQcm9wZXJ0eSBQcm92aXNpb25lZFRocm91Z2hwdXQgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiLCBbaW5hbWVdKSxcXG5cXHRcXFwiQWRkIFByb3Zpc2lvbmVkVGhyb3VnaHB1dCB0byB0aGUgR1NJLCBvciBzZXQgQmlsbGluZ01vZGUgdG8gUEFZX1BFUl9SRVFVRVNUXFxcIixcXG5cXHRfcGZfZGRiZ2J0X3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdF9wZl9kZGJnYnRfcHJvdmlzaW9uZWQobmFtZSlcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdG5vdCBpc19vYmplY3Qob2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0XFxcIiwgbnVsbCkpXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm9uS2V5QXR0cmlidXRlcyBnb2VzIHdpdGggSU5DTFVERSwgYW5kIG9ubHkgd2l0aCBJTkNMVURFXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJncG5fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLXByb2plY3Rpb24uaHRtbFxcXCJcXG5cXG4jIEdTSSBwcm9qZWN0aW9ucyBvbmx5OiB0aGUgTFNJIHNoYXBlIGFuZCB0aGUgS0VZU19PTkxZK05vbktleUF0dHJpYnV0ZXMgY29tYm9cXG4jIHdlcmUgbm90IG1lYXN1cmVkIChpc3N1ZSAjMjEpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItZ3NpLXByb2plY3Rpb24tbm9ua2V5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXMuJWQuUHJvamVjdGlvblxcXCIsIFtnLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiR1NJICclcycgdXNlcyBQcm9qZWN0aW9uVHlwZSBJTkNMVURFIHdpdGhvdXQgTm9uS2V5QXR0cmlidXRlczsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIlByb2plY3Rpb25UeXBlIGlzIElOQ0xVREUsIGJ1dCBOb25LZXlBdHRyaWJ1dGVzIGlzIG5vdCBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJMaXN0IHRoZSBwcm9qZWN0ZWQgYXR0cmlidXRlcyBpbiBOb25LZXlBdHRyaWJ1dGVzLCBvciBzd2l0Y2ggUHJvamVjdGlvblR5cGUgdG8gQUxMIC8gS0VZU19PTkxZXFxcIixcXG5cXHRfcGZfZGRiZ3BuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHNvbWUgZyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0cHJvaiA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJQcm9qZWN0aW9uXFxcIiwgbnVsbClcXG5cXHRpc19vYmplY3QocHJvailcXG5cXHRvYmplY3QuZ2V0KHByb2osIFxcXCJQcm9qZWN0aW9uVHlwZVxcXCIsIG51bGwpID09IFxcXCJJTkNMVURFXFxcIlxcblxcdGNvdW50KG9iamVjdC5nZXQocHJvaiwgXFxcIk5vbktleUF0dHJpYnV0ZXNcXFwiLCBbXSkpID09IDBcXG5cXHRpbmFtZSA6PSBvYmplY3QuZ2V0KGcudmFsdWUsIFxcXCJJbmRleE5hbWVcXFwiLCBcXFwiPHVubmFtZWQ+XFxcIilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1nc2ktcHJvamVjdGlvbi1ub25rZXlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuR2xvYmFsU2Vjb25kYXJ5SW5kZXhlcy4lZC5Qcm9qZWN0aW9uXFxcIiwgW2cuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJHU0kgJyVzJyBjb21iaW5lcyBQcm9qZWN0aW9uVHlwZSBBTEwgd2l0aCBOb25LZXlBdHRyaWJ1dGVzOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiUHJvamVjdGlvblR5cGUgaXMgQUxMLCBidXQgTm9uS2V5QXR0cmlidXRlcyBpcyBzcGVjaWZpZWRcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJEcm9wIE5vbktleUF0dHJpYnV0ZXMgKEFMTCBhbHJlYWR5IHByb2plY3RzIGV2ZXJ5dGhpbmcpLCBvciBzd2l0Y2ggUHJvamVjdGlvblR5cGUgdG8gSU5DTFVERVxcXCIsXFxuXFx0X3BmX2RkYmdwbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIGcgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdsb2JhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdHByb2ogOj0gb2JqZWN0LmdldChnLnZhbHVlLCBcXFwiUHJvamVjdGlvblxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KHByb2opXFxuXFx0b2JqZWN0LmdldChwcm9qLCBcXFwiUHJvamVjdGlvblR5cGVcXFwiLCBudWxsKSA9PSBcXFwiQUxMXFxcIlxcblxcdGNvdW50KG9iamVjdC5nZXQocHJvaiwgXFxcIk5vbktleUF0dHJpYnV0ZXNcXFwiLCBbXSkpID4gMFxcblxcdGluYW1lIDo9IG9iamVjdC5nZXQoZy52YWx1ZSwgXFxcIkluZGV4TmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJLZXlTY2hlbWEgbXVzdCBiZSBbSEFTSF0gb3IgW0hBU0gsIFJBTkdFXVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZGRia3NoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbFxcXCJcXG5cXG4jIFRhYmxlLWxldmVsIGtleSBzY2hlbWEgb25seTogaW5kZXgga2V5IHNjaGVtYXMgcHJvZHVjZSBkaWZmZXJlbnQgc2VydmljZVxcbiMgZXJyb3JzIGFuZCB3ZXJlIG5vdCBtZWFzdXJlZCAoaXNzdWUgIzIxKS5cXG5fcGZfZGRia3NoX3R5cGUobmFtZSwgaSkgOj0ga3QgaWYge1xcblxcdHNvbWUgaXQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0aXQuaW5kZXggPT0gaVxcblxcdGt0IDo9IG9iamVjdC5nZXQoaXQudmFsdWUsIFxcXCJLZXlUeXBlXFxcIiwgbnVsbClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1keW5hbW9kYi1rZXktc2NoZW1hLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5LZXlTY2hlbWEuMC5LZXlUeXBlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgZmlyc3QgS2V5U2NoZW1hIGVsZW1lbnQgbXVzdCBiZSBIQVNILCBnb3QgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgS2V5U2NoZW1hOiBUaGUgZmlyc3QgS2V5U2NoZW1hRWxlbWVudCBpcyBub3QgYSBIQVNIIGtleSB0eXBlXFxcXFxcXCJcXFwiLCBba3RdKSxcXG5cXHRcXFwiUHV0IHRoZSBwYXJ0aXRpb24ga2V5IChLZXlUeXBlIEhBU0gpIGZpcnN0IGFuZCB0aGUgb3B0aW9uYWwgc29ydCBrZXkgKFJBTkdFKSBzZWNvbmRcXFwiLFxcblxcdF9wZl9kZGJrc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0a3QgOj0gX3BmX2RkYmtzaF90eXBlKG5hbWUsIDApXFxuXFx0aXNfc3RyaW5nKGt0KVxcblxcdGt0ICE9IFxcXCJIQVNIXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYS4xLktleVR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBzZWNvbmQgS2V5U2NoZW1hIGVsZW1lbnQgbXVzdCBiZSBSQU5HRSwgZ290ICclcyc7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbnZhbGlkIEtleVNjaGVtYTogVGhlIHNlY29uZCBLZXlTY2hlbWFFbGVtZW50IGlzIG5vdCBhIFJBTkdFIGtleSB0eXBlXFxcXFxcXCJcXFwiLCBba3RdKSxcXG5cXHRcXFwiVXNlIGV4YWN0bHkgb25lIEhBU0ggZWxlbWVudCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBvbmUgUkFOR0UgZWxlbWVudFxcXCIsXFxuXFx0X3BmX2RkYmtzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRrdCA6PSBfcGZfZGRia3NoX3R5cGUobmFtZSwgMSlcXG5cXHRpc19zdHJpbmcoa3QpXFxuXFx0a3QgIT0gXFxcIlJBTkdFXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtleS1zY2hlbWEtc2hhcGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIsXFxuXFx0c3ByaW50ZihcXFwiS2V5U2NoZW1hIGNhbiBob2xkIGF0IG1vc3QgMiBlbGVtZW50cyAoSEFTSCArIG9wdGlvbmFsIFJBTkdFKSwgZ290ICVkXFxcIiwgW25dKSxcXG5cXHRcXFwiTW9kZWwgZXh0cmEgYWNjZXNzIHBhdHRlcm5zIGFzIGdsb2JhbCBvciBsb2NhbCBzZWNvbmRhcnkgaW5kZXhlcyBpbnN0ZWFkXFxcIixcXG5cXHRfcGZfZGRia3NoX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdG4gOj0gY291bnQoWzEgfCBzb21lIF8gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXSlcXG5cXHRuID4gMlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWR5bmFtb2RiLWtpbmVzaXMtc3RyZWFtLXJlZ2lvblwiLFxuICAgIFwic2VydmljZVwiOiBcImR5bmFtb2RiXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgS2luZXNpcyBzdHJlYW1pbmcgZGVzdGluYXRpb24gbXVzdCBiZSBpbiB0aGUgdGFibGUncyByZWdpb25cIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RHluYW1vREI6OlRhYmxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBBIEtpbmVzaXMgRGF0YSBTdHJlYW1zIGRlc3RpbmF0aW9uIG11c3QgbGl2ZSBpbiB0aGUgc2FtZSByZWdpb24gYXMgdGhlXFxuIyB0YWJsZS4gVGhlIGRlcGxveS10aW1lIGZhaWx1cmUgbW9kZSBpcyB1Z2x5OiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgdGhlXFxuIyBzdHJlYW1pbmcgZGVzdGluYXRpb24gbmV2ZXIgc3RhYmlsaXplcywgYW5kIENsb3VkRm9ybWF0aW9uIHJvbGxzIGJhY2sgb25cXG4jIE5vdFN0YWJpbGl6ZWQgbWludXRlcyBsYXRlciDigJQgbm90aGluZyBuYW1lcyB0aGUgcmVnaW9uIG1pc21hdGNoLlxcbiMgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb24gaXMgZGVmaW5lZCBvbmx5IGluIGVuZm9yY2UgbW9kZSB3aXRoIGFcXG4jIGNvbmNyZXRlIHJlZ2lvbjsgb3RoZXJ3aXNlIHRoaXMgcnVsZSBza2lwcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLWtpbmVzaXMtc3RyZWFtLXJlZ2lvblxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuS2luZXNpc1N0cmVhbVNwZWNpZmljYXRpb24uU3RyZWFtQXJuXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgS2luZXNpcyBzdHJlYW0gbGl2ZXMgaW4gJyVzJyBidXQgdGhlIHRhYmxlIGRlcGxveXMgdG8gJyVzJzsgdGhlIHN0cmVhbWluZyBkZXN0aW5hdGlvbiBuZXZlciBzdGFiaWxpemVzIGFuZCB0aGUgc3RhY2sgcm9sbHMgYmFja1xcXCIsIFtzdHJlYW1SZWdpb24sIHJlZ2lvbl0pLFxcblxcdFxcXCJQb2ludCBLaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm4gYXQgYSBzdHJlYW0gaW4gdGhlIHRhYmxlJ3Mgb3duIHJlZ2lvblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUva2RzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0cmVnaW9uIDo9IGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uXFxuXFx0aXNfc3RyaW5nKHJlZ2lvbilcXG5cXHRhcm4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5LaW5lc2lzU3RyZWFtU3BlY2lmaWNhdGlvbi5TdHJlYW1Bcm5cXFwiKVxcblxcdGlzX3N0cmluZyhhcm4pXFxuXFx0cGFydHMgOj0gc3BsaXQoYXJuLCBcXFwiOlxcXCIpXFxuXFx0Y291bnQocGFydHMpID49IDZcXG5cXHRwYXJ0c1swXSA9PSBcXFwiYXJuXFxcIlxcblxcdHBhcnRzWzJdID09IFxcXCJraW5lc2lzXFxcIlxcblxcdHN0cmVhbVJlZ2lvbiA6PSBwYXJ0c1szXVxcblxcdHN0cmVhbVJlZ2lvbiAhPSBcXFwiXFxcIlxcblxcdHN0cmVhbVJlZ2lvbiAhPSByZWdpb25cXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1keW5hbW9kYi1sc2ktYXR0cmlidXRlLWRlZmluaXRpb25zXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTFNJIGtleSBhdHRyaWJ1dGVzIG11c3QgYmUgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUncyBFMzAzOSBjaGVja3MgdGFibGUgYW5kIEdTSSBrZXkgc2NoZW1hcyBhZ2FpbnN0XFxuIyBBdHRyaWJ1dGVEZWZpbml0aW9ucyBidXQgaXMgYmxpbmQgdG8gTG9jYWxTZWNvbmRhcnlJbmRleGVzIChtZWFzdXJlZFxcbiMgMjAyNi0wOS0wMiwgMS43LjAtYmV0YSkuIFRoaXMgcnVsZSBjb3ZlcnMgZXhhY3RseSB0aGF0IGdhcC5cXG5cXG5fcGZfZGRibGFkX2RlZnMobmFtZSkgOj0ge2EgfFxcblxcdHNvbWUgZCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuQXR0cmlidXRlRGVmaW5pdGlvbnNcXFwiKVxcblxcdGEgOj0gb2JqZWN0LmdldChkLnZhbHVlLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbiMgSWYgYW55IGRlZmluaXRpb24ncyBuYW1lIGlzIHVucmVzb2x2YWJsZSB0aGUgc2V0IGlzIGluY29tcGxldGUg4oCUIHN0YXkgc2lsZW50Llxcbl9wZl9kZGJsYWRfZGVmc19yZXNvbHZhYmxlKG5hbWUpIGlmIHtcXG5cXHRldmVyeSBkIGluIFt4IHwgc29tZSB4IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5BdHRyaWJ1dGVEZWZpbml0aW9uc1xcXCIpXSB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoZC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKSlcXG5cXHR9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItbHNpLWF0dHJpYnV0ZS1kZWZpbml0aW9uc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXMuJWQuS2V5U2NoZW1hXFxcIiwgW2wuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJMU0kga2V5IGF0dHJpYnV0ZSAnJXMnIGlzIG5vdCBkZWZpbmVkIGluIEF0dHJpYnV0ZURlZmluaXRpb25zOyBDcmVhdGVUYWJsZSBmYWlscyB3aXRoIFxcXFxcXFwiQW4gYXR0cmlidXRlIHJlZmVyZW5jZWQgaW4gYSBLZXlTY2hlbWEgZWxlbWVudCBpcyBub3QgZGVmaW5lZCBpbiBBdHRyaWJ1dGVEZWZpbml0aW9uc1xcXFxcXFwiXFxcIiwgW2F0dHJdKSxcXG5cXHRcXFwiQWRkIHRoZSBhdHRyaWJ1dGUgdG8gQXR0cmlidXRlRGVmaW5pdGlvbnMgKGFuZCBub3doZXJlIGVsc2U6IG9ubHkga2V5IGF0dHJpYnV0ZXMgYmVsb25nIHRoZXJlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUtbG9jYWxzZWNvbmRhcnlpbmRleC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdGNvdW50KF9wZl9kZGJsYWRfZGVmcyhuYW1lKSkgPiAwXFxuXFx0X3BmX2RkYmxhZF9kZWZzX3Jlc29sdmFibGUobmFtZSlcXG5cXHRzb21lIGwgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlc1xcXCIpXFxuXFx0c29tZSBrIGluIG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdGF0dHIgOj0gb2JqZWN0LmdldChrLCBcXFwiQXR0cmlidXRlTmFtZVxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGF0dHIpXFxuXFx0bm90IGF0dHIgaW4gX3BmX2RkYmxhZF9kZWZzKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItbHNpLXNoYXBlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZHluYW1vZGJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gTFNJIG5lZWRzIGEgUkFOR0Uga2V5IGFuZCB0aGUgdGFibGUncyBsZWFkaW5nIGhhc2gga2V5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZGJsc2hfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWxvY2Fsc2Vjb25kYXJ5aW5kZXguaHRtbFxcXCJcXG5cXG5fcGZfZGRibHNoX2tleXR5cGVzKGtzKSA6PSB7a3QgfFxcblxcdHNvbWUgayBpbiBrc1xcblxcdGt0IDo9IG9iamVjdC5nZXQoaywgXFxcIktleVR5cGVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhrdClcXG59XFxuXFxuIyBPbmx5IGp1ZGdlIGEga2V5IHNjaGVtYSB3aG9zZSBLZXlUeXBlcyBhcmUgYWxsIGxpdGVyYWwgc3RyaW5ncy5cXG5fcGZfZGRibHNoX3Jlc29sdmFibGUoa3MpIGlmIGNvdW50KF9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpKSA+IDBcXG5cXG5fcGZfZGRibHNoX3Jlc29sdmFibGVfYWxsKGtzKSBpZiB7XFxuXFx0ZXZlcnkgayBpbiBrcyB7XFxuXFx0XFx0aXNfc3RyaW5nKG9iamVjdC5nZXQoaywgXFxcIktleVR5cGVcXFwiLCBudWxsKSlcXG5cXHR9XFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItbHNpLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxvY2FsIHNlY29uZGFyeSBpbmRleCAnJXMnIGhhcyBubyBSQU5HRSBrZXk7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJJbmRleCBLZXlTY2hlbWEgZG9lcyBub3QgaGF2ZSBhIHJhbmdlIGtleSBmb3IgaW5kZXhcXFxcXFxcIlxcXCIsIFtpbmFtZV0pLFxcblxcdFxcXCJHaXZlIHRoZSBMU0kgYSBzb3J0IGtleTogW3RhYmxlIEhBU0gga2V5LCBpdHMgb3duIFJBTkdFIGtleV1cXFwiLFxcblxcdF9wZl9kZGJsc2hfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVxcXCIpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGtzIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdGNvdW50KGtzKSA+IDBcXG5cXHRfcGZfZGRibHNoX3Jlc29sdmFibGVfYWxsKGtzKVxcblxcdG5vdCBcXFwiUkFOR0VcXFwiIGluIF9wZl9kZGJsc2hfa2V5dHlwZXMoa3MpXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZHluYW1vZGItbHNpLXNoYXBlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxvY2FsU2Vjb25kYXJ5SW5kZXhlcy4lZC5LZXlTY2hlbWFcXFwiLCBbbC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkxvY2FsIHNlY29uZGFyeSBpbmRleCAnJXMnIHVzZXMgaGFzaCBrZXkgJyVzJyBidXQgdGhlIHRhYmxlJ3MgaGFzaCBrZXkgaXMgJyVzJzsgQ3JlYXRlVGFibGUgZmFpbHMgd2l0aCBcXFxcXFxcIkluZGV4IEtleVNjaGVtYSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIGxlYWRpbmcgaGFzaCBrZXkgYXMgdGFibGUgS2V5U2NoZW1hXFxcXFxcXCJcXFwiLCBbaW5hbWUsIGxzaUhhc2gsIHRhYmxlSGFzaF0pLFxcblxcdFxcXCJBbiBMU0kgbXVzdCByZXVzZSB0aGUgdGFibGUncyBwYXJ0aXRpb24ga2V5OyB1c2UgYSBnbG9iYWwgc2Vjb25kYXJ5IGluZGV4IGZvciBhIGRpZmZlcmVudCBoYXNoIGtleVxcXCIsXFxuXFx0X3BmX2RkYmxzaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RHluYW1vREI6OlRhYmxlXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLktleVNjaGVtYVxcXCIpXFxuXFx0dC5pbmRleCA9PSAwXFxuXFx0dGFibGVIYXNoIDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh0YWJsZUhhc2gpXFxuXFx0c29tZSBsIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Mb2NhbFNlY29uZGFyeUluZGV4ZXNcXFwiKVxcblxcdGtzIDo9IG9iamVjdC5nZXQobC52YWx1ZSwgXFxcIktleVNjaGVtYVxcXCIsIFtdKVxcblxcdHNvbWUgayBpbiBrc1xcblxcdG9iamVjdC5nZXQoaywgXFxcIktleVR5cGVcXFwiLCBudWxsKSA9PSBcXFwiSEFTSFxcXCJcXG5cXHRsc2lIYXNoIDo9IG9iamVjdC5nZXQoaywgXFxcIkF0dHJpYnV0ZU5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhsc2lIYXNoKVxcblxcdGxzaUhhc2ggIT0gdGFibGVIYXNoXFxuXFx0aW5hbWUgOj0gb2JqZWN0LmdldChsLnZhbHVlLCBcXFwiSW5kZXhOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZHluYW1vZGItdGFibGUtbmFtZS1sZW5ndGhcIixcbiAgICBcInNlcnZpY2VcIjogXCJkeW5hbW9kYlwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJUYWJsZU5hbWUgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXJhY3RlcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkR5bmFtb0RCOjpUYWJsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT25seSB0aGUgbWVhc3VyZWQgYm91bmQgKG1pbmltdW0gMyBjaGFyYWN0ZXJzKSBpcyBlbmZvcmNlZC4gVGhlIDI1NS1jaGFyXFxuIyBtYXhpbXVtIGFuZCB0aGUgY2hhcmFjdGVyIHBhdHRlcm4gd2VyZSBub3QgbWVhc3VyZWQuIE5vdGUgcmVzb2x2ZSgpIHR1cm5zIGFcXG4jIFJlZi10by1yZXNvdXJjZSBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElEOyBhIGxvZ2ljYWwgSUQgc2hvcnQgZW5vdWdoIHRvXFxuIyB0cmlwIHRoaXMgcnVsZSB3aGlsZSBmZWVkaW5nIGEgVGFibGVOYW1lIGlzIHRyZWF0ZWQgYXMgdGhlIGJ1ZyBpdCBhbG1vc3RcXG4jIGNlcnRhaW5seSBpcy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWR5bmFtb2RiLXRhYmxlLW5hbWUtbGVuZ3RoXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UYWJsZU5hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIlRhYmxlTmFtZSAnJXMnIGlzIHNob3J0ZXIgdGhhbiAzIGNoYXJhY3RlcnM7IENyZWF0ZVRhYmxlIGZhaWxzIHdpdGggXFxcXFxcXCJNZW1iZXIgbXVzdCBoYXZlIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gM1xcXFxcXFwiXFxcIiwgW3RuXSksXFxuXFx0XFxcIlVzZSBhIHRhYmxlIG5hbWUgb2YgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzLCBvciBvbWl0IFRhYmxlTmFtZSBhbmQgbGV0IENsb3VkRm9ybWF0aW9uIGdlbmVyYXRlIG9uZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVUYWJsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpEeW5hbW9EQjo6VGFibGVcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFibGVOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0Y291bnQodG4pIDwgM1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi1zZy1wb3J0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNlY3VyaXR5IGdyb3VwIFRDUC9VRFAgcG9ydHMgbXVzdCBiZSB3aXRoaW4gMC02NTUzNSBhbmQgRnJvbVBvcnQgPD0gVG9Qb3J0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFwiLFxuICAgICAgXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcIixcbiAgICAgIFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2dfZml4IDo9IFxcXCJVc2UgYSBwb3J0IGJldHdlZW4gMCBhbmQgNjU1MzUgd2l0aCBGcm9tUG9ydCA8PSBUb1BvcnRcXFwiXFxuXFxuX3BmX3NnX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9BdXRob3JpemVTZWN1cml0eUdyb3VwSW5ncmVzcy5odG1sXFxcIlxcblxcbl9wZl9wb3J0X291dChuKSBpZiBuIDwgMFxcblxcbl9wZl9wb3J0X291dChuKSBpZiBuID4gNjU1MzVcXG5cXG5fcGZfdGNwX3VkcChwKSBpZiBwIGluIHtcXFwidGNwXFxcIiwgXFxcInVkcFxcXCIsIFxcXCI2XFxcIiwgXFxcIjE3XFxcIiwgNiwgMTd9XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC4lc1xcXCIsIFtkaXIsIGl0ZW0uaW5kZXgsIHBuYW1lXSksXFxuXFx0c3ByaW50ZihcXFwiJXMgJXYgaXMgb3V0c2lkZSB0aGUgdmFsaWQgVENQL1VEUCBwb3J0IHJhbmdlIDAtNjU1MzVcXFwiLCBbcG5hbWUsIG5dKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRfcGZfdGNwX3VkcChvYmplY3QuZ2V0KGVudHJ5LCBcXFwiSXBQcm90b2NvbFxcXCIsIG51bGwpKVxcblxcdHNvbWUgcG5hbWUgaW4ge1xcXCJGcm9tUG9ydFxcXCIsIFxcXCJUb1BvcnRcXFwifVxcblxcdG4gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIHBuYW1lLCBudWxsKSlcXG5cXHRfcGZfcG9ydF9vdXQobilcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lcy4lZC5Gcm9tUG9ydFxcXCIsIFtkaXIsIGl0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJGcm9tUG9ydCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRvUG9ydCAoJXYpXFxcIiwgW2YsIHRdKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cFxcXCIpXFxuXFx0c29tZSBkaXIgaW4ge1xcXCJTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJTZWN1cml0eUdyb3VwRWdyZXNzXFxcIn1cXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbZGlyXSkpXFxuXFx0ZW50cnkgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChlbnRyeSlcXG5cXHRfcGZfdGNwX3VkcChvYmplY3QuZ2V0KGVudHJ5LCBcXFwiSXBQcm90b2NvbFxcXCIsIG51bGwpKVxcblxcdGYgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIFxcXCJGcm9tUG9ydFxcXCIsIG51bGwpKVxcblxcdHQgOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoZW50cnksIFxcXCJUb1BvcnRcXFwiLCBudWxsKSlcXG5cXHRmID49IDBcXG5cXHR0IDw9IDY1NTM1XFxuXFx0ZiA+IHRcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItc2ctcG9ydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwbmFtZV0pLFxcblxcdHNwcmludGYoXFxcIiVzICV2IGlzIG91dHNpZGUgdGhlIHZhbGlkIFRDUC9VRFAgcG9ydCByYW5nZSAwLTY1NTM1XFxcIiwgW3BuYW1lLCBuXSksXFxuXFx0X3BmX3NnX2ZpeCwgX3BmX3NnX3VybCkgaWYge1xcblxcdHNvbWUgcnR5cGUgaW4ge1xcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEluZ3Jlc3NcXFwiLCBcXFwiQVdTOjpFQzI6OlNlY3VyaXR5R3JvdXBFZ3Jlc3NcXFwifVxcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHRfcGZfdGNwX3VkcChyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklwUHJvdG9jb2xcXFwiKSlcXG5cXHRzb21lIHBuYW1lIGluIHtcXFwiRnJvbVBvcnRcXFwiLCBcXFwiVG9Qb3J0XFxcIn1cXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcG5hbWVdKSkpXFxuXFx0X3BmX3BvcnRfb3V0KG4pXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXNnLXBvcnQtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZyb21Qb3J0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJGcm9tUG9ydCAoJXYpIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIFRvUG9ydCAoJXYpXFxcIiwgW2YsIHRdKSxcXG5cXHRfcGZfc2dfZml4LCBfcGZfc2dfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSBpbiB7XFxcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwSW5ncmVzc1xcXCIsIFxcXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cEVncmVzc1xcXCJ9XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdF9wZl90Y3BfdWRwKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSXBQcm90b2NvbFxcXCIpKVxcblxcdGYgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRnJvbVBvcnRcXFwiKSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRvUG9ydFxcXCIpKVxcblxcdGYgPj0gMFxcblxcdHQgPD0gNjU1MzVcXG5cXHRmID4gdFxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjMi11c2VyZGF0YS1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWMyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkVDMiB1c2VyIGRhdGEgaXMgbGltaXRlZCB0byAxNjM4NCBieXRlc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6Okluc3RhbmNlXCIsXG4gICAgICBcIkFXUzo6RUMyOjpMYXVuY2hUZW1wbGF0ZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl91ZHN6X2ZpeCA6PSBcXFwiS2VlcCB1c2VyIGRhdGEgdW5kZXIgMTYzODQgYnl0ZXM7IG1vdmUgbGFyZ2UgcGF5bG9hZHMgdG8gUzMgYW5kIGZldGNoIHRoZW0gZnJvbSBhIHNtYWxsIGJvb3RzdHJhcCBzY3JpcHRcXFwiXFxuXFxuX3BmX3Vkc3pfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaW5zdGFuY2VkYXRhLWFkZC11c2VyLWRhdGEuaHRtbFxcXCJcXG5cXG5fcGZfdWRzel9saW1pdCA6PSAxNjM4NFxcblxcbiMgYmFzZTY0IOaWh+Wtl+WIl+OBruODh+OCs+ODvOODieW+jOODkOOCpOODiOaVsO+8iOODkeODh+OCo+ODs+OCsOiAg+aFru+8iVxcbl9wZl91ZHN6X2RlY29kZWQocykgOj0gKChjb3VudChzKSAqIDMpIC8gNCkgLSAyIGlmIGVuZHN3aXRoKHMsIFxcXCI9PVxcXCIpXFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoKGNvdW50KHMpICogMykgLyA0KSAtIDEgaWYge1xcblxcdGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXHRub3QgZW5kc3dpdGgocywgXFxcIj09XFxcIilcXG59XFxuXFxuX3BmX3Vkc3pfZGVjb2RlZChzKSA6PSAoY291bnQocykgKiAzKSAvIDQgaWYgbm90IGVuZHN3aXRoKHMsIFxcXCI9XFxcIilcXG5cXG5fcGZfdWRzel9wYXRocyA6PSB7XFxuXFx0XFxcIkFXUzo6RUMyOjpJbnN0YW5jZVxcXCI6IFxcXCJQcm9wZXJ0aWVzLlVzZXJEYXRhXFxcIixcXG5cXHRcXFwiQVdTOjpFQzI6OkxhdW5jaFRlbXBsYXRlXFxcIjogXFxcIlByb3BlcnRpZXMuTGF1bmNoVGVtcGxhdGVEYXRhLlVzZXJEYXRhXFxcIixcXG59XFxuXFxuIyBVc2VyRGF0YSDjgYzjg6rjg4bjg6njg6sgYmFzZTY0IOaWh+Wtl+WIl+OBruOCseODvOOCuVxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXVzZXJkYXRhLXNpemVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBwLFxcblxcdHNwcmludGYoXFxcIlVzZXJEYXRhIGRlY29kZXMgdG8gYWJvdXQgJXYgYnl0ZXMsIGJ1dCBFQzIgbGltaXRzIHVzZXIgZGF0YSB0byAlZCBieXRlczsgUnVuSW5zdGFuY2VzIGZhaWxzIGF0IGRlcGxveSB0aW1lXFxcIiwgW3NpemUsIF9wZl91ZHN6X2xpbWl0XSksXFxuXFx0X3BmX3Vkc3pfZml4LCBfcGZfdWRzel91cmwpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBwIGluIF9wZl91ZHN6X3BhdGhzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdHVkIDo9IHJlc29sdmUobmFtZSwgcClcXG5cXHRpc19zdHJpbmcodWQpXFxuXFx0c2l6ZSA6PSBfcGZfdWRzel9kZWNvZGVkKHVkKVxcblxcdHNpemUgPiBfcGZfdWRzel9saW1pdFxcbn1cXG5cXG4jIFVzZXJEYXRhIOOBjCB7XFxcIkZuOjpCYXNlNjRcXFwiOiBcXFwiPGxpdGVyYWw+XFxcIn0g44Gu44Kx44O844K577yI44Ko44Oz44Kz44O844OJ5YmN44Gu55Sf44OQ44Kk44OI5pWw44Gn5Yik5a6a77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdXNlcmRhdGEtc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIHAsXFxuXFx0c3ByaW50ZihcXFwiVXNlckRhdGEgaXMgJWQgYnl0ZXMgYmVmb3JlIGJhc2U2NCBlbmNvZGluZywgYnV0IEVDMiBsaW1pdHMgdXNlciBkYXRhIHRvICVkIGJ5dGVzOyBSdW5JbnN0YW5jZXMgZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbY291bnQoaW5uZXIpLCBfcGZfdWRzel9saW1pdF0pLFxcblxcdF9wZl91ZHN6X2ZpeCwgX3BmX3Vkc3pfdXJsKSBpZiB7XFxuXFx0c29tZSBydHlwZSwgcCBpbiBfcGZfdWRzel9wYXRoc1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShydHlwZSlcXG5cXHR1ZCA6PSByZXNvbHZlKG5hbWUsIHApXFxuXFx0aXNfb2JqZWN0KHVkKVxcblxcdGlubmVyIDo9IG9iamVjdC5nZXQodWQsIFxcXCJGbjo6QmFzZTY0XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoaW5uZXIpXFxuXFx0Y291bnQoaW5uZXIpID4gX3BmX3Vkc3pfbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lYzItdm9sdW1lLWlvcHNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlYzJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRUJTIElvcHMvVGhyb3VnaHB1dCBtdXN0IG1hdGNoIHRoZSB2b2x1bWUgdHlwZSdzIHN1cHBvcnRlZCByYW5nZXMgYW5kIHJhdGlvc1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQzI6OlZvbHVtZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl92b2xpb3BzX2ZpeCA6PSBcXFwiTWF0Y2ggSW9wcy9UaHJvdWdocHV0IHRvIHRoZSB2b2x1bWUgdHlwZTogZ3AzIDMwMDAtODAwMDAgSU9QUyAobWF4IDUwMC9HaUIsIHRocm91Z2hwdXQgMTI1LTIwMDAgTWlCL3MgYW5kIGF0IG1vc3QgSU9QUy80KSwgaW8xIDEwMC02NDAwMCAobWF4IDUwL0dpQiksIGlvMiAxMDAtMjU2MDAwIChtYXggMTAwMC9HaUIpOyBncDIvc3QxL3NjMS9zdGFuZGFyZCBhY2NlcHQgbmVpdGhlciBwcm9wZXJ0eVxcXCJcXG5cXG5fcGZfdm9saW9wc191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lYnMvbGF0ZXN0L3VzZXJndWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcXFwiXFxuXFxuX3BmX3ZvbGlvcHNfcmFuZ2UgOj0ge1xcXCJncDNcXFwiOiBbMzAwMCwgODAwMDBdLCBcXFwiaW8xXFxcIjogWzEwMCwgNjQwMDBdLCBcXFwiaW8yXFxcIjogWzEwMCwgMjU2MDAwXX1cXG5cXG5fcGZfdm9saW9wc19wZXJfZ2liIDo9IHtcXFwiZ3AzXFxcIjogNTAwLCBcXFwiaW8xXFxcIjogNTAsIFxcXCJpbzJcXFwiOiAxMDAwfVxcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPCBsb1xcblxcbl9wZl92b2xpb3BzX291dChuLCBsbywgaGkpIGlmIG4gPiBoaVxcblxcbl9wZl92b2xpb3BzX2hhc19pb3BzKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpXFxuXFxuIyBJT1BTIOOBjOWei+OBlOOBqOOBrue1tuWvvuODrOODs+OCuOWkllxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyAldiBpcyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgJWQtJWQgZm9yICVzIHZvbHVtZXNcXFwiLCBbbiwgclswXSwgclsxXSwgdnRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyIDo9IF9wZl92b2xpb3BzX3JhbmdlW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dChuLCByWzBdLCByWzFdKVxcbn1cXG5cXG4jIElPUFMgOiDjgrXjgqTjgrrmr5Tjga7otoXpgY5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiLFxcblxcdHNwcmludGYoXFxcIklvcHMgJXYgZXhjZWVkcyB0aGUgbWF4aW11bSByYXRpbyBvZiAlZCBJT1BTIHBlciBHaUIgZm9yICVzIChTaXplICV2IEdpQiBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbbiwgcmF0aW8sIHZ0LCBzLCBzICogcmF0aW9dKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0dnQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIilcXG5cXHRyYXRpbyA6PSBfcGZfdm9saW9wc19wZXJfZ2liW3Z0XVxcblxcdG4gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIpKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuU2l6ZVxcXCIpKVxcblxcdG4gPiBzICogcmF0aW9cXG59XFxuXFxuIyBJb3BzIOOCkuWPl+OBkeS7mOOBkeOBquOBhOWei+OBqyBJb3BzIOOCkuaMh+WumlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWMyLXZvbHVtZS1pb3BzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSwgXFxcIlByb3BlcnRpZXMuSW9wc1xcXCIsXFxuXFx0c3ByaW50ZihcXFwiSW9wcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcyB2b2x1bWVzICh2YWxpZCBvbmx5IGZvciBncDMsIGlvMSwgaW8yKTsgRUMyIHJlamVjdHMgdGhlIENyZWF0ZVZvbHVtZSBjYWxsXFxcIiwgW3Z0XSksXFxuXFx0X3BmX3ZvbGlvcHNfZml4LCBfcGZfdm9saW9wc191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUMyOjpWb2x1bWVcXFwiKVxcblxcdHZ0IDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVm9sdW1lVHlwZVxcXCIpXFxuXFx0dnQgaW4ge1xcXCJncDJcXFwiLCBcXFwic3QxXFxcIiwgXFxcInNjMVxcXCIsIFxcXCJzdGFuZGFyZFxcXCJ9XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Jb3BzXFxcIilcXG59XFxuXFxuIyBUaHJvdWdocHV0IOOBryBncDMg5bCC55SoXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzIHZvbHVtZXMgKHZhbGlkIG9ubHkgZm9yIGdwMyk7IEVDMiByZWplY3RzIHRoZSBDcmVhdGVWb2x1bWUgY2FsbFxcXCIsIFt2dF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHR2dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKVxcblxcdGlzX3N0cmluZyh2dClcXG5cXHR2dCAhPSBcXFwiZ3AzXFxcIlxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQg44Gu57W25a++44Os44Oz44K4XFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGlzIG91dHNpZGUgdGhlIHN1cHBvcnRlZCByYW5nZSAxMjUtMjAwMCBmb3IgZ3AzIHZvbHVtZXNcXFwiLCBbdF0pLFxcblxcdF9wZl92b2xpb3BzX2ZpeCwgX3BmX3ZvbGlvcHNfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDMjo6Vm9sdW1lXFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZvbHVtZVR5cGVcXFwiKSA9PSBcXFwiZ3AzXFxcIlxcblxcdHQgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVGhyb3VnaHB1dFxcXCIpKVxcblxcdF9wZl92b2xpb3BzX291dCh0LCAxMjUsIDIwMDApXFxufVxcblxcbiMgZ3AzIFRocm91Z2hwdXQgOiBJT1BTIOavlO+8iOacgOWkpyAwLjI1IE1pQi9zIHBlciBJT1BT77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lYzItdm9sdW1lLWlvcHNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLCBcXFwiUHJvcGVydGllcy5UaHJvdWdocHV0XFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaHJvdWdocHV0ICV2IE1pQi9zIGV4Y2VlZHMgdGhlIG1heGltdW0gcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUyAoJXYgSU9QUyBhbGxvd3MgYXQgbW9zdCAldilcXFwiLCBbdCwgbiwgbiAvIDRdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHRuIDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLklvcHNcXFwiKSlcXG5cXHR0ICogNCA+IG5cXG59XFxuXFxuIyBncDMg44GnIElvcHMg5pyq5oyH5a6a77yI44OH44OV44Kp44Or44OIIDMwMDDvvInjga7jgajjgY3jga4gVGhyb3VnaHB1dCDmr5RcXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjMi12b2x1bWUtaW9wc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRocm91Z2hwdXQgJXYgTWlCL3MgZXhjZWVkcyA3NTAsIHRoZSBtYXhpbXVtIGZvciB0aGUgZGVmYXVsdCAzMDAwIElPUFMgKDAuMjUgTWlCL3MgcGVyIElPUFMpOyBwcm92aXNpb24gSW9wcyBleHBsaWNpdGx5IG9yIGxvd2VyIHRoZSB0aHJvdWdocHV0XFxcIiwgW3RdKSxcXG5cXHRfcGZfdm9saW9wc19maXgsIF9wZl92b2xpb3BzX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQzI6OlZvbHVtZVxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Wb2x1bWVUeXBlXFxcIikgPT0gXFxcImdwM1xcXCJcXG5cXHRub3QgX3BmX3ZvbGlvcHNfaGFzX2lvcHMobmFtZSlcXG5cXHR0IDo9IHRvX251bWJlcihyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRocm91Z2hwdXRcXFwiKSlcXG5cXHR0ID4gNzUwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1kZWZpbml0aW9ucy1lbXB0eVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJDb250YWluZXJEZWZpbml0aW9ucyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNvbnRhaW5lclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NjZGVfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCJcXG5cXG5fcGZfZWNzY2RlX21zZyA6PSBcXFwiUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBuZWVkcyBhdCBsZWFzdCBvbmUgY29udGFpbmVyOyB0aGUgc2VydmljZSBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIGxpc3QgY2Fubm90IGJlIGVtcHR5XFxcXFxcXCJcXFwiXFxuXFxuX3BmX2Vjc2NkZV9maXggOj0gXFxcIkFkZCBhdCBsZWFzdCBvbmUgZW50cnkgdG8gQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiXFxuXFxuIyBUaGUgcmVnaXN0cnkgc2NoZW1hIG1hcmtzIG5vIFRhc2tEZWZpbml0aW9uIHByb3BlcnR5IGFzIHJlcXVpcmVkLCBzbyBhblxcbiMgYWJzZW50IG9yIGVtcHR5IENvbnRhaW5lckRlZmluaXRpb25zIHNhaWxzIHRocm91Z2ggc2NoZW1hIHZhbGlkYXRpb24gYW5kXFxuIyBkaWVzIGF0IHJlZ2lzdHJhdGlvbi4gZmxhdHRlbl9saXN0IHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgYWJzZW50IGFuZFxcbiMgZW1wdHkgYWxpa2UsIHNvIGJvdGggYmxvY2tzIHJlYWQgdGhlIHByZXByb2Nlc3NlZCBkb2N1bWVudCAoaW5wdXQucmVzb3VyY2VzKVxcbiMgdG8gdGVsbCBhIGxpdGVyYWwgZW1wdHkgbGlzdCBmcm9tIGFuIHVucmVzb2x2YWJsZSB2YWx1ZSBzdWNoIGFzIEZuOjpJZi5cXG5fcGZfZWNzY2RlX3Byb3BzKG5hbWUpIDo9IHByb3BzIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJDb250YWluZXJEZWZpbml0aW9uc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtY29udGFpbmVyLWRlZmluaXRpb25zLWVtcHR5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2NkZV9tc2csXFxuXFx0X3BmX2Vjc2NkZV9maXgsXFxuXFx0X3BmX2Vjc2NkZV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cHJvcHMgOj0gX3BmX2Vjc2NkZV9wcm9wcyhuYW1lKVxcblxcdHJhdyA6PSBvYmplY3QuZ2V0KHByb3BzLCBcXFwiQ29udGFpbmVyRGVmaW5pdGlvbnNcXFwiLCBudWxsKVxcblxcdGlzX2FycmF5KHJhdylcXG5cXHRjb3VudChyYXcpID09IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtY29udGFpbmVyLW1lbW9yeS1vdmVyLXRhc2tcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgTWVtb3J5IG11c3Qgbm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQSBzaW5nbGUgY29udGFpbmVyJ3MgaGFyZCBNZW1vcnkgbGltaXQgY2Fubm90IGV4Y2VlZCB0aGUgdGFzay1sZXZlbCBNZW1vcnkuXFxuIyBUYXNrIE1lbW9yeSBhcnJpdmVzIGFzIGEgc3RyaW5nIChcXFwiNTEyXFxcIik7IHRvX251bWJlciBjb3ZlcnMgYm90aCBzcGVsbGluZ3MgYW5kXFxuIyBtYWtlcyB0aGUgcnVsZSBza2lwIHdoZW4gZWl0aGVyIHNpZGUgaXMgdW5yZXNvbHZhYmxlIG9yIEdCLXN1ZmZpeGVkLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktb3Zlci10YXNrXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVxcXCIsIFtjLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQ29udGFpbmVyICclcycgc2V0cyBNZW1vcnkgJXYgYWJvdmUgdGhlIHRhc2stbGV2ZWwgTWVtb3J5ICV2OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJUaGUgJ21lbW9yeScgc2V0dGluZyBmb3IgY29udGFpbmVyICclcycgaXMgZ3JlYXRlciB0aGFuIGZvciB0aGUgdGFza1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBjbSwgdG0sIGNuYW1lXSksXFxuXFx0XFxcIkxvd2VyIHRoZSBjb250YWluZXIgTWVtb3J5IHRvIGF0IG1vc3QgdGhlIHRhc2stbGV2ZWwgTWVtb3J5LCBvciByYWlzZSB0aGUgdGFzay1sZXZlbCBNZW1vcnlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1lY3MtdGFza2RlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0dG0gOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTWVtb3J5XFxcIikpXFxuXFx0c29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KGMudmFsdWUpXFxuXFx0Y20gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIk1lbW9yeVxcXCIsIG51bGwpKVxcblxcdGNtID4gdG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBjb250YWluZXIgbmVlZHMgTWVtb3J5IG9yIE1lbW9yeVJlc2VydmF0aW9uIHdoZW4gdGhlIHRhc2sgc2V0cyBubyBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9lY3NtZW1yZXFfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWVjcy10YXNrZGVmaW5pdGlvbi1jb250YWluZXJkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBXaGVuIHRoZSB0YXNrIGRlZmluaXRpb24gaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5LCBldmVyeSBjb250YWluZXIgbXVzdCBzZXRcXG4jIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvbi4gUHJvdmluZyB0cnVlIGFic2VuY2UgbmVlZHMgdGhlIHByZXByb2Nlc3NlZFxcbiMgZG9jdW1lbnQgKGlucHV0LnJlc291cmNlcyk6IHJlc29sdmUoKSBpcyB1bmRlZmluZWQgZm9yIGEgbWlzc2luZyBrZXkgYW5kIGZvclxcbiMgYW4gdW5yZXNvbHZhYmxlIHZhbHVlIGFsaWtlLCBzbyBpdCBjYW5ub3QgdGVsbCBcXFwiYWJzZW50XFxcIiBmcm9tIFxcXCJSZWYgdG8gYVxcbiMgcGFyYW1ldGVyXFxcIi4gVGhlIGlzX29iamVjdCBndWFyZCBmYWlscyBjbG9zZWQgaWYgdGhhdCBpbnRlcm5hbCBzaGFwZSBjaGFuZ2VzLlxcbl9wZl9lY3NtZW1yZXFfdGFza19tZW1vcnlfYWJzZW50KG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiTWVtb3J5XFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlcXVpcmVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIG5laXRoZXIgTWVtb3J5IG5vciBNZW1vcnlSZXNlcnZhdGlvbiBhbmQgdGhlIHRhc2sgaGFzIG5vIHRhc2stbGV2ZWwgTWVtb3J5OyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJBdCBsZWFzdCBvbmUgb2YgJ21lbW9yeScgb3IgJ21lbW9yeVJlc2VydmF0aW9uJyBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIiwgW2NuYW1lXSksXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSwgb3IgZ2l2ZSB0aGUgY29udGFpbmVyIE1lbW9yeSBvciBNZW1vcnlSZXNlcnZhdGlvblxcXCIsXFxuXFx0X3BmX2Vjc21lbXJlcV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc21lbXJlcV90YXNrX21lbW9yeV9hYnNlbnQobmFtZSlcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0b2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSA9PSBudWxsXFxuXFx0Y25hbWUgOj0gb2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTmFtZVxcXCIsIFxcXCI8dW5uYW1lZD5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk1lbW9yeVJlc2VydmF0aW9uIG11c3Qgbm90IGV4Y2VlZCBNZW1vcnlcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgTWVtb3J5UmVzZXJ2YXRpb24gaXMgYSBzb2Z0IGZsb29yIGFuZCBNZW1vcnkgYSBoYXJkIGNlaWxpbmc7IHRoZSBzZXJ2aWNlXFxuIyByZWplY3RzIGEgZmxvb3IgYWJvdmUgdGhlIGNlaWxpbmcuIHRvX251bWJlciBmYWlscyAoYW5kIHRoZSBydWxlIHNraXBzKSB3aGVuXFxuIyBlaXRoZXIgdmFsdWUgaXMgYWJzZW50IG9yIHVucmVzb2x2YWJsZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1jb250YWluZXItbWVtb3J5LXJlc2VydmF0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk1lbW9yeVJlc2VydmF0aW9uXFxcIiwgW2MuaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJDb250YWluZXIgJyVzJyBzZXRzIE1lbW9yeVJlc2VydmF0aW9uICV2IGFib3ZlIE1lbW9yeSAldjsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiJ21lbW9yeScgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJ21lbW9yeVJlc2VydmF0aW9uJ1xcXFxcXFwiXFxcIiwgW2NuYW1lLCBtciwgbV0pLFxcblxcdFxcXCJMb3dlciBNZW1vcnlSZXNlcnZhdGlvbiB0byBhdCBtb3N0IE1lbW9yeSwgb3IgcmFpc2UgTWVtb3J5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRpc19vYmplY3QoYy52YWx1ZSlcXG5cXHRtIDo9IHRvX251bWJlcihvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJNZW1vcnlcXFwiLCBudWxsKSlcXG5cXHRtciA6PSB0b19udW1iZXIob2JqZWN0LmdldChjLnZhbHVlLCBcXFwiTWVtb3J5UmVzZXJ2YXRpb25cXFwiLCBudWxsKSlcXG5cXHRtciA+IG1cXG5cXHRjbmFtZSA6PSBvYmplY3QuZ2V0KGMudmFsdWUsIFxcXCJOYW1lXFxcIiwgXFxcIjx1bm5hbWVkPlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWR1cGxpY2F0ZS1jb250YWluZXItbmFtZXNcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmUgZGlhZ25vc3RpYyBwZXIgZHVwbGljYXRlZCBsYXRlciBvY2N1cnJlbmNlOyBvbmx5IGxpdGVyYWwgc3RyaW5nIG5hbWVzXFxuIyBjYW4gYmUgY29tcGFyZWQsIHNvIGEgUmVmLXZhbHVlZCBOYW1lIHNraXBzIGl0cyBwYWlycy5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1kdXBsaWNhdGUtY29udGFpbmVyLW5hbWVzXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zLiVkLk5hbWVcXFwiLCBbYi5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkNvbnRhaW5lciBuYW1lICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiQ29udGFpbmVyIG5hbWVzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHRhc2sgZGVmaW5pdGlvblxcXFxcXFwiXFxcIiwgW25hXSksXFxuXFx0XFxcIkdpdmUgZXZlcnkgY29udGFpbmVyIGluIHRoZSB0YXNrIGRlZmluaXRpb24gYSBkaXN0aW5jdCBOYW1lXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tY29udGFpbmVyZGVmaW5pdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRzb21lIGEgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRzb21lIGIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIilcXG5cXHRhLmluZGV4IDwgYi5pbmRleFxcblxcdG5hIDo9IG9iamVjdC5nZXQoYS52YWx1ZSwgXFxcIk5hbWVcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyhuYSlcXG5cXHRuYSA9PSBvYmplY3QuZ2V0KGIudmFsdWUsIFxcXCJOYW1lXFxcIiwgbnVsbClcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJlY3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXBoZW1lcmFsU3RvcmFnZSBTaXplSW5HaUIgbXVzdCBiZSAyMS0yMDBcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZXBoX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1lY3MtdGFza2RlZmluaXRpb24tZXBoZW1lcmFsc3RvcmFnZS5odG1sXFxcIlxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBjYXJyaWVzIG5vIG1pbmltdW0vbWF4aW11bSBmb3IgU2l6ZUluR2lCLCBzbyAyMS0yMDAgaXNcXG4jIGVuZm9yY2VkIG9ubHkgYXQgcmVnaXN0cmF0aW9uIHRpbWUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBiZWxvdyAyMTsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRXBoZW1lcmFsU3RvcmFnZSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAyMVxcXFxcXFwiXFxcIiwgW3NdKSxcXG5cXHRcXFwiVXNlIGEgc2l6ZSBiZXR3ZWVuIDIxIGFuZCAyMDAgR2lCLCBvciBkcm9wIEVwaGVtZXJhbFN0b3JhZ2UgdG8ga2VlcCB0aGUgZGVmYXVsdCAyMCBHaUJcXFwiLFxcblxcdF9wZl9lY3NlcGhfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHMgOj0gdG9fbnVtYmVyKHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXBoZW1lcmFsU3RvcmFnZS5TaXplSW5HaUJcXFwiKSlcXG5cXHRzIDwgMjFcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZXBoZW1lcmFsLXN0b3JhZ2UtcmFuZ2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkVwaGVtZXJhbFN0b3JhZ2UuU2l6ZUluR2lCXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJFcGhlbWVyYWxTdG9yYWdlIFNpemVJbkdpQiAldiBpcyBhYm92ZSAyMDA7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIkVwaGVtZXJhbFN0b3JhZ2Ugc2l6ZSBzaG91bGQgYmUgYXQgbW9zdCAyMDBcXFxcXFxcIlxcXCIsIFtzXSksXFxuXFx0XFxcIlVzZSBhIHNpemUgYmV0d2VlbiAyMSBhbmQgMjAwIEdpQlxcXCIsXFxuXFx0X3BmX2Vjc2VwaF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0cyA6PSB0b19udW1iZXIocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5FcGhlbWVyYWxTdG9yYWdlLlNpemVJbkdpQlxcXCIpKVxcblxcdHMgPiAyMDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lY3MtZXNzZW50aWFsLWNvbnRhaW5lclwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBdCBsZWFzdCBvbmUgY29udGFpbmVyIG11c3QgYmUgZXNzZW50aWFsXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEVzc2VudGlhbCBkZWZhdWx0cyB0byB0cnVlLCBzbyB0aGUgcnVsZSBmaXJlcyBvbmx5IHdoZW4gZXZlcnkgY29udGFpbmVyIHNheXNcXG4jIEVzc2VudGlhbDogZmFsc2UgZXhwbGljaXRseS4gQSBjb250YWluZXIgd2hvc2UgRXNzZW50aWFsIGlzIHVucmVzb2x2YWJsZSAob3JcXG4jIGEgbm9uLWJvb2xlYW4pIGJyZWFrcyB0aGUgYGV2ZXJ5YCwgYW5kIHRoZSBydWxlIHNraXBzIOKAlCBhYnNlbmNlIG9mIGFuXFxuIyBlc3NlbnRpYWwgY29udGFpbmVyIGNhbm5vdCBiZSBwcm92ZW4gdGhlbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVjcy1lc3NlbnRpYWwtY29udGFpbmVyXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Db250YWluZXJEZWZpbml0aW9uc1xcXCIsXFxuXFx0XFxcIkV2ZXJ5IGNvbnRhaW5lciBzZXRzIEVzc2VudGlhbDogZmFsc2U7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgd2l0aCBcXFxcXFxcIlRhc2sgZGVmaW5pdGlvbiBkb2Vzbid0IGhhdmUgYW55IGVzc2VudGlhbCBjb250YWluZXJcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIk1hcmsgYXQgbGVhc3Qgb25lIGNvbnRhaW5lciBFc3NlbnRpYWw6IHRydWUsIG9yIG9taXQgRXNzZW50aWFsIChpdCBkZWZhdWx0cyB0byB0cnVlKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtZWNzLXRhc2tkZWZpbml0aW9uLWNvbnRhaW5lcmRlZmluaXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0aXRlbXMgOj0gW2MgfCBzb21lIGMgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkNvbnRhaW5lckRlZmluaXRpb25zXFxcIildXFxuXFx0Y291bnQoaXRlbXMpID4gMFxcblxcdGV2ZXJ5IGMgaW4gaXRlbXMge1xcblxcdFxcdG9iamVjdC5nZXQoYy52YWx1ZSwgXFxcIkVzc2VudGlhbFxcXCIsIG51bGwpID09IGZhbHNlXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVjcy1mYXJnYXRlLW5ldHdvcmstbW9kZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVjc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGYXJnYXRlIHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyZSBOZXR3b3JrTW9kZSAnYXdzdnBjJ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2Vjc25tX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvdGFza19kZWZpbml0aW9uX3BhcmFtZXRlcnMuaHRtbCNuZXR3b3JrX21vZGVcXFwiXFxuXFxuIyByZXNvbHZlKCkgY2Fubm90IHRlbGwgXFxcImFic2VudFxcXCIgZnJvbSBcXFwidW5yZXNvbHZhYmxlXFxcIiAoYm90aCB1bmRlZmluZWQpLCBzbyB0cnVlXFxuIyBhYnNlbmNlIGlzIHByb3ZlbiBhZ2FpbnN0IHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQ7IGEgUmVmLXZhbHVlZCBOZXR3b3JrTW9kZVxcbiMgbm8gbG9uZ2VyIHRyaXBzIHRoZSBub3Qtc2V0IGJsb2NrLlxcbl9wZl9lY3NubV9hYnNlbnQobmFtZSkgaWYge1xcblxcdHByb3BzIDo9IGlucHV0LnJlc291cmNlc1tuYW1lXS5wcm9wZXJ0aWVzXFxuXFx0aXNfb2JqZWN0KHByb3BzKVxcblxcdG9iamVjdC5nZXQocHJvcHMsIFxcXCJOZXR3b3JrTW9kZVxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJOZXR3b3JrTW9kZSBpcyAnJXMnIGJ1dCB0YXNrIGRlZmluaXRpb25zIHJlcXVpcmluZyBGQVJHQVRFIGNvbXBhdGliaWxpdHkgbXVzdCB1c2UgJ2F3c3ZwYyc7IFJlZ2lzdGVyVGFza0RlZmluaXRpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbbm1dKSxcXG5cXHRcXFwiU2V0IE5ldHdvcmtNb2RlIHRvICdhd3N2cGMnXFxcIixcXG5cXHRfcGZfZWNzbm1fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdHJjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdGlzX2FycmF5KHJjKVxcblxcdFxcXCJGQVJHQVRFXFxcIiBpbiByY1xcblxcdG5tIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmV0d29ya01vZGVcXFwiKVxcblxcdGlzX3N0cmluZyhubSlcXG5cXHRubSAhPSBcXFwiYXdzdnBjXFxcIlxcbn1cXG5cXG4jIE5ldHdvcmtNb2RlIOacquaMh+WumuOBp+OCgiBSZWdpc3RlclRhc2tEZWZpbml0aW9uIOOBr1xcbiMgXFxcIkZhcmdhdGUgb25seSBzdXBwb3J0cyBuZXR3b3JrIG1vZGUgJ2F3c3ZwYycuXFxcIiDjgaflpLHmlZfjgZnjgovvvIgyMDI2LTA5LTAxIOWunyBBUEkg56K66KqN77yJXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS1uZXR3b3JrLW1vZGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk5ldHdvcmtNb2RlXFxcIixcXG5cXHRcXFwiTmV0d29ya01vZGUgaXMgbm90IHNldCwgYnV0IHRhc2sgZGVmaW5pdGlvbnMgcmVxdWlyaW5nIEZBUkdBVEUgY29tcGF0aWJpbGl0eSBtdXN0IHNldCBpdCB0byAnYXdzdnBjJzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyBhdCBkZXBsb3kgdGltZVxcXCIsXFxuXFx0XFxcIlNldCBOZXR3b3JrTW9kZSB0byAnYXdzdnBjJ1xcXCIsXFxuXFx0X3BmX2Vjc25tX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uXFxcIilcXG5cXHRyYyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzXFxcIilcXG5cXHRpc19hcnJheShyYylcXG5cXHRcXFwiRkFSR0FURVxcXCIgaW4gcmNcXG5cXHRfcGZfZWNzbm1fYWJzZW50KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWNzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZBUkdBVEUgY29tcGF0aWJpbGl0eSByZXF1aXJlcyB0YXNrLWxldmVsIENwdSBhbmQgTWVtb3J5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfZWNzZmFyZ2NtX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2UtZWNzLXRhc2tkZWZpbml0aW9uLmh0bWxcXFwiXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwNDcgY2hlY2tzIHRoZSBDcHUvTWVtb3J5IHBhaXJpbmcgb25seSB3aGVuIGJvdGggYXJlIHByZXNlbnQ7XFxuIyBsZWF2aW5nIG9uZSBvdXQgZW50aXJlbHkgaXMgY2F1Z2h0IGJ5IG5vdGhpbmcgYmVmb3JlIHJlZ2lzdHJhdGlvbi4gVHJ1ZVxcbiMgYWJzZW5jZSBuZWVkcyB0aGUgcHJlcHJvY2Vzc2VkIGRvY3VtZW50IChzZWUgcGYtZWNzLWNvbnRhaW5lci1tZW1vcnktcmVxdWlyZWRcXG4jIGZvciB0aGUgaWRpb20pLlxcbl9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKSBpZiB7XFxuXFx0c29tZSByYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVxdWlyZXNDb21wYXRpYmlsaXRpZXNcXFwiKVxcblxcdHJjLnZhbHVlID09IFxcXCJGQVJHQVRFXFxcIlxcbn1cXG5cXG5fcGZfZWNzZmFyZ2NtX2Fic2VudChuYW1lLCBrZXkpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBrZXksIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lY3MtZmFyZ2F0ZS10YXNrLWNwdS1tZW1vcnlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkNwdVxcXCIsXFxuXFx0XFxcIlJlcXVpcmVzQ29tcGF0aWJpbGl0aWVzIGluY2x1ZGVzIEZBUkdBVEUgYnV0IHRoZSB0YXNrLWxldmVsIENwdSBpcyBtaXNzaW5nOyBSZWdpc3RlclRhc2tEZWZpbml0aW9uIGZhaWxzIHdpdGggXFxcXFxcXCJGYXJnYXRlIHJlcXVpcmVzIHRoYXQgJ2NwdScgYmUgZGVmaW5lZCBhdCB0aGUgdGFzayBsZXZlbFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IHRhc2stbGV2ZWwgQ3B1IChhbmQgTWVtb3J5KSB0byBvbmUgb2YgdGhlIHN1cHBvcnRlZCBGYXJnYXRlIGNvbWJpbmF0aW9uc1xcXCIsXFxuXFx0X3BmX2Vjc2ZhcmdjbV91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RUNTOjpUYXNrRGVmaW5pdGlvblxcXCIpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9mYXJnYXRlKG5hbWUpXFxuXFx0X3BmX2Vjc2ZhcmdjbV9hYnNlbnQobmFtZSwgXFxcIkNwdVxcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWNzLWZhcmdhdGUtdGFzay1jcHUtbWVtb3J5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5NZW1vcnlcXFwiLFxcblxcdFxcXCJSZXF1aXJlc0NvbXBhdGliaWxpdGllcyBpbmNsdWRlcyBGQVJHQVRFIGJ1dCB0aGUgdGFzay1sZXZlbCBNZW1vcnkgaXMgbWlzc2luZzsgUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbiBmYWlscyB3aXRoIFxcXFxcXFwiRmFyZ2F0ZSByZXF1aXJlcyB0aGF0ICdtZW1vcnknIGJlIGRlZmluZWQgYXQgdGhlIHRhc2sgbGV2ZWxcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCB0YXNrLWxldmVsIE1lbW9yeSAoYW5kIENwdSkgdG8gb25lIG9mIHRoZSBzdXBwb3J0ZWQgRmFyZ2F0ZSBjb21iaW5hdGlvbnNcXFwiLFxcblxcdF9wZl9lY3NmYXJnY21fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OkVDUzo6VGFza0RlZmluaXRpb25cXFwiKVxcblxcdF9wZl9lY3NmYXJnY21fZmFyZ2F0ZShuYW1lKVxcblxcdF9wZl9lY3NmYXJnY21fYWJzZW50KG5hbWUsIFxcXCJNZW1vcnlcXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVwiLFxuICAgIFwic2VydmljZVwiOiBcImVsYnYyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFMQiBpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA0MDAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OkxvYWRCYWxhbmNlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9pZGxlX3RpbWVvdXRfb3V0KG4pIGlmIG4gPCAxXFxuXFxuX3BmX2lkbGVfdGltZW91dF9vdXQobikgaWYgbiA+IDQwMDBcXG5cXG5fcGZfbm9uX2FsYihuYW1lKSBpZiB7XFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKVxcblxcdHQgIT0gXFxcImFwcGxpY2F0aW9uXFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWVsYnYyLWxiLWlkbGUtdGltZW91dC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5Mb2FkQmFsYW5jZXJBdHRyaWJ1dGVzLiVkLlZhbHVlXFxcIiwgW2l0ZW0uaW5kZXhdKSxcXG5cXHRzcHJpbnRmKFxcXCJpZGxlX3RpbWVvdXQudGltZW91dF9zZWNvbmRzIGlzICV2IGJ1dCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNDAwMCBzZWNvbmRzXFxcIiwgW251bV0pLFxcblxcdFxcXCJTZXQgaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMSBhbmQgNDAwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vYXBwbGljYXRpb24tbG9hZC1iYWxhbmNlcnMuaHRtbCNjb25uZWN0aW9uLWlkbGUtdGltZW91dFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6TG9hZEJhbGFuY2VyXFxcIilcXG5cXHRub3QgX3BmX25vbl9hbGIobmFtZSlcXG5cXHRzb21lIGl0ZW0gaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxvYWRCYWxhbmNlckF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiaWRsZV90aW1lb3V0LnRpbWVvdXRfc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX2lkbGVfdGltZW91dF9vdXQobnVtKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWVsYnYyLXRnLWRlcmVnaXN0cmF0aW9uLWRlbGF5LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMzYwMFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9kZXJlZ19kZWxheV9vdXQobikgaWYgbiA8IDBcXG5cXG5fcGZfZGVyZWdfZGVsYXlfb3V0KG4pIGlmIG4gPiAzNjAwXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1lbGJ2Mi10Zy1kZXJlZ2lzdHJhdGlvbi1kZWxheS1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcImRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDM2MDAgc2Vjb25kc1xcXCIsIFtudW1dKSxcXG5cXHRcXFwiU2V0IGRlcmVnaXN0cmF0aW9uX2RlbGF5LnRpbWVvdXRfc2Vjb25kcyB0byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMzYwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI2RlcmVnaXN0cmF0aW9uLWRlbGF5XFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpUYXJnZXRHcm91cFxcXCIpXFxuXFx0c29tZSBpdGVtIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXNcXFwiKVxcblxcdGF0dHIgOj0gaXRlbS52YWx1ZVxcblxcdGlzX29iamVjdChhdHRyKVxcblxcdG9iamVjdC5nZXQoYXR0ciwgXFxcIktleVxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiZGVyZWdpc3RyYXRpb25fZGVsYXkudGltZW91dF9zZWNvbmRzXFxcIlxcblxcdG51bSA6PSB0b19udW1iZXIob2JqZWN0LmdldChhdHRyLCBcXFwiVmFsdWVcXFwiLCBudWxsKSlcXG5cXHRfcGZfZGVyZWdfZGVsYXlfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1lbGJ2Mi10Zy1zbG93LXN0YXJ0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZWxidjJcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiVGFyZ2V0IGdyb3VwIHNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBtdXN0IGJlIDAgb3IgYmV0d2VlbiAzMCBhbmQgOTAwXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkVsYXN0aWNMb2FkQmFsYW5jaW5nVjI6OlRhcmdldEdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIG4gPCAwXFxuXFxuX3BmX3Nsb3dfc3RhcnRfb3V0KG4pIGlmIHtcXG5cXHRuID4gMFxcblxcdG4gPCAzMFxcbn1cXG5cXG5fcGZfc2xvd19zdGFydF9vdXQobikgaWYgbiA+IDkwMFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZWxidjItdGctc2xvdy1zdGFydC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5UYXJnZXRHcm91cEF0dHJpYnV0ZXMuJWQuVmFsdWVcXFwiLCBbaXRlbS5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kcyBpcyAldiBidXQgbXVzdCBiZSAwIChkaXNhYmxlZCkgb3IgYmV0d2VlbiAzMCBhbmQgOTAwIHNlY29uZHNcXFwiLCBbbnVtXSksXFxuXFx0XFxcIlNldCBzbG93X3N0YXJ0LmR1cmF0aW9uX3NlY29uZHMgdG8gMCBvciBhIHZhbHVlIGJldHdlZW4gMzAgYW5kIDkwMFxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vZWRpdC10YXJnZXQtZ3JvdXAtYXR0cmlidXRlcy5odG1sI3Nsb3ctc3RhcnQtbW9kZVxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RWxhc3RpY0xvYWRCYWxhbmNpbmdWMjo6VGFyZ2V0R3JvdXBcXFwiKVxcblxcdHNvbWUgaXRlbSBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuVGFyZ2V0R3JvdXBBdHRyaWJ1dGVzXFxcIilcXG5cXHRhdHRyIDo9IGl0ZW0udmFsdWVcXG5cXHRpc19vYmplY3QoYXR0cilcXG5cXHRvYmplY3QuZ2V0KGF0dHIsIFxcXCJLZXlcXFwiLCBcXFwiXFxcIikgPT0gXFxcInNsb3dfc3RhcnQuZHVyYXRpb25fc2Vjb25kc1xcXCJcXG5cXHRudW0gOj0gdG9fbnVtYmVyKG9iamVjdC5nZXQoYXR0ciwgXFxcIlZhbHVlXFxcIiwgbnVsbCkpXFxuXFx0X3BmX3Nsb3dfc3RhcnRfb3V0KG51bSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtaW5wdXQtdHJhbnNmb3JtZXItcGxhY2Vob2xkZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiZXZlbnRzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIklucHV0VGVtcGxhdGUgcGxhY2Vob2xkZXJzIG11c3QgYmUgZGVjbGFyZWQgaW4gSW5wdXRQYXRoc01hcFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IDxwbGFjZWhvbGRlcj4gaW4gSW5wdXRUZW1wbGF0ZSBtdXN0IGJlIGRlY2xhcmVkIGluIElucHV0UGF0aHNNYXAsXFxuIyBleGNlcHQgdGhlIGF3cy5ldmVudHMuKiBwcmVkZWZpbmVkIHZhcmlhYmxlcy4gQW4gSW5wdXRQYXRoc01hcCB0aGF0IGlzIGFuXFxuIyB1bnJlc29sdmFibGUgaW50cmluc2ljIChub3JtYWxpemVkIHdpdGggX18tcHJlZml4ZWQgbWFya2VyIGtleXMpIG1ha2VzIHRoZVxcbiMgZGVjbGFyZWQgc2V0IHVua25vd2FibGUsIHNvIHRoZSBydWxlIHNraXBzLlxcbl9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbCkgOj0ge3N1YnN0cmluZyhmLCAxLCBjb3VudChmKSAtIDIpIHwgc29tZSBmIGluIHJlZ2V4LmZpbmRfbihgPChbQS1aYS16MC05Xy4tXSspPmAsIHRtcGwsIC0xKX1cXG5cXG5fcGZfZXZpdHBfcGxhaW5fbWFwKHBtKSBpZiB7XFxuXFx0aXNfb2JqZWN0KHBtKVxcblxcdGV2ZXJ5IGssIF8gaW4gcG0ge1xcblxcdFxcdG5vdCBzdGFydHN3aXRoKGssIFxcXCJfX1xcXCIpXFxuXFx0fVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1pbnB1dC10cmFuc2Zvcm1lci1wbGFjZWhvbGRlcnNcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuVGFyZ2V0cy4lZC5JbnB1dFRyYW5zZm9ybWVyLklucHV0VGVtcGxhdGVcXFwiLCBbdC5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIklucHV0VGVtcGxhdGUgdXNlcyA8JXM+IGJ1dCBJbnB1dFBhdGhzTWFwIGRvZXMgbm90IGRlY2xhcmUgaXQ7IFB1dFRhcmdldHMgZmFpbHMgd2l0aCBcXFxcXFxcIklucHV0VGVtcGxhdGUgZm9yIHRhcmdldCAlcyBjb250YWlucyBpbnZhbGlkIHBsYWNlaG9sZGVyICVzXFxcXFxcXCJcXFwiLCBbcCwgdGlkLCBwXSksXFxuXFx0c3ByaW50ZihcXFwiQWRkICclcycgdG8gSW5wdXRQYXRoc01hcCwgb3IgcmVtb3ZlIHRoZSBwbGFjZWhvbGRlciBmcm9tIHRoZSB0ZW1wbGF0ZVxcXCIsIFtwXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvdXNlcmd1aWRlL2ViLXRyYW5zZm9ybS10YXJnZXQtaW5wdXQuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRhcmdldHNcXFwiKVxcblxcdGlzX29iamVjdCh0LnZhbHVlKVxcblxcdGl0IDo9IG9iamVjdC5nZXQodC52YWx1ZSwgXFxcIklucHV0VHJhbnNmb3JtZXJcXFwiLCBudWxsKVxcblxcdGlzX29iamVjdChpdClcXG5cXHR0bXBsIDo9IG9iamVjdC5nZXQoaXQsIFxcXCJJbnB1dFRlbXBsYXRlXFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcodG1wbClcXG5cXHRwbSA6PSBvYmplY3QuZ2V0KGl0LCBcXFwiSW5wdXRQYXRoc01hcFxcXCIsIHt9KVxcblxcdF9wZl9ldml0cF9wbGFpbl9tYXAocG0pXFxuXFx0c29tZSBwIGluIF9wZl9ldml0cF9wbGFjZWhvbGRlcnModG1wbClcXG5cXHRub3Qgc3RhcnRzd2l0aChwLCBcXFwiYXdzLmV2ZW50cy5cXFwiKVxcblxcdG5vdCBwbVtwXVxcblxcdHRpZCA6PSBvYmplY3QuZ2V0KHQudmFsdWUsIFxcXCJJZFxcXCIsIFxcXCI8dGFyZ2V0PlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQW4gZW1wdHkgRXZlbnRQYXR0ZXJuIGNvdW50cyBhcyBubyBwYXR0ZXJuIGF0IGFsbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpFdmVudHM6OlJ1bGVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBlbmdpbmUncyBGMzA1OCBmaXJlcyB3aGVuIHRoZSBFdmVudFBhdHRlcm4gS0VZIGlzIGFic2VudCwgYnV0IGFuIGVtcHR5XFxuIyBvYmplY3QgcGFzc2VzIHRoZSBzY2hlbWEgYW5kIHRoZSBoYW5kbGVyIHRoZW4gdHJlYXRzIGl0IGFzIG5vIHBhdHRlcm4gYXRcXG4jIGFsbC4gRmlyZXMgb25seSB3aGVuIFNjaGVkdWxlRXhwcmVzc2lvbiBpcyBhbHNvIGxpdGVyYWxseSBhYnNlbnQg4oCUIHRoZVxcbiMgYmVuY2gtdmVyaWZpZWQgc2hhcGUgKGFic2VuY2UgcHJvdmVuIHZpYSBpbnB1dC5yZXNvdXJjZXMsIHNlZSBBR0VOVFMubWQpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtZXZlbnRzLXBhdHRlcm4tZW1wdHlcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIsXFxuXFx0XFxcIkV2ZW50UGF0dGVybiBpcyBhbiBlbXB0eSBvYmplY3QsIHdoaWNoIHRoZSBoYW5kbGVyIHRyZWF0cyBhcyBubyBwYXR0ZXJuOyBQdXRSdWxlIGZhaWxzIHdpdGggXFxcXFxcXCJQYXJhbWV0ZXIocykgRXZlbnRQYXR0ZXJuIG9yIFNjaGVkdWxlRXhwcmVzc2lvbiBtdXN0IGJlIHNwZWNpZmllZFxcXFxcXFwiXFxcIixcXG5cXHRcXFwiR2l2ZSBFdmVudFBhdHRlcm4gYXQgbGVhc3Qgb25lIG1hdGNoZXIgKGUuZy4gc291cmNlKSwgb3IgdXNlIFNjaGVkdWxlRXhwcmVzc2lvbiBpbnN0ZWFkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC91c2VyZ3VpZGUvZWItZXZlbnQtcGF0dGVybnMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6RXZlbnRzOjpSdWxlXFxcIilcXG5cXHRlcCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkV2ZW50UGF0dGVyblxcXCIpXFxuXFx0aXNfb2JqZWN0KGVwKVxcblxcdGNvdW50KGVwKSA9PSAwXFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlNjaGVkdWxlRXhwcmVzc2lvblxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1ldmVudHMtcGF0dGVybi1zY2FsYXItdmFsdWVcIixcbiAgICBcInNlcnZpY2VcIjogXCJldmVudHNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiRXZlbnQgcGF0dGVybiB2YWx1ZXMgbXVzdCBiZSBhcnJheXMgb3Igb2JqZWN0cywgbm90IHNjYWxhcnNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6RXZlbnRzOjpSdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX2V2cHN2X3NjYWxhcih2KSBpZiBpc19zdHJpbmcodilcXG5cXG5fcGZfZXZwc3Zfc2NhbGFyKHYpIGlmIGlzX251bWJlcih2KVxcblxcbl9wZl9ldnBzdl9zY2FsYXIodikgaWYgaXNfYm9vbGVhbih2KVxcblxcbiMgRXZlcnkgbWF0Y2hlciBpbiBhbiBldmVudCBwYXR0ZXJuIG11c3QgYmUgYW4gYXJyYXkgKG9yIGFuIG9iamVjdCBob2xkaW5nXFxuIyBvcGVyYXRvcnMpOyBhIGJhcmUgc2NhbGFyIGlzIHJlamVjdGVkIHBlciBrZXkuIE9ubHkgdGhlIHRvcCBsZXZlbCBpc1xcbiMgY2hlY2tlZCDigJQgdGhhdCBpcyB0aGUgYmVuY2gtdmVyaWZpZWQgc2NvcGUsIGFuZCBpdCBkb2RnZXMgb3BlcmF0b3Igb2JqZWN0c1xcbiMgbGlrZSB7XFxcInByZWZpeFxcXCI6IFxcXCIuLi5cXFwifSB0aGF0IGxlZ2FsbHkgY2Fycnkgc2NhbGFycyBkZWVwZXIgZG93bi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWV2ZW50cy1wYXR0ZXJuLXNjYWxhci12YWx1ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5FdmVudFBhdHRlcm4uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIkV2ZW50UGF0dGVybiBrZXkgJyVzJyBob2xkcyBhIGJhcmUgc2NhbGFyOyBQdXRSdWxlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIkV2ZW50IHBhdHRlcm4gaXMgbm90IHZhbGlkLiBSZWFzb246IFxcXFxcXFxcXFxcXFxcXCIlc1xcXFxcXFxcXFxcXFxcXCIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcXFxcXFxcIlxcXCIsIFtrLCBrXSksXFxuXFx0c3ByaW50ZihcXFwiV3JhcCB0aGUgdmFsdWUgaW4gYW4gYXJyYXk6IFxcXFxcXFwiJXNcXFxcXFxcIjogWy4uLl1cXFwiLCBba10pLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L3VzZXJndWlkZS9lYi1ldmVudC1wYXR0ZXJucy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpFdmVudHM6OlJ1bGVcXFwiKVxcblxcdGVwIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRXZlbnRQYXR0ZXJuXFxcIilcXG5cXHRpc19vYmplY3QoZXApXFxuXFx0c29tZSBrLCB2IGluIGVwXFxuXFx0X3BmX2V2cHN2X3NjYWxhcih2KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWlhbS1pbmxpbmUtcG9saWN5LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiSW5saW5lIHBvbGljeSBkb2N1bWVudHMgYXJlIGxpbWl0ZWQgcGVyIGlkZW50aXR5IChyb2xlIDEwMjQwIC8gZ3JvdXAgNTEyMCAvIHVzZXIgMjA0OCBjaGFyYWN0ZXJzKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6Um9sZVBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6VXNlclBvbGljeVwiLFxuICAgICAgXCJBV1M6OklBTTo6R3JvdXBQb2xpY3lcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfaW5saW5lX3BvbGljeV9saW1pdHMgOj0ge1xcblxcdFxcXCJBV1M6OklBTTo6UG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpSb2xlUG9saWN5XFxcIjogMTAyNDAsXFxuXFx0XFxcIkFXUzo6SUFNOjpVc2VyUG9saWN5XFxcIjogMjA0OCxcXG5cXHRcXFwiQVdTOjpJQU06Okdyb3VwUG9saWN5XFxcIjogNTEyMCxcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0taW5saW5lLXBvbGljeS1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIsXFxuXFx0c3ByaW50ZihcXFwiUG9saWN5RG9jdW1lbnQgaXMgJWQgY2hhcmFjdGVycyAoSlNPTiB3aXRob3V0IHdoaXRlc3BhY2UpIGJ1dCB0aGUgaW5saW5lIHBvbGljeSBsaW1pdCBmb3IgJXMgaXMgJWQgKHJvbGU6IDEwMjQwLCBncm91cDogNTEyMCwgdXNlcjogMjA0OClcXFwiLCBbc2l6ZSwgcnR5cGUsIGxpbWl0XSksXFxuXFx0XFxcIk1vdmUgc3RhdGVtZW50cyBpbnRvIG1hbmFnZWQgcG9saWNpZXMgb3Igc2hvcnRlbiB0aGUgZG9jdW1lbnRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIHJ0eXBlLCBsaW1pdCBpbiBfcGZfaW5saW5lX3BvbGljeV9saW1pdHNcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUocnR5cGUpXFxuXFx0ZG9jIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiKVxcblxcdGlzX29iamVjdChkb2MpXFxuXFx0c2l6ZSA6PSBjb3VudChqc29uLm1hcnNoYWwoZG9jKSlcXG5cXHRzaXplID4gbGltaXRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktY291bnRcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWFuYWdlZCBwb2xpY2llcyBwZXIgaWRlbnRpdHkgYXJlIGNhcHBlZCAoaGFyZCBtYXhpbXVtcyByb2xlIDI1IC8gdXNlciAyMCAvIGdyb3VwIDEwKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpJQU06OlJvbGVcIixcbiAgICAgIFwiQVdTOjpJQU06OlVzZXJcIixcbiAgICAgIFwiQVdTOjpJQU06Okdyb3VwXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDjg4/jg7zjg4nkuIrpmZDvvIhTZXJ2aWNlIFF1b3RhcyDjga7jgIxNYXhpbXVtIHF1b3Rh44CNPSDjgZ3jgozku6XkuIrlvJXjgY3kuIrjgZLkuI3lj6/og73jgarlgKTvvIk6XFxuIyAgIHJvbGUgMjUgLyB1c2VyIDIwIC8gZ3JvdXAgMTDvvIhncm91cCDjga8gYWRqdXN0YWJsZTogZmFsc2XjgIHlrp/muKzjgafjgoLnorroqo3vvInjgIJcXG4jIOODh+ODleOCqeODq+ODiO+8iHJvbGUgMjAgLyB1c2VyIDEwIC8gZ3JvdXAgMTDvvInotoXjga/jgqLjgqvjgqbjg7Pjg4jjga7jgq/jgqnjg7zjgr/lvJXjgY3kuIrjgZLmrKHnrKzjgadcXG4jIOaIkOWKn+OBl+W+l+OCi+OBn+OCgSBFUlJPUiDjgavjgZfjgarjgYTvvIhiZW5jaCDjgqLjgqvjgqbjg7Pjg4jjga4gcm9sZT0yMCDjgacgMTEg5YCL5oiQ5Yqf44KS5a6f5ris5riI44G/77yJ44CCXFxuX3BmX2lhbXBvbF9saW1pdHMgOj0ge1xcblxcdFxcXCJBV1M6OklBTTo6Um9sZVxcXCI6IDI1LFxcblxcdFxcXCJBV1M6OklBTTo6VXNlclxcXCI6IDIwLFxcblxcdFxcXCJBV1M6OklBTTo6R3JvdXBcXFwiOiAxMCxcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktY291bnRcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk1hbmFnZWRQb2xpY3lBcm5zXFxcIixcXG5cXHRzcHJpbnRmKFxcXCIlZCBtYW5hZ2VkIHBvbGljaWVzIGFyZSBhdHRhY2hlZCwgYnV0IHRoZSBoYXJkIG1heGltdW0gZm9yICVzIGlzICVkIChxdW90YSBkZWZhdWx0czogcm9sZSAyMCwgdXNlciAxMCwgZ3JvdXAgMTA7IHJhaXNhYmxlIG9ubHkgdXAgdG8gdGhlIGhhcmQgbWF4aW11bSk7IGRlcGxveW1lbnQgZmFpbHMgd2l0aCBMaW1pdEV4Y2VlZGVkXFxcIiwgW24sIHJ0eXBlLCBsaW1pdF0pLFxcblxcdFxcXCJDb25zb2xpZGF0ZSBzdGF0ZW1lbnRzIGludG8gZmV3ZXIgbWFuYWdlZCBwb2xpY2llc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfaWFtLXF1b3Rhcy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgcnR5cGUsIGxpbWl0IGluIF9wZl9pYW1wb2xfbGltaXRzXFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKHJ0eXBlKVxcblxcdGFyciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1hbmFnZWRQb2xpY3lBcm5zXFxcIilcXG5cXHRpc19hcnJheShhcnIpXFxuXFx0biA6PSBjb3VudChhcnIpXFxuXFx0biA+IGxpbWl0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtaWFtLW1hbmFnZWQtcG9saWN5LXNpemVcIixcbiAgICBcInNlcnZpY2VcIjogXCJpYW1cIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTWFuYWdlZCBwb2xpY3kgZG9jdW1lbnRzIGFyZSBsaW1pdGVkIHRvIDYxNDQgY2hhcmFjdGVycyAod2hpdGVzcGFjZSBleGNsdWRlZClcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1pYW0tbWFuYWdlZC1wb2xpY3ktc2l6ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnRcXFwiLFxcblxcdHNwcmludGYoXFxcIlBvbGljeURvY3VtZW50IGlzICVkIGNoYXJhY3RlcnMgKEpTT04gd2l0aG91dCB3aGl0ZXNwYWNlKSBidXQgdGhlIG1hbmFnZWQgcG9saWN5IGxpbWl0IGlzIDYxNDRcXFwiLCBbc2l6ZV0pLFxcblxcdFxcXCJTcGxpdCB0aGUgZG9jdW1lbnQgaW50byBtdWx0aXBsZSBtYW5hZ2VkIHBvbGljaWVzIG9yIHNob3J0ZW4gaXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX2lhbS1xdW90YXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6SUFNOjpNYW5hZ2VkUG9saWN5XFxcIilcXG5cXHRkb2MgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KGRvYylcXG5cXHRzaXplIDo9IGNvdW50KGpzb24ubWFyc2hhbChkb2MpKVxcblxcdHNpemUgPiA2MTQ0XFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtbGFtYmRhLWVudi1zaXplXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwibGFtYmRhXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxhbWJkYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGxpbWl0ZWQgdG8gNDA5NiBieXRlcyBpbiB0b3RhbFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMYW1iZGE6OkZ1bmN0aW9uXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyDjg6rjg4bjg6njg6vmloflrZfliJfjga7jgq3jg7wv5YCk44Gg44GR44KS5pWw44GI44KL77yI44OI44O844Kv44Oz44Gv44K544Kt44OD44OX77yJ44CC5ZCI6KiI44GM5pei44GrIDQwOTYg44KS6LaF44GI44GmXFxuIyDjgYTjgozjgbDjgIHlrp/pmpvjga7jg4fjg5fjg63jgqTjgafjgoLlv4XjgZrlpLHmlZfjgZnjgovvvIjlrp/jgrXjgqTjgrrjga/mjqjlrprku6XkuIrjgavjgZfjgYvjgarjgonjgarjgYTvvInjgIJcXG4jIE5PVEU6IOOBk+OBruOCqOODs+OCuOODs+OBriBSZWdvIOODkeODvOOCteOBr+WGheWMheihqOiomOWGheOBriAyIOWkieaVsCBzb21l77yIc29tZSBrLCB2IGluIHZhcnPvvInjgpJcXG4jIOWPl+OBkeS7mOOBkeOBquOBhOOBn+OCgeOAgW9iamVjdC5rZXlzIOe1jOeUseOBp+abuOOBj+OAglxcbl9wZl9sZW52X3NpemUodmFycykgOj0gc3VtKFtzIHxcXG5cXHRzb21lIGsgaW4gb2JqZWN0LmtleXModmFycylcXG5cXHRpc19zdHJpbmcodmFyc1trXSlcXG5cXHRzIDo9IGNvdW50KGspICsgY291bnQodmFyc1trXSlcXG5dKVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbGFtYmRhLWVudi1zaXplXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5FbnZpcm9ubWVudC5WYXJpYWJsZXNcXFwiLFxcblxcdHNwcmludGYoXFxcIkVudmlyb25tZW50IHZhcmlhYmxlcyB0b3RhbCBhdCBsZWFzdCAlZCBieXRlcyAobGl0ZXJhbCBrZXlzIGFuZCB2YWx1ZXMpLCBidXQgTGFtYmRhIGxpbWl0cyB0aGUgZW52aXJvbm1lbnQgdG8gNDA5NiBieXRlczsgQ3JlYXRlRnVuY3Rpb24gZmFpbHMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG90YWxdKSxcXG5cXHRcXFwiTW92ZSBsYXJnZSB2YWx1ZXMgdG8gU1NNIFBhcmFtZXRlciBTdG9yZSwgU2VjcmV0cyBNYW5hZ2VyLCBvciBhIGJ1bmRsZWQgY29uZmlnIGZpbGVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9nZXR0aW5nc3RhcnRlZC1saW1pdHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TGFtYmRhOjpGdW5jdGlvblxcXCIpXFxuXFx0dmFycyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkVudmlyb25tZW50LlZhcmlhYmxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHZhcnMpXFxuXFx0dG90YWwgOj0gX3BmX2xlbnZfc2l6ZSh2YXJzKVxcblxcdHRvdGFsID4gNDA5Nlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3MtZmlsdGVyLXBhdHRlcm4tYnJhY2tldFwiLFxuICAgIFwic2VydmljZVwiOiBcImxvZ3NcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBmaWx0ZXIgcGF0dGVybiBzdGFydGluZyB3aXRoICdbJyBtdXN0IGVuZCB3aXRoICddJ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcIixcbiAgICAgIFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfbGdmcGJfdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvbG9ncy9GaWx0ZXJBbmRQYXR0ZXJuU3ludGF4Lmh0bWxcXFwiXFxuXFxuX3BmX2xnZnBiX21zZyhraW5kKSA6PSBzcHJpbnRmKFxcXCJUaGUgJXMgZmlsdGVyIHBhdHRlcm4gc3RhcnRzIHdpdGggJ1snIGJ1dCBkb2VzIG5vdCBlbmQgd2l0aCAnXSc7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIklmIGEgZmlsdGVyIHBhdHRlcm4gc3RhcnRzIHdpdGggJ1snIGl0IG11c3QgZW5kIHdpdGggJ10nXFxcXFxcXCJcXFwiLCBba2luZF0pXFxuXFxuX3BmX2xnZnBiX2ZpeCA6PSBcXFwiQ2xvc2UgdGhlIGJyYWNrZXQg4oCUIGEgc3BhY2UtZGVsaW1pdGVkIHBhdHRlcm4gaXMgW2ZpZWxkMSwgZmllbGQyLCAuLi5dXFxcIlxcblxcbiMgVGhlIHNhbWUgcGFyc2VyIHJ1bnMgZm9yIG1ldHJpYyBmaWx0ZXJzIGFuZCBzdWJzY3JpcHRpb24gZmlsdGVycywgYW5kIGl0XFxuIyBydW5zIGJlZm9yZSBhbnkgZGVzdGluYXRpb24gdmFsaWRhdGlvbiAoYmVuY2ggYzAxL2MwNikuIE9ubHkgdGhpc1xcbiMgc3RhcnQvZW5kIHBhaXJpbmcgaXMgY2hlY2tlZCBoZXJlOyBhIGZ1bGwgcGF0dGVybiBwYXJzZXIgaXMgb3V0IG9mIHNjb3BlLlxcbl9wZl9sZ2ZwYl91bmJhbGFuY2VkKHApIGlmIHtcXG5cXHR0IDo9IHRyaW1fc3BhY2UocClcXG5cXHRzdGFydHN3aXRoKHQsIFxcXCJbXFxcIilcXG5cXHRub3QgZW5kc3dpdGgodCwgXFxcIl1cXFwiKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3MtZmlsdGVyLXBhdHRlcm4tYnJhY2tldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIsXFxuXFx0X3BmX2xnZnBiX21zZyhcXFwibWV0cmljXFxcIiksXFxuXFx0X3BmX2xnZnBiX2ZpeCwgX3BmX2xnZnBiX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpNZXRyaWNGaWx0ZXJcXFwiKVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRfcGZfbGdmcGJfdW5iYWxhbmNlZChwKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3MtZmlsdGVyLXBhdHRlcm4tYnJhY2tldFxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmlsdGVyUGF0dGVyblxcXCIsXFxuXFx0X3BmX2xnZnBiX21zZyhcXFwic3Vic2NyaXB0aW9uXFxcIiksXFxuXFx0X3BmX2xnZnBiX2ZpeCwgX3BmX2xnZnBiX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcXFwiKVxcblxcdHAgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWx0ZXJQYXR0ZXJuXFxcIilcXG5cXHRpc19zdHJpbmcocClcXG5cXHRfcGZfbGdmcGJfdW5iYWxhbmNlZChwKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLWxvZ3MtbWV0cmljLWRpbWVuc2lvbnMtZGVmYXVsdC1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsb2dzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkRpbWVuc2lvbnMgYW5kIERlZmF1bHRWYWx1ZSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6Ok1ldHJpY0ZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgRGVmYXVsdFZhbHVlIGlzIGVtaXR0ZWQgd2hlbiBhIGxvZyBsaW5lIGRvZXMgbm90IG1hdGNoLCBidXQgYSBkaW1lbnNpb25cXG4jIHZhbHVlIGNhbiBvbmx5IGNvbWUgZnJvbSBhIG1hdGNoIOKAlCB0aGUgc2VydmljZSByZWplY3RzIHRoZSBjb21iaW5hdGlvbi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLWxvZ3MtbWV0cmljLWRpbWVuc2lvbnMtZGVmYXVsdC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTWV0cmljVHJhbnNmb3JtYXRpb25zLiVkLkRlZmF1bHRWYWx1ZVxcXCIsIFt0LmluZGV4XSksXFxuXFx0XFxcIlRoZSBtZXRyaWMgdHJhbnNmb3JtYXRpb24gc2V0cyBib3RoIERpbWVuc2lvbnMgYW5kIERlZmF1bHRWYWx1ZTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiSW52YWxpZCBtZXRyaWMgdHJhbnNmb3JtYXRpb246IGRpbWVuc2lvbnMgYW5kIGRlZmF1bHQgdmFsdWUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSBwcm9wZXJ0aWVzXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJEcm9wIERlZmF1bHRWYWx1ZSB3aGVuIHRoZSB0cmFuc2Zvcm1hdGlvbiBoYXMgRGltZW5zaW9ucywgb3IgZHJvcCB0aGUgRGltZW5zaW9uc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtbG9ncy1tZXRyaWNmaWx0ZXItbWV0cmljdHJhbnNmb3JtYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6TG9nczo6TWV0cmljRmlsdGVyXFxcIilcXG5cXHRzb21lIHQgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLk1ldHJpY1RyYW5zZm9ybWF0aW9uc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHQudmFsdWUpXFxuXFx0b2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiRGVmYXVsdFZhbHVlXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdGRpbXMgOj0gb2JqZWN0LmdldCh0LnZhbHVlLCBcXFwiRGltZW5zaW9uc1xcXCIsIG51bGwpXFxuXFx0aXNfYXJyYXkoZGltcylcXG5cXHRjb3VudChkaW1zKSA+IDBcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1sb2dzLXN1YnNjcmlwdGlvbi1raW5lc2lzLXJvbGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJsb2dzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgS2luZXNpcyBkZXN0aW5hdGlvbiBuZWVkcyBSb2xlQXJuXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OkxvZ3M6OlN1YnNjcmlwdGlvbkZpbHRlclwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9sZ3Nrcl91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZFdhdGNoL2xhdGVzdC9sb2dzL1N1YnNjcmlwdGlvbkZpbHRlcnMuaHRtbFxcXCJcXG5cXG4jIFRoZSBkZXN0aW5hdGlvbiBpcyBwcm92YWJseSBLaW5lc2lzIHR3byB3YXlzOiBhIGxpdGVyYWxcXG4jIGFybjo8cGFydGl0aW9uPjpraW5lc2lzOiBzdHJpbmcsIG9yIGEgUmVmL0dldEF0dCB0aGF0IHJlc29sdmUoKSB0dXJucyBpbnRvXFxuIyB0aGUgbG9naWNhbCBJRCBvZiBhbiBpbi10ZW1wbGF0ZSBBV1M6OktpbmVzaXM6OlN0cmVhbS4gU2NvcGVkIHRvIEtpbmVzaXMg4oCUXFxuIyB0aGUgYmVuY2ggZXJyb3IgbmFtZXMgXFxcInZlbmRvciBraW5lc2lzXFxcIjsgb3RoZXIgdmVuZG9ycyB3ZXJlIG5vdCBtZWFzdXJlZC5cXG5fcGZfbGdza3Jfa2luZXNpc19kZXN0KG5hbWUpIGlmIHtcXG5cXHRkIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVzdGluYXRpb25Bcm5cXFwiKVxcblxcdGlzX3N0cmluZyhkKVxcblxcdHBhcnRzIDo9IHNwbGl0KGQsIFxcXCI6XFxcIilcXG5cXHRjb3VudChwYXJ0cykgPj0gM1xcblxcdHBhcnRzWzBdID09IFxcXCJhcm5cXFwiXFxuXFx0cGFydHNbMl0gPT0gXFxcImtpbmVzaXNcXFwiXFxufVxcblxcbl9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSkgaWYge1xcblxcdGQgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5EZXN0aW5hdGlvbkFyblxcXCIpXFxuXFx0aXNfc3RyaW5nKGQpXFxuXFx0ZCBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpLaW5lc2lzOjpTdHJlYW1cXFwiKVxcbn1cXG5cXG4jIFRydWUgYWJzZW5jZSBvZiBSb2xlQXJuIG5lZWRzIHRoZSBwcmVwcm9jZXNzZWQgZG9jdW1lbnQgKHNlZSBBR0VOVFMubWQpLlxcbl9wZl9sZ3Nrcl9yb2xlX2Fic2VudChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlJvbGVBcm5cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtbG9ncy1zdWJzY3JpcHRpb24ta2luZXNpcy1yb2xlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Sb2xlQXJuXFxcIixcXG5cXHRcXFwiVGhlIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdGFyZ2V0cyBhIEtpbmVzaXMgc3RyZWFtIGJ1dCBzZXRzIG5vIFJvbGVBcm47IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcImRlc3RpbmF0aW9uQXJuIGZvciB2ZW5kb3Iga2luZXNpcyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHJvbGVBcm5cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkFkZCBhIFJvbGVBcm4gZm9yIGEgcm9sZSB0aGF0IGxvZ3MuYW1hem9uYXdzLmNvbSBjYW4gYXNzdW1lIHdpdGgga2luZXNpczpQdXRSZWNvcmQgb24gdGhlIHN0cmVhbVxcXCIsXFxuXFx0X3BmX2xnc2tyX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpMb2dzOjpTdWJzY3JpcHRpb25GaWx0ZXJcXFwiKVxcblxcdF9wZl9sZ3Nrcl9raW5lc2lzX2Rlc3QobmFtZSlcXG5cXHRfcGZfbGdza3Jfcm9sZV9hYnNlbnQobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLWFsaWFzLWNsb3VkZnJvbnQtem9uZS1pZFwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDbG91ZEZyb250IGFsaWFzIHRhcmdldCBtdXN0IHVzZSBob3N0ZWQgem9uZSBaMkZEVE5EQVRBUVlXMlwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIEV2ZXJ5IENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uIGlzIGFsaWFzZWQgdGhyb3VnaCB0aGUgc2luZ2xlIGdsb2JhbCBob3N0ZWRcXG4jIHpvbmUgWjJGRFROREFUQVFZVzIuIEFueSBvdGhlciBBbGlhc1RhcmdldC5Ib3N0ZWRab25lSWQgKGFuIEFMQidzIHJlZ2lvbmFsXFxuIyB6b25lIGlkIGlzIHRoZSBjbGFzc2ljIHBhc3RlIGVycm9yKSBmYWlscyBhdCBkZXBsb3kgdGltZSB3aXRoIFxcXCJ0aGUgYWxpYXNcXG4jIHRhcmdldCBuYW1lIGRvZXMgbm90IGxpZSB3aXRoaW4gdGhlIHRhcmdldCB6b25lXFxcIi5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtYWxpYXMtY2xvdWRmcm9udC16b25lLWlkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5Ib3N0ZWRab25lSWRcXFwiLFxcblxcdHNwcmludGYoXFxcIlRoZSBhbGlhcyB0YXJnZXRzIGEgQ2xvdWRGcm9udCBkb21haW4sIHNvIEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCBtdXN0IGJlIFoyRkRUTkRBVEFRWVcyLCBub3QgJyVzJ1xcXCIsIFt6aWRdKSxcXG5cXHRcXFwiU2V0IEFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZCB0byBaMkZEVE5EQVRBUVlXMiAoaW4gdGhlIENESywgcm91dGU1M190YXJnZXRzLkNsb3VkRnJvbnRUYXJnZXQgZG9lcyB0aGlzKVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nZW5lcmFsL2xhdGVzdC9nci9jZl9yZWdpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRkbnMgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldC5ETlNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcoZG5zKVxcblxcdGVuZHN3aXRoKHRyaW1fc3VmZml4KGxvd2VyKGRucyksIFxcXCIuXFxcIiksIFxcXCIuY2xvdWRmcm9udC5uZXRcXFwiKVxcblxcdHppZCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkFsaWFzVGFyZ2V0Lkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHppZClcXG5cXHR6aWQgIT0gXFxcIloyRkRUTkRBVEFRWVcyXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtYXBleC1jbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBDTkFNRSByZWNvcmQgaXMgbm90IHBlcm1pdHRlZCBhdCB0aGUgem9uZSBhcGV4XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiLFxuICAgICAgXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX2FwZXhfbm9ybShuKSA6PSB0cmltX3N1ZmZpeChsb3dlcihuKSwgXFxcIi5cXFwiKVxcblxcbiMgVGhlIGVuZ2luZSdzIEUzMDIzIGNhdGNoZXMgYW4gYXBleCBDTkFNRSBvbmx5IHdoZW4gdGhlIHJlY29yZCBjYXJyaWVzIGFcXG4jIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUuIENESyBMMiBhbHdheXMgbGlua3MgcmVjb3JkcyB3aXRoXFxuIyBIb3N0ZWRab25lSWQ6IHtcXFwiUmVmXFxcIjogPHpvbmU+fSwgd2hpY2ggRTMwMjMgZG9lcyBub3Qgc2VlIChtZWFzdXJlZCAyMDI2LTA5LTAyLFxcbiMgZW5naW5lIDEuNy4wLWJldGEpLiByZXNvbHZlKCkgdHVybnMgc3VjaCBhIFJlZiBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELFxcbiMgc28gd2hlbiB0aGF0IElEIG5hbWVzIGEgSG9zdGVkWm9uZSBpbiB0aGUgc2FtZSB0ZW1wbGF0ZSB3ZSBjYW4gcmVhZCBpdHNcXG4jIGxpdGVyYWwgTmFtZSBhbmQgZG8gdGhlIGFwZXggY29tcGFyaXNvbiBvdXJzZWx2ZXMuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLWFwZXgtY25hbWVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiLFxcblxcdHNwcmludGYoXFxcIkEgQ05BTUUgcmVjb3JkIGlzIG5vdCBwZXJtaXR0ZWQgYXQgdGhlIHpvbmUgYXBleCAoJyVzJyk7IHRoZSBkZXBsb3ltZW50IGZhaWxzIHdpdGggXFxcXFxcXCJSUlNldCBvZiB0eXBlIENOQU1FIC4uLiBpcyBub3QgcGVybWl0dGVkIGF0IGFwZXhcXFxcXFxcIlxcXCIsIFtyZWNOYW1lXSksXFxuXFx0XFxcIlVzZSBhbiBhbGlhcyBBL0FBQUEgcmVjb3JkIGZvciB0aGUgYXBleCAoQWxpYXNUYXJnZXQpLCBvciBtb3ZlIHRoZSBDTkFNRSB0byBhIHN1YmRvbWFpblxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9yZXNvdXJjZS1yZWNvcmQtc2V0cy1jaG9vc2luZy1hbGlhcy1ub24tYWxpYXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0enJlZiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVJZFxcXCIpXFxuXFx0aXNfc3RyaW5nKHpyZWYpXFxuXFx0enJlZiBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpIb3N0ZWRab25lXFxcIilcXG5cXHR6b25lTmFtZSA6PSByZXNvbHZlKHpyZWYsIFxcXCJQcm9wZXJ0aWVzLk5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh6b25lTmFtZSlcXG5cXHRyZWNOYW1lIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHJlY05hbWUpXFxuXFx0X3BmX3I1M19hcGV4X25vcm0ocmVjTmFtZSkgPT0gX3BmX3I1M19hcGV4X25vcm0oem9uZU5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1nZW9sb2NhdGlvbi1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHJlZ2lzdHJ5IHNjaGVtYSBleHByZXNzZXMgdGhpcyBhcyBhIG9uZU9mLCB3aGljaCB0aGUgc2VydmVyLXNpZGVcXG4jIHByZS1kZXBsb3kgdmFsaWRhdGlvbiBlbmZvcmNlcyAoXFxcIjIgc3Vic2NoZW1hcyBtYXRjaGVkIGluc3RlYWQgb2Ygb25lXFxcIikgYnV0XFxuIyB0aGUgYnVuZGxlZCBlbmdpbmUgZG9lcyBub3QgZXZhbHVhdGUg4oCUIGhlbmNlIHVwc3RyZWFtOiBwZW5kaW5nLWVuZ2luZS5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtZ2VvbG9jYXRpb24tZXhjbHVzaXZlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5HZW9Mb2NhdGlvblxcXCIsXFxuXFx0XFxcIkdlb0xvY2F0aW9uIGNhbm5vdCBzcGVjaWZ5IGJvdGggQ29udGluZW50Q29kZSBhbmQgQ291bnRyeUNvZGU7IENsb3VkRm9ybWF0aW9uIHJlamVjdHMgdGhlIHJlY29yZCBzZXQgYmVmb3JlIHByb3Zpc2lvbmluZ1xcXCIsXFxuXFx0XFxcIktlZXAgZWl0aGVyIHRoZSBDb250aW5lbnRDb2RlIG9yIHRoZSBDb3VudHJ5Q29kZSAoYWRkIFN1YmRpdmlzaW9uQ29kZSBvbmx5IG5leHQgdG8gQ291bnRyeUNvZGUgVVMpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1yb3V0ZTUzLXJlY29yZHNldC1nZW9sb2NhdGlvbi5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdGdlbyA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkdlb0xvY2F0aW9uXFxcIilcXG5cXHRpc19vYmplY3QoZ2VvKVxcblxcdGlzX3N0cmluZyhvYmplY3QuZ2V0KGdlbywgXFxcIkNvbnRpbmVudENvZGVcXFwiLCBudWxsKSlcXG5cXHRpc19zdHJpbmcob2JqZWN0LmdldChnZW8sIFxcXCJDb3VudHJ5Q29kZVxcXCIsIG51bGwpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1wiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTXVsdGlWYWx1ZUFuc3dlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBBbGlhc1RhcmdldFwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtbXVsdGl2YWx1ZS1hbGlhc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0XFxcIk11bHRpVmFsdWVBbnN3ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggQWxpYXNUYXJnZXQ7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIk11bHRpdmFsdWUgYW5zd2VyIHJyc2V0IHNob3VsZCBub3QgYmUgYW4gYWxpYXMgcnJzZXRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBwbGFpbiBtdWx0aXZhbHVlIHJlY29yZHMgd2l0aCBSZXNvdXJjZVJlY29yZHMsIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlciBhbmQga2VlcCB0aGUgYWxpYXNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG5cXHRpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXR5cGUtcm91dGluZy1wb2xpY3lcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIk5TIHJlY29yZHMgdGFrZSBubyByb3V0aW5nIHBvbGljeTsgQ05BTUUgY2Fubm90IGJlIG11bHRpdmFsdWVcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M190eXBvbF91cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuX3BmX3I1M190eXBvbF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfdHlwb2xfcHJvcHNcXG5cXHRyZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuJXNcXFwiLCBbcF0pKSAhPSBudWxsXFxufVxcblxcbl9wZl9yNTNfdHlwb2xfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG4jIE9ubHkgY29tYmluYXRpb25zIHRoYXQgZmFpbGVkIG9uIGEgcmVhbCBkZXBsb3kgYXJlIGZsYWdnZWQuIFNPQS9EUyB3aXRoIGFcXG4jIHJvdXRpbmcgcG9saWN5IGFyZSBhbHNvIGRvY3VtZW50ZWQgYXMgdW5zdXBwb3J0ZWQgYnV0IHdlcmUgbm90IG1lYXN1cmVkLCBzb1xcbiMgdGhleSBhcmUgZGVsaWJlcmF0ZWx5IGxlZnQgb3V0IChzZWUgdGhlIGRpc2NvdmVyeSBpc3N1ZSkuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQW4gTlMgcmVjb3JkIGNhbm5vdCB1c2UgYSByb3V0aW5nIHBvbGljeTsgdGhlIHNlcnZpY2UgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwidGhpcyB0eXBlIG9mIFJSU2V0IGlzIG5vdCBzdXBwb3J0ZWRcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlVzZSBhIHNpbXBsZSByZWNvcmQgc2V0IGZvciBOUyByZWNvcmRzIChubyBXZWlnaHQvUmVnaW9uL0ZhaWxvdmVyL0dlb0xvY2F0aW9uL011bHRpVmFsdWVBbnN3ZXIvQ2lkclJvdXRpbmdDb25maWcpXFxcIixcXG5cXHRfcGZfcjUzX3R5cG9sX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVHlwZVxcXCIpID09IFxcXCJOU1xcXCJcXG5cXHRfcGZfcjUzX3R5cG9sX2hhc19wb2xpY3kobmFtZSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXJlY29yZC10eXBlLXJvdXRpbmctcG9saWN5XFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5UeXBlXFxcIixcXG5cXHRcXFwiQSBDTkFNRSByZWNvcmQgY2Fubm90IHVzZSB0aGUgbXVsdGl2YWx1ZSBhbnN3ZXIgcm91dGluZyBwb2xpY3k7IHRoZSBzZXJ2aWNlIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcInRoaXMgdHlwZSBvZiBSUlNldCBpcyBub3Qgc3VwcG9ydGVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJQb2ludCB0aGUgbXVsdGl2YWx1ZSByZWNvcmRzIGF0IEEvQUFBQSAob3IgYW5vdGhlciBzdXBwb3J0ZWQgdHlwZSksIG9yIGRyb3AgTXVsdGlWYWx1ZUFuc3dlclxcXCIsXFxuXFx0X3BmX3I1M190eXBvbF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlR5cGVcXFwiKSA9PSBcXFwiQ05BTUVcXFwiXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVwiLFxuICAgIFwic2VydmljZVwiOiBcInJvdXRlNTNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSByZWNvcmQgc2V0IG5lZWRzIEFsaWFzVGFyZ2V0IG9yIHRoZSBmdWxsIFRUTCtSZXNvdXJjZVJlY29yZHMgcGFpclwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfcjUzX3ZhbHNyY191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiXFxuXFxuIyBUaGUgc2VydmljZSBleHBlY3RzIFxcXCJleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmRcXG4jIFJlc291cmNlUmVjb3Jkc11dXFxcIiAoVHJhZmZpY1BvbGljeUluc3RhbmNlSWQgaGFzIG5vIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5KS5cXG4jIFRoZSBUVEwrQWxpYXNUYXJnZXQgY29tYmluYXRpb24gaXMgYWxyZWFkeSB0aGUgZW5naW5lJ3MgRTMwMjksIHNvIHRoaXMgcnVsZVxcbiMgY292ZXJzIHRoZSByZW1haW5pbmcgc2hhcGVzOiBhbGlhcyBwbHVzIHJlY29yZHMsIGFuZCBhbiBpbmNvbXBsZXRlIG5vbi1hbGlhc1xcbiMgZ3JvdXAgKHJlY29yZHMgd2l0aG91dCBUVEwsIFRUTCB3aXRob3V0IHJlY29yZHMsIG9yIG5laXRoZXIpLlxcbl9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKSBpZiBpc19vYmplY3QocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BbGlhc1RhcmdldFxcXCIpKVxcblxcbl9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKSBpZiB7XFxuXFx0c29tZSBfIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiKVxcbn1cXG5cXG5fcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVFRMXFxcIikgIT0gbnVsbFxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yZWNvcmQtdmFsdWUtc291cmNlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5SZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdFxcXCJBbGlhc1RhcmdldCBhbmQgUmVzb3VyY2VSZWNvcmRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmU7IHRoZSBzZXJ2aWNlIGV4cGVjdHMgZXhhY3RseSBvbmUgb2YgQWxpYXNUYXJnZXQgb3IgVFRMLXBsdXMtUmVzb3VyY2VSZWNvcmRzXFxcIixcXG5cXHRcXFwiS2VlcCB0aGUgQWxpYXNUYXJnZXQgYW5kIGRyb3AgUmVzb3VyY2VSZWNvcmRzLCBvciBtYWtlIGl0IGEgcGxhaW4gcmVjb3JkIHdpdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHNcXFwiLFxcblxcdF9wZl9yNTNfdmFsc3JjX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19hbGlhcyhuYW1lKVxcblxcdF9wZl9yNTNfdmFsc3JjX2hhc19ycihuYW1lKVxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtcmVjb3JkLXZhbHVlLXNvdXJjZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXNcXFwiLFxcblxcdFxcXCJBIG5vbi1hbGlhcyByZWNvcmQgc2V0IG5lZWRzIGJvdGggVFRMIGFuZCBSZXNvdXJjZVJlY29yZHM7IHRoZSBzZXJ2aWNlIHJlamVjdHMgYW4gaW5jb21wbGV0ZSBwYWlyIHdpdGggXFxcXFxcXCJFeHBlY3RlZCBleGFjdGx5IG9uZSBvZiBbQWxpYXNUYXJnZXQsIGFsbCBvZiBbVFRMLCBhbmQgUmVzb3VyY2VSZWNvcmRzXV0gLi4uIGZvdW5kIG5vbmVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNwZWNpZnkgVFRMIGFuZCBSZXNvdXJjZVJlY29yZHMgdG9nZXRoZXIsIG9yIHVzZSBBbGlhc1RhcmdldCBpbnN0ZWFkXFxcIixcXG5cXHRfcGZfcjUzX3ZhbHNyY191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRub3QgX3BmX3I1M192YWxzcmNfaGFzX2FsaWFzKG5hbWUpXFxuXFx0bm90IF9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpXFxufVxcblxcbl9wZl9yNTNfdmFsc3JjX2NvbXBsZXRlKG5hbWUpIGlmIHtcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfcnIobmFtZSlcXG5cXHRfcGZfcjUzX3ZhbHNyY19oYXNfdHRsKG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkEgcmVjb3JkIHNldCBjYW4gdXNlIG9ubHkgb25lIHJvdXRpbmcgcG9saWN5XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVGhlIHNlcnZpY2UgZW5mb3JjZXMgXFxcIkV4cGVjdGVkIGV4YWN0bHkgb25lIG9mIFtXZWlnaHQsIFJlZ2lvbiwgRmFpbG92ZXIsXFxuIyBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgR2VvUHJveGltaXR5TG9jYXRpb24sIG9yIENpZHJSb3V0aW5nQ29uZmlnXVxcXCIuXFxuIyBHZW9Qcm94aW1pdHlMb2NhdGlvbiBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eSwgc28gZml2ZSByZW1haW4gaGVyZS5cXG4jIE11bHRpVmFsdWVBbnN3ZXI6IGZhbHNlIGlzIHRyZWF0ZWQgYXMgYWJzZW50IOKAlCBvbmx5IHRydWUgc2VsZWN0cyB0aGUgcG9saWN5Llxcbl9wZl9yNTNfcG9seF9wcm9wcyA6PSBbXFxcIldlaWdodFxcXCIsIFxcXCJSZWdpb25cXFwiLCBcXFwiRmFpbG92ZXJcXFwiLCBcXFwiR2VvTG9jYXRpb25cXFwiLCBcXFwiQ2lkclJvdXRpbmdDb25maWdcXFwiXVxcblxcbl9wZl9yNTNfcG9seF9wcmVzZW50KG5hbWUsIHByb3ApIGlmIHtcXG5cXHRwcm9wICE9IFxcXCJNdWx0aVZhbHVlQW5zd2VyXFxcIlxcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwcm9wXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgXFxcIk11bHRpVmFsdWVBbnN3ZXJcXFwiKSBpZiB7XFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5NdWx0aVZhbHVlQW5zd2VyXFxcIikgPT0gdHJ1ZVxcbn1cXG5cXG5fcGZfcjUzX3BvbHhfcG9saWNpZXMobmFtZSkgOj0gcHMgaWYge1xcblxcdHBzIDo9IFtwIHwgc29tZSBwIGluIGFycmF5LmNvbmNhdChfcGZfcjUzX3BvbHhfcHJvcHMsIFtcXFwiTXVsdGlWYWx1ZUFuc3dlclxcXCJdKTsgX3BmX3I1M19wb2x4X3ByZXNlbnQobmFtZSwgcCldXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1yb3V0aW5nLXBvbGljeS1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJBIHJlY29yZCBzZXQgY2FuIHVzZSBvbmx5IG9uZSByb3V0aW5nIHBvbGljeSwgYnV0ICV2IGFyZSBhbGwgc3BlY2lmaWVkXFxcIiwgW3BzXSksXFxuXFx0XFxcIktlZXAgZXhhY3RseSBvbmUgb2YgV2VpZ2h0LCBSZWdpb24sIEZhaWxvdmVyLCBHZW9Mb2NhdGlvbiwgTXVsdGlWYWx1ZUFuc3dlciwgb3IgQ2lkclJvdXRpbmdDb25maWcgYW5kIHNwbGl0IHRoZSByZXN0IGludG8gc2VwYXJhdGUgcmVjb3JkIHNldHNcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1yZXNvdXJjZS1yb3V0ZTUzLXJlY29yZHNldC5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHBzIDo9IF9wZl9yNTNfcG9seF9wb2xpY2llcyhuYW1lKVxcblxcdGNvdW50KHBzKSA+IDFcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlNldElkZW50aWZpZXIgYW5kIGEgcm91dGluZyBwb2xpY3kgbXVzdCBhcHBlYXIgdG9nZXRoZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3I1M19zaWRwX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcmVzb3VyY2Utcm91dGU1My1yZWNvcmRzZXQuaHRtbFxcXCJcXG5cXG5fcGZfcjUzX3NpZHBfcHJvcHMgOj0gW1xcXCJXZWlnaHRcXFwiLCBcXFwiUmVnaW9uXFxcIiwgXFxcIkZhaWxvdmVyXFxcIiwgXFxcIkdlb0xvY2F0aW9uXFxcIiwgXFxcIkNpZHJSb3V0aW5nQ29uZmlnXFxcIl1cXG5cXG5fcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKSBpZiB7XFxuXFx0c29tZSBwIGluIF9wZl9yNTNfc2lkcF9wcm9wc1xcblxcdHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy4lc1xcXCIsIFtwXSkpICE9IG51bGxcXG59XFxuXFxuX3BmX3I1M19zaWRwX2hhc19wb2xpY3kobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuTXVsdGlWYWx1ZUFuc3dlclxcXCIpID09IHRydWVcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXNldC1pZGVudGlmaWVyLXBhaXJpbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLlNldElkZW50aWZpZXJcXFwiLFxcblxcdFxcXCJBIHJvdXRpbmcgcG9saWN5IGlzIGNvbmZpZ3VyZWQgYnV0IFNldElkZW50aWZpZXIgaXMgbWlzc2luZzsgdGhlIENoYW5nZVJlc291cmNlUmVjb3JkU2V0cyBjYWxsIGZhaWxzIHdpdGggXFxcXFxcXCJNaXNzaW5nIGZpZWxkICdTZXRJZGVudGlmaWVyJ1xcXFxcXFwiXFxcIixcXG5cXHRcXFwiQWRkIGEgU2V0SWRlbnRpZmllciB0aGF0IGlzIHVuaXF1ZSBhbW9uZyB0aGUgcmVjb3JkIHNldHMgc2hhcmluZyB0aGlzIE5hbWUgYW5kIFR5cGVcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRfcGZfcjUzX3NpZHBfaGFzX3BvbGljeShuYW1lKVxcblxcdG5vdCBpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My1zZXQtaWRlbnRpZmllci1wYWlyaW5nXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIixcXG5cXHRcXFwiU2V0SWRlbnRpZmllciBpcyBzcGVjaWZpZWQgYnV0IG5vIHJvdXRpbmcgcG9saWN5IGlzOyB0aGUgc2VydmljZSBleHBlY3RzIGV4YWN0bHkgb25lIG9mIFdlaWdodCwgUmVnaW9uLCBGYWlsb3ZlciwgR2VvTG9jYXRpb24sIE11bHRpVmFsdWVBbnN3ZXIsIG9yIENpZHJSb3V0aW5nQ29uZmlnIGFuZCBmaW5kcyBub25lXFxcIixcXG5cXHRcXFwiUmVtb3ZlIFNldElkZW50aWZpZXIgZnJvbSB0aGlzIHNpbXBsZSByZWNvcmQgc2V0LCBvciBhZGQgdGhlIHJvdXRpbmcgcG9saWN5IGl0IHdhcyBtZWFudCBmb3JcXFwiLFxcblxcdF9wZl9yNTNfc2lkcF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XFxcIilcXG5cXHRpc19zdHJpbmcocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5TZXRJZGVudGlmaWVyXFxcIikpXFxuXFx0bm90IF9wZl9yNTNfc2lkcF9oYXNfcG9saWN5KG5hbWUpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtcm91dGU1My10dGwtcmFuZ2VcIixcbiAgICBcInNlcnZpY2VcIjogXCJyb3V0ZTUzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRUTCBtdXN0IGZpdCBpbiAzMiBiaXRzICgwLi4yMTQ3NDgzNjQ3IHNlY29uZHMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcInBlbmRpbmctZW5naW5lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIE9ubHkgdGhlIG1lYXN1cmVkIGJvdW5kIGlzIGVuZm9yY2VkOiB0aGUgc2VydmljZSByZWplY3RlZCA5OTk5OTk5OTk5IHdpdGhcXG4jIFxcXCJNZW1iZXIgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyMTQ3NDgzNjQ3XFxcIi4gTmVnYXRpdmUgVFRMcyBhcmVcXG4jIHVudGVzdGVkLCBzbyB0aGV5IGFyZSBkZWxpYmVyYXRlbHkgbm90IGZsYWdnZWQuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1yb3V0ZTUzLXR0bC1yYW5nZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVFRMXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUVEwgbXVzdCBiZSBhdCBtb3N0IDIxNDc0ODM2NDcgc2Vjb25kcywgZ290ICV2XFxcIiwgW25dKSxcXG5cXHRcXFwiU2V0IFRUTCB0byBhIDMyLWJpdCB2YWx1ZTsgYW55dGhpbmcgYWJvdmUgYSBkYXkgcmFyZWx5IGhlbHBzIGNhY2hpbmcgYW55d2F5XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL1JvdXRlNTMvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0dCA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlRUTFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIodClcXG5cXHRuID4gMjE0NzQ4MzY0N1xcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJXZWlnaHQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJwZW5kaW5nLWVuZ2luZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6Um91dGU1Mzo6UmVjb3JkU2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBPbmx5IHRoZSBtZWFzdXJlZCBib3VuZCBpcyBlbmZvcmNlZDogdGhlIHNlcnZpY2UgcmVqZWN0ZWQgMzAwIHdpdGggXFxcIk1lbWJlclxcbiMgbXVzdCBoYXZlIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyNTVcXFwiLiBOZWdhdGl2ZSB3ZWlnaHRzIGFyZSB1bnRlc3RlZCxcXG4jIHNvIHRoZXkgYXJlIGRlbGliZXJhdGVseSBub3QgZmxhZ2dlZC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXJvdXRlNTMtd2VpZ2h0LXJhbmdlXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiLFxcblxcdHNwcmludGYoXFxcIldlaWdodCBtdXN0IGJlIGF0IG1vc3QgMjU1LCBnb3QgJXZcXFwiLCBbbl0pLFxcblxcdFxcXCJTZXQgV2VpZ2h0IHRvIGEgdmFsdWUgaW4gWzAsIDI1NV07IHdlaWdodHMgYXJlIHJlbGF0aXZlLCBzbyBzY2FsZSB0aGUgZ3JvdXAgZG93biBwcm9wb3J0aW9uYWxseVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9Sb3V0ZTUzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NoYW5nZVJlc291cmNlUmVjb3JkU2V0cy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpSb3V0ZTUzOjpSZWNvcmRTZXRcXFwiKVxcblxcdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5XZWlnaHRcXFwiKVxcblxcdG4gOj0gdG9fbnVtYmVyKHcpXFxuXFx0biA+IDI1NVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXJvdXRlNTMtem9uZW5hbWUtdHJhaWxpbmctZG90XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwicm91dGU1M1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJIb3N0ZWRab25lTmFtZSBtdXN0IGVuZCB3aXRoIGEgdHJhaWxpbmcgZG90XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQ2xvdWRGb3JtYXRpb24gbG9va3MgdGhlIHpvbmUgdXAgYnkgdGhlIGxpdGVyYWwgSG9zdGVkWm9uZU5hbWUgYW5kIGRvZXMgbm90XFxuIyBub3JtYWxpemUgdGhlIHRyYWlsaW5nIGRvdDogdGhlIHNhbWUgc3RhY2sgZGVwbG95ZWQgY2xlYW4gd2l0aFxcbiMgXFxcInpvbmUuZXhhbXBsZS5cXFwiIGFuZCBmYWlsZWQgd2l0aCBOb3RGb3VuZCBmb3IgXFxcInpvbmUuZXhhbXBsZVxcXCIgKDIwMjYtMDktMDIpLlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtcm91dGU1My16b25lbmFtZS10cmFpbGluZy1kb3RcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkhvc3RlZFpvbmVOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJIb3N0ZWRab25lTmFtZSAnJXMnIGlzIG1pc3NpbmcgdGhlIHRyYWlsaW5nIGRvdCwgc28gQ2xvdWRGb3JtYXRpb24gZmFpbHMgdGhlIGxvb2t1cCB3aXRoIFxcXFxcXFwiTm8gaG9zdGVkIHpvbmUgd2l0aCBuYW1lIC4uLiBmb3VuZFxcXFxcXFwiXFxcIiwgW3puXSksXFxuXFx0c3ByaW50ZihcXFwiVXNlICclcy4nICh3aXRoIHRoZSB0cmFpbGluZyBkb3QpXFxcIiwgW3puXSksXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXJlc291cmNlLXJvdXRlNTMtcmVjb3Jkc2V0Lmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlJvdXRlNTM6OlJlY29yZFNldFxcXCIpXFxuXFx0em4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ib3N0ZWRab25lTmFtZVxcXCIpXFxuXFx0aXNfc3RyaW5nKHpuKVxcblxcdHpuICE9IFxcXCJcXFwiXFxuXFx0bm90IGVuZHN3aXRoKHpuLCBcXFwiLlxcXCIpXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRyYW5zZmVyIEFjY2VsZXJhdGlvbiByZWplY3RzIGJ1Y2tldCBuYW1lcyB3aXRoIHBlcmlvZHNcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgVHJhbnNmZXIgQWNjZWxlcmF0aW9uIGVuZHBvaW50cyBhcmUgRE5TLWJhc2VkLCBzbyBidWNrZXQgbmFtZXMgY29udGFpbmluZ1xcbiMgcGVyaW9kcyBhcmUgcmVqZWN0ZWQgYXQgY3JlYXRpb24uIE9ubHkgYSBsaXRlcmFsIEJ1Y2tldE5hbWUgaXMgY2hlY2thYmxlO1xcbiMgQ0RLLWdlbmVyYXRlZCBuYW1lcyBuZXZlciBjb250YWluIHBlcmlvZHMgYW55d2F5LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYWNjZWxlcmF0ZS1kb3R0ZWQtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb24uQWNjZWxlcmF0aW9uU3RhdHVzXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJCdWNrZXQgbmFtZSAnJXMnIGNvbnRhaW5zIHBlcmlvZHMsIHdoaWNoIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBkb2VzIG5vdCBzdXBwb3J0OyBDcmVhdGVCdWNrZXQgZmFpbHMgd2l0aCBcXFxcXFxcIlMzIFRyYW5zZmVyIEFjY2VsZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBidWNrZXRzIHdpdGggcGVyaW9kcyAoLikgaW4gdGhlaXIgbmFtZXNcXFxcXFxcIlxcXCIsIFtibl0pLFxcblxcdFxcXCJSZW5hbWUgdGhlIGJ1Y2tldCB3aXRob3V0IHBlcmlvZHMsIG9yIGRyb3AgQWNjZWxlcmF0ZUNvbmZpZ3VyYXRpb25cXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS90cmFuc2Zlci1hY2NlbGVyYXRpb24uaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5BY2NlbGVyYXRlQ29uZmlndXJhdGlvbi5BY2NlbGVyYXRpb25TdGF0dXNcXFwiKSA9PSBcXFwiRW5hYmxlZFxcXCJcXG5cXHRibiA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkJ1Y2tldE5hbWVcXFwiKVxcblxcdGlzX3N0cmluZyhibilcXG5cXHRjb250YWlucyhibiwgXFxcIi5cXFwiKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktYWN0aW9uLXJlc291cmNlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0LWxldmVsIGFjdGlvbnMgbmVlZCBhbiBvYmplY3QtbGV2ZWwgUmVzb3VyY2VcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgQW4gb2JqZWN0LWxldmVsIGFjdGlvbiB3aG9zZSBzdGF0ZW1lbnQgbGlzdHMgb25seSBidWNrZXQtbGV2ZWwgQVJOcyBhcHBsaWVzXFxuIyB0byBub3RoaW5nLCBhbmQgUzMgcmVqZWN0cyB0aGUgcG9saWN5LiBBIGJ1Y2tldC1sZXZlbCBBUk4gaXMgcHJvdmFibGUgdHdvXFxuIyB3YXlzOiBhIGxpdGVyYWwgYXJuOi4uLjpzMzo6Om5hbWUgd2l0aCBubyBcXFwiL1xcXCIgaW4gdGhlIG5hbWUgcGFydCwgb3IgYSB2YWx1ZVxcbiMgdGhhdCByZXNvbHZlKCkgdHVybnMgaW50byB0aGUgbG9naWNhbCBJRCBvZiBhbiBpbi10ZW1wbGF0ZSBidWNrZXQgKFJlZiBhbmRcXG4jIEZuOjpHZXRBdHQgQXJuIGJvdGggZG8g4oCUIHRoZSBHZXRBdHQgb2YgYSBidWNrZXQgaXMgaXRzIGJ1Y2tldCBBUk4pLiBGaXJlc1xcbiMgb25seSB3aGVuIGV2ZXJ5IHJlc291cmNlIGluIHRoZSBzdGF0ZW1lbnQgaXMgcHJvdmFibHkgYnVja2V0LWxldmVsLCBzb1xcbiMgdW5yZXNvbHZhYmxlIGVudHJpZXMgKGUuZy4gRm46OlN1YiBcXFwiJHtCLkFybn0vKlxcXCIpIG11dGUgdGhlIHN0YXRlbWVudC5cXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgc3RhcnRzd2l0aChsb3dlcihhKSwgXFxcInMzOmdldG9iamVjdFxcXCIpXFxuXFxuX3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpIGlmIHN0YXJ0c3dpdGgobG93ZXIoYSksIFxcXCJzMzpwdXRvYmplY3RcXFwiKVxcblxcbl9wZl9zM2JwYXJfb2JqZWN0X2FjdGlvbihhKSBpZiBzdGFydHN3aXRoKGxvd2VyKGEpLCBcXFwiczM6ZGVsZXRlb2JqZWN0XFxcIilcXG5cXG5fcGZfczNicGFyX29iamVjdF9hY3Rpb24oYSkgaWYgbG93ZXIoYSkgaW4ge1xcXCJzMzphYm9ydG11bHRpcGFydHVwbG9hZFxcXCIsIFxcXCJzMzpyZXN0b3Jlb2JqZWN0XFxcIiwgXFxcInMzOmxpc3RtdWx0aXBhcnR1cGxvYWRwYXJ0c1xcXCJ9XFxuXFxuX3BmX3MzYnBhcl9idWNrZXRfbGV2ZWwocikgaWYgciBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXG5fcGZfczNicGFyX2J1Y2tldF9sZXZlbChyKSBpZiB7XFxuXFx0c3RhcnRzd2l0aChyLCBcXFwiYXJuOlxcXCIpXFxuXFx0Y29udGFpbnMociwgXFxcIjpzMzo6OlxcXCIpXFxuXFx0cGFydHMgOj0gc3BsaXQociwgXFxcIjo6OlxcXCIpXFxuXFx0Y291bnQocGFydHMpID09IDJcXG5cXHRub3QgY29udGFpbnMocGFydHNbMV0sIFxcXCIvXFxcIilcXG59XFxuXFxuX3BmX3MzYnBhcl9hY3Rpb25zKG5hbWUsIGkpIDo9IFthXSBpZiB7XFxuXFx0YSA6PSByZXNvbHZlKG5hbWUsIHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLkFjdGlvblxcXCIsIFtpXSkpXFxuXFx0aXNfc3RyaW5nKGEpXFxufVxcblxcbl9wZl9zM2JwYXJfYWN0aW9ucyhuYW1lLCBpKSA6PSBhY3RzIGlmIHtcXG5cXHRpdGVtcyA6PSBbaXQgfCBzb21lIGl0IGluIGZsYXR0ZW5fbGlzdChuYW1lLCBzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZC5BY3Rpb25cXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0YWN0cyA6PSBbdiB8IHNvbWUgaXQgaW4gaXRlbXM7IHYgOj0gaXQudmFsdWU7IGlzX3N0cmluZyh2KV1cXG59XFxuXFxuX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgaSkgOj0gW3JdIGlmIHtcXG5cXHRyIDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKVxcblxcdGlzX3N0cmluZyhyKVxcbn1cXG5cXG5fcGZfczNicGFyX3Jlc291cmNlcyhuYW1lLCBpKSA6PSBycyBpZiB7XFxuXFx0aXRlbXMgOj0gW2l0IHwgc29tZSBpdCBpbiBmbGF0dGVuX2xpc3QobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2VcXFwiLCBbaV0pKV1cXG5cXHRjb3VudChpdGVtcykgPiAwXFxuXFx0cnMgOj0gW3YgfCBzb21lIGl0IGluIGl0ZW1zOyB2IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuJWQuUmVzb3VyY2UuJWRcXFwiLCBbaSwgaXQuaW5kZXhdKSk7IGlzX3N0cmluZyh2KV1cXG5cXHRjb3VudChycykgPT0gY291bnQoaXRlbXMpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtYnVja2V0LXBvbGljeS1hY3Rpb24tcmVzb3VyY2VcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LiVkLlJlc291cmNlXFxcIiwgW3N0LmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiQWN0aW9uICclcycgdGFyZ2V0cyBvYmplY3RzIGJ1dCB0aGUgc3RhdGVtZW50J3MgcmVzb3VyY2VzIGFyZSBhbGwgYnVja2V0LWxldmVsIEFSTnM7IFMzIHJlamVjdHMgdGhlIHBvbGljeSB3aXRoIFxcXFxcXFwiQWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIGFueSByZXNvdXJjZShzKSBpbiBzdGF0ZW1lbnRcXFxcXFxcIlxcXCIsIFthXSksXFxuXFx0XFxcIkFkZCB0aGUgb2JqZWN0IGZvcm0gb2YgdGhlIEFSTiAoYXBwZW5kIC8qIG9yIGEga2V5IHBhdHRlcm4pIHRvIFJlc291cmNlLCBvciBkcm9wIHRoZSBvYmplY3QtbGV2ZWwgYWN0aW9uXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdHNvbWUgYSBpbiBfcGZfczNicGFyX2FjdGlvbnMobmFtZSwgc3QuaW5kZXgpXFxuXFx0X3BmX3MzYnBhcl9vYmplY3RfYWN0aW9uKGEpXFxuXFx0cnMgOj0gX3BmX3MzYnBhcl9yZXNvdXJjZXMobmFtZSwgc3QuaW5kZXgpXFxuXFx0Y291bnQocnMpID4gMFxcblxcdGV2ZXJ5IHIgaW4gcnMge1xcblxcdFxcdF9wZl9zM2JwYXJfYnVja2V0X2xldmVsKHIpXFxuXFx0fVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzIG5lZWQgYSBQcmluY2lwYWxcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFBvbGljeVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgUmVzb3VyY2UtYmFzZWQgcG9saWNpZXMgcmVxdWlyZSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgaW4gZXZlcnlcXG4jIHN0YXRlbWVudCDigJQgdW5saWtlIGlkZW50aXR5IHBvbGljaWVzLCB3aGVyZSBjZm4tbGludC1ncmFkZSBjaGVja3MgYXJlXFxuIyB0dW5lZC4gQW4gdW5yZXNvbHZhYmxlIFByaW5jaXBhbCB2YWx1ZSBzdGlsbCBjb3VudHMgYXMgcHJlc2VudC5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXMzLWJ1Y2tldC1wb2xpY3ktcHJpbmNpcGFsXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudC4lZFxcXCIsIFtzdC5pbmRleF0pLFxcblxcdFxcXCJUaGUgc3RhdGVtZW50IGhhcyBuZWl0aGVyIFByaW5jaXBhbCBub3IgTm90UHJpbmNpcGFsOyBTMyByZWplY3RzIHRoZSBwb2xpY3kgd2l0aCBcXFxcXFxcIk1pc3NpbmcgcmVxdWlyZWQgZmllbGQgUHJpbmNpcGFsXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYSBQcmluY2lwYWwgKG9yIE5vdFByaW5jaXBhbCkgdG8gdGhlIHN0YXRlbWVudCDigJQgYnVja2V0IHBvbGljaWVzIGFsd2F5cyBuYW1lIHdobyB0aGV5IGFwcGx5IHRvXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvYnVja2V0LXBvbGljaWVzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRQb2xpY3lcXFwiKVxcblxcdHNvbWUgc3QgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlBvbGljeURvY3VtZW50LlN0YXRlbWVudFxcXCIpXFxuXFx0aXNfb2JqZWN0KHN0LnZhbHVlKVxcblxcdG9iamVjdC5nZXQoc3QudmFsdWUsIFxcXCJQcmluY2lwYWxcXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxuXFx0b2JqZWN0LmdldChzdC52YWx1ZSwgXFxcIk5vdFByaW5jaXBhbFxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkxpZmVjeWNsZSBhcmNoaXZlIHRyYW5zaXRpb25zIG11c3QgY29tZSAzMCsgZGF5cyBhZnRlciBJQSwgYW5kIGV4cGlyYXRpb24gYWZ0ZXIgZXZlcnkgdHJhbnNpdGlvblwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuX3BmX3Mzb3JkX2ZpeCA6PSBcXFwiT3JkZXIgdGhlIGxpZmVjeWNsZSBkYXlzIHNvIGFyY2hpdmUgdHJhbnNpdGlvbnMgY29tZSBhdCBsZWFzdCAzMCBkYXlzIGFmdGVyIElBIHRyYW5zaXRpb25zIGFuZCBleHBpcmF0aW9uIGNvbWVzIGFmdGVyIGV2ZXJ5IHRyYW5zaXRpb25cXFwiXFxuXFxuX3BmX3Mzb3JkX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvbGlmZWN5Y2xlLXRyYW5zaXRpb24tZ2VuZXJhbC1jb25zaWRlcmF0aW9ucy5odG1sXFxcIlxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLWRheXMtb3JkZXJcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlcy4lZC5UcmFuc2l0aW9uc1xcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiVHJhbnNpdGlvbiB0byAlcyBhdCAldiBkYXlzIGlzIGxlc3MgdGhhbiAzMCBkYXlzIGFmdGVyIHRoZSAlcyB0cmFuc2l0aW9uIGF0ICV2IGRheXM7IFMzIHJlcXVpcmVzIG9iamVjdHMgdG8gc3RheSBhdCBsZWFzdCAzMCBkYXlzIGluIElBIHN0b3JhZ2VcXFwiLCBbc2MyLCBkMiwgc2MxLCBkMV0pLFxcblxcdF9wZl9zM29yZF9maXgsIF9wZl9zM29yZF91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdDEgaW4gdHJhbnNcXG5cXHRpc19vYmplY3QodDEpXFxuXFx0c2MxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJTdG9yYWdlQ2xhc3NcXFwiLCBcXFwiXFxcIilcXG5cXHRzYzEgaW4ge1xcXCJTVEFOREFSRF9JQVxcXCIsIFxcXCJPTkVaT05FX0lBXFxcIn1cXG5cXHRyYXcxIDo9IG9iamVjdC5nZXQodDEsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcxICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZDEgOj0gdG9fbnVtYmVyKHJhdzEpXFxuXFx0c29tZSB0MiBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0MilcXG5cXHRzYzIgOj0gb2JqZWN0LmdldCh0MiwgXFxcIlN0b3JhZ2VDbGFzc1xcXCIsIFxcXCJcXFwiKVxcblxcdHNjMiBpbiB7XFxcIkdMQUNJRVJcXFwiLCBcXFwiREVFUF9BUkNISVZFXFxcIn1cXG5cXHRyYXcyIDo9IG9iamVjdC5nZXQodDIsIFxcXCJUcmFuc2l0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXcyICE9IG51bGxcXG5cXHRkMiA6PSB0b19udW1iZXIocmF3MilcXG5cXHRkMiA8IGQxICsgMzBcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZGF5cy1vcmRlclxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgKCV2KSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBUcmFuc2l0aW9uSW5EYXlzICgldik7IFMzIHJlamVjdHMgbGlmZWN5Y2xlIHJ1bGVzIHRoYXQgZXhwaXJlIG9iamVjdHMgYmVmb3JlIG9yIHdoZW4gdGhleSB0cmFuc2l0aW9uXFxcIiwgW2UsIGRdKSxcXG5cXHRfcGZfczNvcmRfZml4LCBfcGZfczNvcmRfdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTGlmZWN5Y2xlQ29uZmlndXJhdGlvbi5SdWxlc1xcXCIpXFxuXFx0aXNfb2JqZWN0KHIudmFsdWUpXFxuXFx0cmF3ZSA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIiwgbnVsbClcXG5cXHRyYXdlICE9IG51bGwgIyB0b19udW1iZXIobnVsbCkg44GvIDAg44Gr44Gq44KLXFxuXFx0ZSA6PSB0b19udW1iZXIocmF3ZSlcXG5cXHR0cmFucyA6PSBvYmplY3QuZ2V0KHIudmFsdWUsIFxcXCJUcmFuc2l0aW9uc1xcXCIsIFtdKVxcblxcdGlzX2FycmF5KHRyYW5zKVxcblxcdHNvbWUgdCBpbiB0cmFuc1xcblxcdGlzX29iamVjdCh0KVxcblxcdHJhd2QgOj0gb2JqZWN0LmdldCh0LCBcXFwiVHJhbnNpdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ZCAhPSBudWxsXFxuXFx0ZCA6PSB0b19udW1iZXIocmF3ZClcXG5cXHRlIDw9IGRcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkV4cGlyYXRpb25JbkRheXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIixcbiAgICBcInVwc3RyZWFtXCI6IFwicGVuZGluZy1lbmdpbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSByZWdpc3RyeSBzY2hlbWEgdHlwZXMgRXhwaXJhdGlvbkluRGF5cyBhcyBhIGJhcmUgaW50ZWdlciB3aXRoIG5vXFxuIyBtaW5pbXVtLCBzbyAwIGFuZCBuZWdhdGl2ZXMgcmVhY2ggdGhlIHNlcnZpY2UuIE9ubHkgdGhlIEV4cGlyYXRpb24gYWN0aW9uXFxuIyB3YXMgYmVuY2gtdmVyaWZpZWQ7IG90aGVyIGRheSBmaWVsZHMgYXJlIGxlZnQgYWxvbmUuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1saWZlY3ljbGUtZXhwaXJhdGlvbi1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0c3ByaW50ZihcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzLiVkLkV4cGlyYXRpb25JbkRheXNcXFwiLCBbci5pbmRleF0pLFxcblxcdHNwcmludGYoXFxcIkV4cGlyYXRpb25JbkRheXMgaXMgJXY7IFMzIHJlamVjdHMgdGhlIHJ1bGUgd2l0aCBcXFxcXFxcIidEYXlzJyBmb3IgRXhwaXJhdGlvbiBhY3Rpb24gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcXFxcXFxcIlxcXCIsIFtkXSksXFxuXFx0XFxcIlVzZSBhbiBFeHBpcmF0aW9uSW5EYXlzIG9mIDEgb3IgbW9yZVxcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXJ1bGUuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0c29tZSByIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5MaWZlY3ljbGVDb25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRpc19vYmplY3Qoci52YWx1ZSlcXG5cXHRyYXcgOj0gb2JqZWN0LmdldChyLnZhbHVlLCBcXFwiRXhwaXJhdGlvbkluRGF5c1xcXCIsIG51bGwpXFxuXFx0cmF3ICE9IG51bGxcXG5cXHRkIDo9IHRvX251bWJlcihyYXcpXFxuXFx0ZCA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiQSBsaWZlY3ljbGUgcnVsZSBuZWVkcyBhdCBsZWFzdCBvbmUgYWN0aW9uXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSB0ZW4gYWN0aW9uIGZpZWxkcywgdmVyYmF0aW0gZnJvbSB0aGUgc2VydmljZSBlcnJvci4gQSBmaWVsZCB3aG9zZSB2YWx1ZVxcbiMgaXMgYW4gdW5yZXNvbHZhYmxlIGludHJpbnNpYyBzdGlsbCBjb3VudHMgYXMgcHJlc2VudCAoZmFpbCBjbG9zZWQpLlxcbl9wZl9zM2xuYV9hY3Rpb25zIDo9IHtcXG5cXHRcXFwiQWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkXFxcIixcXG5cXHRcXFwiRXhwaXJhdGlvbkRhdGVcXFwiLFxcblxcdFxcXCJFeHBpcmF0aW9uSW5EYXlzXFxcIixcXG5cXHRcXFwiRXhwaXJlZE9iamVjdERlbGV0ZU1hcmtlclxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uRXhwaXJhdGlvbkluRGF5c1xcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvblxcXCIsXFxuXFx0XFxcIk5vbmN1cnJlbnRWZXJzaW9uVHJhbnNpdGlvbnNcXFwiLFxcblxcdFxcXCJUcmFuc2l0aW9uXFxcIixcXG5cXHRcXFwiVHJhbnNpdGlvbnNcXFwiLFxcbn1cXG5cXG5fcGZfczNsbmFfaGFzX2FjdGlvbihydWxlKSBpZiB7XFxuXFx0c29tZSBrIGluIF9wZl9zM2xuYV9hY3Rpb25zXFxuXFx0b2JqZWN0LmdldChydWxlLCBrLCBcXFwiX19wZl9hYnNlbnRcXFwiKSAhPSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtbGlmZWN5Y2xlLXJ1bGUtbm8tYWN0aW9uXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRzcHJpbnRmKFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXMuJWRcXFwiLCBbci5pbmRleF0pLFxcblxcdFxcXCJUaGUgbGlmZWN5Y2xlIHJ1bGUgc3BlY2lmaWVzIG5vIGFjdGlvbjsgUzMgcmVqZWN0cyBpdCB3aXRoIFxcXFxcXFwiQXQgbGVhc3Qgb25lIG9mIFtFeHBpcmF0aW9uRGF0ZSxFeHBpcmF0aW9uSW5EYXlzLEFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZCxUcmFuc2l0aW9uLC4uLl0gbmVlZHMgdG8gYmUgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLFxcblxcdFxcXCJBZGQgYW4gZXhwaXJhdGlvbiwgdHJhbnNpdGlvbiwgb3IgYWJvcnQtaW5jb21wbGV0ZS1tdWx0aXBhcnQtdXBsb2FkIGFjdGlvbiB0byB0aGUgcnVsZSwgb3IgcmVtb3ZlIHRoZSBydWxlXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1zMy1idWNrZXQtcnVsZS5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRzb21lIHIgaW4gZmxhdHRlbl9saXN0KG5hbWUsIFxcXCJQcm9wZXJ0aWVzLkxpZmVjeWNsZUNvbmZpZ3VyYXRpb24uUnVsZXNcXFwiKVxcblxcdGlzX29iamVjdChyLnZhbHVlKVxcblxcdG5vdCBfcGZfczNsbmFfaGFzX2FjdGlvbihyLnZhbHVlKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLW5vdGlmaWNhdGlvbi1vdmVybGFwcGluZy1maWx0ZXJzXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiTm90aWZpY2F0aW9uIGVudHJpZXMgbXVzdCBub3Qgb3ZlcmxhcCBmb3IgdGhlIHNhbWUgZXZlbnQgdHlwZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBTMyBrZWVwcyBvbmUgbm90aWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24gcGVyIGJ1Y2tldCBhbmQgcmVqZWN0cyBpdCB3aGVuIHR3b1xcbiMgZW50cmllcyAoYWNyb3NzIHF1ZXVlL3RvcGljL2xhbWJkYSBhbGlrZSkgY291bGQgbWF0Y2ggdGhlIHNhbWUgb2JqZWN0IGV2ZW50OlxcbiMgb3ZlcmxhcHBpbmcgZXZlbnQgdHlwZXMgQU5EIG92ZXJsYXBwaW5nIHByZWZpeGVzIEFORCBvdmVybGFwcGluZyBzdWZmaXhlcy5cXG4jIEEgbWlzc2luZyBmaWx0ZXIgc2lkZSBtZWFucyBcXFwiXFxcIiBhbmQgb3ZlcmxhcHMgZXZlcnl0aGluZy4gUGFpcnMgd2l0aCBhblxcbiMgdW5yZXNvbHZhYmxlIGV2ZW50IG9yIGZpbHRlciB2YWx1ZSBhcmUgc2tpcHBlZCDigJQgb3ZlcmxhcCBjYW5ub3QgYmUgcHJvdmVuLlxcblxcbl9wZl9zM25vX2NvbmZpZ3MobmFtZSkgOj0gYXJyYXkuY29uY2F0KGFycmF5LmNvbmNhdChcXG5cXHRbYyB8IHNvbWUgYyBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbi5RdWV1ZUNvbmZpZ3VyYXRpb25zXFxcIildLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLlRvcGljQ29uZmlndXJhdGlvbnNcXFwiKV0pLFxcblxcdFtjIHwgc29tZSBjIGluIGZsYXR0ZW5fbGlzdChuYW1lLCBcXFwiUHJvcGVydGllcy5Ob3RpZmljYXRpb25Db25maWd1cmF0aW9uLkxhbWJkYUNvbmZpZ3VyYXRpb25zXFxcIildKVxcblxcbl9wZl9zM25vX3J1bGVzKGMpIDo9IHJ1bGVzIGlmIHtcXG5cXHRmIDo9IG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGYpXFxuXFx0ayA6PSBvYmplY3QuZ2V0KGYsIFxcXCJTM0tleVxcXCIsIG51bGwpXFxuXFx0aXNfb2JqZWN0KGspXFxuXFx0cnVsZXMgOj0gb2JqZWN0LmdldChrLCBcXFwiUnVsZXNcXFwiLCBbXSlcXG5cXHRpc19hcnJheShydWxlcylcXG59XFxuXFxuX3BmX3Mzbm9fcnVsZXMoYykgOj0gW10gaWYge1xcblxcdG9iamVjdC5nZXQoYywgXFxcIkZpbHRlclxcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpID09IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSB2IGlmIHtcXG5cXHR2cyA6PSBbeCB8IHNvbWUgciBpbiBfcGZfczNub19ydWxlcyhjKTsgaXNfb2JqZWN0KHIpOyBsb3dlcihvYmplY3QuZ2V0KHIsIFxcXCJOYW1lXFxcIiwgXFxcIlxcXCIpKSA9PSBraW5kOyB4IDo9IG9iamVjdC5nZXQociwgXFxcIlZhbHVlXFxcIiwgbnVsbCldXFxuXFx0Y291bnQodnMpID4gMFxcblxcdHYgOj0gdnNbMF1cXG59XFxuXFxuX3BmX3Mzbm9fZmlsdGVyX3ZhbChjLCBraW5kKSA6PSBcXFwiXFxcIiBpZiB7XFxuXFx0dnMgOj0gW3ggfCBzb21lIHIgaW4gX3BmX3Mzbm9fcnVsZXMoYyk7IGlzX29iamVjdChyKTsgbG93ZXIob2JqZWN0LmdldChyLCBcXFwiTmFtZVxcXCIsIFxcXCJcXFwiKSkgPT0ga2luZDsgeCA6PSBvYmplY3QuZ2V0KHIsIFxcXCJWYWx1ZVxcXCIsIG51bGwpXVxcblxcdGNvdW50KHZzKSA9PSAwXFxufVxcblxcbl9wZl9zM25vX3ByZV9vdmVybGFwKGEsIGIpIGlmIHN0YXJ0c3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19wcmVfb3ZlcmxhcChhLCBiKSBpZiBzdGFydHN3aXRoKGIsIGEpXFxuXFxuX3BmX3Mzbm9fc3VmX292ZXJsYXAoYSwgYikgaWYgZW5kc3dpdGgoYSwgYilcXG5cXG5fcGZfczNub19zdWZfb3ZlcmxhcChhLCBiKSBpZiBlbmRzd2l0aChiLCBhKVxcblxcbiMgXFxcInMzOk9iamVjdENyZWF0ZWQ6KlxcXCIgY292ZXJzIFxcXCJzMzpPYmplY3RDcmVhdGVkOlB1dFxcXCI7IGRyb3AgdGhlIHRyYWlsaW5nIFxcXCIqXFxcIlxcbiMgYW5kIHByZWZpeC1tYXRjaC5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYgZTEgPT0gZTJcXG5cXG5fcGZfczNub19ldmVudF9vdmVybGFwKGUxLCBlMikgaWYge1xcblxcdGVuZHN3aXRoKGUxLCBcXFwiOipcXFwiKVxcblxcdHN0YXJ0c3dpdGgoZTIsIHN1YnN0cmluZyhlMSwgMCwgY291bnQoZTEpIC0gMSkpXFxufVxcblxcbl9wZl9zM25vX2V2ZW50X292ZXJsYXAoZTEsIGUyKSBpZiB7XFxuXFx0ZW5kc3dpdGgoZTIsIFxcXCI6KlxcXCIpXFxuXFx0c3RhcnRzd2l0aChlMSwgc3Vic3RyaW5nKGUyLCAwLCBjb3VudChlMikgLSAxKSlcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1ub3RpZmljYXRpb24tb3ZlcmxhcHBpbmctZmlsdGVyc1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvblxcXCIsXFxuXFx0c3ByaW50ZihcXFwiVHdvIG5vdGlmaWNhdGlvbiBlbnRyaWVzIGZvciBvdmVybGFwcGluZyBldmVudCB0eXBlcyAoJyVzJyBhbmQgJyVzJykgaGF2ZSBvdmVybGFwcGluZyBwcmVmaXgvc3VmZml4IGZpbHRlcnM7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkNvbmZpZ3VyYXRpb24gaXMgYW1iaWd1b3VzbHkgZGVmaW5lZC4gQ2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcgc3VmZml4ZXMgaW4gdHdvIHJ1bGVzIGlmIHRoZSBwcmVmaXhlcyBhcmUgb3ZlcmxhcHBpbmcgZm9yIHRoZSBzYW1lIGV2ZW50IHR5cGUuXFxcXFxcXCJcXFwiLCBbZTEsIGUyXSksXFxuXFx0XFxcIk1ha2UgdGhlIHByZWZpeGVzIG9yIHN1ZmZpeGVzIGRpc2pvaW50LCBvciBtZXJnZSB0aGUgdHdvIGVudHJpZXMgaW50byBvbmVcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9ub3RpZmljYXRpb24taG93LXRvLWZpbHRlcmluZy5odG1sXFxcIikgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTMzo6QnVja2V0XFxcIilcXG5cXHRjcyA6PSBfcGZfczNub19jb25maWdzKG5hbWUpXFxuXFx0c29tZSBpLCBhIGluIGNzXFxuXFx0c29tZSBqLCBiIGluIGNzXFxuXFx0aSA8IGpcXG5cXHRlMSA6PSBvYmplY3QuZ2V0KGEudmFsdWUsIFxcXCJFdmVudFxcXCIsIG51bGwpXFxuXFx0aXNfc3RyaW5nKGUxKVxcblxcdGUyIDo9IG9iamVjdC5nZXQoYi52YWx1ZSwgXFxcIkV2ZW50XFxcIiwgbnVsbClcXG5cXHRpc19zdHJpbmcoZTIpXFxuXFx0X3BmX3Mzbm9fZXZlbnRfb3ZlcmxhcChlMSwgZTIpXFxuXFx0cDEgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChhLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDEpXFxuXFx0cDIgOj0gX3BmX3Mzbm9fZmlsdGVyX3ZhbChiLnZhbHVlLCBcXFwicHJlZml4XFxcIilcXG5cXHRpc19zdHJpbmcocDIpXFxuXFx0X3BmX3Mzbm9fcHJlX292ZXJsYXAocDEsIHAyKVxcblxcdHMxIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYS52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMxKVxcblxcdHMyIDo9IF9wZl9zM25vX2ZpbHRlcl92YWwoYi52YWx1ZSwgXFxcInN1ZmZpeFxcXCIpXFxuXFx0aXNfc3RyaW5nKHMyKVxcblxcdF9wZl9zM25vX3N1Zl9vdmVybGFwKHMxLCBzMilcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJPYmplY3RMb2NrQ29uZmlndXJhdGlvbiBuZWVkcyB2ZXJzaW9uaW5nIGVuYWJsZWRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gb24gaXRzIG93biBkb2VzIE5PVCByZXF1aXJlIE9iamVjdExvY2tFbmFibGVkIOKAlFxcbiMgUzMgYWNjZXB0cyBPYmplY3QgTG9jayBvbiBhbiBleGlzdGluZyB2ZXJzaW9uZWQgYnVja2V0IChiZW5jaCBzMDViIGRlcGxveWVkXFxuIyBjbGVhbikuIFdoYXQgaXQgZG9lcyByZXF1aXJlIGlzIHZlcnNpb25pbmcuIFdoZW4gT2JqZWN0TG9ja0VuYWJsZWQgaXMgdHJ1ZVxcbiMgdGhlIGJ1Y2tldCBpcyBjcmVhdGVkIGxvY2stZW5hYmxlZCBhbmQgdmVyc2lvbmluZyBjb21lcyB3aXRoIGl0LCBzbyB0aGUgcnVsZVxcbiMgZmlyZXMgb25seSB3aGVuIGxvY2stZW5hYmxlbWVudCBpcyBwcm92YWJseSBvZmYgKGtleSBsaXRlcmFsbHkgYWJzZW50IG9yXFxuIyBsaXRlcmFsIGZhbHNlKSBhbmQgdmVyc2lvbmluZyBpcyBwcm92YWJseSBub3QgZW5hYmxlZC5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIk9iamVjdExvY2tFbmFibGVkXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKSBpZiB7XFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSBmYWxzZVxcbn1cXG5cXG5fcGZfczNvbHJ2X2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRwcm9wcyA6PSBpbnB1dC5yZXNvdXJjZXNbbmFtZV0ucHJvcGVydGllc1xcblxcdGlzX29iamVjdChwcm9wcylcXG5cXHRvYmplY3QuZ2V0KHByb3BzLCBcXFwiVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb25cXFwiLCBcXFwiX19wZl9hYnNlbnRcXFwiKSA9PSBcXFwiX19wZl9hYnNlbnRcXFwiXFxufVxcblxcbl9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSkgaWYge1xcblxcdHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXJlcXVpcmVzLXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLk9iamVjdExvY2tDb25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb24gaXMgc2V0IG9uIGEgYnVja2V0IHdob3NlIHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgaXQgd2l0aCBcXFxcXFxcIlZlcnNpb25pbmcgbXVzdCBiZSAnRW5hYmxlZCcgb24gdGhlIGJ1Y2tldCB0byBhcHBseSBhIE9iamVjdCBMb2NrIGNvbmZpZ3VyYXRpb25cXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXMgdG8gJ0VuYWJsZWQnLCBvciBzZXQgT2JqZWN0TG9ja0VuYWJsZWQ6IHRydWUgdG8gY3JlYXRlIHRoZSBidWNrZXQgbG9jay1lbmFibGVkXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuT2JqZWN0TG9ja0NvbmZpZ3VyYXRpb25cXFwiKSlcXG5cXHRfcGZfczNvbHJ2X25vX2xvY2tfZW5hYmxlZChuYW1lKVxcblxcdF9wZl9zM29scnZfYmFkX3ZlcnNpb25pbmcobmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiT2JqZWN0IExvY2sgZm9yYmlkcyBzdXNwZW5kaW5nIHZlcnNpb25pbmdcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6UzM6OkJ1Y2tldFwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbiMgT2JqZWN0IExvY2sgZm9yY2UtZW5hYmxlcyB2ZXJzaW9uaW5nIGF0IGNyZWF0aW9uLCBzbyBhIHRlbXBsYXRlIHRoYXQgYWxzb1xcbiMgc3VzcGVuZHMgdmVyc2lvbmluZyBjb250cmFkaWN0cyBpdHNlbGYgYW5kIHRoZSBoYW5kbGVyJ3MgUHV0QnVja2V0VmVyc2lvbmluZ1xcbiMgY2FsbCBpcyByZWplY3RlZC4gRmlyZXMgb25seSBvbiBhIGxpdGVyYWwgXFxcIlN1c3BlbmRlZFxcXCIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1vYmplY3Rsb2NrLXZlcnNpb25pbmctc3VzcGVuZGVkXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiLFxcblxcdFxcXCJPYmplY3RMb2NrRW5hYmxlZCBpcyB0cnVlIGJ1dCBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiBzdXNwZW5kcyB2ZXJzaW9uaW5nOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJBbiBPYmplY3QgTG9jayBjb25maWd1cmF0aW9uIGlzIHByZXNlbnQgb24gdGhpcyBidWNrZXQsIHNvIHRoZSB2ZXJzaW9uaW5nIHN0YXRlIGNhbm5vdCBiZSBjaGFuZ2VkLlxcXFxcXFwiXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgKG9yIGRyb3AgaXQg4oCUIE9iamVjdCBMb2NrIGVuYWJsZXMgdmVyc2lvbmluZyBpdHNlbGYpXFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvb2JqZWN0LWxvY2suaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0Y29lcmNlX3RvX2Jvb2wocmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5PYmplY3RMb2NrRW5hYmxlZFxcXCIpKSA9PSB0cnVlXFxuXFx0cmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5WZXJzaW9uaW5nQ29uZmlndXJhdGlvbi5TdGF0dXNcXFwiKSA9PSBcXFwiU3VzcGVuZGVkXFxcIlxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLWRlc3QtdmVyc2lvbmluZ1wiLFxuICAgIFwic2VydmljZVwiOiBcInMzXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIlRoZSByZXBsaWNhdGlvbiBkZXN0aW5hdGlvbiBidWNrZXQgbmVlZHMgdmVyc2lvbmluZyBlbmFibGVkXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIFRoZSBkZXN0aW5hdGlvbiBzaWRlIG9mIHdoYXQgcGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZyBjaGVja3Mgb25cXG4jIHRoZSBzb3VyY2UuIERlc3RpbmF0aW9uLkJ1Y2tldCBpcyBub3JtYWxseSBGbjo6R2V0QXR0L1JlZiB0byBhbiBpbi10ZW1wbGF0ZVxcbiMgYnVja2V0OyByZXNvbHZlKCkgdHVybnMgYm90aCBpbnRvIHRoZSB0YXJnZXQncyBsb2dpY2FsIElELCBzbyB0aGVcXG4jIGRlc3RpbmF0aW9uJ3Mgb3duIHByb3BlcnRpZXMgYXJlIHJlYWRhYmxlLiBFeHRlcm5hbCBkZXN0aW5hdGlvbiBBUk5zIHJlc29sdmVcXG4jIHRvIHN0cmluZ3MgdGhhdCBhcmUgbm90IGxvZ2ljYWwgSURzIGFuZCBza2lwLiBWZXJzaW9uaW5nIGlzIFxcXCJub3QgZW5hYmxlZFxcXCJcXG4jIHdoZW4gVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24gaXMgbGl0ZXJhbGx5IGFic2VudCAocHJvdmVuIHZpYVxcbiMgaW5wdXQucmVzb3VyY2VzLCBzZWUgQUdFTlRTLm1kKSBvciBTdGF0dXMgcmVzb2x2ZXMgdG8gXFxcIlN1c3BlbmRlZFxcXCI7IGFuXFxuIyB1bnJlc29sdmFibGUgU3RhdHVzIHNraXBzLlxcbl9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW2Rlc3RdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZHZfYmFkX3ZlcnNpb25pbmcoZGVzdCkgaWYge1xcblxcdHJlc29sdmUoZGVzdCwgXFxcIlByb3BlcnRpZXMuVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzXFxcIikgPT0gXFxcIlN1c3BlbmRlZFxcXCJcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zMy1yZXBsaWNhdGlvbi1kZXN0LXZlcnNpb25pbmdcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzLiVkLkRlc3RpbmF0aW9uLkJ1Y2tldFxcXCIsIFtyLmluZGV4XSksXFxuXFx0c3ByaW50ZihcXFwiUmVwbGljYXRpb24gZGVzdGluYXRpb24gYnVja2V0ICclcycgZG9lcyBub3QgaGF2ZSB2ZXJzaW9uaW5nIGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBcXFxcXFxcIkRlc3RpbmF0aW9uIGJ1Y2tldCBtdXN0IGhhdmUgdmVyc2lvbmluZyBlbmFibGVkXFxcXFxcXCJcXFwiLCBbZGVzdF0pLFxcblxcdFxcXCJTZXQgVmVyc2lvbmluZ0NvbmZpZ3VyYXRpb24uU3RhdHVzIHRvICdFbmFibGVkJyBvbiB0aGUgZGVzdGluYXRpb24gYnVja2V0XFxcIixcXG5cXHRcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC91c2VyZ3VpZGUvcmVwbGljYXRpb24tcmVxdWlyZW1lbnRzLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHNvbWUgciBpbiBmbGF0dGVuX2xpc3QobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uLlJ1bGVzXFxcIilcXG5cXHRkZXN0IDo9IHJlc29sdmUobmFtZSwgc3ByaW50ZihcXFwiUHJvcGVydGllcy5SZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24uUnVsZXMuJWQuRGVzdGluYXRpb24uQnVja2V0XFxcIiwgW3IuaW5kZXhdKSlcXG5cXHRpc19zdHJpbmcoZGVzdClcXG5cXHRkZXN0IGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdF9wZl9zM3Jkdl9iYWRfdmVyc2lvbmluZyhkZXN0KVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXJlcGxpY2F0aW9uLXJlcXVpcmVzLXZlcnNpb25pbmdcIixcbiAgICBcInNlcnZpY2VcIjogXCJzM1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJSZXBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgdmVyc2lvbmluZyB0byBiZSBlbmFibGVkIG9uIHRoZSBzb3VyY2UgYnVja2V0XCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlMzOjpCdWNrZXRcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG4jIOmBleWPjeOBq+OBmeOCi+OBruOBryBWZXJzaW9uaW5nQ29uZmlndXJhdGlvbiDjgYzmloflrZfjganjgYrjgorkuI3lnKjvvIhpbnB1dC5yZXNvdXJjZXMg44GnXFxuIyDoqLzmmI7jgIFBR0VOVFMubWQg5Y+C54Wn77yJ44GL44CBU3RhdHVzIOOBjOODquODhuODqeODq+OBpyBcXFwiU3VzcGVuZGVkXFxcIiDjga7jgajjgY3jgaDjgZHjgIJcXG4jIOacquino+axuuODiOODvOOCr+ODs+OBryBPSyDmibHjgYTvvIhyZXNvbHZlKCkg44Gv44Kt44O85LiN5Zyo44Go5pyq6Kej5rG644Gu5Lih5pa544GnIHVuZGVmaW5lZCDjgatcXG4jIOOBquOCi+OBn+OCgeOAgWBub3QgcmVzb2x2ZSguLi4pYCDjgafjga/kuI3lnKjjgpLoqLzmmI7jgafjgY3jgarjgYQg4oCUIDIwMjYtMDktMDIg5a6f5ris77yJ44CCXFxuX3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKSBpZiB7XFxuXFx0cHJvcHMgOj0gaW5wdXQucmVzb3VyY2VzW25hbWVdLnByb3BlcnRpZXNcXG5cXHRpc19vYmplY3QocHJvcHMpXFxuXFx0b2JqZWN0LmdldChwcm9wcywgXFxcIlZlcnNpb25pbmdDb25maWd1cmF0aW9uXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG5fcGZfczNyZXBsX2JhZF92ZXJzaW9uaW5nKG5hbWUpIGlmIHtcXG5cXHRyZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1c1xcXCIpID09IFxcXCJTdXNwZW5kZWRcXFwiXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtcmVwbGljYXRpb24tcmVxdWlyZXMtdmVyc2lvbmluZ1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIixcXG5cXHRcXFwiUmVwbGljYXRpb25Db25maWd1cmF0aW9uIGlzIHNldCBidXQgYnVja2V0IHZlcnNpb25pbmcgaXMgbm90IGVuYWJsZWQ7IFMzIHJlamVjdHMgdGhlIHJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYXQgZGVwbG95IHRpbWUgKEludmFsaWRSZXF1ZXN0OiBWZXJzaW9uaW5nIG11c3QgYmUgJ0VuYWJsZWQnIG9uIHRoZSBidWNrZXQpXFxcIixcXG5cXHRcXFwiU2V0IFZlcnNpb25pbmdDb25maWd1cmF0aW9uLlN0YXR1cyB0byAnRW5hYmxlZCcgb24gdGhlIHNvdXJjZSBidWNrZXRcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L3VzZXJndWlkZS9yZXBsaWNhdGlvbi1yZXF1aXJlbWVudHMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6UzM6OkJ1Y2tldFxcXCIpXFxuXFx0aXNfb2JqZWN0KHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuUmVwbGljYXRpb25Db25maWd1cmF0aW9uXFxcIikpXFxuXFx0X3BmX3MzcmVwbF9iYWRfdmVyc2lvbmluZyhuYW1lKVxcbn1cXG5cIlxuICB9LFxuICB7XG4gICAgXCJpZFwiOiBcInBmLXMzLXdlYnNpdGUtcmVkaXJlY3QtZXhjbHVzaXZlXCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwiczNcIixcbiAgICBcInNldmVyaXR5XCI6IFwiRVJST1JcIixcbiAgICBcInRpdGxlXCI6IFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvIGV4Y2x1ZGVzIGV2ZXJ5IG90aGVyIHdlYnNpdGUgc2V0dGluZ1wiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTMzo6QnVja2V0XCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gcmVkaXJlY3RzIHRoZSB3aG9sZSBzaXRlLCBzbyBTMyByZWplY3RzIGFueSBzaWJsaW5nXFxuIyB3ZWJzaXRlIHNldHRpbmcgYWxvbmdzaWRlIGl0LlxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtczMtd2Vic2l0ZS1yZWRpcmVjdC1leGNsdXNpdmVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdHNwcmludGYoXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb24uJXNcXFwiLCBba10pLFxcblxcdHNwcmludGYoXFxcIldlYnNpdGVDb25maWd1cmF0aW9uIGNvbWJpbmVzIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyB3aXRoICVzOyBTMyByZWplY3RzIGl0IHdpdGggXFxcXFxcXCJbSW5kZXhEb2N1bWVudCwgRXJyb3JEb2N1bWVudCwgUm91dGluZ1J1bGVzXSBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBpZiBSZWRpcmVjdEFsbFJlcXVlc3RzVG8gaXMgc3BlY2lmaWVkXFxcXFxcXCJcXFwiLCBba10pLFxcblxcdFxcXCJLZWVwIFJlZGlyZWN0QWxsUmVxdWVzdHNUbyBhbG9uZSwgb3IgZHJvcCBpdCBhbmQgY29uZmlndXJlIHRoZSB3ZWJzaXRlIHdpdGggSW5kZXhEb2N1bWVudC9FcnJvckRvY3VtZW50L1JvdXRpbmdSdWxlc1xcXCIsXFxuXFx0XFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtczMtYnVja2V0LXdlYnNpdGVjb25maWd1cmF0aW9uLmh0bWxcXFwiKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlMzOjpCdWNrZXRcXFwiKVxcblxcdHdjIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuV2Vic2l0ZUNvbmZpZ3VyYXRpb25cXFwiKVxcblxcdGlzX29iamVjdCh3YylcXG5cXHRvYmplY3QuZ2V0KHdjLCBcXFwiUmVkaXJlY3RBbGxSZXF1ZXN0c1RvXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgIT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcblxcdHNvbWUgayBpbiB7XFxcIkluZGV4RG9jdW1lbnRcXFwiLCBcXFwiRXJyb3JEb2N1bWVudFxcXCIsIFxcXCJSb3V0aW5nUnVsZXNcXFwifVxcblxcdG9iamVjdC5nZXQod2MsIGssIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItZmxleGlibGUtd2luZG93XCIsXG4gICAgXCJzZXJ2aWNlXCI6IFwic2NoZWR1bGVyXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkZMRVhJQkxFIG1vZGUgbmVlZHMgTWF4aW11bVdpbmRvd0luTWludXRlcywgT0ZGIGZvcmJpZHMgaXRcIixcbiAgICBcInVwc3RyZWFtXCI6IFwibm9uZVwiLFxuICAgIFwicmVzb3VyY2VUeXBlc1wiOiBbXG4gICAgICBcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVwiXG4gICAgXSxcbiAgICBcInJlZ29cIjogXCJwYWNrYWdlIGNka19wcmVmbGlnaHRcXG5cXG5pbXBvcnQgcmVnby52MVxcblxcbl9wZl9zY2hmd191cmwgOj0gXFxcImh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVGVtcGxhdGVSZWZlcmVuY2UvYXdzLXByb3BlcnRpZXMtc2NoZWR1bGVyLXNjaGVkdWxlLWZsZXhpYmxldGltZXdpbmRvdy5odG1sXFxcIlxcblxcbl9wZl9zY2hmd19mdHcobmFtZSkgOj0gZnR3IGlmIHtcXG5cXHRmdHcgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GbGV4aWJsZVRpbWVXaW5kb3dcXFwiKVxcblxcdGlzX29iamVjdChmdHcpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc2NoZWR1bGVyLWZsZXhpYmxlLXdpbmRvd1xcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRmxleGlibGVUaW1lV2luZG93Lk1heGltdW1XaW5kb3dJbk1pbnV0ZXNcXFwiLFxcblxcdFxcXCJGbGV4aWJsZVRpbWVXaW5kb3cuTW9kZSBpcyBGTEVYSUJMRSBidXQgTWF4aW11bVdpbmRvd0luTWludXRlcyBpcyBtaXNzaW5nOyBDcmVhdGVTY2hlZHVsZSBmYWlscyB3aXRoIFxcXFxcXFwiTWF4aW11bVdpbmRvd0luTWludXRlcyBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gRmxleGlibGVUaW1lV2luZG93TW9kZSBpcyBzZXQgdG8gRkxFWElCTEVcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIlNldCBNYXhpbXVtV2luZG93SW5NaW51dGVzICgxLTE0NDApLCBvciBzd2l0Y2ggTW9kZSB0byBPRkZcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiRkxFWElCTEVcXFwiXFxuXFx0b2JqZWN0LmdldChmdHcsIFxcXCJNYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIiwgXFxcIl9fcGZfYWJzZW50XFxcIikgPT0gXFxcIl9fcGZfYWJzZW50XFxcIlxcbn1cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNjaGVkdWxlci1mbGV4aWJsZS13aW5kb3dcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkZsZXhpYmxlVGltZVdpbmRvdy5NYXhpbXVtV2luZG93SW5NaW51dGVzXFxcIixcXG5cXHRcXFwiRmxleGlibGVUaW1lV2luZG93Lk1vZGUgaXMgT0ZGIGJ1dCBNYXhpbXVtV2luZG93SW5NaW51dGVzIGlzIHNldDsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIk1heGltdW1XaW5kb3dJbk1pbnV0ZXMgbXVzdCBub3QgYmUgcHJvdmlkZWQgd2hlbiBGbGV4aWJsZVRpbWVXaW5kb3dNb2RlIGlzIHNldCB0byBPRkZcXFxcXFxcIlxcXCIsXFxuXFx0XFxcIkRyb3AgTWF4aW11bVdpbmRvd0luTWludXRlcywgb3Igc3dpdGNoIE1vZGUgdG8gRkxFWElCTEVcXFwiLFxcblxcdF9wZl9zY2hmd191cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZnR3IDo9IF9wZl9zY2hmd19mdHcobmFtZSlcXG5cXHRvYmplY3QuZ2V0KGZ0dywgXFxcIk1vZGVcXFwiLCBudWxsKSA9PSBcXFwiT0ZGXFxcIlxcblxcdG9iamVjdC5nZXQoZnR3LCBcXFwiTWF4aW11bVdpbmRvd0luTWludXRlc1xcXCIsIFxcXCJfX3BmX2Fic2VudFxcXCIpICE9IFxcXCJfX3BmX2Fic2VudFxcXCJcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNjaGVkdWxlclwiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJBIFNjaGVkdWxlciByYXRlKCkgdmFsdWUgbXVzdCBiZSBwb3NpdGl2ZVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTY2hlZHVsZXI6OlNjaGVkdWxlXCJcbiAgICBdLFxuICAgIFwicmVnb1wiOiBcInBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuIyBUaGUgZW5naW5lJ3MgRTMwMjcgdmFsaWRhdGVzIHJhdGUoKSBib3VuZHMgZm9yIEFXUzo6RXZlbnRzOjpSdWxlIGJ1dCBub3RcXG4jIGZvciBBV1M6OlNjaGVkdWxlcjo6U2NoZWR1bGUg4oCUIHNhbWUgY29uc3RyYWludCBmYW1pbHksIGRpZmZlcmVudCByZXNvdXJjZS5cXG4jIE9ubHkgdGhlIHZhbHVlIGJvdW5kIGlzIGNoZWNrZWQgaGVyZTsgdW5pdCBzcGVsbGluZ3MgZGlmZmVyIGJldHdlZW4gdGhlIHR3b1xcbiMgc2VydmljZXMgYW5kIHdlcmUgbm90IG1lYXN1cmVkIGZvciBTY2hlZHVsZXIuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zY2hlZHVsZXItcmF0ZS1wb3NpdGl2ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuU2NoZWR1bGVFeHByZXNzaW9uXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUaGUgcmF0ZSB2YWx1ZSBpbiAnJXMnIGlzIG5vdCBwb3NpdGl2ZTsgQ3JlYXRlU2NoZWR1bGUgZmFpbHMgd2l0aCBcXFxcXFxcIkludmFsaWQgU2NoZWR1bGUgRXhwcmVzc2lvbiAlcy5cXFxcXFxcIlxcXCIsIFtleHByLCBleHByXSksXFxuXFx0XFxcIlVzZSBhIHJhdGUgb2YgMSBvciBtb3JlIChlLmcuIHJhdGUoNSBtaW51dGVzKSlcXFwiLFxcblxcdFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2NoZWR1bGVyL2xhdGVzdC9Vc2VyR3VpZGUvc2NoZWR1bGUtdHlwZXMuaHRtbFxcXCIpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U2NoZWR1bGVyOjpTY2hlZHVsZVxcXCIpXFxuXFx0ZXhwciA6PSByZXNvbHZlKG5hbWUsIFxcXCJQcm9wZXJ0aWVzLlNjaGVkdWxlRXhwcmVzc2lvblxcXCIpXFxuXFx0aXNfc3RyaW5nKGV4cHIpXFxuXFx0dCA6PSB0cmltX3NwYWNlKGV4cHIpXFxuXFx0c3RhcnRzd2l0aCh0LCBcXFwicmF0ZShcXFwiKVxcblxcdGVuZHN3aXRoKHQsIFxcXCIpXFxcIilcXG5cXHRpbm5lciA6PSB0cmltX3NwYWNlKHN1YnN0cmluZyh0LCA1LCBjb3VudCh0KSAtIDYpKVxcblxcdHBhcnRzIDo9IHNwbGl0KGlubmVyLCBcXFwiIFxcXCIpXFxuXFx0biA6PSB0b19udW1iZXIocGFydHNbMF0pXFxuXFx0biA8PSAwXFxufVxcblwiXG4gIH0sXG4gIHtcbiAgICBcImlkXCI6IFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVwiLFxuICAgIFwic2VydmljZVwiOiBcInNuc1wiLFxuICAgIFwic2V2ZXJpdHlcIjogXCJFUlJPUlwiLFxuICAgIFwidGl0bGVcIjogXCJGSUZPIHRvcGljIG5hbWVzIG11c3QgZW5kIHdpdGggJy5maWZvJyAoYW5kICcuZmlmbycgbmFtZXMgcmVxdWlyZSBGaWZvVG9waWMpXCIsXG4gICAgXCJ1cHN0cmVhbVwiOiBcIm5vbmVcIixcbiAgICBcInJlc291cmNlVHlwZXNcIjogW1xuICAgICAgXCJBV1M6OlNOUzo6VG9waWNcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc25zZmlmb19maXggOj0gXFxcIkdpdmUgRklGTyB0b3BpY3MgYSBUb3BpY05hbWUgZW5kaW5nIGluICcuZmlmbycgKG9yIGRyb3AgVG9waWNOYW1lIHRvIGxldCBDbG91ZEZvcm1hdGlvbiBnZW5lcmF0ZSBvbmUpLCBhbmQgc2V0IEZpZm9Ub3BpYzogdHJ1ZSB3aGVuZXZlciB0aGUgbmFtZSBlbmRzIGluICcuZmlmbydcXFwiXFxuXFxuX3BmX3Nuc2ZpZm9fdXJsIDo9IFxcXCJodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc25zL2xhdGVzdC9kZy9zbnMtY3JlYXRlLWZpZm8tdG9waWMuaHRtbFxcXCJcXG5cXG5fcGZfc25zZmlmb190cnVlKG5hbWUpIGlmIHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRmlmb1RvcGljXFxcIikgaW4ge3RydWUsIFxcXCJ0cnVlXFxcIn1cXG5cXG4jIEZpZm9Ub3BpYyDjgYzlrZjlnKjjgZfjgIHjg6rjg4bjg6njg6sgZmFsc2Ug5Lul5aSW77yIdHJ1ZSDjgoTjg4jjg7zjgq/jg7PvvInjgarjgonjgIxGSUZPIOOBi+OCguOBl+OCjOOBquOBhOOAjeaJseOBhFxcbl9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSkgaWYge1xcblxcdHYgOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5GaWZvVG9waWNcXFwiKVxcblxcdG5vdCB2IGluIHtmYWxzZSwgXFxcImZhbHNlXFxcIn1cXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zbnMtZmlmby10b3BpYy1uYW1lXFxcIiwgXFxcIkVSUk9SXFxcIiwgbmFtZSxcXG5cXHRcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiLFxcblxcdHNwcmludGYoXFxcIkZpZm9Ub3BpYyBpcyB0cnVlIGJ1dCBUb3BpY05hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLmZpZm8nOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgYXQgZGVwbG95IHRpbWVcXFwiLCBbdG5dKSxcXG5cXHRfcGZfc25zZmlmb19maXgsIF9wZl9zbnNmaWZvX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTTlM6OlRvcGljXFxcIilcXG5cXHRfcGZfc25zZmlmb190cnVlKG5hbWUpXFxuXFx0dG4gOj0gcmVzb2x2ZShuYW1lLCBcXFwiUHJvcGVydGllcy5Ub3BpY05hbWVcXFwiKVxcblxcdGlzX3N0cmluZyh0bilcXG5cXHRub3QgZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxufVxcblxcbnZpb2xhdGlvbiBjb250YWlucyBtYWtlX2RpYWdfZnVsbChcXFwicGYtc25zLWZpZm8tdG9waWMtbmFtZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIixcXG5cXHRzcHJpbnRmKFxcXCJUb3BpY05hbWUgJyVzJyBlbmRzIHdpdGggJy5maWZvJyBidXQgRmlmb1RvcGljIGlzIG5vdCB0cnVlOyBTTlMgcmVqZWN0cyB0aGUgdG9waWMgbmFtZSBhdCBkZXBsb3kgdGltZVxcXCIsIFt0bl0pLFxcblxcdF9wZl9zbnNmaWZvX2ZpeCwgX3BmX3Nuc2ZpZm9fdXJsKSBpZiB7XFxuXFx0c29tZSBuYW1lIGluIHJlc291cmNlc19vZl90eXBlKFxcXCJBV1M6OlNOUzo6VG9waWNcXFwiKVxcblxcdHRuIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuVG9waWNOYW1lXFxcIilcXG5cXHRpc19zdHJpbmcodG4pXFxuXFx0ZW5kc3dpdGgodG4sIFxcXCIuZmlmb1xcXCIpXFxuXFx0bm90IF9wZl9zbnNmaWZvX21heWJlX2ZpZm8obmFtZSlcXG59XFxuXCJcbiAgfSxcbiAge1xuICAgIFwiaWRcIjogXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcIixcbiAgICBcInNlcnZpY2VcIjogXCJzdGVwZnVuY3Rpb25zXCIsXG4gICAgXCJzZXZlcml0eVwiOiBcIkVSUk9SXCIsXG4gICAgXCJ0aXRsZVwiOiBcIkFTTCBOZXh0L0RlZmF1bHQvQ2hvaWNlcyBtdXN0IHJlZmVyZW5jZSBhIGRlZmluZWQgc3RhdGUgKHRvcC1sZXZlbCBzdGF0ZXM7IGEgZGFuZ2xpbmcgU3RhcnRBdCBpcyBjb3ZlcmVkIGJ5IGVuZ2luZSBydWxlIEUzNjAxKVwiLFxuICAgIFwidXBzdHJlYW1cIjogXCJub25lXCIsXG4gICAgXCJyZXNvdXJjZVR5cGVzXCI6IFtcbiAgICAgIFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIlxuICAgIF0sXG4gICAgXCJyZWdvXCI6IFwicGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5fcGZfc2ZuX2ZpeCA6PSBcXFwiUG9pbnQgTmV4dC9EZWZhdWx0L0Nob2ljZXMgYXQgYW4gZXhpc3Rpbmcgc3RhdGUgbmFtZVxcXCJcXG5cXG5fcGZfc2ZuX3VybCA6PSBcXFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N0ZXAtZnVuY3Rpb25zL2xhdGVzdC9kZy9hbWF6b24tc3RhdGVzLWxhbmd1YWdlLXN0YXRlcy5odG1sXFxcIlxcblxcbl9wZl9zZm5fYXNsKG5hbWUpIDo9IGFzbCBpZiB7XFxuXFx0ZGVmIDo9IHJlc29sdmUobmFtZSwgXFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIpXFxuXFx0aXNfc3RyaW5nKGRlZilcXG5cXHRhc2wgOj0ganNvbi51bm1hcnNoYWwoZGVmKVxcblxcdGlzX29iamVjdChhc2wpXFxufVxcblxcbl9wZl9zZm5fZGVmaW5lZChhc2wpIDo9IHtzbiB8IHNvbWUgc24sIF8gaW4gb2JqZWN0LmdldChhc2wsIFxcXCJTdGF0ZXNcXFwiLCB7fSl9XFxuXFxuIyBOT1RFOiBhIGRhbmdsaW5nIFN0YXJ0QXQgaXMgZGVsaWJlcmF0ZWx5IE5PVCBjaGVja2VkIGhlcmUg4oCUIHRoZSBlbmdpbmUnc1xcbiMgYnVpbHQtaW4gcnVsZSBFMzYwMSAoRVJST1IvQ0ZOX0xJTlQpIGFscmVhZHkgY292ZXJzIGl0LiBWZXJpZmllZCBhZ2FpbnN0XFxuIyBAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIDEuNy4wLWJldGEgb24gMjAyNi0wOS0wMTogRTM2MDEgZmlyZXMgZm9yXFxuIyBTdGFydEF0IG9ubHkgYW5kIGRvZXMgbm90IGNoZWNrIE5leHQvRGVmYXVsdC9DaG9pY2VzLCB3aGljaCBpcyB3aGF0IHRoaXNcXG4jIHJ1bGUgYWRkcy5cXG5cXG52aW9sYXRpb24gY29udGFpbnMgbWFrZV9kaWFnX2Z1bGwoXFxcInBmLXNmbi1hc2wtbWlzc2luZy1zdGF0ZVxcXCIsIFxcXCJFUlJPUlxcXCIsIG5hbWUsXFxuXFx0XFxcIlByb3BlcnRpZXMuRGVmaW5pdGlvblN0cmluZ1xcXCIsXFxuXFx0c3ByaW50ZihcXFwic3RhdGUgJyVzJyByZWZlcmVuY2VzIHN0YXRlICclcycgdmlhICVzLCBidXQgbm8gc3RhdGUgd2l0aCB0aGF0IG5hbWUgaXMgZGVmaW5lZFxcXCIsIFtzbmFtZSwgdGFyZ2V0LCBrZXldKSxcXG5cXHRfcGZfc2ZuX2ZpeCwgX3BmX3Nmbl91cmwpIGlmIHtcXG5cXHRzb21lIG5hbWUgaW4gcmVzb3VyY2VzX29mX3R5cGUoXFxcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXFxcIilcXG5cXHRhc2wgOj0gX3BmX3Nmbl9hc2wobmFtZSlcXG5cXHRzb21lIHNuYW1lLCBzdCBpbiBvYmplY3QuZ2V0KGFzbCwgXFxcIlN0YXRlc1xcXCIsIHt9KVxcblxcdGlzX29iamVjdChzdClcXG5cXHRzb21lIGtleSBpbiB7XFxcIk5leHRcXFwiLCBcXFwiRGVmYXVsdFxcXCJ9XFxuXFx0dGFyZ2V0IDo9IG9iamVjdC5nZXQoc3QsIGtleSwgbnVsbClcXG5cXHRpc19zdHJpbmcodGFyZ2V0KVxcblxcdG5vdCB0YXJnZXQgaW4gX3BmX3Nmbl9kZWZpbmVkKGFzbClcXG59XFxuXFxudmlvbGF0aW9uIGNvbnRhaW5zIG1ha2VfZGlhZ19mdWxsKFxcXCJwZi1zZm4tYXNsLW1pc3Npbmctc3RhdGVcXFwiLCBcXFwiRVJST1JcXFwiLCBuYW1lLFxcblxcdFxcXCJQcm9wZXJ0aWVzLkRlZmluaXRpb25TdHJpbmdcXFwiLFxcblxcdHNwcmludGYoXFxcInN0YXRlICclcycgaGFzIGEgQ2hvaWNlIHJ1bGUgcmVmZXJlbmNpbmcgc3RhdGUgJyVzJywgYnV0IG5vIHN0YXRlIHdpdGggdGhhdCBuYW1lIGlzIGRlZmluZWRcXFwiLCBbc25hbWUsIHRhcmdldF0pLFxcblxcdF9wZl9zZm5fZml4LCBfcGZfc2ZuX3VybCkgaWYge1xcblxcdHNvbWUgbmFtZSBpbiByZXNvdXJjZXNfb2ZfdHlwZShcXFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcXFwiKVxcblxcdGFzbCA6PSBfcGZfc2ZuX2FzbChuYW1lKVxcblxcdHNvbWUgc25hbWUsIHN0IGluIG9iamVjdC5nZXQoYXNsLCBcXFwiU3RhdGVzXFxcIiwge30pXFxuXFx0aXNfb2JqZWN0KHN0KVxcblxcdGNob2ljZXMgOj0gb2JqZWN0LmdldChzdCwgXFxcIkNob2ljZXNcXFwiLCBbXSlcXG5cXHRpc19hcnJheShjaG9pY2VzKVxcblxcdHNvbWUgYyBpbiBjaG9pY2VzXFxuXFx0aXNfb2JqZWN0KGMpXFxuXFx0dGFyZ2V0IDo9IG9iamVjdC5nZXQoYywgXFxcIk5leHRcXFwiLCBudWxsKVxcblxcdGlzX3N0cmluZyh0YXJnZXQpXFxuXFx0bm90IHRhcmdldCBpbiBfcGZfc2ZuX2RlZmluZWQoYXNsKVxcbn1cXG5cIlxuICB9XG5dO1xuIl19
package/package.json CHANGED
@@ -87,7 +87,7 @@
87
87
  "publishConfig": {
88
88
  "access": "public"
89
89
  },
90
- "version": "0.0.11",
90
+ "version": "0.0.12",
91
91
  "jest": {
92
92
  "coverageProvider": "v8",
93
93
  "testMatch": [