Name: series-workflowz849n Phase: Succeeded StartedAt: 2026-07-30 18:45:41 +0000 UTC FinishedAt: 2026-07-30 22:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[0] Phase: Succeeded StartedAt: 2026-07-30 18:45:41 +0000 UTC FinishedAt: 2026-07-30 19:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 18:45:41 +0000 UTC FinishedAt: 2026-07-30 19:02:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "a75f6c55-682e-41e5-b167-c7bdc1240afb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "addrconf_prefix_rcv", "rt6_route_rcv", "ip6_del_rt_reason", "rt6_dump_route", "inet6_rt_del_notify", "fib6_del", "fib6_run_gc", "ndisc_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O3J0Nl9yb3V0ZV9yY3YmIzM0OywKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7cnQ2X2R1bXBfcm91dGUmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtmaWI2X3J1bl9nYyYjMzQ7LAogICAgJiMzNDtuZGlzY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlcyB0byByZXBvcnQgdGhlIHJlYXNvbiBmb3Igcm91dGUgZGVsZXRpb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGZ1bmN0aW9ucywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSBwcm9jZXNzaW5nIGxvZ2ljIHRvIHBsdW1iIHRoaXMgbmV3IGF0dHJpYnV0ZSB0aHJvdWdoIHRoZSByb3V0ZSBkZWxldGlvbiBwYXRocyBhbmQgbmV0bGluayBub3RpZmljYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgbmV3IGF0dHJpYnV0ZSBhbmQgbm8gcmVncmVzc2lvbnMgaW4gcm91dGUgZGVsZXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTg6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYjlhZTcwMDZjOTk3MGYxMjRiZDkxZDAyZjJiZTdhZGNkYmQ0YmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTg6NTk6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZTM3YTEzMDFlZjFkYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxuJiM0MzsgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSB1bnNwZWNcbiYjNDM7ICAgICAgLSBleHBpcmVkXG4mIzQzOyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4mIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMTMsNyAmIzQzOzMyNywzOCBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI0XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbiYjNDM7ICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcbiYjNDM7ICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcbiYjNDM7ICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbiYjNDM7ICAgICAgICAgICAgLSBkc3RcbiYjNDM7ICAgICAgICAgICAgLSBzcmNcbiYjNDM7ICAgICAgICAgICAgLSBpaWZcbiYjNDM7ICAgICAgICAgICAgLSBvaWZcbiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5XG4mIzQzOyAgICAgICAgICAgIC0gcHJpb3JpdHlcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmc3JjXG4mIzQzOyAgICAgICAgICAgIC0gbWV0cmljc1xuJiM0MzsgICAgICAgICAgICAtIG11bHRpcGF0aFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dcbiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm9cbiYjNDM7ICAgICAgICAgICAgLSB0YWJsZVxuJiM0MzsgICAgICAgICAgICAtIG1hcmtcbiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHNcbiYjNDM7ICAgICAgICAgICAgLSB2aWFcbiYjNDM7ICAgICAgICAgICAgLSBuZXdkc3RcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmXG4mIzQzOyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuJiM0MzsgICAgICAgICAgICAtIGVuY2FwXG4mIzQzOyAgICAgICAgICAgIC0gZXhwaXJlc1xuJiM0MzsgICAgICAgICAgICAtIHBhZFxuJiM0MzsgICAgICAgICAgICAtIHVpZFxuJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGVcbiYjNDM7ICAgICAgICAgICAgLSBpcC1wcm90b1xuJiM0MzsgICAgICAgICAgICAtIHNwb3J0XG4mIzQzOyAgICAgICAgICAgIC0gZHBvcnRcbiYjNDM7ICAgICAgICAgICAgLSBuaC1pZFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICYjNDM7MzY2LDIzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjVcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBuZXdyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjRcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjVcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MztcbiYjNDM7bWNhc3QtZ3JvdXBzOlxuJiM0MzsgIGxpc3Q6XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuJiM0MzsgICAgICB2YWx1ZTogN1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi5jNmRjMjNhNDJjMTE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li45MmFkNWEwZDAzYTI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDEyICYjNDM7MTI4LDIxIEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuIHtcbiBcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuJiM0MztcdFx0XHRcdCAgICBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuIHZvaWQgcnQ2X2ZsdXNoX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmMuLmZlMDBlNjI0ZjNjM2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICYjNDM7Mzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiBcdFJUQV9EUE9SVCxcbiBcdFJUQV9OSF9JRCxcbiBcdFJUQV9GTE9XTEFCRUwsXG4mIzQzO1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICYjNDM7NDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSlcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcbiBcbiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4mIzQzOyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhXG4mIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbiYjNDM7ICogdHJlYXQgXCYjMzQ7YWJzZW50XCYjMzQ7IGFuZCBcJiMzNDt1bnNwZWNcJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxuJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBydGFfZGVsX3JlYXNvbiB7XG4mIzQzO1x0UlRBX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbiYjNDM7XHRSVEFfREVMX1JFQVNPTl9FWFBJUkVELFx0XHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cbiYjNDM7XHRSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXG4mIzQzO1x0X19SVEFfREVMX1JFQVNPTl9NQVhcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXG4mIzQzO1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wXCYjMzQ7IGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjBjM2QzOGY2OWZjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmUuLjE1OWRiMTBhODQ2Y2MgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTE5NjYsNyAmIzQzOzE5NjYsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgJiM0MzsyMDU2LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbiYjNDM7XHRcdGluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xuQEAgLTIwOTAsNyAmIzQzOzIwOTIsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0XHRpZiAocnQgPT0gY3VyKSB7XG4gXHRcdFx0aWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpXG4gXHRcdFx0XHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cdTAwM2VubF9uZXQpO1xuLVx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgJiM0MzsyMjU0LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIFx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbiBcdFx0aWYgKHJlcyA9PSAtMSkge1xuIFx0XHRcdHctXHUwMDNlbGVhZiA9IHJ0O1xuLVx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKHJlcykge1xuICNpZiBSVDZfREVCVUcgXHUwMDNlPSAyXG4gXHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCYjMzQ7LFxuQEAgLTI0MDAsNyAmIzQzOzI0MDIsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sIFx1MDAyNnRiNi1cdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXG4gXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG4tXHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuJiM0MztcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNS4uNzEzZGI5MDg5ZDVlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li45NGY5NjQ2ZDVlYmMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyAmIzQzOzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTM5OTQsMTQgJiM0MzszOTk1LDIwIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7XG4gXHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTU3MzksNiAmIzQzOzU3NDksNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbiYjNDM7XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICYjNDM7NTc4Niw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuIFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XG5AQCAtNTk1NCw2ICYjNDM7NTk2NSwxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVx1MDAzZWVycm9yIDogMCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuJiM0MztcdGlmIChkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4mIzQzO1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICYjNDM7NjA3MCw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXG5AQCAtNjEwMyw3ICYjNDM7NjExOSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbiYjNDM7XHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuQEAgLTYzMzYsMTIgJiM0Mzs2MzUzLDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTcsOCAmIzQzOzYzNzYsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTcsNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqL1xuQEAgLTYzOTgsNiAmIzQzOzY0MTgsMTggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XG4gfVxuIFxuJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7e1xuJiM0MztcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0X19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHQgICAgc3RydWN0IG5sX2luZm8gKmluZm8pXG4ge1xuQEAgLTY0MTAsNyAmIzQzOzY0NDIsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XG4mIzQzO1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4mIzQzO1x0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuQEAgLTY0NjMsNyAmIzQzOzY0OTYsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4mIzQzO1x0XHRcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbkBAIC0yOSw3ICYjNDM7MjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwmIzM0O05sRXJyb3JcJiMzNDssIFwmIzM0O05sUG9saWN5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7LCBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O1NQRUNfUEFUSFwmIzM0Oyxcbi0gICAgXCYjMzQ7RXRodG9vbEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssXG4mIzQzOyAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtOZXRkZXZGYW1pbHlcJiMzNDssIFwmIzM0O05ldHNoYXBlckZhbWlseVwmIzM0OywgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtQU1BGYW1pbHlcJiMzNDssXG4gXVxuQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4mIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKVxuJiM0MztcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtuZXRkZXYueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uZjc0Y2NkNWMyZDEzYSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgJiM0Mzs1LDggQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1xceGUwXFx4MDBcXHgwMFxceDAxJiMzOTtcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XFx4ZWZcXHgwMVxceDAxXFx4MDEmIzM5O1xuQEAgLTEzNCw4ICYjNDM7MTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF90cnVlKGZcJiMzNDtpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cJiMzNDsgaW4gY21kX29iai5zdGRvdXQsXG4gICAgICAgICAgICAgICBmXCYjMzQ7Tm8gJiMzOTtmb3J3YXJkaW5nIG9uJiMzOTsgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XCYjMzQ7KVxuIFxuJiM0MztkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcbiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcbiYjNDM7ICAgIHJ0bmwubnRmX3N1YnNjcmliZShcJiMzNDtydG5sZ3JwLWlwdjYtcm91dGVcJiMzNDspXG4mIzQzOyAgICByZXR1cm4gcnRubFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4mIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdXG4mIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspICE9IGRzdDpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnNcbiYjNDM7ICAgIHJldHVybiBOb25lXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgbmFtZSwgd2FudCwgZGVhZGxpbmU9MTApOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHNlZW4gPSB7fVxuJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O11cbiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKVxuJiM0MzsgICAgICAgIGlmIGtleSBpbiB3YW50OlxuJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xuJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuJiM0MzsgICAgICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgIHJldHVybiBzZWVuXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XG4mIzQzOyAgICB3aXRoIG9wZW4oZlwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cJiMzNDssIFwmIzM0O3dcJiMzNDspIGFzIGY6XG4mIzQzOyAgICAgICAgZi53cml0ZShmXCYjMzQ7e3ZhbHVlfVxcblwmIzM0OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtyb3V0ZS9nY19pbnRlcnZhbFwmIzM0OywgMilcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZVwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSxcbiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXJcbiYjNDM7ICAgIHJhID0gc3RydWN0LnBhY2soJiMzOTshQkJIQkJISUkmIzM5OywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXG4mIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cbiYjNDM7ICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdXG4mIzQzOyAgICBpZiBwaW8gaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW9cbiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJSUkmIzM5OywgMywgNCwgcGxlbiwgMHg4MCwgdmFsaWRfbGZ0LCAwLCAwKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxuJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOlxuJiM0MzsgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4mIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KVxuJiM0MzsgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgMjU1KVxuJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB1bnRpbCB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWxcbiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBzZWVuID0ge31cbiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKDEwKTpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpXG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O25ld3JvdXRlLW50ZiYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxuJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4mIzQzOyAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICByZXR1cm4gc2VlblxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxuJiM0MzsgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4mIzQzOyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICYjMzk7MjAwMTpkYjg6Njo6JiMzOTspLCAoNjQsICYjMzk7MjAwMTpkYjg6NTo6JiMzOTspfVxuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwmIzM0OylcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhXCYjMzQ7LCAyKVxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9mb3J3YXJkaW5nXCYjMzQ7LCAwKVxuJiM0MzsgICAgICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblwmIzM0OywgNjQpXG4mIzQzOyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wmIzM0OylcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjNDM7ICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgxL2FjY2VwdF9kYWRcJiMzNDssIDApXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IHZldGgwIHVwXCYjMzQ7LCBucz1zdHIobnNfaCkpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IHZldGgxIHVwXCYjMzQ7LCBucz1zdHIobnNfcikpXG4mIzQzO1xuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcbiYjNDM7ICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFwmIzM0O3ZldGgxXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCA2MDApLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCA2MDApKVxuJiM0MzsgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFwmIzM0O25vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XG4mIzQzOyAgICAgICAgICAgIHJldHVyblxuJiM0MztcbiYjNDM7ICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCAwKSlcbiYjNDM7ICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCByb3V0ZXMpXG4mIzQzOyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XG4mIzQzOyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxuJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7cmEtd2l0aGRyYXduJiMzOTspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcbiYjNDM7ICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MztcbiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoxOjomIzM5OylcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtkZWwtcmVhc29uJiMzOTssIGF0dHJzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDt1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cJiMzNDspXG4mIzQzO1xuJiM0MztcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuJiM0MzsgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBpZiBfX25hbWVfXyA9PSBcJiMzNDtfX21haW5fX1wmIzM0OzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxODo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtydDZfZHVtcF9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2ZpYjZfcnVuX2djJiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiOWFlNzAwNmM5OTcwZjEyNGJkOTFkMDJmMmJlN2FkY2RiZDRiZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxODo1OTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZTM3YTEzMDFlZjFkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnRhLWRlbC1yZWFzb24tCiYjNDM7ICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb24KJiM0MzsgICAgZW50cmllczoKJiM0MzsgICAgICAtIHVuc3BlYwomIzQzOyAgICAgIC0gZXhwaXJlZAomIzQzOyAgICAgIC0gcmEtd2l0aGRyYXduCiAKIGF0dHJpYnV0ZS1zZXRzOgogICAtCkBAIC0xODUsNiAmIzQzOzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW4KICAgICAgICAgZGlzcGxheS1oaW50OiBoZXgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZWwtcmVhc29uCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IGRlbC1yZWFzb24KICAgLQogICAgIG5hbWU6IG1ldHJpY3MKICAgICBuYW1lLXByZWZpeDogcnRheC0KQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gZHBvcnQKICAgICAgICAgICAgIC0gbmgtaWQKICAgICAgICAgICAgIC0gZmxvd2xhYmVsCiYjNDM7ICAgICAgICAgICAgLSBkZWwtcmVhc29uCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNgpAQCAtMzEzLDcgJiM0MzszMjcsMzggQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNAotICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnMKJiM0MzsgICAgICAgICAgIyBkZWwtcmVhc29uIGlzIG5vdGlmaWNhdGlvbi1vbmx5LiBJdCBpcyBhYm92ZQomIzQzOyAgICAgICAgICAjIHN0cmljdF9zdGFydF90eXBlIGluIHJ0bV9pcHY2X3BvbGljeSwgc28gdGhlIGtlcm5lbCByZWplY3RzCiYjNDM7ICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICZhbXA7cm91dGUtcmVxLWF0dHJzCiYjNDM7ICAgICAgICAgICAgLSBkc3QKJiM0MzsgICAgICAgICAgICAtIHNyYwomIzQzOyAgICAgICAgICAgIC0gaWlmCiYjNDM7ICAgICAgICAgICAgLSBvaWYKJiM0MzsgICAgICAgICAgICAtIGdhdGV3YXkKJiM0MzsgICAgICAgICAgICAtIHByaW9yaXR5CiYjNDM7ICAgICAgICAgICAgLSBwcmVmc3JjCiYjNDM7ICAgICAgICAgICAgLSBtZXRyaWNzCiYjNDM7ICAgICAgICAgICAgLSBtdWx0aXBhdGgKJiM0MzsgICAgICAgICAgICAtIGZsb3cKJiM0MzsgICAgICAgICAgICAtIGNhY2hlaW5mbwomIzQzOyAgICAgICAgICAgIC0gdGFibGUKJiM0MzsgICAgICAgICAgICAtIG1hcmsKJiM0MzsgICAgICAgICAgICAtIG1mYy1zdGF0cwomIzQzOyAgICAgICAgICAgIC0gdmlhCiYjNDM7ICAgICAgICAgICAgLSBuZXdkc3QKJiM0MzsgICAgICAgICAgICAtIHByZWYKJiM0MzsgICAgICAgICAgICAtIGVuY2FwLXR5cGUKJiM0MzsgICAgICAgICAgICAtIGVuY2FwCiYjNDM7ICAgICAgICAgICAgLSBleHBpcmVzCiYjNDM7ICAgICAgICAgICAgLSBwYWQKJiM0MzsgICAgICAgICAgICAtIHVpZAomIzQzOyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZQomIzQzOyAgICAgICAgICAgIC0gaXAtcHJvdG8KJiM0MzsgICAgICAgICAgICAtIHNwb3J0CiYjNDM7ICAgICAgICAgICAgLSBkcG9ydAomIzQzOyAgICAgICAgICAgIC0gbmgtaWQKJiM0MzsgICAgICAgICAgICAtIGZsb3dsYWJlbAogICAgIC0KICAgICAgIG5hbWU6IGRlbHJvdXRlCiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZQpAQCAtMzIxLDQgJiM0MzszNjYsMjMgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNQotICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnMKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmCiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLgomIzQzOyAgICAgIHZhbHVlOiAyNAomIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGUKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjUKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7CiYjNDM7bWNhc3QtZ3JvdXBzOgomIzQzOyAgbGlzdDoKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZQomIzQzOyAgICAgIHZhbHVlOiA3CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCA5Y2QyN2UxYjliNjkyLi5jNmRjMjNhNDJjMTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC00NjgsNyAmIzQzOzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LAogCiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pOwomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pOwogCiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsCiAJCQkgdW5zaWduZWQgbG9uZyBub3cpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Li45MmFkNWEwZDAzYTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMTI4LDEyICYjNDM7MTI4LDIxIEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksCiYjNDM7CQkgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJCQkgICAgIGJvb2wgc2tpcF9ub3RpZnkpCiB7CiAJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkJCSAgICBib29sIHNraXBfbm90aWZ5LAomIzQzOwkJCQkgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7fQogI2VuZGlmCiAKIHZvaWQgcnQ2X2ZsdXNoX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqZjZpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAyNzI2NWZkMzFlNWZjLi5mZTAwZTYyNGYzYzNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAJUlRBX0RQT1JULAogCVJUQV9OSF9JRCwKIAlSVEFfRkxPV0xBQkVMLAomIzQzOwlSVEFfREVMX1JFQVNPTiwKIAlfX1JUQV9NQVgKIH07CiAKQEAgLTQwNyw2ICYjNDM7NDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQogI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAKJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi4KJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uCiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhCiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdAomIzQzOyAqIHRyZWF0ICYjMzQ7YWJzZW50JiMzNDsgYW5kICYjMzQ7dW5zcGVjJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuCiYjNDM7ICovCiYjNDM7ZW51bSBydGFfZGVsX3JlYXNvbiB7CiYjNDM7CVJUQV9ERUxfUkVBU09OX1VOU1BFQywJCS8qIGNhdXNlIG5vdCByZWNvcmRlZCAqLwomIzQzOwlSVEFfREVMX1JFQVNPTl9FWFBJUkVELAkJLyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovCiYjNDM7CVJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUQV9ERUxfUkVBU09OX01BWAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBSVEFfREVMX1JFQVNPTl9NQVggKF9fUlRBX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjBjM2QzOGY2OWZjNDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLAomIzQzOwkJCQkJCSAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJCQlydCA9IE5VTEw7CiAJCQl9IGVsc2UgewogCQkJCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggYTEzMGNkZmFlYmZiZS4uMTU5ZGIxMGE4NDZjYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTk2Niw3ICYjNDM7MTk2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKLQkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzOwkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NSwxMyAmIzQzOzIwNTYsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAogCWZpYjZfaW5mb19yZWxlYXNlKHJ0KTsKIH0KIAogLyogTmVlZCB0byBvd24gdGFibGUtJmd0O3RiNl9sb2NrICovCi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwOwpAQCAtMjA5MCw3ICYjNDM7MjA5Miw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAJCWlmIChydCA9PSBjdXIpIHsKIAkJCWlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKQogCQkJCWZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLSZndDtubF9uZXQpOwotCQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pOwomIzQzOwkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJ0cF9uZXh0ID0gJmFtcDtjdXItJmd0O2ZpYjZfbmV4dDsKQEAgLTIyNTIsNyAmIzQzOzIyNTQsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpCiAJCXJlcyA9IGMtJmd0O2Z1bmMocnQsIGMtJmd0O2FyZyk7CiAJCWlmIChyZXMgPT0gLTEpIHsKIAkJCXctJmd0O2xlYWYgPSBydDsKLQkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHICZndDs9IDIKIAkJCQlwcl9kZWJ1ZygmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiYjMzQ7LApAQCAtMjQwMCw3ICYjNDM7MjQwMiw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgJmFtcDt0YjYtJmd0O3RiNl9nY19obGlzdCwgZ2NfbGluaykKIAkJaWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSkKLQkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmODY3ZWM4ZDNkOTA1Li43MTNkYjkwODlkNWUxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsCiYjNDM7CQkJCSAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6CiYjNDM7CQkJCQkJICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBmYzQyZDY3ZTU4MjI2Li45NGY5NjQ2ZDVlYmMzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pOwogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAogCQkJCQlnd2FkZHIsIGRldik7CiAKIAlpZiAocnQgJmFtcDsmYW1wOyAhbGlmZXRpbWUpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQllbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKQEAgLTM5ODYsNyAmIzQzOzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAKIAl0YWJsZSA9IHJ0LSZndDtmaWI2X3RhYmxlOwogCXNwaW5fbG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7Ci0JZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwomIzQzOwllcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogCiBvdXQ6CkBAIC0zOTk0LDE0ICYjNDM7Mzk5NSwyMCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSwKJiM0MzsJCSAgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0gewogCQkubmxfbmV0ID0gbmV0LAogCQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeQogCX07CiAKLQlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8pOwomIzQzOwlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8sIGRlbF9yZWFzb24pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIHNraXBfbm90aWZ5LCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogfQogCiBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsCiAJCQkJCSAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLAotCQkJCQkgIGluZm8tJmd0O3BvcnRpZCwgc2VxLCAwKSAmbHQ7IDApIHsKJiM0MzsJCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDAsCiYjNDM7CQkJCQkgIFJUQV9ERUxfUkVBU09OX1VOU1BFQykgJmx0OyAwKSB7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJc2tiID0gTlVMTDsKIAkJCX0gZWxzZQpAQCAtNDA2NCwxMyAmIzQzOzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLAogCQkJCQkgJmFtcDtydC0mZ3Q7ZmliNl9zaWJsaW5ncywKIAkJCQkJIGZpYjZfc2libGluZ3MpIHsKLQkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pOwomIzQzOwkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCX0KIAotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIG91dF9wdXQ6CkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLAogCQkJCWlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJZXJyID0gIF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbyk7CiYjNDM7CQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbywKJiM0MzsJCQkJCQkgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGNmZy0mZ3Q7ZmNfbmhfaWQpCkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLAogCiAJCQkvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi8KIAkJCWlmIChjZmctJmd0O2ZjX2ZsYWdzICZhbXA7IFJURl9HQVRFV0FZKQotCQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbyk7CiYjNDM7CQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbywKJiM0MzsJCQkJCQkgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJZWxzZQogCQkJCWVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTsKIAkJCWJyZWFrOwpAQCAtNTczOSw2ICYjNDM7NTc0OSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqLwogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqLwomIzQzOwkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi8KIAkgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47CiB9CiAKQEAgLTU3NzUsNyAmIzQzOzU3ODYsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7CQkJIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7CiAJc3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7CkBAIC01OTU0LDYgJiM0Mzs1OTY1LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LSZndDtlcnJvciA6IDApICZsdDsgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKJiM0MzsJaWYgKGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcwLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTE5LDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY291bnQmIzQzOyYjNDM7OwpAQCAtNjMzNiwxMiAmIzQzOzYzNTMsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTcsOCAmIzQzOzYzNzYsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsCiYjNDM7CQkJICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNjM3Nyw3ICYjNDM7NjM5Nyw3IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIGV2ZW50LCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzKTsKJiM0MzsJCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi8KQEAgLTYzOTgsNiAmIzQzOzY0MTgsMTggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOwogfQogCiYjNDM7dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpCiYjNDM7ewomIzQzOwlfX2luZXQ2X3J0X25vdGlmeShldmVudCwgcnQsIGluZm8sIG5sbV9mbGFncywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwogdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQkgICAgc3RydWN0IG5sX2luZm8gKmluZm8pCiB7CkBAIC02NDEwLDcgJiM0Mzs2NDQyLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC02NDYzLDcgJiM0Mzs2NDk2LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLAogCX0KIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGY2aSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLCAwLAotCQkJICAgIDAsIDApOwomIzQzOwkJCSAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQppbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFwKICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjCiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHMKIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFwKLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGluawogCiBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LApAQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRkZXZTaW0mIzM0OywgJiMzNDtOZXRkZXZTaW1EZXYmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssICYjMzQ7UFNQRmFtaWx5JiMzNDssICYjMzQ7TmxFcnJvciYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssCi0gICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCiYjNDM7ICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQppbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQpAQCAtMjksNyAmIzQzOzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZToKIAogX19hbGxfXyA9IFsKICAgICAmIzM0O05sRXJyb3ImIzM0OywgJiMzNDtObFBvbGljeSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0OywgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtTUEVDX1BBVEgmIzM0OywKLSAgICAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywKJiM0MzsgICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssCiAgICAgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssCiAgICAgJiMzNDtQU1BGYW1pbHkmIzM0OywKIF0KQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQogCiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6CiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpCiYjNDM7CiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7bmV0ZGV2LnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQppbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmUKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwpAQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICBrc2Z0X3RydWUoZiYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uJiMzNDsgaW4gY21kX29iai5zdGRvdXQsCiAgICAgICAgICAgICAgIGYmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfSYjMzQ7KQogCiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKQomIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoJiMzNDtydG5sZ3JwLWlwdjYtcm91dGUmIzM0OykKJiM0MzsgICAgcmV0dXJuIHJ0bmwKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOgomIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XQomIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBhdHRycwomIzQzOyAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzOwomIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpCiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDoKJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRycwomIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6CiYjNDM7ICAgIHdpdGggb3BlbihmJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9JiMzNDssICYjMzQ7dyYjMzQ7KSBhcyBmOgomIzQzOyAgICAgICAgZi53cml0ZShmJiMzNDt7dmFsdWV9XG4mIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtyb3V0ZS9nY19pbnRlcnZhbCYjMzQ7LCAyKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMiYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSwKJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lcgomIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKQomIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpbwomIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF0KJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW8KJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcikKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMCkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KQomIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpCiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSkKJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsCiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkJiMzNDssIDApCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cCYjMzQ7LCBucz1zdHIobnNfaCkpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cCYjMzQ7LCBucz1zdHIobnNfcikpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpCiYjNDM7ICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsICYjMzQ7dmV0aDEmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCA2MDApLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpCiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCAmIzM0O25vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkJiMzNDspCiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOgomIzQzOyAgICAgICAgICAgIHJldHVybgomIzQzOwomIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksCiYjNDM7ICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCAwKSkKJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcykKJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOgomIzQzOyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KQomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGYmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX0mIzM0OykKJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdCkKJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KQomIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NCYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtkZWwtcmVhc29uJiMzOTssIGF0dHJzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKQomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKQogICAgIGtzZnRfZXhpdCgpCiAKIGlmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElQdjYgUm91dGUgRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgd2FycmFudHMgYSBmdXp6aW5nIGNhbXBhaWduLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGVzLCBhbmQgdGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBkb3VidC4gVGhlIGtlcm5lbCBmb2xrcyBhcmUgc3RhcnRpbmcgdG8gcGFzcyBzb21lIG1vcmUgaW5mb3JtYXRpb24uCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgbGlrZSBgZmliNl9kZWxgIGFuZCBgaXA2X2RlbF9ydGAgdG8gYWNjZXB0IGEgYGRlbF9yZWFzb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgaHVnZSBhbmQgd2hlcmUgbW9zdCBvZiB0aGUgd29yayBpcyBnb2luZyB0byBiZS4gSXQgdGhlbiBjYXNjYWRlcyBvdXR3YXJkIHRvIHVwZGF0ZSB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbXMsIGBydDZfZmlsbF9ub2RlYCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgc28gdGhhdCB0aGV5IGFjdHVhbGx5IHVzZSB0aGlzIG5ldyBhdHRyaWJ1dGUuIFRoZXkmIzM5O3JlIHBhc3NpbmcgYSBkZWxldGUgcmVhc29uIG5vdywgYW5kIHRoZSBjb25kaXRpb25zIGFyZSBkZWZpbmVkLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIHNldHRpbmcgdGhlIGRlbGV0ZSByZWFzb24gYmFzZWQgb24gdGhlIGNhdXNlLiBFeHBpcmVkIHJvdXRlcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGdldCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAuIFJBIHdpdGhkcmF3YWxzIGdldCBgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYC4gRXZlcnl0aGluZyBlbHNlIGRlZmF1bHRzIHRvIGBSVEFfREVMX1JFQVNPTl9VTlNQRUNgLgoKU28sIHRoZSBrZXkgaGVyZSBpcyBub3QganVzdCB0aGF0IGl0JiMzOTtzIGEgbmV3IGF0dHJpYnV0ZSwgYnV0IHRoYXQgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBJUHY2IHJvdXRpbmcgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBhY3R1YWwgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdGFyZ2V0LiBgZmliNl9kZWxgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGJ1dCBhcyBpdCYjMzk7cyBpbnRlcm5hbCwgd2UmIzM5O2xsIGhhdmUgdG8gZmluZCB0aGUgZW50cnkgcG9pbnRzLgoKVGhlIHRyaWdnZXIgcG9pbnRzIGZvciBmdXp6aW5nIGFyZSwgZ2VuZXJhbGx5OgoqICAgTmV0bGluayByb3V0ZSBkZWxldGlvbiAod2hlcmUgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aCBgUlRBX0RFTF9SRUFTT05fVU5TUEVDYCBtb3N0bHksIHRob3VnaCBpdCB3aWxsIGV4ZXJjaXNlIHRoZSBwYXRocykKKiAgIElQdjYgcm91dGUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB2aWEgYGZpYjZfZ2NfdGFibGVgLCBhbmQgYWxzbywgcHJvYmFibHkgYGZpYjZfcnVuX2djYAoqICAgUkEgcHJvY2Vzc2luZzogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfcm91dGVfcmN2YC4gVGhpcyBsb29rcyBqdWljeS4KKiAgIE5ldGxpbmsgcm91dGUgZHVtcC9nZXQsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZm9jdXMuCgpUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfcm91dGVfcmN2YCwgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB3aWxsIGJlOgoqICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgCiogICBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAKKiAgIGBydDZfcm91dGVfcmN2YAoqICAgYGZpYjZfZ2NfdGFibGVgIChhbmQgbGV0JiMzOTtzIGNoZWNrIGZvciBgZmliNl9ydW5fZ2NgIGFzIHdlbGwpLgoqICAgYGluZXQ2X3J0bV9kZWxyb3V0ZWAgaXMgYW4gaW50ZXJlc3Rpbmcgb25lIGJlY2F1c2UgaXQgdHJpZ2dlcnMgYGlwNl9yb3V0ZV9kZWxgIHdoaWNoIGNhbGxzIGBfX2lwNl9kZWxfcnRgLgoKSSB3aWxsIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIG9yIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHksIGFuZCB3aGV0aGVyIGBydDZfcm91dGVfcmN2YCBpcyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBydDZfcm91dGVfcmN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTIwOD12b2lkIHJ0Nl9wdXJnZV9kZmx0X3JvdXRlcnMoc3RydWN0IG5ldCAqbmV0KTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIwOS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjIxMDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjExLVx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtOTY5LSNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxubmV0L2lwdjYvcm91dGUuYy05NzEtXHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUm91dGluZyBUYWJsZSBhbmQgTmVpZ2hib3IgRGlzY292ZXJ5IFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgcnQ2X3JvdXRlX3JjdmAgLSB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG1vZHVsZXMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGl0cyBpbXBhY3Qgb24gb3RoZXIgbW9kdWxlcyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtLiBBbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLi4uc2FtZSBkZWFsLiBOb24tc3RhdGljLCBzbyB0aGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseS4gT2theSwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLCBidXQgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKTm93LCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAuLi50aGF0IG9uZSBpcyByaW5naW5nIGEgYmVsbC4gSXMgdGhhdCBzdGF0aWMgb3Igbm90PyBJICp0aGluayogaXQgbWlnaHQgYmUsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gSXQmIzM5O3MgY3J1Y2lhbCwgYmVjYXVzZSBhIHN0YXRpYyBmdW5jdGlvbiBpbXBsaWVzIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBtZWFuaW5nIGl0JiMzOTtzIHByaW1hcmlseSB1c2VkIHdpdGhpbiB0aGUgZGVmaW5pbmcgc291cmNlIGZpbGUsIHJpZ2h0PyBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZW4gY2hhbmdlcyB0byBpdCBhcmUgbGVzcyBsaWtlbHkgdG8gcmlwcGxlIG91dCBhbmQgaGF2ZSB3aWRlLXJhbmdpbmcgY29uc2VxdWVuY2VzIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBvciBhZmZlY3QgYSBtb2R1bGUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHNhZmUgYW5kIHdpbGwgcmVtYWluIGxhcmdlbHkgdGhlIHNhbWUuIEJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24ganVzdCB0byBiZSBzdXJlLiBJdCYjMzk7cyBhbHdheXMgYmVzdCB0byBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGFueSBmdW5jdGlvbiB5b3UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHN0YXRpYykuKiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25kaXNjLmM9MTE4Mj1zdGF0aWMgdm9pZCBuZGlzY19yYV91c2Vyb3B0KHN0cnVjdCBza19idWZmICpyYSwgc3RydWN0IG5kX29wdF9oZHIgKm9wdClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzAtXG5uZXQvaXB2Ni9uZGlzYy5jOjEyMzE6c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L25kaXNjLmMtMTIzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGlzY292ZXJ5IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIOKAkyBpdCYjMzk7cyBzdGF0aWMsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0cyBiZWhhdmlvciBpcyBwcmV0dHkgd2VsbC1kZWZpbmVkLCBhbmQgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggc29tZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGNvbXBsZXggYmVhc3QuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB3aGVyZSB0aGluZ3Mga2ljayBvZmYsIGlzIGBuZGlzY19yY3ZgLiBTbywgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIGd1biBmb3IgdGhlIHdob2xlIHByb2Nlc3MuIExldCYjMzk7cyBkaWcgaW50byBgbmRpc2NfcmN2YCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBkaXNjb3ZlcnkgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKS4qIG5kaXNjX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBJUHY2IE5laWdoYm9yaG9vZCBEaXNjb3ZlcnkgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgTmVpZ2hib3Job29kIERpc2NvdmVyeSBzdHVmZiB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZGlzY19yY3ZgIHJlc2lkZXMuIEl0JiMzOTtzIG9mdGVuIGVhc3kgdG8gbWlzcyBjcnVjaWFsIGRldGFpbHMgd2l0aGluIGEgbGFyZ2UgY29kZWJhc2UuIE15IGluaXRpYWwgc2VhcmNoIGRpZG4mIzM5O3QgeWllbGQgYW4gaW1tZWRpYXRlIGFuc3dlciwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHJlZmluZSBteSBzZWFyY2ggdG8gZmluZCB3aGVyZSBgbmRpc2NfcmN2YCBpcyBsb2NhdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLWhhISBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBuZXQvaXB2Ni9uZGlzYy5jYC4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBJUHY2IG5laWdoYm9yIGRpc2NvdmVyeSBsb2dpYy4gR29vZC4gTm93IHRoYXQgSSBrbm93IHRoZSBsb2NhdGlvbiwgSSBjYW4gc3RhcnQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kaXNjX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZGlzYy5oPTQwND12b2lkIG5kaXNjX2NsZWFudXAodm9pZCk7XG5pbmNsdWRlL25ldC9uZGlzYy5oLTQwNS1cbmluY2x1ZGUvbmV0L25kaXNjLmg6NDA2OmVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L25kaXNjLmgtNDA3LVxuLS1cbm5ldC9pcHY2L2ljbXAuYz0xMTAxPXN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMTkyLVx0Y2FzZSBORElTQ19SRURJUkVDVDpcbm5ldC9pcHY2L2ljbXAuYzoxMTkzOlx0XHRyZWFzb24gPSBuZGlzY19yY3Yoc2tiKTtcbm5ldC9pcHY2L2ljbXAuYy0xMTk0LVx0XHRicmVhaztcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE3OTE9c3RhdGljIGJvb2wgbmRpc2Nfc3VwcHJlc3NfZnJhZ19uZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTgwNC1cbm5ldC9pcHY2L25kaXNjLmM6MTgwNTplbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L25kaXNjLmMtMTgwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIHRoZSBTdGF0aWMgRGVjbGFyYXRpb24gb2YgUmVsZXZhbnQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3Q6IGBuZGlzY19yY3ZgIGlzIGluZGVlZCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjaGVja3Mgb3V0LiBCdXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgPyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlY2xhcmF0aW9uIHN0YXR1cyBvZiB0aGF0IG9uZSBhcyB3ZWxsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBhZGRyY29uZl9wcmVmaXhfcmN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU1LVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTI4Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIGludCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMwNDp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzA1LVx0XHRcdCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI2ODk9c3RhdGljIGJvb2wgaXNfYWRkcl9tb2RlX2dlbmVyYXRlX3N0YWJsZShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MjY5NTppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTYtXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI3OTY9RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU1NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJUFY2IFJvdXRpbmcgSXNzdWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjYgcm91dGluZy4uLiBzcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBgYWRkcmNvbmZfcHJlZml4X3JjdmAuIFRoZSBpbW1lZGlhdGUgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIHJhaXNlcyBhIGZsYWcuIEhtbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTtkIGV4cGVjdCBnaXZlbiBpdHMgcm9sZSwgcG90ZW50aWFsbHkgaW5kaWNhdGluZyBicm9hZGVyIHNjb3BlIHRoYW4gbWlnaHQgYmUgaW50ZW5kZWQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCwgdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZG93biB0aGUgbGluZS4KCk5vdywgbXkgbWluZCBzaGlmdHMgdG8gb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjayB0aGUgaW1wYWN0IG9uIGBpcDZfZGVsX3J0YCBhbmQsIHNwZWNpZmljYWxseSwgYGlwNl9kZWxfcnRfcmVhc29uYC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYW55IGludGVyY29ubmVjdGVkbmVzcyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyByZWdhcmRpbmcgdGhlaXIgYmVoYXZpb3IgcmVnYXJkaW5nIHJvdXRlIGRlbGV0aW9uIGFuZCByZWFzb24uIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzIG9yIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZW0/IEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIHRoaXMgc3BhY2UgdG8gdW5kZXJzdGFuZCBpZiBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgcGxheWluZyBuaWNlIHdpdGggdGhlbS4gUGVyaGFwcyB0aGUgcHJvYmxlbSBpc24mIzM5O3QgaXNvbGF0ZWQsIGFuZCB0aGV5IHJlbGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBpcDZfZGVsX3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTEyOD1pbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0xMjktI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoxMzA6aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEzMi1cdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk5Ny1cbm5ldC9pcHY2L3JvdXRlLmM6Mzk5ODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcbm5ldC9pcHY2L3JvdXRlLmMtMzk5OS1cdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNDAwOC1cbm5ldC9pcHY2L3JvdXRlLmM6NDAwOTppbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxubmV0L2lwdjYvcm91dGUuYy00MDEwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIHJvdXRpbmc6CgoqKkFuYWx5emluZyBJUHY2IFJvdXRlIERlbGV0aW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgaXA2X2RlbF9ydGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAgYXJlICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQgc3VnZ2VzdHMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgZXhwb3NlZCwgcGVyaGFwcyB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3IgcGFydHMgb2YgdGhlIGtlcm5lbCBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50LiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSBmb3IgdXNhZ2Ugb3IgY2FsbCBzaXRlcy4gTW9yZSBjb250ZXh0IGlzIHJlcXVpcmVkLgoKQnV0IHRoYXQgbWFrZXMgbWUgdGhpbmssIHdoYXQgYWJvdXQgdGhlIFJUTV9ERUxST1VURSBoYW5kbGVyIGZvciBJUHY2PyBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgaW5ldDZfcnRtX2RlbHJvdXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgcm91dGUgaXMgZGVsZXRlZCB2aWEgdGhlIHJvdXRpbmcgbWVzc2FnZSBBUEkuIEFyZSBgaXA2X2RlbF9ydGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAgY2FsbGVkICp3aXRoaW4qIHRoYXQgZnVuY3Rpb24sIG9yIGFyZSB0aGV5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZT8gSXMgdGhlcmUgYW4gaW50ZXJhY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgaGllcmFyY2h5LiBUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWxseSBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24gdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBpbmV0Nl9ydG1fZGVscm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJUHY2IFJvdXRlIERlbGV0aW9uIC0gQSBRdWljayBDaGVjayoqCgpIbW0sIHNvIHRoZXkmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVtb3ZpbmcgYSByb3V0ZSBpbiBJUHY2LiBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5jdGlvbiBuYW1lIGNvcnJlY3QuIEFoLCB5ZXMsIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIGBpbmV0Nl9ydG1fZGVscm91dGVgLiBHb29kLiBOb3cgSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hlcmUgdGhhdCBsaXZlcy4uLiBBaCwgeWVzLCBgbmV0L2lwdjYvcm91dGUuY2AuIE9mIGNvdXJzZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIElQdjYgcm91dGluZyBsb2dpYyByZXNpZGVzLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgb3BlcmF0aW9uLCBvciBwb3RlbnRpYWxseSBhIGNhbiBvZiB3b3JtcywgZGVwZW5kaW5nIG9uIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIHRoZSBhZGphY2VudCBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBkZXRlcm1pbmUgd2hhdCBtaWdodCBjYXVzZSBhbnkgY29tcGxleGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldDZfcnRtX2RlbHJvdXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9NTYwMj1zdGF0aWMgaW50IGlwNl9yb3V0ZV9tdWx0aXBhdGhfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTY0MS1cbm5ldC9pcHY2L3JvdXRlLmM6NTY0MjpzdGF0aWMgaW50IGluZXQ2X3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY2L3JvdXRlLmMtNTY0My1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvcm91dGUuYz02OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBpcDZfcm91dGVfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy02OTIwLVx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fREVMUk9VVEUsXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MjE6XHQgLmRvaXQgPSBpbmV0Nl9ydG1fZGVscm91dGUsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyMi1cdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUEZfSU5FVDYsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE0NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIE1hbmFnZW1lbnQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoZSBJUHY2IHJvdXRlIG1hbmFnZW1lbnQgY29kZS4gSSBub3RpY2VkIGBpbmV0Nl9ydG1fZGVscm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IG9ubHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIEl0JiMzOTtzIG5vdCBkZXNpZ25lZCB0byBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLgoKVGhhdCB0aGVuIGdvdCBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYGluZXQ2X3J0bV9nZXRyb3V0ZWA/IElzIGl0IGFsc28gc3RhdGljLCBvciBpcyBpdCBleHBvc2VkIGluIGEgd2F5IHRoYXQgYWxsb3dzIGV4dGVybmFsIGFjY2Vzcz8gSWYgYGRlbHJvdXRlYCBpcyBzdGF0aWMsIGl0IGdpdmVzIG1lIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgYXJlIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYWNjZXNzLiBJcyB0aGVyZSBhIGNvbnNpc3RlbnQgcGF0dGVybiBhY3Jvc3MgZnVuY3Rpb25zPyBPciBpcyBpdCBhIHNwZWNpYWwgY2FzZT8gSSBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaW5ldDZfcnRtX2dldHJvdXRlYCBhbmQgc2VlIHdoYXQgdGhlIHN0b3J5IGlzIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBzdXJyb3VuZGluZyBJUHY2IHJvdXRpbmcgdGFibGUgbWFuaXB1bGF0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgQVBJIHN1cmZhY2UuIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSBhYm91dCBgZ2V0cm91dGVgIG9yIGBkZWxyb3V0ZWA/IFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0Nl9ydG1fZ2V0cm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz02MTU1PXN0YXRpYyBpbnQgaW5ldDZfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjIyOS1cbm5ldC9pcHY2L3JvdXRlLmM6NjIzMDpzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY2L3JvdXRlLmMtNjIzMS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvcm91dGUuYz02OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBpcDZfcm91dGVfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy02OTIyLVx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MjM6XHQgLmRvaXQgPSBpbmV0Nl9ydG1fZ2V0cm91dGUsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipOZXR3b3JrIFJvdXRpbmcgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyByb3V0aW5nIGNvZGUgYW5kIEkgc2VlIGBpbmV0Nl9ydG1fZ2V0cm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgZGVjbGFyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJvdXRpbmcgZnVuY3Rpb25zLCBhbmQgSSB3b25kZXIgaWYgSSBjYW4gdHJhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGJlIGltcGFjdGVkLgoKRG9lcyB0aGlzIGhhdmUgYW55IGltcGFjdCBvbiByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgcm91dGluZyBwcm9jZXNzPyBMZXQgbWUgdGhpbmsuIE15IG1pbmQganVtcHMgdG8gYW5vdGhlciBmdW5jdGlvbjogaG93IGlzIGBydDZfZHVtcF9yb3V0ZWAgaGFuZGxpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gb2YgYGluZXQ2X3J0bV9nZXRyb3V0ZWAgdGllcyBpbnRvIGZ1bmN0aW9ucyBjYWxsZWQgdG8gZHVtcCB0aGUgcm91dGluZyB0YWJsZXMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgc3RhdGljbmVzcyBoYXMgYW55IGltcGxpY2F0aW9ucyBvbiBkdW1waW5nIHRoZSByb3V0aW5nIGRhdGEsIG9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYSBtb3JlIGdyYW51bGFyIGNvbXBvbmVudCBvZiBhIG1vcmUgYnJvYWQgc2V0IG9mIGZ1bmN0aW9ucy4gSSBzaG91bGQgZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWQpLiogcnQ2X2R1bXBfcm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjIzPXN0cnVjdCBydDZfcnRubF9kdW1wX2FyZyB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjI5LVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjMwOmludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmksIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcCk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMzEtdm9pZCBydDZfbXR1X2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwMzQ9c3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjA4Ni0vKiBSZXR1cm4gLTEgaWYgZG9uZSB3aXRoIG5vZGUsIG51bWJlciBvZiBoYW5kbGVkIHJvdXRlcyBvbiBwYXJ0aWFsIGR1bXAgKi9cbm5ldC9pcHY2L3JvdXRlLmM6NjA4NzppbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbm5ldC9pcHY2L3JvdXRlLmMtNjA4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjQ1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSVB2NiBSb3V0ZSBOb3RpZmljYXRpb25zKioKCkhtbSwgc28gYHJ0Nl9kdW1wX3JvdXRlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgaXRzIHVzYWdlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHJvdXRpbmcgdGFibGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgbm90aWZpY2F0aW9ucz8gU3BlY2lmaWNhbGx5LCBgaW5ldDZfcnRfbm90aWZ5YCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgPyBBcmUgdGhlcmUgbnVhbmNlcyB0byB0aGVpciBvcGVyYXRpb24gdGhhdCBhZmZlY3QgaG93IHJvdXRlIG1vZGlmaWNhdGlvbnMgYXJlIHNpZ25hbGVkLCBhbmQgaG93IHRob3NlIG5vdGlmaWNhdGlvbnMgaW50ZXJhY3Qgd2l0aCB3aGF0ZXZlciBtZWNoYW5pc21zIHVzZSB0aG9zZSBmdW5jdGlvbnM/IEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIHRoZSBzYW1lIGFzIHRoZXkgZG8gaW4gSVB2NCB0byBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIG1vZGlmeSB0aGUgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2Ugbm90aWZpY2F0aW9uIHJvdXRpbmVzIGFyZSB1c2VkLiBBIGRlZXBlciBkaXZlIG1pZ2h0IHJldmVhbCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHJvdXRlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIGluIHRoZSBJUHY2IHJvdXRpbmcgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaD01MzQ9dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTM1LVx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NTM2OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTM3LVx0XHRcdCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjQyMT12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MjYtXG5uZXQvaXB2Ni9yb3V0ZS5jOjY0Mjc6dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbm5ldC9pcHY2L3JvdXRlLmMtNjQyOC1cdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYW5kIGBmaWI2X2RlbGAgYXJlIGJvdGggZGVjbGFyZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgaW1wbGllcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlaXIgaW1tZWRpYXRlIGltcGxlbWVudGF0aW9uIGZpbGUuIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBkZXNpZ25lZCBmb3Igd2lkZXIgbGlua2FnZSwgcG90ZW50aWFsbHkgZXhwb3J0ZWQgb3IgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBUaGF0IGRlc2lnbiBjaG9pY2Ugc3VnZ2VzdHMgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIGFuZCBwb3NzaWJseSBwYXJ0IG9mIGFuIEFQSSBmb3IgSVB2NiByb3V0ZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhc3Nlc3MgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBJdCBpbmRpY2F0ZXMgYSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaW50ZXJkZXBlbmRlbmNlIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggcmVmYWN0b3JpbmcsIG9wdGltaXphdGlvbiwgb3Igc2VjdXJpdHkgYXNzZXNzbWVudHMuIFRoZSAqd2h5KiBpcyB0aGUga2V5IHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKS4qIGZpYjZfZGVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3MC1cdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcyLVx0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0xOTY4PXN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjQtLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbm5ldC9pcHY2L2lwNl9maWIuYzoyMDY1OmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2Ni1cdCAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVB2NiBSb3V0aW5nIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbGlzdDogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgcnQ2X3JvdXRlX3JjdmAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpcDZfZGVsX3J0YCwgYHJ0Nl9kdW1wX3JvdXRlYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBhbmQgYGZpYjZfZGVsYC4gVGhlc2Ugc2VlbSB0byBiZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIElQdjYgcm91dGluZywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVtLgoKRmlyc3QsIGBDT05GSUdfSVBWNmAgaXMgYSBnaXZlbi4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBJUHY2LCBzbyB0aGF0JiMzOTtzIGEgYmFzZWxpbmUuIFRoZSB0ZXN0IHNjcmlwdCBhbHNvIG1lbnRpb25zIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCwgYW5kIHRoZXJlJiMzOTtzIGEgYEtzZnRTa2lwRXhgIGV4Y2VwdGlvbiB0aGF0IHJhaXNlcyBpZiBpdCYjMzk7cyBub3QgZm91bmQsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGNydWNpYWwgb3IgYXQgbGVhc3QgcGFydCBvZiB0aGUgaW50ZW5kZWQgdGVzdCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBJUFY2X1JPVVRFX0lORk9gIGNvbnRyb2xzIGFuZCBob3cgaXQgaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZXhhY3QgY29udGV4dCBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHRlc3RlZCBhbmQgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfUk9VVEVfSU5GTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTIxPWNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODQxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnM6IElQdjYgUm91dGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uICp5ZXMsIEkgY29uZmlybSB0aGF0IGBJUFY2X1JPVVRFX0lORk9gIGlzIGEgcGVyZmVjdGx5IHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiogTm8gc3VycHJpc2VzIHRoZXJlLiBPZiBjb3Vyc2UsIHdoZW4gZGVhbGluZyB3aXRoIElQdjYgcm91dGluZywgeW91JiMzOTtyZSBnb2luZyB0byB1c2UgdGhpcy4gTm93LCBsZXQgbWUgdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGEgYml0IGRlZXBlci4uLiBhaCwgYW5kIGl0JiMzOTtzIGNyeXN0YWwgY2xlYXIgdGhhdCBgSVBWNl9ST1VURVJfUFJFRmAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYElQVjZfUk9VVEVfSU5GT2AsIGlzbiYjMzk7dCBpdD8gSXQgYWN0cyBhcyBhIGRlcGVuZGVuY3kuIFlvdSAqbmVlZCogdGhhdCBwcmVmZXJlbmNlIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHV0aWxpemUgdGhlIHJvdXRlIGluZm87IGl0JiMzOTtzIHByYWN0aWNhbGx5IGluc2VwYXJhYmxlIGZvciBjb3JyZWN0IGJlaGF2aW9yLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGNvcnJlY3RseSBjb25maWd1cmVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipJUFY2X1JPVVRFUl9QUkVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MzE9Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTM0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE3MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlciBQcmVmZXJlbmNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB3ZSBkZWZpbml0ZWx5IG5lZWQgYElQVjZfUk9VVEVSX1BSRUZgIGFuZCBgSVBWNl9ST1VURV9JTkZPYCBlbmFibGVkIGZvciB0aGlzIHNldHVwLiBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgIGNvdWxkIHBvdGVudGlhbGx5IGNvbWUgaW50byBwbGF5IHRvbywgYnV0IGl0IG1pZ2h0IG5vdCBiZSBhIGhhcmQgcmVxdWlyZW1lbnQgYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgY2hlY2sgaWYganVzdCBgQ09ORklHX0lQVjZgIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyDigJMgeWVwLCB0aGF0IHNlZW1zIHRvIGNvdmVyIHRoZSBiYXNpY3MuIEhvd2V2ZXIsIHRvIGFjdHVhbGx5IGhpdCB0aGUgY29kZSBwYXRoIHRoYXQgaGFuZGxlcyBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU9zKSB3aGVuIHRoZSBSQSBpcyB3aXRoZHJhd24sIHdlIGFic29sdXRlbHkgbmVlZCBgSVBWNl9ST1VURV9JTkZPYC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhhdCB0ZXN0IHNjcmlwdC4gQWhhLCBoZXJlIGl0IGlzOgoKYGBgcHl0aG9uCiAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhJiMzNDssIDIpCiAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvZm9yd2FyZGluZyYjMzQ7LCAwKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuJiMzNDssIDY0KQogICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQpgYGAKClRoZSBzY3JpcHQgdHJpZXMgdG8gc2V0IGBhY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbmAsIGFuZCBpZiB0aGF0IGZhaWxzIHdpdGggYSBgRmlsZU5vdEZvdW5kRXJyb3JgLCBpdCBza2lwcyB0aGUgdGVzdCBiZWNhdXNlIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCBpcyBtaXNzaW5nLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBTbywgeWVzLCBgSVBWNl9ST1VURV9JTkZPYCBpcyByZXF1aXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYGFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuYC4KCkxldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgIGNvZGUuIFllcCwgbG9va2luZyBhdCBgcnQ2X3JvdXRlX3JjdmAsIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiBUaGF0IGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01MS1cdF9fczMyXHRcdHJ0cl9wcm9iZV9pbnRlcnZhbDtcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjUyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01My1cdF9fczMyXHRcdGFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuO1xuLS1cbmluY2x1ZGUvbmV0L25kaXNjLmg9MTAwPXN0cnVjdCBuZGlzY19vcHRpb25zIHtcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAxLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdF9hcnJheVtfX05EX09QVF9BUlJBWV9NQVhdO1xuaW5jbHVkZS9uZXQvbmRpc2MuaDoxMDI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAzLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdHNfcmk7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODE9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTEtXHQucnRyX3Byb2JlX2ludGVydmFsXHQ9IDYwICogSFosXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIxMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTMtXHQuYWNjZXB0X3JhX3J0X2luZm9fbWluX3BsZW4gPSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjQ2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0IF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzYtXHQucnRyX3Byb2JlX2ludGVydmFsXHQ9IDYwICogSFosXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzgtXHQuYWNjZXB0X3JhX3J0X2luZm9fbWluX3BsZW4gPSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwMy1cdFx0amlmZmllc190b19tc2VjcyhSRUFEX09OQ0UoY25mLVx1MDAzZXJ0cl9wcm9iZV9pbnRlcnZhbCkpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzA0OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MDUtXHRhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01JTl9QTEVOXSA9XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzA3MC1cdH0sXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcwNzE6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzA3Mi1cdHtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTIyMD1zdHJ1Y3QgbmRpc2Nfb3B0aW9ucyAqbmRpc2NfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMjU2LVx0XHRcdGJyZWFrO1xubmV0L2lwdjYvbmRpc2MuYzoyNTc6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L25kaXNjLmMtMjU4LVx0XHRjYXNlIE5EX09QVF9ST1VURV9JTkZPOlxuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTQ5Ni1cbm5ldC9pcHY2L25kaXNjLmM6MTQ5NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvbmRpc2MuYy0xNDk4LVx0aWYgKCFSRUFEX09OQ0UoaW42X2Rldi1cdTAwM2VjbmYuYWNjZXB0X3JhX2Zyb21fbG9jYWwpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MTE1PXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTExOC1cbm5ldC9pcHY2L3JvdXRlLmM6MTE5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jLTEyMC1zdGF0aWMgc3RydWN0IGZpYjZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtOTY4LVxubmV0L2lwdjYvcm91dGUuYzo5Njk6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L3JvdXRlLmMtOTcwLWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG4tLVxubmV0L2lwdjYvcm91dGUuYz00MjM5PXN0YXRpYyB2b2lkIHJ0Nl9kb19yZWRpcmVjdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODEtXG5uZXQvaXB2Ni9yb3V0ZS5jOjQzODI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L3JvdXRlLmMtNDM4My1zdGF0aWMgc3RydWN0IGZpYjZfaW5mbyAqcnQ2X2dldF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMzQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgaW5kZWVkIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBtZWFuaW5nIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNsdWRlIGBJUFY2X1JPVVRFX0lORk9gIGFuZCBgSVBWNl9ST1VURVJfUFJFRmAgaW4gYEVuYWJsZUNvbmZpZ3NgLCBhbG9uZyB3aXRoIHRoZSBiYXNlIGBJUFY2YCBjb25maWd1cmF0aW9uLCBvZiBjb3Vyc2UuCgpOZXh0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJiMzOTt2ZSBnb3Q6IGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaXA2X2RlbF9ydGAsIGBydDZfZHVtcF9yb3V0ZWAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYW5kIGBmaWI2X2RlbGAuCgpSaWdodCwgbm93LCB3YWl0IGEgc2Vjb25kLi4uIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpcDZfZGVsX3J0YCBhcmUganVzdCB3cmFwcGVycyBmb3IgYF9faXA2X2RlbF9ydGAgd2l0aGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gT2theSwgbGV0JiMzOTtzIGNoZWNrIGlmIGBfX2lwNl9kZWxfcnRgIGlzIHN0YXRpYy4gWWVzLCBpdCYjMzk7cyBzdGF0aWMsIHdoaWNoIG1lYW5zIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpcDZfZGVsX3J0YCBhcmUgZmluZSB0byBpbmNsdWRlIGhlcmUuIEdvb2QuIFRoZW4gYGZpYjZfZGVsYCBpcyBpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFuZCBgcnQ2X2R1bXBfcm91dGVgIGFyZSBpbiBgbmV0L2lwdjYvcm91dGUuY2AuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBmaWI2X2RlbGAmIzM5O3MgdmlzaWJpbGl0eS4gSXQmIzM5O3MgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbmV0L2lwNl9maWIuaGAgYW5kIGRlZmluZWQgaW4gYG5ldC9pcHY2L2lwNl9maWIuY2A6CgpgYGBjCmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCgkgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbikKYGBgCgpTbyBpdCBpcyBub24tc3RhdGljLiBNYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIGdvIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uLgoKYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGlzIG5vbi1zdGF0aWMuCmBgYGMKdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pCmBgYApgcnQ2X3JvdXRlX3JjdmAgaXMgbm9uLXN0YXRpYzoKYGBgYwppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAoJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpCmBgYApgcnQ2X2R1bXBfcm91dGVgIGlzIG5vbi1zdGF0aWM6CmBgYGMKaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCmBgYApgaW5ldDZfcnRfZGVsX25vdGlmeWAgaXMgbm9uLXN0YXRpYzoKYGBgYwp2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAoJCQkgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQpgYGAKCkFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHRoaXM/CmBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBgZmliNl9ydW5fZ2NgIHdoaWNoIGlzIG5vbi1zdGF0aWMuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBmaWI2X3J1bl9nYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfZmliLmg9NTM5PXZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncyxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC01NDAtXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDo1NDE6dm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTQyLXZvaWQgZmliNl9nY19jbGVhbnVwKHZvaWQpO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNDA4PXN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQyNy1cbm5ldC9pcHY2L2lwNl9maWIuYzoyNDI4OnZvaWQgZmliNl9ydW5fZ2ModW5zaWduZWQgbG9uZyBleHBpcmVzLCBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQyOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTMwCgkJCQkJCQlvdXRwdXQ6IDIzMQoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYFJUQV9ERUxfUkVBU09OYCwgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgZm9yIElQdjYgcm91dGVzLiBUaGlzIGF0dHJpYnV0ZSB3aWxsIGluZGljYXRlIHRoZSByZWFzb24gYmVoaW5kIGEgcm91dGUmIzM5O3MgZGVsZXRpb24g4oCTIHRoaW5ncyBsaWtlIGV4cGlyYXRpb24gb3Igd2l0aGRyYXdhbCBmcm9tIGEgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKS4gVGhlIHByaW1hcnkgZm9jdXMgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gbW9kaWZ5IHRoZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtcywgYW5kIFJBIHByb2Nlc3NpbmcgdG8gaW5jb3Jwb3JhdGUgdGhpcyBuZXcgYXR0cmlidXRlIGludG8gcm91dGUgZGVsZXRpb24gcGF0aHMgYW5kIG5ldGxpbmsgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBhbmQgaXQgbmVjZXNzaXRhdGVzIGNhcmVmdWwgZnV6emluZyB0byBjb25maXJtIGNvcnJlY3QgYXR0cmlidXRlIGhhbmRsaW5nIGFuZCBwcmV2ZW50IGFueSByZWdyZXNzaW9uIGluIHJvdXRlIGRlbGV0aW9uIGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggdG91Y2hlcy4gVGhlIGBmaWI2X3J1bl9nY2AgaXMgbm9uLXN0YXRpYywgYW5kIGl0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRyaWdnZXJzIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgbm93IGluY29ycG9yYXRlcyB0aGlzIG5ldyBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAgcmVhc29uLiBUaGVuLCB0aGUgZW50cnkgcG9pbnQgZm9yIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYG5kaXNjX3JjdmAsIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgY3J1Y2lhbC4KCkhlcmUmIzM5O3MgbXkgcmVmaW5lZCBsaXN0IG9mIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZToKCiogICBgYWRkcmNvbmZfcHJlZml4X3JjdmA6IFRoaXMgd2lsbCBiZSBpbnZvbHZlZC4KKiAgIGBydDZfcm91dGVfcmN2YDogVGhpcyB3aWxsIGJlIGludm9sdmVkLgoqICAgYGlwNl9kZWxfcnRfcmVhc29uYDogVGhpcyBpcyBjcnVjaWFsIGFuZCB3aWxsIGxpa2VseSBiZSB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZnV6ei4KKiAgIGBydDZfZHVtcF9yb3V0ZWA6IEltcG9ydGFudCBmb3IgbmV0bGluayBkdW1wcy4KKiAgIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YDogSW52b2x2ZWQgaW4gbm90aWZpY2F0aW9ucy4KKiAgIGBmaWI2X2RlbGA6IFRoaXMgaXMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLgoqICAgYGZpYjZfcnVuX2djYDogV2UmIzM5O3JlIGluY29ycG9yYXRpbmcgdGhlIHJlYXNvbiBoZXJlLgoqICAgYG5kaXNjX3JjdmA6IEtleSBhcyB0aGUgZW50cnkgcG9pbnQgZm9yIHJvdXRlciBkaXNjb3ZlcnkuCgpgaXA2X2RlbF9ydGAgaXMganVzdCBhIHdyYXBwZXIsIHNvIGluY2x1ZGluZyBgaXA2X2RlbF9ydF9yZWFzb25gIGNvdmVycyBpdC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgcnQ2X2R1bXBfcm91dGVgIGlzIGNvcnJlY3QgZm9yIG5ldGxpbmsgZHVtcHMuIGBpbmV0Nl9ydG1fZ2V0cm91dGVgIGlzIHN0YXRpYywgc28gZm9jdXNpbmcgb24gYHJ0Nl9kdW1wX3JvdXRlYCBmb3Igcm91dGUgZHVtcHMgbWFrZXMgc2Vuc2UuCgpGb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHBhdGNoIHRvdWNoZXMgYGZpYjZfZGVsYCwgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgbXVsdGlwbGUgdGFibGVzLCB0aHVzIG9ubHkgYElQVjZgLCBgSVBWNl9ST1VURVJfUFJFRmAsIGFuZCBgSVBWNl9ST1VURV9JTkZPYCBhcmUgY3J1Y2lhbC4gYElQVjZgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZSBvdmVyYWxsIGVmZmVjdHMgb2YgdGhlIHBhdGNoIHNpbmNlIGl0IG1vZGlmaWVzIGBmaWI2X2RlbGAsIHdoaWNoIGlzIHVzZWQgcmVnYXJkbGVzcyBvZiBtdWx0aXBsZSB0YWJsZXMuCgpJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBwcm92aWRlIG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtydDZfZHVtcF9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2ZpYjZfcnVuX2djJiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtydDZfZHVtcF9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2ZpYjZfcnVuX2djJiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE4OjU5OjU3LjU2MzkxMjc4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIyMzMyMjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCIsXG4gICAgXCJJUFY2X1JPVVRFX0lORk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICAgIFwicnQ2X2R1bXBfcm91dGVcIixcbiAgICBcImluZXQ2X3J0X2RlbF9ub3RpZnlcIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJmaWI2X3J1bl9nY1wiLFxuICAgIFwibmRpc2NfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlcyB0byByZXBvcnQgdGhlIHJlYXNvbiBmb3Igcm91dGUgZGVsZXRpb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGZ1bmN0aW9ucywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSBwcm9jZXNzaW5nIGxvZ2ljIHRvIHBsdW1iIHRoaXMgbmV3IGF0dHJpYnV0ZSB0aHJvdWdoIHRoZSByb3V0ZSBkZWxldGlvbiBwYXRocyBhbmQgbmV0bGluayBub3RpZmljYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgbmV3IGF0dHJpYnV0ZSBhbmQgbm8gcmVncmVzc2lvbnMgaW4gcm91dGUgZGVsZXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE4OjU5OjU3LjU2MzkxNzY5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTY5NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmI5YWU3MDA2Yzk5NzBmMTI0YmQ5MWQwMmYyYmU3YWRjZGJkNGJlNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxODo1OTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZTM3YTEzMDFlZjFkYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuQEAgLTc4LDYgKzc4LDE1IEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcXG4gICAgICAgICB0eXBlOiB1MzJcXG4rICAtXFxuKyAgICBuYW1lOiBkZWwtcmVhc29uXFxuKyAgICB0eXBlOiBlbnVtXFxuKyAgICBuYW1lLXByZWZpeDogcnRhLWRlbC1yZWFzb24tXFxuKyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uXFxuKyAgICBlbnRyaWVzOlxcbisgICAgICAtIHVuc3BlY1xcbisgICAgICAtIGV4cGlyZWRcXG4rICAgICAgLSByYS13aXRoZHJhd25cXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXFxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXFxuICAgLVxcbiAgICAgbmFtZTogbWV0cmljc1xcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXFxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIGRwb3J0XFxuICAgICAgICAgICAgIC0gbmgtaWRcXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4rICAgICAgICAgICAgLSBkZWwtcmVhc29uXFxuICAgICAgIGR1bXA6XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNlxcbkBAIC0zMTMsNyArMzI3LDM4IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgIGRvOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjRcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcXG4rICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcXG4rICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcXHUwMDI2cm91dGUtcmVxLWF0dHJzXFxuKyAgICAgICAgICAgIC0gZHN0XFxuKyAgICAgICAgICAgIC0gc3JjXFxuKyAgICAgICAgICAgIC0gaWlmXFxuKyAgICAgICAgICAgIC0gb2lmXFxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxcbisgICAgICAgICAgICAtIHByaW9yaXR5XFxuKyAgICAgICAgICAgIC0gcHJlZnNyY1xcbisgICAgICAgICAgICAtIG1ldHJpY3NcXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcXG4rICAgICAgICAgICAgLSBmbG93XFxuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gdGFibGVcXG4rICAgICAgICAgICAgLSBtYXJrXFxuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXFxuKyAgICAgICAgICAgIC0gdmlhXFxuKyAgICAgICAgICAgIC0gbmV3ZHN0XFxuKyAgICAgICAgICAgIC0gcHJlZlxcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcXG4rICAgICAgICAgICAgLSBlbmNhcFxcbisgICAgICAgICAgICAtIGV4cGlyZXNcXG4rICAgICAgICAgICAgLSBwYWRcXG4rICAgICAgICAgICAgLSB1aWRcXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXFxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cXG4rICAgICAgICAgICAgLSBzcG9ydFxcbisgICAgICAgICAgICAtIGRwb3J0XFxuKyAgICAgICAgICAgIC0gbmgtaWRcXG4rICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4gICAgIC1cXG4gICAgICAgbmFtZTogZGVscm91dGVcXG4gICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGVcXG5AQCAtMzIxLDQgKzM2NiwyMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgdmFsdWU6IDI1XFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiAqcm91dGUtcmVxLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNFxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNVxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuK1xcbittY2FzdC1ncm91cHM6XFxuKyAgbGlzdDpcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlXFxuKyAgICAgIHZhbHVlOiA3XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZVxcbisgICAgICB2YWx1ZTogMTFcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuaW5kZXggOWNkMjdlMWI5YjY5Mi4uYzZkYzIzYTQyYzExOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5AQCAtNDY4LDcgKzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gI2VuZGlmXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiBcXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBub3cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uOTJhZDVhMGQwM2EyNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuQEAgLTEyOCwxMiArMTI4LDIxIEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXFxuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxcbitcXHRcXHQgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbiBcXHRcXHRcXHQgICAgIGJvb2wgc2tpcF9ub3RpZnkpXFxuIHtcXG4gXFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbitcXHRcXHRcXHRcXHQgICAgYm9vbCBza2lwX25vdGlmeSxcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4re1xcbitcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIHZvaWQgcnQ2X2ZsdXNoX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uZmUwMGU2MjRmM2MzYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XFxuIFxcdFJUQV9EUE9SVCxcXG4gXFx0UlRBX05IX0lELFxcbiBcXHRSVEFfRkxPV0xBQkVMLFxcbitcXHRSVEFfREVMX1JFQVNPTixcXG4gXFx0X19SVEFfTUFYXFxuIH07XFxuIFxcbkBAIC00MDcsNiArNDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XFxuICNkZWZpbmUgUlRNX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSlcXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXFxuIFxcbisvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi5cXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxcbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcXG4rICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxcbisgKiB0cmVhdCBcXFwiYWJzZW50XFxcIiBhbmQgXFxcInVuc3BlY1xcXCIgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxcbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxcbisgKi9cXG4rZW51bSBydGFfZGVsX3JlYXNvbiB7XFxuK1xcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcXHRcXHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFxcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cXG4rXFx0X19SVEFfREVMX1JFQVNPTl9NQVhcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXFxuK1xcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxcbiAgKlxcbiAgKiBcXFwic3RydWN0IHJ0bmV4dGhvcFxcXCIgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5pbmRleCBmNmZhMjcxNWI0NTBiLi4wYzNkMzhmNjlmYzQzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbiBcXHRcXHRpZiAocnQpIHtcXG4gXFx0XFx0XFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXFxuIFxcdFxcdFxcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBhMTMwY2RmYWViZmJlLi4xNTlkYjEwYTg0NmNjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC0xOTY2LDcgKzE5NjYsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcXG4gXFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xcbkBAIC0yMDU1LDEzICsyMDU2LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuIFxcdFxcdFxcdGNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpO1xcbiBcXHR9XFxuIFxcdGlmICghaW5mby1cXHUwMDNlc2tpcF9ub3RpZnkpXFxuLVxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcXG4rXFx0XFx0aW5ldDZfcnRfZGVsX25vdGlmeShydCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcbiBcXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XFxuIH1cXG4gXFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVxcdTAwM2V0YjZfbG9jayAqL1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XFxuQEAgLTIwOTAsNyArMjA5Miw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGlmIChydCA9PSBjdXIpIHtcXG4gXFx0XFx0XFx0aWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpXFxuIFxcdFxcdFxcdFxcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVxcdTAwM2VubF9uZXQpO1xcbi1cXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XFxuK1xcdFxcdFxcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cnRwX25leHQgPSBcXHUwMDI2Y3VyLVxcdTAwM2VmaWI2X25leHQ7XFxuQEAgLTIyNTIsNyArMjI1NCw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4gXFx0XFx0cmVzID0gYy1cXHUwMDNlZnVuYyhydCwgYy1cXHUwMDNlYXJnKTtcXG4gXFx0XFx0aWYgKHJlcyA9PSAtMSkge1xcbiBcXHRcXHRcXHR3LVxcdTAwM2VsZWFmID0gcnQ7XFxuLVxcdFxcdFxcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKHJlcykge1xcbiAjaWYgUlQ2X0RFQlVHIFxcdTAwM2U9IDJcXG4gXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXFxcblxcXCIsXFxuQEAgLTI0MDAsNyArMjQwMiw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXFx1MDAyNnRiNi1cXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxcbiBcXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbi1cXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jXFxuaW5kZXggZjg2N2VjOGQzZDkwNS4uNzEzZGI5MDg5ZDVlMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXFxuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xcbkBAIC0xMzYxLDcgKzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXFx1MDAzZWNuZi5yYV9kZWZydHJfbWV0cmljO1xcbiBcXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xcbiBcXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXFx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xcbi1cXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xcbmluZGV4IGZjNDJkNjdlNTgyMjYuLjk0Zjk2NDZkNWViYzMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbiBcXHRcXHRcXHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4gXFx0XFx0XFx0XFx0XFx0Z3dhZGRyLCBkZXYpO1xcbiBcXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbi1cXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcXG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0dGFibGUgPSBydC1cXHUwMDNlZmliNl90YWJsZTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRhYmxlLVxcdTAwM2V0YjZfbG9jayk7XFxuIFxcbiBvdXQ6XFxuQEAgLTM5OTQsMTQgKzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcXG4rXFx0XFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7XFxuIFxcdFxcdC5ubF9uZXQgPSBuZXQsXFxuIFxcdFxcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XFxuIFxcdH07XFxuIFxcbi1cXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcXG4rfVxcbitcXG4raW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4re1xcbitcXHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcXG5AQCAtNDAyOCw3ICs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbiBcXG4gXFx0XFx0XFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuIFxcdFxcdFxcdH0gZWxzZVxcbkBAIC00MDY0LDEzICs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcXG4gXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZydC1cXHUwMDNlZmliNl9zaWJsaW5ncyxcXG4gXFx0XFx0XFx0XFx0XFx0IGZpYjZfc2libGluZ3MpIHtcXG4tXFx0XFx0XFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XFxuK1xcdFxcdFxcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4gb3V0X3B1dDpcXG5AQCAtNDE5Niw3ICs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxcbiBcXHRcXHRcXHRcXHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdFxcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19uaF9pZClcXG5AQCAtNDIxNSw3ICs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxcbiBcXG4gXFx0XFx0XFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXFxuIFxcdFxcdFxcdGlmIChjZmctXFx1MDAzZWZjX2ZsYWdzIFxcdTAwMjYgUlRGX0dBVEVXQVkpXFxuLVxcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTczOSw2ICs1NzQ5LDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXFxuK1xcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXFxuIFxcdCAgICAgICArIG5leHRob3BfbGVuO1xcbiB9XFxuIFxcbkBAIC01Nzc1LDcgKzU3ODYsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XFxuIFxcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xcbkBAIC01OTU0LDYgKzU5NjUsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVxcdTAwM2VlcnJvciA6IDApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbitcXHRpZiAoZGVsX3JlYXNvbiAhPSBSVEFfREVMX1JFQVNPTl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxcbitcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4rXFxuIFxcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuQEAgLTYwNTUsNyArNjA3MCw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZydDZfZXgtXFx1MDAzZXJ0NmktXFx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cXHUwMDNlY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkdW1wLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIHctXFx1MDAzZWZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTYxMDMsNyArNjExOSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAwLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihhcmctXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQykpIHtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Y291bnQrKztcXG5AQCAtNjMzNiwxMiArNjM1MywxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGlpZiwgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFxcdTAwMjZmbDYuZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zmw2LnNhZGRyLCBpaWYsIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IC1FTkVUVU5SRUFDSDtcXG4gXFx0fVxcbkBAIC02MzU3LDggKzYzNzYsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuQEAgLTYzNzcsNyArNjM5Nyw3IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgZXZlbnQsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MpO1xcbitcXHRcXHRcXHQgICAgZXZlbnQsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXFxuQEAgLTYzOTgsNiArNjQxOCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4gXFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xcbiB9XFxuIFxcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbit9XFxuK1xcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHRcXHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4ge1xcbkBAIC02NDEwLDcgKzY0NDIsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xcbiBcXHRcXHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xcbkBAIC02NDYzLDcgKzY0OTYsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGY2aSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLCAwLFxcbi1cXHRcXHRcXHQgICAgMCwgMCk7XFxuK1xcdFxcdFxcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xcbiBcXHRcXHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXFxuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XFxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGlua1xcbiBcXG4gX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuICAgICAgICAgICAgXFxcIk5ldGRldlNpbVxcXCIsIFxcXCJOZXRkZXZTaW1EZXZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsIFxcXCJQU1BGYW1pbHlcXFwiLCBcXFwiTmxFcnJvclxcXCIsXFxuICAgICAgICAgICAgXFxcIllubEZhbWlseVxcXCIsIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIixcXG4tICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbisgICAgICAgICAgIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuQEAgLTI5LDcgKzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZTpcXG4gXFxuIF9fYWxsX18gPSBbXFxuICAgICBcXFwiTmxFcnJvclxcXCIsIFxcXCJObFBvbGljeVxcXCIsIFxcXCJOZXRsaW5rXFxcIiwgXFxcIllubEZhbWlseVxcXCIsIFxcXCJTUEVDX1BBVEhcXFwiLFxcbi0gICAgXFxcIkV0aHRvb2xGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsXFxuKyAgICBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIlJ0bmxSb3V0ZUZhbWlseVxcXCIsXFxuICAgICBcXFwiTmV0ZGV2RmFtaWx5XFxcIiwgXFxcIk5ldHNoYXBlckZhbWlseVxcXCIsIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsXFxuICAgICBcXFwiUFNQRmFtaWx5XFxcIixcXG4gXVxcbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LWFkZHIueWFtbCcpKS5hc19wb3NpeCgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxcbiBcXG4rY2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcXG4rXFxuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcXG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCduZXRkZXYueWFtbCcpKS5hc19wb3NpeCgpLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbmluZGV4IDBjNjdjN2MwMGQ4NDEuLmY3NGNjZDVjMmQxM2EgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtNSw3ICs1LDggQEAgaW1wb3J0IHNvY2tldFxcbiBpbXBvcnQgc3RydWN0XFxuIGltcG9ydCB0aW1lXFxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXFxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gXFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFxcXHhlMFxcXFx4MDBcXFxceDAwXFxcXHgwMSdcXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFxcXHhlZlxcXFx4MDFcXFxceDAxXFxcXHgwMSdcXG5AQCAtMTM0LDggKzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAga3NmdF90cnVlKGZcXFwiaW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXFxcIiBpbiBjbWRfb2JqLnN0ZG91dCxcXG4gICAgICAgICAgICAgICBmXFxcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cXFwiKVxcbiBcXG4rZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXFxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXFxcInJ0bmxncnAtaXB2Ni1yb3V0ZVxcXCIpXFxuKyAgICByZXR1cm4gcnRubFxcbitcXG4rXFxuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgcmV0dXJuIGF0dHJzXFxuKyAgICByZXR1cm4gTm9uZVxcbitcXG4rXFxuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBzZWVuID0ge31cXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXFxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XFxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXFxuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgICAgICBicmVha1xcbisgICAgcmV0dXJuIHNlZW5cXG4rXFxuK1xcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcXG4rICAgIHdpdGggb3BlbihmXFxcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cXFwiLCBcXFwid1xcXCIpIGFzIGY6XFxuKyAgICAgICAgZi53cml0ZShmXFxcInt2YWx1ZX1cXFxcblxcXCIpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJyb3V0ZS9nY19pbnRlcnZhbFxcXCIsIDIpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlxcXCIsIG5zPXN0cihucykpXFxuK1xcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXFxcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXFxuK1xcbitcXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxcbisgICAgXFxcIlxcXCJcXFwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXFxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xcbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxcbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXFxuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxcbitcXG4rXFxuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcXG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcXG4rXFxuK1xcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlcidzIGxpbmstbG9jYWxcXG4rICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBzZWVuID0ge31cXG4rICAgIGZvciBfIGluIHJhbmdlKDEwKTpcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcXG4rICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpXFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnbmV3cm91dGUtbnRmJyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcXG4rICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICBicmVha1xcbisgICAgcmV0dXJuIHNlZW5cXG4rXFxuK1xcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXFxuKyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxcbisgICAgICAgIGlwKGZcXFwibGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XFxcIilcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2FjY2VwdF9yYVxcXCIsIDIpXFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9mb3J3YXJkaW5nXFxcIiwgMClcXG4rICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXFxcIiwgNjQpXFxuKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXFwiKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxcbisgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheVxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDEvYWNjZXB0X2RhZFxcXCIsIDApXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiB2ZXRoMCB1cFxcXCIsIG5zPXN0cihuc19oKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IHZldGgxIHVwXFxcIiwgbnM9c3RyKG5zX3IpKVxcbitcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXFxuKyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcXFwidmV0aDFcXFwiKVxcbitcXG4rICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgNjAwKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDYwMCkpXFxuKyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXFxcIm5vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXFxcIilcXG4rICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxcbisgICAgICAgICAgICByZXR1cm5cXG4rXFxuKyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDApLFxcbisgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCAwKSlcXG4rICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnZGVscm91dGUtbnRmJywgcm91dGVzKVxcbisgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxcbisgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcXG4rICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XFxcIilcXG4rICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAncmEtd2l0aGRyYXduJylcXG4rXFxuK1xcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcXG4rICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVxcXCIsIG5zPXN0cihucykpXFxuK1xcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjE6OicpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXFxcIm5vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2RlbC1yZWFzb24nLCBhdHRycyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblxcXCIpXFxuK1xcbitcXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxODo1OTo1Ny45OTMzMzkwOThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg3OTM4ODc3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwicnQ2X3JvdXRlX3JjdlwiLFxuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcInJ0Nl9kdW1wX3JvdXRlXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiZmliNl9ydW5fZ2NcIixcbiAgICBcIm5kaXNjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZXMgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIHJvdXRlIGRlbGV0aW9uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBmdW5jdGlvbnMsIGdhcmJhZ2UgY29sbGVjdGlvbiwgYW5kIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgcHJvY2Vzc2luZyBsb2dpYyB0byBwbHVtYiB0aGlzIG5ldyBhdHRyaWJ1dGUgdGhyb3VnaCB0aGUgcm91dGUgZGVsZXRpb24gcGF0aHMgYW5kIG5ldGxpbmsgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIG5ldyBhdHRyaWJ1dGUgYW5kIG5vIHJlZ3Jlc3Npb25zIGluIHJvdXRlIGRlbGV0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYjlhZTcwMDZjOTk3MGYxMjRiZDkxZDAyZjJiZTdhZGNkYmQ0YmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTg6NTk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5pbmRleCAzMzE5NWRiOTY3NDZjLi5lMzdhMTMwMWVmMWRiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5AQCAtNzgsNiArNzgsMTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcbiAgICAgICAgIHR5cGU6IHUzMlxuKyAgLVxuKyAgICBuYW1lOiBkZWwtcmVhc29uXG4rICAgIHR5cGU6IGVudW1cbisgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxuKyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uXG4rICAgIGVudHJpZXM6XG4rICAgICAgLSB1bnNwZWNcbisgICAgICAtIGV4cGlyZWRcbisgICAgICAtIHJhLXdpdGhkcmF3blxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE4NSw2ICsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4gICAtXG4gICAgIG5hbWU6IG1ldHJpY3NcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXG5AQCAtMjk5LDYgKzMxMiw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBkcG9ydFxuICAgICAgICAgICAgIC0gbmgtaWRcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMTMsNyArMzI3LDM4IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjRcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuKyAgICAgICAgICAjIGRlbC1yZWFzb24gaXMgbm90aWZpY2F0aW9uLW9ubHkuIEl0IGlzIGFib3ZlXG4rICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcbisgICAgICAgICAgIyBpdCBpbiByZXF1ZXN0cy5cbisgICAgICAgICAgYXR0cmlidXRlczogXHUwMDI2cm91dGUtcmVxLWF0dHJzXG4rICAgICAgICAgICAgLSBkc3RcbisgICAgICAgICAgICAtIHNyY1xuKyAgICAgICAgICAgIC0gaWlmXG4rICAgICAgICAgICAgLSBvaWZcbisgICAgICAgICAgICAtIGdhdGV3YXlcbisgICAgICAgICAgICAtIHByaW9yaXR5XG4rICAgICAgICAgICAgLSBwcmVmc3JjXG4rICAgICAgICAgICAgLSBtZXRyaWNzXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcbisgICAgICAgICAgICAtIGZsb3dcbisgICAgICAgICAgICAtIGNhY2hlaW5mb1xuKyAgICAgICAgICAgIC0gdGFibGVcbisgICAgICAgICAgICAtIG1hcmtcbisgICAgICAgICAgICAtIG1mYy1zdGF0c1xuKyAgICAgICAgICAgIC0gdmlhXG4rICAgICAgICAgICAgLSBuZXdkc3RcbisgICAgICAgICAgICAtIHByZWZcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcbisgICAgICAgICAgICAtIGVuY2FwXG4rICAgICAgICAgICAgLSBleHBpcmVzXG4rICAgICAgICAgICAgLSBwYWRcbisgICAgICAgICAgICAtIHVpZFxuKyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cbisgICAgICAgICAgICAtIHNwb3J0XG4rICAgICAgICAgICAgLSBkcG9ydFxuKyAgICAgICAgICAgIC0gbmgtaWRcbisgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICszNjYsMjMgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNVxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi5jNmRjMjNhNDJjMTE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyArNDY4LDggQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMyLDYgKzUzMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuICNlbmRpZlxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li45MmFkNWEwZDAzYTI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDEyICsxMjgsMjEgQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbitcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuIHtcbiBcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbitcdFx0XHRcdCAgICBib29sIHNraXBfbm90aWZ5LFxuK1x0XHRcdFx0ICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbit9XG4gI2VuZGlmXG4gXG4gdm9pZCBydDZfZmx1c2hfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uZmUwMGU2MjRmM2MzYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gXHRSVEFfRFBPUlQsXG4gXHRSVEFfTkhfSUQsXG4gXHRSVEFfRkxPV0xBQkVMLFxuK1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXG4gXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqL1xuK2VudW0gcnRhX2RlbF9yZWFzb24ge1xuK1x0UlRBX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuK1x0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuK1x0X19SVEFfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXG4rXG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cbiAgKlxuICAqIFwic3RydWN0IHJ0bmV4dGhvcFwiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjBjM2QzOGY2OWZjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG4gXHRcdGlmIChydCkge1xuIFx0XHRcdC8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqL1xuIFx0XHRcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xuLVx0XHRcdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmUuLjE1OWRiMTBhODQ2Y2MgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTE5NjYsNyArMTk2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgKzIwNTYsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbiBcdFx0XHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcbiBcdH1cbiBcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xuK1x0XHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcbiBcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcbiB9XG4gXG4gLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MCw3ICsyMDkyLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgKzIyNTQsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMCw3ICsyNDAyLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNS4uNzEzZGI5MDg5ZDVlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgKzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LVx1MDAzZWNuZi5yYV9kZWZydHJfbWV0cmljO1xuIFx0LyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi9cbiBcdGlmIChydCBcdTAwMjZcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XG4tXHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbitcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4rXHRcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IGZjNDJkNjdlNTgyMjYuLjk0Zjk2NDZkNWViYzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHRlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtMzk5NCwxNCArMzk5NSwyMCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxuK1x0XHQgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5sX2luZm8gaW5mbyA9IHtcbiBcdFx0Lm5sX25ldCA9IG5ldCxcbiBcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbiBcdH07XG4gXG4tXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvKTtcbitcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xuK31cbitcbitpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuK3tcbitcdHJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuQEAgLTQwMjgsNyArNDAzNSw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbitcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRcdHNrYiA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlXG5AQCAtNDA2NCwxMyArNDA3MiwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXG4gXHRcdFx0XHRcdCBcdTAwMjZydC1cdTAwM2VmaWI2X3NpYmxpbmdzLFxuIFx0XHRcdFx0XHQgZmliNl9zaWJsaW5ncykge1xuLVx0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xuK1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuK1x0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBvdXRfcHV0OlxuQEAgLTQxOTYsNyArNDIwNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX25oX2lkKVxuQEAgLTQyMTUsNyArNDIyNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcbiBcdFx0XHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX2ZsYWdzIFx1MDAyNiBSVEZfR0FURVdBWSlcbi1cdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtNTczOSw2ICs1NzQ5LDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXG4rXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqL1xuIFx0ICAgICAgICsgbmV4dGhvcF9sZW47XG4gfVxuIFxuQEAgLTU3NzUsNyArNTc4Niw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4rXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjUsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmIChkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcbitcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4rXG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICs2MDcwLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuIFx0XHRcdFx0XHQgICAgXHUwMDI2cnQ2X2V4LVx1MDAzZXJ0NmktXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxuIFx0XHRcdFx0XHQgICAgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihkdW1wLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyxcbitcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXG5AQCAtNjEwMyw3ICs2MTE5LDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBhcmctXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcbiBcdFx0XHRcdFx0ICAwLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgTkVUTElOS19DQihhcmctXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKSkge1xuK1x0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcbitcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQrKztcbkBAIC02MzM2LDEyICs2MzUzLDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuK1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbitcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSAtRU5FVFVOUkVBQ0g7XG4gXHR9XG5AQCAtNjM1Nyw4ICs2Mzc2LDkgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXG4rXHRcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTcsNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjM5OCw2ICs2NDE4LDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuK31cbitcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4re1xuK1x0X19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XG4rfVxuK1xuIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0ICAgIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIHtcbkBAIC02NDEwLDcgKzY0NDIsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XG4rXHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSxcbitcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgKzY0OTYsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4rXHRcdFx0ICAgIDAsIDAsIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgKzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZTpcbiBcbiBfX2FsbF9fID0gW1xuICAgICBcIk5sRXJyb3JcIiwgXCJObFBvbGljeVwiLCBcIk5ldGxpbmtcIiwgXCJZbmxGYW1pbHlcIiwgXCJTUEVDX1BBVEhcIixcbi0gICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsXG4rICAgIFwiRXRodG9vbEZhbWlseVwiLCBcIlJ0bmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLFxuICAgICBcIk5ldGRldkZhbWlseVwiLCBcIk5ldHNoYXBlckZhbWlseVwiLCBcIk5sY3RybEZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIixcbiAgICAgXCJQU1BGYW1pbHlcIixcbiBdXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LWFkZHIueWFtbCcpKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4rY2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbitcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDBjNjdjN2MwMGQ4NDEuLmY3NGNjZDVjMmQxM2EgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICs1LDggQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xceGUwXFx4MDBcXHgwMFxceDAxJ1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xceGVmXFx4MDFcXHgwMVxceDAxJ1xuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3RydWUoZlwiaW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCIgaW4gY21kX29iai5zdGRvdXQsXG4gICAgICAgICAgICAgICBmXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XCIpXG4gXG4rZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCJydG5sZ3JwLWlwdjYtcm91dGVcIilcbisgICAgcmV0dXJuIHJ0bmxcbitcbitcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlwiXCJcIlxuK1xuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICByZXR1cm4gYXR0cnNcbisgICAgcmV0dXJuIE5vbmVcbitcbitcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGtleSA9IChhdHRyc1sncnRtLWRzdC1sZW4nXSwgYXR0cnMuZ2V0KCdkc3QnKSlcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4rICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICAgICAgYnJlYWtcbisgICAgcmV0dXJuIHNlZW5cbitcbitcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbisgICAgd2l0aCBvcGVuKGZcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cIiwgXCJ3XCIpIGFzIGY6XG4rICAgICAgICBmLndyaXRlKGZcInt2YWx1ZX1cXG5cIilcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcInJvdXRlL2djX2ludGVydmFsXCIsIDIpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdleHBpcmVkJylcbitcbitcbitkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6XG4rICAgIFwiXCJcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCJcIlwiXG4rXG4rICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbisgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSScsIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW9cbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcbitcbitcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbisgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxuK1xuK1xuK2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxuKyAgICBcIlwiXCJcbisgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlcidzIGxpbmstbG9jYWxcbisgICAgYWRkcmVzcyBwYXNzZXMgREFELCBzbyByZXRyeS5cbisgICAgXCJcIlwiXG4rXG4rICAgIHNlZW4gPSB7fVxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgKipyYV9vcHRzKVxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4rICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpXG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcbisgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4rICAgICAgICAgICAgYnJlYWtcbisgICAgcmV0dXJuIHNlZW5cbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXG4rICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxuKyAgICBcIlwiXCJcbitcbisgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxuKyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICcyMDAxOmRiODo2OjonKSwgKDY0LCAnMjAwMTpkYjg6NTo6Jyl9XG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XG4rICAgICAgICBpcChmXCJsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cIilcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhXCIsIDIpXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9mb3J3YXJkaW5nXCIsIDApXG4rICAgICAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCIsIDY0KVxuKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cIilcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuKyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlcidzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXCIsIDApXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMCB1cFwiLCBucz1zdHIobnNfaCkpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFwiLCBucz1zdHIobnNfcikpXG4rXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFwidmV0aDFcIilcbitcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgNjAwKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcIilcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XG4rICAgICAgICAgICAgcmV0dXJuXG4rXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXG4rICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnZGVscm91dGUtbnRmJywgcm91dGVzKVxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4rICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVwiKVxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAncmEtd2l0aGRyYXduJylcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuKyAgICBcIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjE6OicpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCIpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxODo1OTo1Ny45OTMzNDA2MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc5MjQ1MjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgd2FycmFudHMgYSBmdXp6aW5nIGNhbXBhaWduLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGVzLCBhbmQgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIGRvdWJ0LiBUaGUga2VybmVsIGZvbGtzIGFyZSBzdGFydGluZyB0byBwYXNzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGZpYjZfZGVsYCBhbmQgYGlwNl9kZWxfcnRgIHRvIGFjY2VwdCBhIGBkZWxfcmVhc29uYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGh1Z2UgYW5kIHdoZXJlIG1vc3Qgb2YgdGhlIHdvcmsgaXMgZ29pbmcgdG8gYmUuIEl0IHRoZW4gY2FzY2FkZXMgb3V0d2FyZCB0byB1cGRhdGUgdGhlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBgcnQ2X2ZpbGxfbm9kZWAgYW5kIGBpbmV0Nl9ydF9ub3RpZnlgIHNvIHRoYXQgdGhleSBhY3R1YWxseSB1c2UgdGhpcyBuZXcgYXR0cmlidXRlLiBUaGV5J3JlIHBhc3NpbmcgYSBkZWxldGUgcmVhc29uIG5vdywgYW5kIHRoZSBjb25kaXRpb25zIGFyZSBkZWZpbmVkLlxuXG5Fc3NlbnRpYWxseSwgdGhleSdyZSBzZXR0aW5nIHRoZSBkZWxldGUgcmVhc29uIGJhc2VkIG9uIHRoZSBjYXVzZS4gRXhwaXJlZCByb3V0ZXMgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBnZXQgYFJUQV9ERUxfUkVBU09OX0VYUElSRURgLiBSQSB3aXRoZHJhd2FscyBnZXQgYFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmAuIEV2ZXJ5dGhpbmcgZWxzZSBkZWZhdWx0cyB0byBgUlRBX0RFTF9SRUFTT05fVU5TUEVDYC5cblxuU28sIHRoZSBrZXkgaGVyZSBpcyBub3QganVzdCB0aGF0IGl0J3MgYSBuZXcgYXR0cmlidXRlLCBidXQgdGhhdCBpdCdzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgSVB2NiByb3V0aW5nIGxvZ2ljLiBUaGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGFjdHVhbCBmdW5jdGlvbnMgd2UgbmVlZCB0byB0YXJnZXQuIGBmaWI2X2RlbGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYnV0IGFzIGl0J3MgaW50ZXJuYWwsIHdlJ2xsIGhhdmUgdG8gZmluZCB0aGUgZW50cnkgcG9pbnRzLlxuXG5UaGUgdHJpZ2dlciBwb2ludHMgZm9yIGZ1enppbmcgYXJlLCBnZW5lcmFsbHk6XG4qICAgTmV0bGluayByb3V0ZSBkZWxldGlvbiAod2hlcmUgd2UnbGwgYmUgZGVhbGluZyB3aXRoIGBSVEFfREVMX1JFQVNPTl9VTlNQRUNgIG1vc3RseSwgdGhvdWdoIGl0IHdpbGwgZXhlcmNpc2UgdGhlIHBhdGhzKVxuKiAgIElQdjYgcm91dGUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB2aWEgYGZpYjZfZ2NfdGFibGVgLCBhbmQgYWxzbywgcHJvYmFibHkgYGZpYjZfcnVuX2djYFxuKiAgIFJBIHByb2Nlc3Npbmc6IGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgcnQ2X3JvdXRlX3JjdmAuIFRoaXMgbG9va3MganVpY3kuXG4qICAgTmV0bGluayByb3V0ZSBkdW1wL2dldCwgYnV0IGl0J3Mgbm90IHRoZSBwcmltYXJ5IGZvY3VzLlxuXG5UaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfcm91dGVfcmN2YCwgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmU6XG4qICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgXG4qICAgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgXG4qICAgYHJ0Nl9yb3V0ZV9yY3ZgXG4qICAgYGZpYjZfZ2NfdGFibGVgIChhbmQgbGV0J3MgY2hlY2sgZm9yIGBmaWI2X3J1bl9nY2AgYXMgd2VsbCkuXG4qICAgYGluZXQ2X3J0bV9kZWxyb3V0ZWAgaXMgYW4gaW50ZXJlc3Rpbmcgb25lIGJlY2F1c2UgaXQgdHJpZ2dlcnMgYGlwNl9yb3V0ZV9kZWxgIHdoaWNoIGNhbGxzIGBfX2lwNl9kZWxfcnRgLlxuXG5JIHdpbGwgZG91YmxlLWNoZWNrIHdoZXRoZXIgYGZpYjZfZ2NfdGFibGVgIGlzIHN0YXRpYywgb3IgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSwgYW5kIHdoZXRoZXIgYHJ0Nl9yb3V0ZV9yY3ZgIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDowOC43ODU3OTU4MjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4OTA1OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIHJ0Nl9yb3V0ZV9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjA4PXZvaWQgcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIwOS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMTA6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMTEtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcik7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy05NjktI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjExLjQ3NDg2MDA1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODE2MDI1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlJvdXRpbmcgVGFibGUgYW5kIE5laWdoYm9yIERpc2NvdmVyeSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBydDZfcm91dGVfcmN2YCAtIHRoYXQncyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG1vZHVsZXMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEknbSBhc3Nlc3NpbmcgaXRzIGltcGFjdCBvbiBvdGhlciBtb2R1bGVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAuLi5zYW1lIGRlYWwuIE5vbi1zdGF0aWMsIHNvIHRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5LiBPa2F5LCBub3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbk5vdywgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLi4udGhhdCBvbmUgaXMgcmluZ2luZyBhIGJlbGwuIElzIHRoYXQgc3RhdGljIG9yIG5vdD8gSSAqdGhpbmsqIGl0IG1pZ2h0IGJlLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuIEl0J3MgY3J1Y2lhbCwgYmVjYXVzZSBhIHN0YXRpYyBmdW5jdGlvbiBpbXBsaWVzIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBtZWFuaW5nIGl0J3MgcHJpbWFyaWx5IHVzZWQgd2l0aGluIHRoZSBkZWZpbmluZyBzb3VyY2UgZmlsZSwgcmlnaHQ/IElmIGl0J3Mgc3RhdGljLCB0aGVuIGNoYW5nZXMgdG8gaXQgYXJlIGxlc3MgbGlrZWx5IHRvIHJpcHBsZSBvdXQgYW5kIGhhdmUgd2lkZS1yYW5naW5nIGNvbnNlcXVlbmNlcyBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgb3IgYWZmZWN0IGEgbW9kdWxlLCBzbyBpdCdzIHByb2JhYmx5IHNhZmUgYW5kIHdpbGwgcmVtYWluIGxhcmdlbHkgdGhlIHNhbWUuIEJ1dCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBhbnkgZnVuY3Rpb24geW91J3JlIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoxNS41NTY0NjUwODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMjU2MTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfHN0YXRpYykuKiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25kaXNjLmM9MTE4Mj1zdGF0aWMgdm9pZCBuZGlzY19yYV91c2Vyb3B0KHN0cnVjdCBza19idWZmICpyYSwgc3RydWN0IG5kX29wdF9oZHIgKm9wdClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTIzMC1cXG5uZXQvaXB2Ni9uZGlzYy5jOjEyMzE6c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoxOC40ODkwNTE0MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg4Nzc2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGlzY292ZXJ5IFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAg4oCTIGl0J3Mgc3RhdGljLCByaWdodD8gVGhhdCBtZWFucyBpdHMgYmVoYXZpb3IgaXMgcHJldHR5IHdlbGwtZGVmaW5lZCwgYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggc29tZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGNvbXBsZXggYmVhc3QuIFRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHdoZXJlIHRoaW5ncyBraWNrIG9mZiwgaXMgYG5kaXNjX3JjdmAuIFNvLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXTigJlzIHRoZSBzdGFydGluZyBndW4gZm9yIHRoZSB3aG9sZSBwcm9jZXNzLiBMZXQncyBkaWcgaW50byBgbmRpc2NfcmN2YCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgZGlzY292ZXJ5IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjIxLjg3NzgzMDA1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA4NzI1MDM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIG5kaXNjX3JjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDA6MjQuMjg2NTY1ODA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MjEyMDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NiBOZWlnaGJvcmhvb2QgRGlzY292ZXJ5IENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBOZWlnaGJvcmhvb2QgRGlzY292ZXJ5IHN0dWZmIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG5kaXNjX3JjdmAgcmVzaWRlcy4gSXQncyBvZnRlbiBlYXN5IHRvIG1pc3MgY3J1Y2lhbCBkZXRhaWxzIHdpdGhpbiBhIGxhcmdlIGNvZGViYXNlLiBNeSBpbml0aWFsIHNlYXJjaCBkaWRuJ3QgeWllbGQgYW4gaW1tZWRpYXRlIGFuc3dlciwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHJlZmluZSBteSBzZWFyY2ggdG8gZmluZCB3aGVyZSBgbmRpc2NfcmN2YCBpcyBsb2NhdGVkLiBMZXQncyBzZWUuLi4gQWgtaGEhIEl0IGxvb2tzIGxpa2UgaXQncyB0dWNrZWQgYXdheSBpbiBgbmV0L2lwdjYvbmRpc2MuY2AuIFRoYXQncyBwcmVjaXNlbHkgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIElQdjYgbmVpZ2hib3IgZGlzY292ZXJ5IGxvZ2ljLiBHb29kLiBOb3cgdGhhdCBJIGtub3cgdGhlIGxvY2F0aW9uLCBJIGNhbiBzdGFydCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoyNy42Mjg2ODc0NzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg1ODk0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRpc2NfcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25kaXNjLmg9NDA0PXZvaWQgbmRpc2NfY2xlYW51cCh2b2lkKTtcXG5pbmNsdWRlL25ldC9uZGlzYy5oLTQwNS1cXG5pbmNsdWRlL25ldC9uZGlzYy5oOjQwNjplbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvbmRpc2MuaC00MDctXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTEwMT1zdGF0aWMgaW50IGljbXB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMTkyLVxcdGNhc2UgTkRJU0NfUkVESVJFQ1Q6XFxubmV0L2lwdjYvaWNtcC5jOjExOTM6XFx0XFx0cmVhc29uID0gbmRpc2NfcmN2KHNrYik7XFxubmV0L2lwdjYvaWNtcC5jLTExOTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE3OTE9c3RhdGljIGJvb2wgbmRpc2Nfc3VwcHJlc3NfZnJhZ19uZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xODA0LVxcbm5ldC9pcHY2L25kaXNjLmM6MTgwNTplbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9uZGlzYy5jLTE4MDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoyOS4wODcyODY0NzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NzY0NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBTdGF0aWMgRGVjbGFyYXRpb24gb2YgUmVsZXZhbnQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIGh1bmNoIHdhcyBjb3JyZWN0OiBgbmRpc2NfcmN2YCBpcyBpbmRlZWQgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY2hlY2tzIG91dC4gQnV0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBhZGRyY29uZl9wcmVmaXhfcmN2YD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZWNsYXJhdGlvbiBzdGF0dXMgb2YgdGhhdCBvbmUgYXMgd2VsbCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSXQncyBpbXBvcnRhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDozMi4yODQ5MzQ2MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjIwMzc4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkuKiBhZGRyY29uZl9wcmVmaXhfcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTUtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yODI9c3RhdGljIGlubGluZSBib29sIGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBpbnQgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMDQ6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDUtXFx0XFx0XFx0IHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNjg5PXN0YXRpYyBib29sIGlzX2FkZHJfbW9kZV9nZW5lcmF0ZV9zdGFibGUoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI2OTU6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5Nj1FWFBPUlRfU1lNQk9MX0dQTChhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk4OnZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjM0LjYwNjk3NjQxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY0NDc3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJUFY2IFJvdXRpbmcgSXNzdWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjYgcm91dGluZy4uLiBzcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBhZGRyY29uZl9wcmVmaXhfcmN2YC4gVGhlIGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0J3MgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCByYWlzZXMgYSBmbGFnLiBIbW0sIHRoYXQncyBub3Qgd2hhdCBJJ2QgZXhwZWN0IGdpdmVuIGl0cyByb2xlLCBwb3RlbnRpYWxseSBpbmRpY2F0aW5nIGJyb2FkZXIgc2NvcGUgdGhhbiBtaWdodCBiZSBpbnRlbmRlZC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLCB0aGlzIGNvdWxkIGJlIGltcG9ydGFudCBkb3duIHRoZSBsaW5lLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgdGhlIGltcGFjdCBvbiBgaXA2X2RlbF9ydGAgYW5kLCBzcGVjaWZpY2FsbHksIGBpcDZfZGVsX3J0X3JlYXNvbmAuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhbnkgaW50ZXJjb25uZWN0ZWRuZXNzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHJlZ2FyZGluZyB0aGVpciBiZWhhdmlvciByZWdhcmRpbmcgcm91dGUgZGVsZXRpb24gYW5kIHJlYXNvbi4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbnRlbmRlZCBzaWRlLWVmZmVjdHMgb3IgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlbT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGRhdGEgZmxvd3MgaW4gdGhpcyBzcGFjZSB0byB1bmRlcnN0YW5kIGlmIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBpcyBwbGF5aW5nIG5pY2Ugd2l0aCB0aGVtLiBQZXJoYXBzIHRoZSBwcm9ibGVtIGlzbid0IGlzb2xhdGVkLCBhbmQgdGhleSByZWxhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDA6MzguNDcxNDU2MDU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1OTQ0MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogaXA2X2RlbF9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMjg9aW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEyOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoxMzA6aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjEzMTppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVxcdFxcdCAgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zOTk3LVxcbm5ldC9pcHY2L3JvdXRlLmM6Mzk5ODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5OTktXFx0XFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MDA4LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDAwOTppbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbm5ldC9pcHY2L3JvdXRlLmMtNDAxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjQwLjc3NzQwNjE4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ3OTIwMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayByb3V0aW5nOlxuXG4qKkFuYWx5emluZyBJUHY2IFJvdXRlIERlbGV0aW9uIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGlwNl9kZWxfcnRgIGFuZCBgaXA2X2RlbF9ydF9yZWFzb25gIGFyZSAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGV4cG9zZWQsIHBlcmhhcHMgdXNlZCBieSBvdGhlciBtb2R1bGVzIG9yIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgZm9yIHVzYWdlIG9yIGNhbGwgc2l0ZXMuIE1vcmUgY29udGV4dCBpcyByZXF1aXJlZC5cblxuQnV0IHRoYXQgbWFrZXMgbWUgdGhpbmssIHdoYXQgYWJvdXQgdGhlIFJUTV9ERUxST1VURSBoYW5kbGVyIGZvciBJUHY2PyBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgaW5ldDZfcnRtX2RlbHJvdXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgcm91dGUgaXMgZGVsZXRlZCB2aWEgdGhlIHJvdXRpbmcgbWVzc2FnZSBBUEkuIEFyZSBgaXA2X2RlbF9ydGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAgY2FsbGVkICp3aXRoaW4qIHRoYXQgZnVuY3Rpb24sIG9yIGFyZSB0aGV5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZT8gSXMgdGhlcmUgYW4gaW50ZXJhY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBoaWVyYXJjaHkuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIHNlY3Rpb24gb2YgdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbiB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo0NC4zMjUzMjg0MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTg1OTczOTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogaW5ldDZfcnRtX2RlbHJvdXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo0Ni42ODM5MzE3MjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMjA3NTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSVB2NiBSb3V0ZSBEZWxldGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5IbW0sIHNvIHRoZXkncmUgdGFsa2luZyBhYm91dCByZW1vdmluZyBhIHJvdXRlIGluIElQdjYuIExldCBtZSBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bmN0aW9uIG5hbWUgY29ycmVjdC4gQWgsIHllcywgdGhhdCByaW5ncyBhIGJlbGwuIEl0IGxvb2tzIGxpa2Ugd2UncmUgemVyb2luZyBpbiBvbiBgaW5ldDZfcnRtX2RlbHJvdXRlYC4gR29vZC4gTm93IEkgbmVlZCB0byByZW1lbWJlciBleGFjdGx5IHdoZXJlIHRoYXQgbGl2ZXMuLi4gQWgsIHllcywgYG5ldC9pcHY2L3JvdXRlLmNgLiBPZiBjb3Vyc2UuIFRoYXQncyB3aGVyZSBhbGwgdGhlIElQdjYgcm91dGluZyBsb2dpYyByZXNpZGVzLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgb3BlcmF0aW9uLCBvciBwb3RlbnRpYWxseSBhIGNhbiBvZiB3b3JtcywgZGVwZW5kaW5nIG9uIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgdGhlIGFkamFjZW50IGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGRldGVybWluZSB3aGF0IG1pZ2h0IGNhdXNlIGFueSBjb21wbGV4aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjUwLjM5NjAwOTMwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzI0NDc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9ydG1fZGVscm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz01NjAyPXN0YXRpYyBpbnQgaXA2X3JvdXRlX211bHRpcGF0aF9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU2NDEtXFxubmV0L2lwdjYvcm91dGUuYzo1NjQyOnN0YXRpYyBpbnQgaW5ldDZfcnRtX2RlbHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L3JvdXRlLmMtNTY0My1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTY5MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwNl9yb3V0ZV9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0X29yX21vZHVsZSA9IHtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyMC1cXHR7Lm93bmVyID0gVEhJU19NT0RVTEUsIC5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9ERUxST1VURSxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MjE6XFx0IC5kb2l0ID0gaW5ldDZfcnRtX2RlbHJvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxubmV0L2lwdjYvcm91dGUuYy02OTIyLVxcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUEZfSU5FVDYsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo1MS45MDMyNjEyMjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDMxNjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBSb3V0ZSBNYW5hZ2VtZW50IEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoZSBJUHY2IHJvdXRlIG1hbmFnZW1lbnQgY29kZS4gSSBub3RpY2VkIGBpbmV0Nl9ydG1fZGVscm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgb25seSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gSXQncyBub3QgZGVzaWduZWQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZS5cblxuVGhhdCB0aGVuIGdvdCBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYGluZXQ2X3J0bV9nZXRyb3V0ZWA/IElzIGl0IGFsc28gc3RhdGljLCBvciBpcyBpdCBleHBvc2VkIGluIGEgd2F5IHRoYXQgYWxsb3dzIGV4dGVybmFsIGFjY2Vzcz8gSWYgYGRlbHJvdXRlYCBpcyBzdGF0aWMsIGl0IGdpdmVzIG1lIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgYXJlIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYWNjZXNzLiBJcyB0aGVyZSBhIGNvbnNpc3RlbnQgcGF0dGVybiBhY3Jvc3MgZnVuY3Rpb25zPyBPciBpcyBpdCBhIHNwZWNpYWwgY2FzZT8gSSBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaW5ldDZfcnRtX2dldHJvdXRlYCBhbmQgc2VlIHdoYXQgdGhlIHN0b3J5IGlzIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBzdXJyb3VuZGluZyBJUHY2IHJvdXRpbmcgdGFibGUgbWFuaXB1bGF0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgQVBJIHN1cmZhY2UuIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSBhYm91dCBgZ2V0cm91dGVgIG9yIGBkZWxyb3V0ZWA/IFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjU1LjU3NzU4MDE4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzUzMzMwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9ydG1fZ2V0cm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz02MTU1PXN0YXRpYyBpbnQgaW5ldDZfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02MjI5LVxcbm5ldC9pcHY2L3JvdXRlLmM6NjIzMDpzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTYyMzEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBpcDZfcm91dGVfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MjItXFx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXFxubmV0L2lwdjYvcm91dGUuYzo2OTIzOlxcdCAuZG9pdCA9IGluZXQ2X3J0bV9nZXRyb3V0ZSwgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo1Ny4yNzUxMTg0NDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNzY1NzM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk5ldHdvcmsgUm91dGluZyBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyByb3V0aW5nIGNvZGUgYW5kIEkgc2VlIGBpbmV0Nl9ydG1fZ2V0cm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgZGVjbGFyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJvdXRpbmcgZnVuY3Rpb25zLCBhbmQgSSB3b25kZXIgaWYgSSBjYW4gdHJhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGJlIGltcGFjdGVkLlxuXG5Eb2VzIHRoaXMgaGF2ZSBhbnkgaW1wYWN0IG9uIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSByb3V0aW5nIHByb2Nlc3M/IExldCBtZSB0aGluay4gTXkgbWluZCBqdW1wcyB0byBhbm90aGVyIGZ1bmN0aW9uOiBob3cgaXMgYHJ0Nl9kdW1wX3JvdXRlYCBoYW5kbGluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0YXRpYyBkZWNsYXJhdGlvbiBvZiBgaW5ldDZfcnRtX2dldHJvdXRlYCB0aWVzIGludG8gZnVuY3Rpb25zIGNhbGxlZCB0byBkdW1wIHRoZSByb3V0aW5nIHRhYmxlcy4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIHN0YXRpY25lc3MgaGFzIGFueSBpbXBsaWNhdGlvbnMgb24gZHVtcGluZyB0aGUgcm91dGluZyBkYXRhLCBvciBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbW9yZSBncmFudWxhciBjb21wb25lbnQgb2YgYSBtb3JlIGJyb2FkIHNldCBvZiBmdW5jdGlvbnMuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcyOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjAwLjg4Mjc3ODA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyNzI5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogcnQ2X2R1bXBfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjIzPXN0cnVjdCBydDZfcnRubF9kdW1wX2FyZyB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMjktXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjMwOmludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmksIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcCk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMxLXZvaWQgcnQ2X210dV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwMzQ9c3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02MDg2LS8qIFJldHVybiAtMSBpZiBkb25lIHdpdGggbm9kZSwgbnVtYmVyIG9mIGhhbmRsZWQgcm91dGVzIG9uIHBhcnRpYWwgZHVtcCAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6NjA4NzppbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTYwODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTowMy4yNzU1MTMyNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwODE4MjQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIE5vdGlmaWNhdGlvbnMqKlxuXG5IbW0sIHNvIGBydDZfZHVtcF9yb3V0ZWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBpdHMgdXNhZ2UgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgcm91dGluZyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIG5vdGlmaWNhdGlvbnM/IFNwZWNpZmljYWxseSwgYGluZXQ2X3J0X25vdGlmeWAgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YD8gQXJlIHRoZXJlIG51YW5jZXMgdG8gdGhlaXIgb3BlcmF0aW9uIHRoYXQgYWZmZWN0IGhvdyByb3V0ZSBtb2RpZmljYXRpb25zIGFyZSBzaWduYWxlZCwgYW5kIGhvdyB0aG9zZSBub3RpZmljYXRpb25zIGludGVyYWN0IHdpdGggd2hhdGV2ZXIgbWVjaGFuaXNtcyB1c2UgdGhvc2UgZnVuY3Rpb25zPyBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSB0aGUgc2FtZSBhcyB0aGV5IGRvIGluIElQdjQgdG8gYWNjdXJhdGVseSBhbmFseXplIGFuZCBtb2RpZnkgdGhlIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIG5vdGlmaWNhdGlvbiByb3V0aW5lcyBhcmUgdXNlZC4gQSBkZWVwZXIgZGl2ZSBtaWdodCByZXZlYWwgaG93IHdlJ3JlIGhhbmRsaW5nIHJvdXRlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIGluIHRoZSBJUHY2IHJvdXRpbmcgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTowNi41ODM2OTgzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NDQ2NzIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIGluZXQ2X3J0X2RlbF9ub3RpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X2ZpYi5oPTUzND12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTM1LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NTM2OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTUzNy1cXHRcXHRcXHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjQyMT12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjQyNi1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY0Mjc6dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MjgtXFx0XFx0XFx0IGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDE6MDguODc4MTY5MzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTUwOTU2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYW5kIGBmaWI2X2RlbGAgYXJlIGJvdGggZGVjbGFyZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBpbXBsaWVzIHRoZXkncmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbiBmaWxlLiBXZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBkZXNpZ25lZCBmb3Igd2lkZXIgbGlua2FnZSwgcG90ZW50aWFsbHkgZXhwb3J0ZWQgb3IgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBUaGF0IGRlc2lnbiBjaG9pY2Ugc3VnZ2VzdHMgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIGFuZCBwb3NzaWJseSBwYXJ0IG9mIGFuIEFQSSBmb3IgSVB2NiByb3V0ZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhc3Nlc3MgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBJdCBpbmRpY2F0ZXMgYSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaW50ZXJkZXBlbmRlbmNlIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggcmVmYWN0b3JpbmcsIG9wdGltaXphdGlvbiwgb3Igc2VjdXJpdHkgYXNzZXNzbWVudHMuIFRoZSAqd2h5KiBpcyB0aGUga2V5IHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjEyLjAzMzI2Nzg3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MTc0OTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIGZpYjZfZGVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC00NzAtXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3Mi1cXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MTk2OD1zdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjQtLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjU6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2Ni1cXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDE6MTQuNDg1MDIxMDEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODQwOTc2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBsaXN0OiBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBydDZfcm91dGVfcmN2YCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGlwNl9kZWxfcnRgLCBgcnQ2X2R1bXBfcm91dGVgLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGFuZCBgZmliNl9kZWxgLiBUaGVzZSBzZWVtIHRvIGJlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gSVB2NiByb3V0aW5nLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZW0uXG5cbkZpcnN0LCBgQ09ORklHX0lQVjZgIGlzIGEgZ2l2ZW4uIEkgbWVhbiwgd2UncmUgdGFsa2luZyBhYm91dCBJUHY2LCBzbyB0aGF0J3MgYSBiYXNlbGluZS4gVGhlIHRlc3Qgc2NyaXB0IGFsc28gbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLCBhbmQgdGhlcmUncyBhIGBLc2Z0U2tpcEV4YCBleGNlcHRpb24gdGhhdCByYWlzZXMgaWYgaXQncyBub3QgZm91bmQsIHdoaWNoIHN1Z2dlc3RzIGl0J3MgY3J1Y2lhbCBvciBhdCBsZWFzdCBwYXJ0IG9mIHRoZSBpbnRlbmRlZCB0ZXN0IHNldHVwLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBgSVBWNl9ST1VURV9JTkZPYCBjb250cm9scyBhbmQgaG93IGl0IGltcGFjdHMgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgdGhlIGV4YWN0IGNvbnRleHQgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB0ZXN0ZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzA0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjE4Ljg2OTEyMTcyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDg0NDAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9ST1VURV9JTkZPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjE9Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjIwLjMxMzk3MDA2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc0OTMwMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOiBJUHY2IFJvdXRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKnllcywgSSBjb25maXJtIHRoYXQgYElQVjZfUk9VVEVfSU5GT2AgaXMgYSBwZXJmZWN0bHkgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uKiBObyBzdXJwcmlzZXMgdGhlcmUuIE9mIGNvdXJzZSwgd2hlbiBkZWFsaW5nIHdpdGggSVB2NiByb3V0aW5nLCB5b3UncmUgZ29pbmcgdG8gdXNlIHRoaXMuIE5vdywgbGV0IG1lIHRoaW5rIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhIGJpdCBkZWVwZXIuLi4gYWgsIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCBgSVBWNl9ST1VURVJfUFJFRmAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYElQVjZfUk9VVEVfSU5GT2AsIGlzbid0IGl0PyBJdCBhY3RzIGFzIGEgZGVwZW5kZW5jeS4gWW91ICpuZWVkKiB0aGF0IHByZWZlcmVuY2UgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgdXRpbGl6ZSB0aGUgcm91dGUgaW5mbzsgaXQncyBwcmFjdGljYWxseSBpbnNlcGFyYWJsZSBmb3IgY29ycmVjdCBiZWhhdmlvci4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NDEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMToyNC4yODg5MDIyNTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDUzOTcxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qSVBWNl9ST1VURVJfUFJFRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTMxPWNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMzQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMToyNi4zOTQzMDc2MjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMwOTIxNjcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlciBQcmVmZXJlbmNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgZGVmaW5pdGVseSBuZWVkIGBJUFY2X1JPVVRFUl9QUkVGYCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgZW5hYmxlZCBmb3IgdGhpcyBzZXR1cC4gYElQVjZfTVVMVElQTEVfVEFCTEVTYCBjb3VsZCBwb3RlbnRpYWxseSBjb21lIGludG8gcGxheSB0b28sIGJ1dCBpdCBtaWdodCBub3QgYmUgYSBoYXJkIHJlcXVpcmVtZW50IGF0IHRoaXMgc3RhZ2UuIEknbGwgY2hlY2sgaWYganVzdCBgQ09ORklHX0lQVjZgIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyDigJMgeWVwLCB0aGF0IHNlZW1zIHRvIGNvdmVyIHRoZSBiYXNpY3MuIEhvd2V2ZXIsIHRvIGFjdHVhbGx5IGhpdCB0aGUgY29kZSBwYXRoIHRoYXQgaGFuZGxlcyBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU9zKSB3aGVuIHRoZSBSQSBpcyB3aXRoZHJhd24sIHdlIGFic29sdXRlbHkgbmVlZCBgSVBWNl9ST1VURV9JTkZPYC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoYXQgdGVzdCBzY3JpcHQuIEFoYSwgaGVyZSBpdCBpczpcblxuYGBgcHl0aG9uXG4gICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbiAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1wiLCAwKVxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4gICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4gICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cIilcbmBgYFxuXG5UaGUgc2NyaXB0IHRyaWVzIHRvIHNldCBgYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5gLCBhbmQgaWYgdGhhdCBmYWlscyB3aXRoIGEgYEZpbGVOb3RGb3VuZEVycm9yYCwgaXQgc2tpcHMgdGhlIHRlc3QgYmVjYXVzZSBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AgaXMgbWlzc2luZy4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gU28sIHllcywgYElQVjZfUk9VVEVfSU5GT2AgaXMgcmVxdWlyZWQgZm9yIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBhY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbmAuXG5cbkxldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgIGNvZGUuIFllcCwgbG9va2luZyBhdCBgcnQ2X3JvdXRlX3JjdmAsIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuIFRoYXQgY29uZmlybXMgdGhlIGRlcGVuZGVuY3kgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjMyLjcwMzUyNjg5NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjUyNzcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oLTUxLVxcdF9fczMyXFx0XFx0cnRyX3Byb2JlX2ludGVydmFsO1xcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjUyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxuaW5jbHVkZS9saW51eC9pcHY2LmgtNTMtXFx0X19zMzJcXHRcXHRhY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbjtcXG4tLVxcbmluY2x1ZGUvbmV0L25kaXNjLmg9MTAwPXN0cnVjdCBuZGlzY19vcHRpb25zIHtcXG5pbmNsdWRlL25ldC9uZGlzYy5oLTEwMS1cXHRzdHJ1Y3QgbmRfb3B0X2hkciAqbmRfb3B0X2FycmF5W19fTkRfT1BUX0FSUkFZX01BWF07XFxuaW5jbHVkZS9uZXQvbmRpc2MuaDoxMDI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5pbmNsdWRlL25ldC9uZGlzYy5oLTEwMy1cXHRzdHJ1Y3QgbmRfb3B0X2hkciAqbmRfb3B0c19yaTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTEtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIxMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjEzLVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzYtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc4LVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjQ9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwMy1cXHRcXHRqaWZmaWVzX3RvX21zZWNzKFJFQURfT05DRShjbmYtXFx1MDAzZXJ0cl9wcm9iZV9pbnRlcnZhbCkpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcwNDojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwNS1cXHRhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01JTl9QTEVOXSA9XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwNzAtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcwNzE6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwNzItXFx0e1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0yMjA9c3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjU2LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L25kaXNjLmM6MjU3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvbmRpc2MuYy0yNTgtXFx0XFx0Y2FzZSBORF9PUFRfUk9VVEVfSU5GTzpcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNDk2LVxcbm5ldC9pcHY2L25kaXNjLmM6MTQ5NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L25kaXNjLmMtMTQ5OC1cXHRpZiAoIVJFQURfT05DRShpbjZfZGV2LVxcdTAwM2VjbmYuYWNjZXB0X3JhX2Zyb21fbG9jYWwpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTExNT1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTExOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjExOTojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L3JvdXRlLmMtMTIwLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtOTY4LVxcbm5ldC9pcHY2L3JvdXRlLmM6OTY5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy05NzAtaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDIzOT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODEtXFxubmV0L2lwdjYvcm91dGUuYzo0MzgyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy00MzgzLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTozNC4xNzYwNTkyMzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIwNTIyNDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIFN5bWJvbCBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgaW5kZWVkIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIG1lYW5pbmcgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY2x1ZGUgYElQVjZfUk9VVEVfSU5GT2AgYW5kIGBJUFY2X1JPVVRFUl9QUkVGYCBpbiBgRW5hYmxlQ29uZmlnc2AsIGFsb25nIHdpdGggdGhlIGJhc2UgYElQVjZgIGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZS5cblxuTmV4dCwgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJ3ZlIGdvdDogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgcnQ2X3JvdXRlX3JjdmAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpcDZfZGVsX3J0YCwgYHJ0Nl9kdW1wX3JvdXRlYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBhbmQgYGZpYjZfZGVsYC5cblxuUmlnaHQsIG5vdywgd2FpdCBhIHNlY29uZC4uLiBgaXA2X2RlbF9ydF9yZWFzb25gIGFuZCBgaXA2X2RlbF9ydGAgYXJlIGp1c3Qgd3JhcHBlcnMgZm9yIGBfX2lwNl9kZWxfcnRgIHdpdGhpbiBgbmV0L2lwdjYvcm91dGUuY2AuIE9rYXksIGxldCdzIGNoZWNrIGlmIGBfX2lwNl9kZWxfcnRgIGlzIHN0YXRpYy4gWWVzLCBpdCdzIHN0YXRpYywgd2hpY2ggbWVhbnMgYGlwNl9kZWxfcnRfcmVhc29uYCBhbmQgYGlwNl9kZWxfcnRgIGFyZSBmaW5lIHRvIGluY2x1ZGUgaGVyZS4gR29vZC4gVGhlbiBgZmliNl9kZWxgIGlzIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYW5kIGBydDZfZHVtcF9yb3V0ZWAgYXJlIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGBmaWI2X2RlbGAncyB2aXNpYmlsaXR5LiBJdCdzIGRlY2xhcmVkIGluIGBpbmNsdWRlL25ldC9pcDZfZmliLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgOlxuXG5gYGBjXG5pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbmBgYFxuXG5TbyBpdCBpcyBub24tc3RhdGljLiBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyBnbyBmdW5jdGlvbiBieSBmdW5jdGlvbi5cblxuYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGlzIG5vbi1zdGF0aWMuXG5gYGBjXG52b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbmBgYFxuYHJ0Nl9yb3V0ZV9yY3ZgIGlzIG5vbi1zdGF0aWM6XG5gYGBjXG5pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuXHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXG5gYGBcbmBydDZfZHVtcF9yb3V0ZWAgaXMgbm9uLXN0YXRpYzpcbmBgYGNcbmludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuYGBgXG5gaW5ldDZfcnRfZGVsX25vdGlmeWAgaXMgbm9uLXN0YXRpYzpcbmBgYGNcbnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5cdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuYGBgXG5cbkFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHRoaXM/XG5gZmliNl9nY190YWJsZWAgaXMgc3RhdGljLCBidXQgaXQgaXMgY2FsbGVkIGZyb20gYGZpYjZfcnVuX2djYCB3aGljaCBpcyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMzQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDE6NDMuMzgxMjg2MDE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk4ODgxNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogZmliNl9ydW5fZ2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X2ZpYi5oPTUzOT12b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTU0MC1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBub3cpO1xcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDo1NDE6dm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSk7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTU0Mi12b2lkIGZpYjZfZ2NfY2xlYW51cCh2b2lkKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNDA4PXN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDI3LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDI4OnZvaWQgZmliNl9ydW5fZ2ModW5zaWduZWQgbG9uZyBleHBpcmVzLCBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0Mjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTo0NS42ODAxNzg2MDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMzUyMzEyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQdjYgUm91dGUgRGVsZXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgUlRBX0RFTF9SRUFTT05gLCBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZXMuIFRoaXMgYXR0cmlidXRlIHdpbGwgaW5kaWNhdGUgdGhlIHJlYXNvbiBiZWhpbmQgYSByb3V0ZSdzIGRlbGV0aW9uIOKAkyB0aGluZ3MgbGlrZSBleHBpcmF0aW9uIG9yIHdpdGhkcmF3YWwgZnJvbSBhIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkuIFRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoaXMgY2hhbmdlIGlzIHRvIG1vZGlmeSB0aGUgSVB2NiByb3V0aW5nIGZ1bmN0aW9ucywgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMsIGFuZCBSQSBwcm9jZXNzaW5nIHRvIGluY29ycG9yYXRlIHRoaXMgbmV3IGF0dHJpYnV0ZSBpbnRvIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGl0IG5lY2Vzc2l0YXRlcyBjYXJlZnVsIGZ1enppbmcgdG8gY29uZmlybSBjb3JyZWN0IGF0dHJpYnV0ZSBoYW5kbGluZyBhbmQgcHJldmVudCBhbnkgcmVncmVzc2lvbiBpbiByb3V0ZSBkZWxldGlvbiBmdW5jdGlvbmFsaXR5LlxuXG5JJ3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCB0b3VjaGVzLiBUaGUgYGZpYjZfcnVuX2djYCBpcyBub24tc3RhdGljLCBhbmQgaXQncyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0cmlnZ2VycyBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIG5vdyBpbmNvcnBvcmF0ZXMgdGhpcyBuZXcgYFJUQV9ERUxfUkVBU09OX0VYUElSRURgIHJlYXNvbi4gVGhlbiwgdGhlIGVudHJ5IHBvaW50IGZvciBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBuZGlzY19yY3ZgLCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGNydWNpYWwuXG5cbkhlcmUncyBteSByZWZpbmVkIGxpc3Qgb2YgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlOlxuXG4qICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgOiBUaGlzIHdpbGwgYmUgaW52b2x2ZWQuXG4qICAgYHJ0Nl9yb3V0ZV9yY3ZgOiBUaGlzIHdpbGwgYmUgaW52b2x2ZWQuXG4qICAgYGlwNl9kZWxfcnRfcmVhc29uYDogVGhpcyBpcyBjcnVjaWFsIGFuZCB3aWxsIGxpa2VseSBiZSB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZnV6ei5cbiogICBgcnQ2X2R1bXBfcm91dGVgOiBJbXBvcnRhbnQgZm9yIG5ldGxpbmsgZHVtcHMuXG4qICAgYGluZXQ2X3J0X2RlbF9ub3RpZnlgOiBJbnZvbHZlZCBpbiBub3RpZmljYXRpb25zLlxuKiAgIGBmaWI2X2RlbGA6IFRoaXMgaXMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLlxuKiAgIGBmaWI2X3J1bl9nY2A6IFdlJ3JlIGluY29ycG9yYXRpbmcgdGhlIHJlYXNvbiBoZXJlLlxuKiAgIGBuZGlzY19yY3ZgOiBLZXkgYXMgdGhlIGVudHJ5IHBvaW50IGZvciByb3V0ZXIgZGlzY292ZXJ5LlxuXG5gaXA2X2RlbF9ydGAgaXMganVzdCBhIHdyYXBwZXIsIHNvIGluY2x1ZGluZyBgaXA2X2RlbF9ydF9yZWFzb25gIGNvdmVycyBpdC4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBydDZfZHVtcF9yb3V0ZWAgaXMgY29ycmVjdCBmb3IgbmV0bGluayBkdW1wcy4gYGluZXQ2X3J0bV9nZXRyb3V0ZWAgaXMgc3RhdGljLCBzbyBmb2N1c2luZyBvbiBgcnQ2X2R1bXBfcm91dGVgIGZvciByb3V0ZSBkdW1wcyBtYWtlcyBzZW5zZS5cblxuRm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBwYXRjaCB0b3VjaGVzIGBmaWI2X2RlbGAsIHdoaWNoIGlzIGluZGVwZW5kZW50IG9mIG11bHRpcGxlIHRhYmxlcywgdGh1cyBvbmx5IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgYXJlIGNydWNpYWwuIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGUgb3ZlcmFsbCBlZmZlY3RzIG9mIHRoZSBwYXRjaCBzaW5jZSBpdCBtb2RpZmllcyBgZmliNl9kZWxgLCB3aGljaCBpcyB1c2VkIHJlZ2FyZGxlc3Mgb2YgbXVsdGlwbGUgdGFibGVzLlxuXG5JJ20gcmVhZHkgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHByb3ZpZGUgbXkgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTMwLCJPdXRwdXRUb2tlbnMiOjIzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTo1Ni43MTU0MTI3OTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgxMTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwicnQ2X3JvdXRlX3JjdlwiLFxuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcInJ0Nl9kdW1wX3JvdXRlXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiZmliNl9ydW5fZ2NcIixcbiAgICBcIm5kaXNjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZXMgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIHJvdXRlIGRlbGV0aW9uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBmdW5jdGlvbnMsIGdhcmJhZ2UgY29sbGVjdGlvbiwgYW5kIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgcHJvY2Vzc2luZyBsb2dpYyB0byBwbHVtYiB0aGlzIG5ldyBhdHRyaWJ1dGUgdGhyb3VnaCB0aGUgcm91dGUgZGVsZXRpb24gcGF0aHMgYW5kIG5ldGxpbmsgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIG5ldyBhdHRyaWJ1dGUgYW5kIG5vIHJlZ3Jlc3Npb25zIGluIHJvdXRlIGRlbGV0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJydDZfZHVtcF9yb3V0ZVwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiLFxuICAgIFwiZmliNl9kZWxcIixcbiAgICBcImZpYjZfcnVuX2djXCIsXG4gICAgXCJuZGlzY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 18:45:41 +0000 UTC FinishedAt: 2026-07-30 19:01:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IPV6_ROUTER_PREF", "IPV6_ROUTE_INFO" ], "series_id": "a75f6c55-682e-41e5-b167-c7bdc1240afb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "addrconf_prefix_rcv", "rt6_route_rcv", "ip6_del_rt_reason", "rt6_dump_route", "inet6_rt_del_notify", "fib6_del", "fib6_run_gc", "ndisc_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE4OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBWNl9ST1VURVJfUFJFRiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFX0lORk8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZGRyY29uZl9wcmVmaXhfcmN2JiMzNDssCiAgICAmIzM0O3J0Nl9yb3V0ZV9yY3YmIzM0OywKICAgICYjMzQ7aXA2X2RlbF9ydF9yZWFzb24mIzM0OywKICAgICYjMzQ7cnQ2X2R1bXBfcm91dGUmIzM0OywKICAgICYjMzQ7aW5ldDZfcnRfZGVsX25vdGlmeSYjMzQ7LAogICAgJiMzNDtmaWI2X2RlbCYjMzQ7LAogICAgJiMzNDtmaWI2X3J1bl9nYyYjMzQ7LAogICAgJiMzNDtuZGlzY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlcyB0byByZXBvcnQgdGhlIHJlYXNvbiBmb3Igcm91dGUgZGVsZXRpb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGZ1bmN0aW9ucywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSBwcm9jZXNzaW5nIGxvZ2ljIHRvIHBsdW1iIHRoaXMgbmV3IGF0dHJpYnV0ZSB0aHJvdWdoIHRoZSByb3V0ZSBkZWxldGlvbiBwYXRocyBhbmQgbmV0bGluayBub3RpZmljYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgbmV3IGF0dHJpYnV0ZSBhbmQgbm8gcmVncmVzc2lvbnMgaW4gcm91dGUgZGVsZXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTg6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmYjlhZTcwMDZjOTk3MGYxMjRiZDkxZDAyZjJiZTdhZGNkYmQ0YmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTg6NTk6NTYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZTM3YTEzMDFlZjFkYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxuQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBydGEtdXNlZFxuICAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogZGVsLXJlYXNvblxuJiM0MzsgICAgdHlwZTogZW51bVxuJiM0MzsgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxuJiM0MzsgICAgZW51bS1uYW1lOiBydGEtZGVsLXJlYXNvblxuJiM0MzsgICAgZW50cmllczpcbiYjNDM7ICAgICAgLSB1bnNwZWNcbiYjNDM7ICAgICAgLSBleHBpcmVkXG4mIzQzOyAgICAgIC0gcmEtd2l0aGRyYXduXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTg1LDYgJiM0MzsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBkZWwtcmVhc29uXG4mIzQzOyAgICAgICAgdHlwZTogdTMyXG4mIzQzOyAgICAgICAgZW51bTogZGVsLXJlYXNvblxuICAgLVxuICAgICBuYW1lOiBtZXRyaWNzXG4gICAgIG5hbWUtcHJlZml4OiBydGF4LVxuQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgICAtIGRwb3J0XG4gICAgICAgICAgICAgLSBuaC1pZFxuICAgICAgICAgICAgIC0gZmxvd2xhYmVsXG4mIzQzOyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMTMsNyAmIzQzOzMyNywzOCBAQCBvcGVyYXRpb25zOlxuICAgICAgIGRvOlxuICAgICAgICAgcmVxdWVzdDpcbiAgICAgICAgICAgdmFsdWU6IDI0XG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcbiYjNDM7ICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcbiYjNDM7ICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcbiYjNDM7ICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuXG4mIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOiBcdTAwMjZyb3V0ZS1yZXEtYXR0cnNcbiYjNDM7ICAgICAgICAgICAgLSBkc3RcbiYjNDM7ICAgICAgICAgICAgLSBzcmNcbiYjNDM7ICAgICAgICAgICAgLSBpaWZcbiYjNDM7ICAgICAgICAgICAgLSBvaWZcbiYjNDM7ICAgICAgICAgICAgLSBnYXRld2F5XG4mIzQzOyAgICAgICAgICAgIC0gcHJpb3JpdHlcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmc3JjXG4mIzQzOyAgICAgICAgICAgIC0gbWV0cmljc1xuJiM0MzsgICAgICAgICAgICAtIG11bHRpcGF0aFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dcbiYjNDM7ICAgICAgICAgICAgLSBjYWNoZWluZm9cbiYjNDM7ICAgICAgICAgICAgLSB0YWJsZVxuJiM0MzsgICAgICAgICAgICAtIG1hcmtcbiYjNDM7ICAgICAgICAgICAgLSBtZmMtc3RhdHNcbiYjNDM7ICAgICAgICAgICAgLSB2aWFcbiYjNDM7ICAgICAgICAgICAgLSBuZXdkc3RcbiYjNDM7ICAgICAgICAgICAgLSBwcmVmXG4mIzQzOyAgICAgICAgICAgIC0gZW5jYXAtdHlwZVxuJiM0MzsgICAgICAgICAgICAtIGVuY2FwXG4mIzQzOyAgICAgICAgICAgIC0gZXhwaXJlc1xuJiM0MzsgICAgICAgICAgICAtIHBhZFxuJiM0MzsgICAgICAgICAgICAtIHVpZFxuJiM0MzsgICAgICAgICAgICAtIHR0bC1wcm9wYWdhdGVcbiYjNDM7ICAgICAgICAgICAgLSBpcC1wcm90b1xuJiM0MzsgICAgICAgICAgICAtIHNwb3J0XG4mIzQzOyAgICAgICAgICAgIC0gZHBvcnRcbiYjNDM7ICAgICAgICAgICAgLSBuaC1pZFxuJiM0MzsgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICYjNDM7MzY2LDIzIEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjVcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRyc1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBuZXdyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjRcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBkZWxldGVkIHJvdXRlLlxuJiM0MzsgICAgICB2YWx1ZTogMjVcbiYjNDM7ICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuJiM0MztcbiYjNDM7bWNhc3QtZ3JvdXBzOlxuJiM0MzsgIGxpc3Q6XG4mIzQzOyAgICAtXG4mIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZVxuJiM0MzsgICAgICB2YWx1ZTogN1xuJiM0MzsgICAgLVxuJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGVcbiYjNDM7ICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi5jNmRjMjNhNDJjMTE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyAmIzQzOzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuIFxuIGludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4taW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiAjZW5kaWZcbiB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0ICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li45MmFkNWEwZDAzYTI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDEyICYjNDM7MTI4LDIxIEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXG4gaW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcbiYjNDM7aW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuIHtcbiBcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxuJiM0MztcdFx0XHRcdCAgICBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiYjNDM7fVxuICNlbmRpZlxuIFxuIHZvaWQgcnQ2X2ZsdXNoX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbmluZGV4IDI3MjY1ZmQzMWU1ZmMuLmZlMDBlNjI0ZjNjM2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuQEAgLTM5OSw2ICYjNDM7Mzk5LDcgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiBcdFJUQV9EUE9SVCxcbiBcdFJUQV9OSF9JRCxcbiBcdFJUQV9GTE9XTEFCRUwsXG4mIzQzO1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICYjNDM7NDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gI2RlZmluZSBSVE1fUlRBKHIpICAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgJiM0MzsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSlcbiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSlcbiBcbiYjNDM7LyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4mIzQzOyAqIEVtaXR0ZWQgb25seSBvbiBSVE1fREVMUk9VVEUgbm90aWZpY2F0aW9ucywgYW5kIG9ubHkgd2hlbiB0aGUgZGVsZXRpb25cbiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhXG4mIzQzOyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbiYjNDM7ICogdHJlYXQgXCYjMzQ7YWJzZW50XCYjMzQ7IGFuZCBcJiMzNDt1bnNwZWNcJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxuJiM0MzsgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBydGFfZGVsX3JlYXNvbiB7XG4mIzQzO1x0UlRBX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbiYjNDM7XHRSVEFfREVMX1JFQVNPTl9FWFBJUkVELFx0XHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cbiYjNDM7XHRSVEFfREVMX1JFQVNPTl9SQV9XSVRIRFJBV04sXHQvKiB6ZXJvLWxpZmV0aW1lIFJBIC8gUElPIC8gUklPICovXG4mIzQzO1x0X19SVEFfREVMX1JFQVNPTl9NQVhcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXG4mIzQzO1xuIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuXG4gICpcbiAgKiBcJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wXCYjMzQ7IGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjBjM2QzOGY2OWZjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxuIFx0XHRpZiAocnQpIHtcbiBcdFx0XHQvKiBBdXRvY29uZiBwcmVmaXggcm91dGUgKi9cbiBcdFx0XHRpZiAodmFsaWRfbGZ0ID09IDApIHtcbi1cdFx0XHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmUuLjE1OWRiMTBhODQ2Y2MgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTE5NjYsNyAmIzQzOzE5NjYsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tXHRcdFx0ICAgc3RydWN0IGZpYjZfaW5mbyBfX3JjdSAqKnJ0cCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgJiM0MzsyMDU2LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4gXHRcdFx0Y2FsbF9maWI2X2VudHJ5X25vdGlmaWVyc19yZXBsYWNlKG5ldCwgcmVwbGFjZV9ydCk7XG4gXHR9XG4gXHRpZiAoIWluZm8tXHUwMDNlc2tpcF9ub3RpZnkpXG4tXHRcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcbiYjNDM7XHRcdGluZXQ2X3J0X2RlbF9ub3RpZnkocnQsIGluZm8sIGRlbF9yZWFzb24pO1xuIFxuIFx0ZmliNl9pbmZvX3JlbGVhc2UocnQpO1xuIH1cbiBcbiAvKiBOZWVkIHRvIG93biB0YWJsZS1cdTAwM2V0YjZfbG9jayAqL1xuLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4mIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwO1xuQEAgLTIwOTAsNyAmIzQzOzIwOTIsNyBAQCBpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFx0XHRpZiAocnQgPT0gY3VyKSB7XG4gXHRcdFx0aWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpXG4gXHRcdFx0XHRmaWI2X3JvdXRlc19yZXF1aXJlX3NyY19kZWMoaW5mby1cdTAwM2VubF9uZXQpO1xuLVx0XHRcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvKTtcbiYjNDM7XHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgJiM0MzsyMjU0LDcgQEAgc3RhdGljIGludCBmaWI2X2NsZWFuX25vZGUoc3RydWN0IGZpYjZfd2Fsa2VyICp3KVxuIFx0XHRyZXMgPSBjLVx1MDAzZWZ1bmMocnQsIGMtXHUwMDNlYXJnKTtcbiBcdFx0aWYgKHJlcyA9PSAtMSkge1xuIFx0XHRcdHctXHUwMDNlbGVhZiA9IHJ0O1xuLVx0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbiYjNDM7XHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKHJlcykge1xuICNpZiBSVDZfREVCVUcgXHUwMDNlPSAyXG4gXHRcdFx0XHRwcl9kZWJ1ZyhcJiMzNDslczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCYjMzQ7LFxuQEAgLTI0MDAsNyAmIzQzOzI0MDIsNyBAQCBzdGF0aWMgdm9pZCBmaWI2X2djX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCxcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnQsIG4sIFx1MDAyNnRiNi1cdTAwM2V0YjZfZ2NfaGxpc3QsIGdjX2xpbmspXG4gXHRcdGlmIChmaWI2X2FnZShydCwgZ2NfYXJncykgPT0gLTEpXG4tXHRcdFx0ZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuJiM0MztcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNS4uNzEzZGI5MDg5ZDVlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgJiM0MzsxMzYxLDkgQEAgc3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi1cdTAwM2VjbmYucmFfZGVmcnRyX21ldHJpYztcbiBcdC8qIGRlbGV0ZSB0aGUgcm91dGUgaWYgbGlmZXRpbWUgaXMgMCBvciBpZiBtZXRyaWMgbmVlZHMgY2hhbmdlICovXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2IChsaWZldGltZSA9PSAwIHx8IHJ0LVx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbiYjNDM7XHRcdGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4mIzQzO1x0XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5pbmRleCBmYzQyZDY3ZTU4MjI2Li45NGY5NjQ2ZDVlYmMzIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvcm91dGUuY1xuQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbiBcdFx0XHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcbiBcdFx0XHQgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4tXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncyk7XG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgJiM0MzsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcbiBcdFx0XHRcdFx0Z3dhZGRyLCBkZXYpO1xuIFxuIFx0aWYgKHJ0IFx1MDAyNlx1MDAyNiAhbGlmZXRpbWUpIHtcbi1cdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4mIzQzO1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcbiBcdFx0cnQgPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTM5NzMsNyAmIzQzOzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuJiM0MztzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcbkBAIC0zOTg2LDcgJiM0MzszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbiYjNDM7XHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gXG4gb3V0OlxuQEAgLTM5OTQsMTQgJiM0MzszOTk1LDIwIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxuJiM0MztcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7XG4gXHRcdC5ubF9uZXQgPSBuZXQsXG4gXHRcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XG4gXHR9O1xuIFxuLVx0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbyk7XG4mIzQzO1x0cmV0dXJuIF9faXA2X2RlbF9ydChydCwgXHUwMDI2aW5mbywgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIGJvb2wgc2tpcF9ub3RpZnkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuIFxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCxcbiBcdFx0XHRcdFx0ICBOVUxMLCBOVUxMLCAwLCBSVE1fREVMUk9VVEUsXG4tXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcdTAwM2MgMCkge1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0XHRza2IgPSBOVUxMO1xuIFx0XHRcdH0gZWxzZVxuQEAgLTQwNjQsMTMgJiM0Mzs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcbiBcdFx0XHRcdFx0IFx1MDAyNnJ0LVx1MDAzZWZpYjZfc2libGluZ3MsXG4gXHRcdFx0XHRcdCBmaWI2X3NpYmxpbmdzKSB7XG4tXHRcdFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XG4mIzQzO1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuJiM0MztcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIG91dF91bmxvY2s6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ0YWJsZS1cdTAwM2V0YjZfbG9jayk7XG4gb3V0X3B1dDpcbkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFx0XHRcdFx0aWYgKCFmaWI2X2luZm9faG9sZF9zYWZlKHJ0KSlcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRlcnIgPSAgX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKGNmZy1cdTAwM2VmY19uaF9pZClcbkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuIFxuIFx0XHRcdC8qIGlmIGdhdGV3YXkgd2FzIHNwZWNpZmllZCBvbmx5IGRlbGV0ZSB0aGUgb25lIGhvcCAqL1xuIFx0XHRcdGlmIChjZmctXHUwMDNlZmNfZmxhZ3MgXHUwMDI2IFJURl9HQVRFV0FZKVxuLVx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZjZmctXHUwMDNlZmNfbmxpbmZvKTtcbiYjNDM7XHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0ZWxzZVxuIFx0XHRcdFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTU3MzksNiAmIzQzOzU3NDksNyBAQCBzdGF0aWMgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHN0cnVjdCBmaWI2X2luZm8gKmY2aSlcbiBcdCAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICYjNDM7IG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXG4gXHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoMSkgLyogUlRBX1BSRUYgKi9cbiYjNDM7XHQgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi9cbiBcdCAgICAgICAmIzQzOyBuZXh0aG9wX2xlbjtcbiB9XG4gXG5AQCAtNTc3NSw3ICYjNDM7NTc4Niw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0NiA9IGRzdF9ydDZfaW5mbyhkc3QpO1xuIFx0c3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7XG5AQCAtNTk1NCw2ICYjNDM7NTk2NSwxMCBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVx1MDAzZWVycm9yIDogMCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuJiM0MztcdGlmIChkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBSVEFfREVMX1JFQVNPTiwgZGVsX3JlYXNvbikpXG4mIzQzO1x0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiYjNDM7XG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICYjNDM7NjA3MCw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNnJ0Nl9leC1cdTAwM2VydDZpLVx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcbiBcdFx0XHRcdFx0ICAgIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cdTAwM2VjYi1cdTAwM2Vza2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXG5AQCAtNjEwMyw3ICYjNDM7NjExOSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuIFx0XHRcdGlmIChydDZfZmlsbF9ub2RlKG5ldCwgYXJnLVx1MDAzZXNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgMCwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgIE5FVExJTktfQ0IoYXJnLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncykpIHtcbiYjNDM7XHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQmIzQzOyYjNDM7O1xuQEAgLTYzMzYsMTIgJiM0Mzs2MzUzLDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFx1MDAyNmZsNi5kYWRkcixcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbiYjNDM7XHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gLUVORVRVTlJFQUNIO1xuIFx0fVxuQEAgLTYzNTcsOCAmIzQzOzYzNzYsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLVx0XHQgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzLFxuJiM0MztcdFx0XHQgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuQEAgLTYzNzcsNyAmIzQzOzYzOTcsNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4mIzQzO1x0XHRcdCAgICBldmVudCwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzLCBkZWxfcmVhc29uKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIG5lZWRlZCBzcGFjZSBncmV3IHVuZGVyIHVzLiAqL1xuQEAgLTYzOTgsNiAmIzQzOzY0MTgsMTggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4gXHRydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUk9VVEUsIGVycik7XG4gfVxuIFxuJiM0Mzt2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcbiYjNDM7e1xuJiM0MztcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuJiM0MztcdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0X19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0XHQgICAgc3RydWN0IG5sX2luZm8gKmluZm8pXG4ge1xuQEAgLTY0MTAsNyAmIzQzOzY0NDIsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XG4mIzQzO1x0XHRcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXG4mIzQzO1x0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuQEAgLTY0NjMsNyAmIzQzOzY0OTYsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4mIzQzO1x0XHRcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xuIFx0XHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5pbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxuQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFxcXG4gICAgIHdhaXRfZmlsZSwgdG9vbCwgdGNcbiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHNcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XG4mIzQzOyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcJiMzNDtLU1JDXCYjMzQ7LFxuQEAgLTM0LDQgJiM0MzszNCw0IEBAIF9fYWxsX18gPSBbXCYjMzQ7S1NSQ1wmIzM0OyxcbiAgICAgICAgICAgIFwmIzM0O05ldGRldlNpbVwmIzM0OywgXCYjMzQ7TmV0ZGV2U2ltRGV2XCYjMzQ7LFxuICAgICAgICAgICAgXCYjMzQ7TmV0c2hhcGVyRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LCBcJiMzNDtQU1BGYW1pbHlcJiMzNDssIFwmIzM0O05sRXJyb3JcJiMzNDssXG4gICAgICAgICAgICBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O0V0aHRvb2xGYW1pbHlcJiMzNDssIFwmIzM0O05ldGRldkZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0Oyxcbi0gICAgICAgICAgIFwmIzM0O05sY3RybEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssIFwmIzM0O05ldGxpbmtcJiMzNDtdXG4mIzQzOyAgICAgICAgICAgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7XVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbmluZGV4IDJlNTY3MDYyYWE2Y2MuLjA4ZGVmZjc1NmYyOWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHlcbkBAIC0yOSw3ICYjNDM7MjksNyBAQCBleGNlcHQgTW9kdWxlTm90Rm91bmRFcnJvciBhcyBlOlxuIFxuIF9fYWxsX18gPSBbXG4gICAgIFwmIzM0O05sRXJyb3JcJiMzNDssIFwmIzM0O05sUG9saWN5XCYjMzQ7LCBcJiMzNDtOZXRsaW5rXCYjMzQ7LCBcJiMzNDtZbmxGYW1pbHlcJiMzNDssIFwmIzM0O1NQRUNfUEFUSFwmIzM0Oyxcbi0gICAgXCYjMzQ7RXRodG9vbEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEZhbWlseVwmIzM0OywgXCYjMzQ7UnRubEFkZHJGYW1pbHlcJiMzNDssXG4mIzQzOyAgICBcJiMzNDtFdGh0b29sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sRmFtaWx5XCYjMzQ7LCBcJiMzNDtSdG5sQWRkckZhbWlseVwmIzM0OywgXCYjMzQ7UnRubFJvdXRlRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtOZXRkZXZGYW1pbHlcJiMzNDssIFwmIzM0O05ldHNoYXBlckZhbWlseVwmIzM0OywgXCYjMzQ7TmxjdHJsRmFtaWx5XCYjMzQ7LCBcJiMzNDtEZXZsaW5rRmFtaWx5XCYjMzQ7LFxuICAgICBcJiMzNDtQU1BGYW1pbHlcJiMzNDssXG4gXVxuQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxuICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygoU1BFQ19QQVRIIC8gUGF0aCgmIzM5O3J0LWFkZHIueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4mIzQzO2NsYXNzIFJ0bmxSb3V0ZUZhbWlseShZbmxGYW1pbHkpOlxuJiM0MzsgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKVxuJiM0MztcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJiMzOTtuZXRkZXYueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxuaW5kZXggMGM2N2M3YzAwZDg0MS4uZjc0Y2NkNWMyZDEzYSAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC01LDcgJiM0Mzs1LDggQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmVcbiYjNDM7ZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseVxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1xceGUwXFx4MDBcXHgwMFxceDAxJiMzOTtcbiBJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XFx4ZWZcXHgwMVxceDAxXFx4MDEmIzM5O1xuQEAgLTEzNCw4ICYjNDM7MTM1LDE4NCBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAga3NmdF90cnVlKGZcJiMzNDtpbmV0IHtpZm5hbWV9IGZvcndhcmRpbmcgb25cJiMzNDsgaW4gY21kX29iai5zdGRvdXQsXG4gICAgICAgICAgICAgICBmXCYjMzQ7Tm8gJiMzOTtmb3J3YXJkaW5nIG9uJiMzOTsgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XCYjMzQ7KVxuIFxuJiM0MztkZWYgX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKTpcbiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICBydG5sID0gUnRubFJvdXRlRmFtaWx5KClcbiYjNDM7ICAgIHJ0bmwubnRmX3N1YnNjcmliZShcJiMzNDtydG5sZ3JwLWlwdjYtcm91dGVcJiMzNDspXG4mIzQzOyAgICByZXR1cm4gcnRubFxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4mIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGF0dHJzID0gbXNnWyYjMzk7bXNnJiMzOTtdXG4mIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOlxuJiM0MzsgICAgICAgICAgICBjb250aW51ZVxuJiM0MzsgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspICE9IGRzdDpcbiYjNDM7ICAgICAgICAgICAgY29udGludWVcbiYjNDM7ICAgICAgICByZXR1cm4gYXR0cnNcbiYjNDM7ICAgIHJldHVybiBOb25lXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgbmFtZSwgd2FudCwgZGVhZGxpbmU9MTApOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHNlZW4gPSB7fVxuJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKTpcbiYjNDM7ICAgICAgICBpZiBtc2dbJiMzOTtuYW1lJiMzOTtdICE9IG5hbWU6XG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O11cbiYjNDM7ICAgICAgICBrZXkgPSAoYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSwgYXR0cnMuZ2V0KCYjMzk7ZHN0JiMzOTspKVxuJiM0MzsgICAgICAgIGlmIGtleSBpbiB3YW50OlxuJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRyc1xuJiM0MzsgICAgICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxuJiM0MzsgICAgICAgICAgICAgICAgYnJlYWtcbiYjNDM7ICAgIHJldHVybiBzZWVuXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6XG4mIzQzOyAgICB3aXRoIG9wZW4oZlwmIzM0Oy9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cJiMzNDssIFwmIzM0O3dcJiMzNDspIGFzIGY6XG4mIzQzOyAgICAgICAgZi53cml0ZShmXCYjMzQ7e3ZhbHVlfVxcblwmIzM0OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtyb3V0ZS9nY19pbnRlcnZhbFwmIzM0OywgMilcbiYjNDM7ICAgICAgICBpcChcJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXBcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7XG4mIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXG4mIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZVwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtUaGUga2VybmVsIGZpbGxzIGluIHRoZSBJQ01QdjYgY2hlY2tzdW0gb24gcmF3IElDTVB2NiBzb2NrZXRzLlwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSxcbiYjNDM7ICAgICMgcmVhY2hhYmxlIHRpbWUsIHJldHJhbnMgdGltZXJcbiYjNDM7ICAgIHJhID0gc3RydWN0LnBhY2soJiMzOTshQkJIQkJISUkmIzM5OywgMTM0LCAwLCAwLCA2NCwgMCwgbGlmZXRpbWUsIDAsIDApXG4mIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cbiYjNDM7ICAgICAgICAjIFJGQyA0MTkxIHJvdXRlIGluZm9ybWF0aW9uIG9wdGlvbiwgLzY0IHByZWZpeCAoOCBieXRlcylcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSlcbiYjNDM7ICAgICAgICByYSAmIzQzOz0gc29ja2V0LmluZXRfcHRvbihzb2NrZXQuQUZfSU5FVDYsIHByZWZpeClbOjhdXG4mIzQzOyAgICBpZiBwaW8gaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW9cbiYjNDM7ICAgICAgICAjIFJGQyA0ODYxIHByZWZpeCBpbmZvcm1hdGlvbiBvcHRpb24sIG9uLWxpbmsgb25seSAoTCBzZXQsIEEgY2xlYXIpXG4mIzQzOyAgICAgICAgcmEgJiM0Mzs9IHN0cnVjdC5wYWNrKCYjMzk7IUJCQkJJSUkmIzM5OywgMywgNCwgcGxlbiwgMHg4MCwgdmFsaWRfbGZ0LCAwLCAwKVxuJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxuJiM0MzsgICAgc29jay5zZW5kdG8ocmEsICgmIzM5O2ZmMDI6OjEmIzM5OywgMCwgMCwgaWZpbmRleCkpXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIF9yYV9yb3V0ZXJfc29jayhuc19yLCBpZm5hbWUpOlxuJiM0MzsgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6XG4mIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQUFJPVE9fSUNNUFY2KVxuJiM0MzsgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9NVUxUSUNBU1RfSE9QUywgMjU1KVxuJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBTZW5kaW5nIGZhaWxzIHdpdGggRUFERFJOT1RBVkFJTCB1bnRpbCB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWxcbiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBzZWVuID0ge31cbiYjNDM7ICAgIGZvciBfIGluIHJhbmdlKDEwKTpcbiYjNDM7ICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcbiYjNDM7ICAgICAgICBleGNlcHQgT1NFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpXG4mIzQzOyAgICAgICAgICAgIGNvbnRpbnVlXG4mIzQzOyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O25ld3JvdXRlLW50ZiYjMzk7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudCAtIHNldChzZWVuLmtleXMoKSksIGRlYWRsaW5lPTIpKVxuJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4mIzQzOyAgICAgICAgICAgIGJyZWFrXG4mIzQzOyAgICByZXR1cm4gc2VlblxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fcmFfd2l0aGRyYXduKCkgLVx1MDAzZSBOb25lOlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MVxuJiM0MzsgICAgUElPLCBSRkMgNDE5MSBSSU8pIHJlcG9ydCBSVEFfREVMX1JFQVNPTiA9PSByYS13aXRoZHJhd24uXG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAjIChydG0tZHN0LWxlbiwgZHN0KTsgdGhlIGRlZmF1bHQgcm91dGUgY2FycmllcyBubyBSVEFfRFNUXG4mIzQzOyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICYjMzk7MjAwMTpkYjg6Njo6JiMzOTspLCAoNjQsICYjMzk7MjAwMTpkYjg6NTo6JiMzOTspfVxuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XG4mIzQzOyAgICAgICAgaXAoZlwmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfVwmIzM0OylcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcbiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhXCYjMzQ7LCAyKVxuJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9mb3J3YXJkaW5nXCYjMzQ7LCAwKVxuJiM0MzsgICAgICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlblwmIzM0OywgNjQpXG4mIzQzOyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wmIzM0OylcbiYjNDM7ICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX3IpKTpcbiYjNDM7ICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5XG4mIzQzOyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcJiMzNDtjb25mL3ZldGgxL2FjY2VwdF9kYWRcJiMzNDssIDApXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IHZldGgwIHVwXCYjMzQ7LCBucz1zdHIobnNfaCkpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IHZldGgxIHVwXCYjMzQ7LCBucz1zdHIobnNfcikpXG4mIzQzO1xuJiM0MzsgICAgICAgIHJ0bmwgPSBfcnRubF9yb3V0ZV9zdWJzY3JpYmUobnNfaClcbiYjNDM7ICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFwmIzM0O3ZldGgxXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCA2MDApLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCA2MDApKVxuJiM0MzsgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFwmIzM0O25vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXCYjMzQ7KVxuJiM0MzsgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XG4mIzQzOyAgICAgICAgICAgIHJldHVyblxuJiM0MztcbiYjNDM7ICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCAwKSxcbiYjNDM7ICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCAwKSlcbiYjNDM7ICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCByb3V0ZXMpXG4mIzQzOyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XG4mIzQzOyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KVxuJiM0MzsgICAgICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBmXCYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgmIzM5O2RlbC1yZWFzb24mIzM5OyksICYjMzk7cmEtd2l0aGRyYXduJiMzOTspXG4mIzQzO1xuJiM0MztcbiYjNDM7ZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnQoKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcbiYjNDM7ICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cbiYjNDM7ICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MztcbiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuJiM0MzsgICAgICAgIGlwKFwmIzM0O2xpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgZGV2IGR1bW15MSB1cFwmIzM0OywgbnM9c3RyKG5zKSlcbiYjNDM7ICAgICAgICBpcChcJiMzNDstNiByb3V0ZSBhZGQgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcJiMzNDssIG5zPXN0cihucykpXG4mIzQzOyAgICAgICAgaXAoXCYjMzQ7LTYgcm91dGUgZGVsIDIwMDE6ZGI4OjE6Oi82NCBkZXYgZHVtbXkxXCYjMzQ7LCBucz1zdHIobnMpKVxuJiM0MztcbiYjNDM7ICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAmIzM5O2RlbHJvdXRlLW50ZiYjMzk7LCA2NCwgJiMzOTsyMDAxOmRiODoxOjomIzM5OylcbiYjNDM7ICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NFwmIzM0OylcbiYjNDM7ICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtkZWwtcmVhc29uJiMzOTssIGF0dHJzLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDt1c2VyIGRlbGV0aW9uIG11c3Qgbm90IGNhcnJ5IGRlbC1yZWFzb25cJiMzNDspXG4mIzQzO1xuJiM0MztcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuJiM0MzsgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXG4mIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcbiYjNDM7ICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBpZiBfX25hbWVfXyA9PSBcJiMzNDtfX21haW5fX1wmIzM0OzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxODo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtydDZfZHVtcF9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2ZpYjZfcnVuX2djJiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiOWFlNzAwNmM5OTcwZjEyNGJkOTFkMDJmMmJlN2FkY2RiZDRiZTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxODo1OTo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZTM3YTEzMDFlZjFkYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWwKQEAgLTc4LDYgJiM0Mzs3OCwxNSBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogcnRhLXVzZWQKICAgICAgICAgdHlwZTogdTMyCiYjNDM7ICAtCiYjNDM7ICAgIG5hbWU6IGRlbC1yZWFzb24KJiM0MzsgICAgdHlwZTogZW51bQomIzQzOyAgICBuYW1lLXByZWZpeDogcnRhLWRlbC1yZWFzb24tCiYjNDM7ICAgIGVudW0tbmFtZTogcnRhLWRlbC1yZWFzb24KJiM0MzsgICAgZW50cmllczoKJiM0MzsgICAgICAtIHVuc3BlYwomIzQzOyAgICAgIC0gZXhwaXJlZAomIzQzOyAgICAgIC0gcmEtd2l0aGRyYXduCiAKIGF0dHJpYnV0ZS1zZXRzOgogICAtCkBAIC0xODUsNiAmIzQzOzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgdHlwZTogdTMyCiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW4KICAgICAgICAgZGlzcGxheS1oaW50OiBoZXgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBkZWwtcmVhc29uCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAgIGVudW06IGRlbC1yZWFzb24KICAgLQogICAgIG5hbWU6IG1ldHJpY3MKICAgICBuYW1lLXByZWZpeDogcnRheC0KQEAgLTI5OSw2ICYjNDM7MzEyLDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICAgIC0gZHBvcnQKICAgICAgICAgICAgIC0gbmgtaWQKICAgICAgICAgICAgIC0gZmxvd2xhYmVsCiYjNDM7ICAgICAgICAgICAgLSBkZWwtcmVhc29uCiAgICAgICBkdW1wOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNgpAQCAtMzEzLDcgJiM0MzszMjcsMzggQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNAotICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnMKJiM0MzsgICAgICAgICAgIyBkZWwtcmVhc29uIGlzIG5vdGlmaWNhdGlvbi1vbmx5LiBJdCBpcyBhYm92ZQomIzQzOyAgICAgICAgICAjIHN0cmljdF9zdGFydF90eXBlIGluIHJ0bV9pcHY2X3BvbGljeSwgc28gdGhlIGtlcm5lbCByZWplY3RzCiYjNDM7ICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuCiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6ICZhbXA7cm91dGUtcmVxLWF0dHJzCiYjNDM7ICAgICAgICAgICAgLSBkc3QKJiM0MzsgICAgICAgICAgICAtIHNyYwomIzQzOyAgICAgICAgICAgIC0gaWlmCiYjNDM7ICAgICAgICAgICAgLSBvaWYKJiM0MzsgICAgICAgICAgICAtIGdhdGV3YXkKJiM0MzsgICAgICAgICAgICAtIHByaW9yaXR5CiYjNDM7ICAgICAgICAgICAgLSBwcmVmc3JjCiYjNDM7ICAgICAgICAgICAgLSBtZXRyaWNzCiYjNDM7ICAgICAgICAgICAgLSBtdWx0aXBhdGgKJiM0MzsgICAgICAgICAgICAtIGZsb3cKJiM0MzsgICAgICAgICAgICAtIGNhY2hlaW5mbwomIzQzOyAgICAgICAgICAgIC0gdGFibGUKJiM0MzsgICAgICAgICAgICAtIG1hcmsKJiM0MzsgICAgICAgICAgICAtIG1mYy1zdGF0cwomIzQzOyAgICAgICAgICAgIC0gdmlhCiYjNDM7ICAgICAgICAgICAgLSBuZXdkc3QKJiM0MzsgICAgICAgICAgICAtIHByZWYKJiM0MzsgICAgICAgICAgICAtIGVuY2FwLXR5cGUKJiM0MzsgICAgICAgICAgICAtIGVuY2FwCiYjNDM7ICAgICAgICAgICAgLSBleHBpcmVzCiYjNDM7ICAgICAgICAgICAgLSBwYWQKJiM0MzsgICAgICAgICAgICAtIHVpZAomIzQzOyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZQomIzQzOyAgICAgICAgICAgIC0gaXAtcHJvdG8KJiM0MzsgICAgICAgICAgICAtIHNwb3J0CiYjNDM7ICAgICAgICAgICAgLSBkcG9ydAomIzQzOyAgICAgICAgICAgIC0gbmgtaWQKJiM0MzsgICAgICAgICAgICAtIGZsb3dsYWJlbAogICAgIC0KICAgICAgIG5hbWU6IGRlbHJvdXRlCiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZQpAQCAtMzIxLDQgJiM0MzszNjYsMjMgQEAgb3BlcmF0aW9uczoKICAgICAgIGRvOgogICAgICAgICByZXF1ZXN0OgogICAgICAgICAgIHZhbHVlOiAyNQotICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnMKJiM0MzsgICAgICAgICAgYXR0cmlidXRlczogKnJvdXRlLXJlcS1hdHRycwomIzQzOyAgICAtCiYjNDM7ICAgICAgbmFtZTogbmV3cm91dGUtbnRmCiYjNDM7ICAgICAgZG9jOiBOb3RpZmljYXRpb24gYWJvdXQgYSBjcmVhdGVkIHJvdXRlLgomIzQzOyAgICAgIHZhbHVlOiAyNAomIzQzOyAgICAgIG5vdGlmeTogZ2V0cm91dGUKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZgomIzQzOyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgZGVsZXRlZCByb3V0ZS4KJiM0MzsgICAgICB2YWx1ZTogMjUKJiM0MzsgICAgICBub3RpZnk6IGdldHJvdXRlCiYjNDM7CiYjNDM7bWNhc3QtZ3JvdXBzOgomIzQzOyAgbGlzdDoKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2NC1yb3V0ZQomIzQzOyAgICAgIHZhbHVlOiA3CiYjNDM7ICAgIC0KJiM0MzsgICAgICBuYW1lOiBydG5sZ3JwLWlwdjYtcm91dGUKJiM0MzsgICAgICB2YWx1ZTogMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaCBiL2luY2x1ZGUvbmV0L2lwNl9maWIuaAppbmRleCA5Y2QyN2UxYjliNjkyLi5jNmRjMjNhNDJjMTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCkBAIC00NjgsNyAmIzQzOzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LAogCiBpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiAJICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKLWludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pOwomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTsKIAogc3RhdGljIGlubGluZQogdm9pZCBydDZfZ2V0X3ByZWZzcmMoY29uc3Qgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGluNl9hZGRyICphZGRyKQpAQCAtNTMyLDYgJiM0Mzs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwKICNlbmRpZgogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0Mzt2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pOwogCiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsCiAJCQkgdW5zaWduZWQgbG9uZyBub3cpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmggYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAppbmRleCAwOWZmZTBmMTNjZTc1Li45MmFkNWEwZDAzYTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcDZfcm91dGUuaApAQCAtMTI4LDEyICYjNDM7MTI4LDIxIEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTsKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksCiYjNDM7CQkgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiAJCQkgICAgIGJvb2wgc2tpcF9ub3RpZnkpCiB7CiAJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksCiYjNDM7CQkJCSAgICBib29sIHNraXBfbm90aWZ5LAomIzQzOwkJCQkgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7fQogI2VuZGlmCiAKIHZvaWQgcnQ2X2ZsdXNoX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqZjZpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAyNzI2NWZkMzFlNWZjLi5mZTAwZTYyNGYzYzNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0zOTksNiAmIzQzOzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAJUlRBX0RQT1JULAogCVJUQV9OSF9JRCwKIAlSVEFfRkxPV0xBQkVMLAomIzQzOwlSVEFfREVMX1JFQVNPTiwKIAlfX1JUQV9NQVgKIH07CiAKQEAgLTQwNyw2ICYjNDM7NDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7CiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSAmIzQzOyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHJ0bXNnKSkpKQogI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAKJiM0MzsvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi4KJiM0MzsgKiBFbWl0dGVkIG9ubHkgb24gUlRNX0RFTFJPVVRFIG5vdGlmaWNhdGlvbnMsIGFuZCBvbmx5IHdoZW4gdGhlIGRlbGV0aW9uCiYjNDM7ICogcGF0aCByZWNvcmRzIGEgY2F1c2UuIEFic2VuY2UgbWVhbnMgZWl0aGVyIGFuIG9sZGVyIGtlcm5lbCBvciBhCiYjNDM7ICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdAomIzQzOyAqIHRyZWF0ICYjMzQ7YWJzZW50JiMzNDsgYW5kICYjMzQ7dW5zcGVjJiMzNDsgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLgomIzQzOyAqIEN1cnJlbnRseSBvbmx5IElQdjYgZGVsZXRpb24gcGF0aHMgcmVjb3JkIGEgY2F1c2UuCiYjNDM7ICovCiYjNDM7ZW51bSBydGFfZGVsX3JlYXNvbiB7CiYjNDM7CVJUQV9ERUxfUkVBU09OX1VOU1BFQywJCS8qIGNhdXNlIG5vdCByZWNvcmRlZCAqLwomIzQzOwlSVEFfREVMX1JFQVNPTl9FWFBJUkVELAkJLyogUlRGX0VYUElSRVMgbGlmZXRpbWUgcmFuIG91dCAoR0MpICovCiYjNDM7CVJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiwJLyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqLwomIzQzOwlfX1JUQV9ERUxfUkVBU09OX01BWAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBSVEFfREVMX1JFQVNPTl9NQVggKF9fUlRBX0RFTF9SRUFTT05fTUFYIC0gMSkKJiM0MzsKIC8qIFJUTV9NVUxUSVBBVEggLS0tIGFycmF5IG9mIHN0cnVjdCBydG5leHRob3AuCiAgKgogICogJiMzNDtzdHJ1Y3QgcnRuZXh0aG9wJiMzNDsgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjBjM2QzOGY2OWZjNDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjg3NCw3ICYjNDM7Mjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKQogCQlpZiAocnQpIHsKIAkJCS8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqLwogCQkJaWYgKHZhbGlkX2xmdCA9PSAwKSB7Ci0JCQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQkJCWlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIGZhbHNlLAomIzQzOwkJCQkJCSAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJCQlydCA9IE5VTEw7CiAJCQl9IGVsc2UgewogCQkJCXRhYmxlID0gcnQtJmd0O2ZpYjZfdGFibGU7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggYTEzMGNkZmFlYmZiZS4uMTU5ZGIxMGE4NDZjYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTk2Niw3ICYjNDM7MTk2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKLQkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzOwkJCSAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvLAomIzQzOwkJCSAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgZmliNl9pbmZvICpsZWFmLCAqcmVwbGFjZV9ydCA9IE5VTEw7CiAJc3RydWN0IGZpYjZfd2Fsa2VyICp3OwpAQCAtMjA1NSwxMyAmIzQzOzIwNTYsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbiwKIAkJCWNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpOwogCX0KIAlpZiAoIWluZm8tJmd0O3NraXBfbm90aWZ5KQotCQlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCk7CiYjNDM7CQlpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTsKIAogCWZpYjZfaW5mb19yZWxlYXNlKHJ0KTsKIH0KIAogLyogTmVlZCB0byBvd24gdGFibGUtJmd0O3RiNl9sb2NrICovCi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CSAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwOwpAQCAtMjA5MCw3ICYjNDM7MjA5Miw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAJCWlmIChydCA9PSBjdXIpIHsKIAkJCWlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKQogCQkJCWZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLSZndDtubF9uZXQpOwotCQkJZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8pOwomIzQzOwkJCWZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXJ0cF9uZXh0ID0gJmFtcDtjdXItJmd0O2ZpYjZfbmV4dDsKQEAgLTIyNTIsNyAmIzQzOzIyNTQsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpCiAJCXJlcyA9IGMtJmd0O2Z1bmMocnQsIGMtJmd0O2FyZyk7CiAJCWlmIChyZXMgPT0gLTEpIHsKIAkJCXctJmd0O2xlYWYgPSBydDsKLQkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCXJlcyA9IGZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAocmVzKSB7CiAjaWYgUlQ2X0RFQlVHICZndDs9IDIKIAkJCQlwcl9kZWJ1ZygmIzM0OyVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcbiYjMzQ7LApAQCAtMjQwMCw3ICYjNDM7MjQwMiw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgJmFtcDt0YjYtJmd0O3RiNl9nY19obGlzdCwgZ2NfbGluaykKIAkJaWYgKGZpYjZfYWdlKHJ0LCBnY19hcmdzKSA9PSAtMSkKLQkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8pOwomIzQzOwkJCWZpYjZfZGVsKHJ0LCAmYW1wO2luZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpOwogfQogCiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCBmODY3ZWM4ZDNkOTA1Li43MTNkYjkwODlkNWUxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEzNjEsNyAmIzQzOzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWRlZnJ0cl91c3JfbWV0cmljID0gaW42X2Rldi0mZ3Q7Y25mLnJhX2RlZnJ0cl9tZXRyaWM7CiAJLyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi8KIAlpZiAocnQgJmFtcDsmYW1wOyAobGlmZXRpbWUgPT0gMCB8fCBydC0mZ3Q7ZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7Ci0JCWlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpOwomIzQzOwkJaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsCiYjNDM7CQkJCSAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6CiYjNDM7CQkJCQkJICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQlydCA9IE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBmYzQyZDY3ZTU4MjI2Li45NGY5NjQ2ZDVlYmMzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTExMSw3ICYjNDM7MTExLDcgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkJIHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkgdW5zaWduZWQgaW50IGZsYWdzKTsKJiM0MzsJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pOwogc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTsKQEAgLTEwMjAsNyAmIzQzOzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAogCQkJCQlnd2FkZHIsIGRldik7CiAKIAlpZiAocnQgJmFtcDsmYW1wOyAhbGlmZXRpbWUpIHsKLQkJaXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7CiYjNDM7CQlpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSwgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTsKIAkJcnQgPSBOVUxMOwogCX0KIApAQCAtMzk3Myw3ICYjNDM7Mzk3Myw4IEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKQomIzQzO3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQllbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gaW5mby0mZ3Q7bmxfbmV0OwogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKQEAgLTM5ODYsNyAmIzQzOzM5ODcsNyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAKIAl0YWJsZSA9IHJ0LSZndDtmaWI2X3RhYmxlOwogCXNwaW5fbG9ja19iaCgmYW1wO3RhYmxlLSZndDt0YjZfbG9jayk7Ci0JZXJyID0gZmliNl9kZWwocnQsIGluZm8pOwomIzQzOwllcnIgPSBmaWI2X2RlbChydCwgaW5mbywgZGVsX3JlYXNvbik7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YWJsZS0mZ3Q7dGI2X2xvY2spOwogCiBvdXQ6CkBAIC0zOTk0LDE0ICYjNDM7Mzk5NSwyMCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pCiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSkKJiM0MztpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSwKJiM0MzsJCSAgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbikKIHsKIAlzdHJ1Y3QgbmxfaW5mbyBpbmZvID0gewogCQkubmxfbmV0ID0gbmV0LAogCQkuc2tpcF9ub3RpZnkgPSBza2lwX25vdGlmeQogCX07CiAKLQlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8pOwomIzQzOwlyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCAmYW1wO2luZm8sIGRlbF9yZWFzb24pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KQomIzQzO3sKJiM0MzsJcmV0dXJuIGlwNl9kZWxfcnRfcmVhc29uKG5ldCwgcnQsIHNraXBfbm90aWZ5LCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogfQogCiBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpCkBAIC00MDI4LDcgJiM0Mzs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsCiAJCQkJCSAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLAotCQkJCQkgIGluZm8tJmd0O3BvcnRpZCwgc2VxLCAwKSAmbHQ7IDApIHsKJiM0MzsJCQkJCSAgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIDAsCiYjNDM7CQkJCQkgIFJUQV9ERUxfUkVBU09OX1VOU1BFQykgJmx0OyAwKSB7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJc2tiID0gTlVMTDsKIAkJCX0gZWxzZQpAQCAtNDA2NCwxMyAmIzQzOzQwNzIsMTMgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2libGluZywgbmV4dF9zaWJsaW5nLAogCQkJCQkgJmFtcDtydC0mZ3Q7ZmliNl9zaWJsaW5ncywKIAkJCQkJIGZpYjZfc2libGluZ3MpIHsKLQkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pOwomIzQzOwkJCWVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCX0KIAotCWVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTsKJiM0MzsJZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZhbXA7dGFibGUtJmd0O3RiNl9sb2NrKTsKIG91dF9wdXQ6CkBAIC00MTk2LDcgJiM0Mzs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLAogCQkJCWlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJZXJyID0gIF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbyk7CiYjNDM7CQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbywKJiM0MzsJCQkJCQkgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJaWYgKGNmZy0mZ3Q7ZmNfbmhfaWQpCkBAIC00MjE1LDcgJiM0Mzs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLAogCiAJCQkvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi8KIAkJCWlmIChjZmctJmd0O2ZjX2ZsYWdzICZhbXA7IFJURl9HQVRFV0FZKQotCQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbyk7CiYjNDM7CQkJCWVyciA9IF9faXA2X2RlbF9ydChydCwgJmFtcDtjZmctJmd0O2ZjX25saW5mbywKJiM0MzsJCQkJCQkgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJZWxzZQogCQkJCWVyciA9IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhydCwgY2ZnKTsKIAkJCWJyZWFrOwpAQCAtNTczOSw2ICYjNDM7NTc0OSw3IEBAIHN0YXRpYyBzaXplX3QgcnQ2X25sbXNnX3NpemUoc3RydWN0IGZpYjZfaW5mbyAqZjZpKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZShUQ1BfQ0FfTkFNRV9NQVgpIC8qIFJUQVhfQ0NfQUxHTyAqLwogCSAgICAgICAmIzQzOyBubGFfdG90YWxfc2l6ZSgxKSAvKiBSVEFfUFJFRiAqLwomIzQzOwkgICAgICAgJiM0MzsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX0RFTF9SRUFTT04gKi8KIAkgICAgICAgJiM0MzsgbmV4dGhvcF9sZW47CiB9CiAKQEAgLTU3NzUsNyAmIzQzOzU3ODYsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCiAJCQkgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywKIAkJCSBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKLQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MpCiYjNDM7CQkJIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7CiAJc3RydWN0IHJ0NmtleSAqcnQ2X2RzdCwgKnJ0Nl9zcmM7CkBAIC01OTU0LDYgJiM0Mzs1OTY1LDEwIEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LSZndDtlcnJvciA6IDApICZsdDsgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKJiM0MzsJaWYgKGRlbF9yZWFzb24gIT0gUlRBX0RFTF9SRUFTT05fVU5TUEVDICZhbXA7JmFtcDsKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKQomIzQzOwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfUFJFRiwgSVBWNl9FWFRSQUNUX1BSRUYocnQ2X2ZsYWdzKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02MDU1LDcgJiM0Mzs2MDcwLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKQogCQkJCQkgICAgJmFtcDtydDZfZXgtJmd0O3J0NmktJmd0O2RzdCwgTlVMTCwgTlVMTCwgMCwKIAkJCQkJICAgIFJUTV9ORVdST1VURSwKIAkJCQkJICAgIE5FVExJTktfQ0IoZHVtcC0mZ3Q7Y2ItJmd0O3NrYikucG9ydGlkLAotCQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncyk7CiYjNDM7CQkJCQkgICAgZHVtcC0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCB3LSZndDtmbGFncywKJiM0MzsJCQkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCkBAIC02MTAzLDcgJiM0Mzs2MTE5LDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCiAJCQlpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy0mZ3Q7c2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAwLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgTkVUTElOS19DQihhcmctJmd0O2NiLSZndDtza2IpLnBvcnRpZCwKLQkJCQkJICBhcmctJmd0O2NiLSZndDtubGgtJmd0O25sbXNnX3NlcSwgZmxhZ3MpKSB7CiYjNDM7CQkJCQkgIGFyZy0mZ3Q7Y2ItJmd0O25saC0mZ3Q7bmxtc2dfc2VxLCBmbGFncywKJiM0MzsJCQkJCSAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSkgewogCQkJCXJldHVybiAwOwogCQkJfQogCQkJY291bnQmIzQzOyYjNDM7OwpAQCAtNjMzNiwxMiAmIzQzOzYzNTMsMTQgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQllcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJCWVsc2UKIAkJCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIGRzdCwgJmFtcDtmbDYuZGFkZHIsCiAJCQkJCSAgICAmYW1wO2ZsNi5zYWRkciwgaWlmLCBSVE1fTkVXUk9VVEUsCiAJCQkJCSAgICBORVRMSU5LX0NCKGluX3NrYikucG9ydGlkLAotCQkJCQkgICAgbmxoLSZndDtubG1zZ19zZXEsIDApOwomIzQzOwkJCQkJICAgIG5saC0mZ3Q7bmxtc2dfc2VxLCAwLAomIzQzOwkJCQkJICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7CiAJfSBlbHNlIHsKIAkJZXJyID0gLUVORVRVTlJFQUNIOwogCX0KQEAgLTYzNTcsOCAmIzQzOzYzNzYsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKQomIzQzO3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsCiYjNDM7CQkJICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsCiYjNDM7CQkJICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGluZm8tJmd0O25sX25ldDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNjM3Nyw3ICYjNDM7NjM5Nyw3IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIGV2ZW50LCBpbmZvLSZndDtwb3J0aWQsIHNlcSwgbmxtX2ZsYWdzKTsKJiM0MzsJCQkgICAgZXZlbnQsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQkvKiAtRU1TR1NJWkUgaW1wbGllcyBuZWVkZWQgc3BhY2UgZ3JldyB1bmRlciB1cy4gKi8KQEAgLTYzOTgsNiAmIzQzOzY0MTgsMTggQEAgdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiAJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOwogfQogCiYjNDM7dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCiYjNDM7CQkgICAgIHVuc2lnbmVkIGludCBubG1fZmxhZ3MpCiYjNDM7ewomIzQzOwlfX2luZXQ2X3J0X25vdGlmeShldmVudCwgcnQsIGluZm8sIG5sbV9mbGFncywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQomIzQzO3sKJiM0MzsJX19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7CiYjNDM7fQomIzQzOwogdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQkgICAgc3RydWN0IG5sX2luZm8gKmluZm8pCiB7CkBAIC02NDEwLDcgJiM0Mzs2NDQyLDggQEAgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LAogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLAotCQkJICAgIFJUTV9ORVdST1VURSwgaW5mby0mZ3Q7cG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UpOwomIzQzOwkJCSAgICBSVE1fTkVXUk9VVEUsIGluZm8tJmd0O3BvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFLAomIzQzOwkJCSAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CkBAIC02NDYzLDcgJiM0Mzs2NDk2LDcgQEAgdm9pZCBmaWI2X2luZm9faHdfZmxhZ3Nfc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLAogCX0KIAogCWVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGY2aSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLCAwLAotCQkJICAgIDAsIDApOwomIzQzOwkJCSAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpOwogCWlmIChlcnIgJmx0OyAwKSB7CiAJCS8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovCiAJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weQppbmRleCBlNThiZGJkYzU4ZWVhLi4zNDkzNTg4NmI2YWRmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHkKQEAgLTE3LDcgJiM0MzsxNyw3IEBAIGZyb20gLnV0aWxzIGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgZmRfcmVhZF90aW1lb3V0LCBjbWQsIGJrZywgZGVmZXIsIFwKICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjCiBmcm9tIC5icGYgaW1wb3J0IGJwZl9tYXBfc2V0LCBicGZfbWFwX2R1bXAsIGJwZl9wcm9nX21hcF9pZHMKIGZyb20gLnlubCBpbXBvcnQgTmxFcnJvciwgTmxjdHJsRmFtaWx5LCBZbmxGYW1pbHksIFwKLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5CiYjNDM7ICAgIEV0aHRvb2xGYW1pbHksIE5ldGRldkZhbWlseSwgUnRubEZhbWlseSwgUnRubEFkZHJGYW1pbHksIFJ0bmxSb3V0ZUZhbWlseQogZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGluawogCiBfX2FsbF9fID0gWyYjMzQ7S1NSQyYjMzQ7LApAQCAtMzQsNCAmIzQzOzM0LDQgQEAgX19hbGxfXyA9IFsmIzM0O0tTUkMmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRkZXZTaW0mIzM0OywgJiMzNDtOZXRkZXZTaW1EZXYmIzM0OywKICAgICAgICAgICAgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssICYjMzQ7UFNQRmFtaWx5JiMzNDssICYjMzQ7TmxFcnJvciYjMzQ7LAogICAgICAgICAgICAmIzM0O1lubEZhbWlseSYjMzQ7LCAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssCi0gICAgICAgICAgICYjMzQ7TmxjdHJsRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywgJiMzNDtOZXRsaW5rJiMzNDtdCiYjNDM7ICAgICAgICAgICAmIzM0O05sY3RybEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssICYjMzQ7TmV0bGluayYjMzQ7XQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQppbmRleCAyZTU2NzA2MmFhNmNjLi4wOGRlZmY3NTZmMjliIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weQpAQCAtMjksNyAmIzQzOzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZToKIAogX19hbGxfXyA9IFsKICAgICAmIzM0O05sRXJyb3ImIzM0OywgJiMzNDtObFBvbGljeSYjMzQ7LCAmIzM0O05ldGxpbmsmIzM0OywgJiMzNDtZbmxGYW1pbHkmIzM0OywgJiMzNDtTUEVDX1BBVEgmIzM0OywKLSAgICAmIzM0O0V0aHRvb2xGYW1pbHkmIzM0OywgJiMzNDtSdG5sRmFtaWx5JiMzNDssICYjMzQ7UnRubEFkZHJGYW1pbHkmIzM0OywKJiM0MzsgICAgJiMzNDtFdGh0b29sRmFtaWx5JiMzNDssICYjMzQ7UnRubEZhbWlseSYjMzQ7LCAmIzM0O1J0bmxBZGRyRmFtaWx5JiMzNDssICYjMzQ7UnRubFJvdXRlRmFtaWx5JiMzNDssCiAgICAgJiMzNDtOZXRkZXZGYW1pbHkmIzM0OywgJiMzNDtOZXRzaGFwZXJGYW1pbHkmIzM0OywgJiMzNDtObGN0cmxGYW1pbHkmIzM0OywgJiMzNDtEZXZsaW5rRmFtaWx5JiMzNDssCiAgICAgJiMzNDtQU1BGYW1pbHkmIzM0OywKIF0KQEAgLTU0LDYgJiM0Mzs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtYWRkci55YW1sJiMzOTspKS5hc19wb3NpeCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0mIzM5OyYjMzk7LCByZWN2X3NpemU9cmVjdl9zaXplKQogCiYjNDM7Y2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6CiYjNDM7ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6CiYjNDM7ICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7cnQtcm91dGUueWFtbCYjMzk7KSkuYXNfcG9zaXgoKSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPSYjMzk7JiMzOTssIHJlY3Zfc2l6ZT1yZWN2X3NpemUpCiYjNDM7CiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCYjMzk7bmV0ZGV2LnlhbWwmIzM5OykpLmFzX3Bvc2l4KCksCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weQppbmRleCAwYzY3YzdjMDBkODQxLi5mNzRjY2Q1YzJkMTNhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTUsNyAmIzQzOzUsOCBAQCBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeAotZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHkKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQga3NmdF9ub3RfaW4sIGtzZnRfbm90X25vbmUKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseSwgUnRubFJvdXRlRmFtaWx5CiAKIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGImIzM5O1x4ZTBceDAwXHgwMFx4MDEmIzM5OwogSVBWNF9URVNUX01VTFRJQ0FTVCA9IGImIzM5O1x4ZWZceDAxXHgwMVx4MDEmIzM5OwpAQCAtMTM0LDggJiM0MzsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICBrc2Z0X3RydWUoZiYjMzQ7aW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uJiMzNDsgaW4gY21kX29iai5zdGRvdXQsCiAgICAgICAgICAgICAgIGYmIzM0O05vICYjMzk7Zm9yd2FyZGluZyBvbiYjMzk7IG5vdGlmaWNpYXRpb24gZm91bmQgZm9yIGludGVyZmFjZSB7aWZuYW1lfSYjMzQ7KQogCiYjNDM7ZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKQomIzQzOyAgICBydG5sLm50Zl9zdWJzY3JpYmUoJiMzNDtydG5sZ3JwLWlwdjYtcm91dGUmIzM0OykKJiM0MzsgICAgcmV0dXJuIHJ0bmwKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1JldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOgomIzQzOyAgICAgICAgaWYgbXNnWyYjMzk7bmFtZSYjMzk7XSAhPSBuYW1lOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBhdHRycyA9IG1zZ1smIzM5O21zZyYjMzk7XQomIzQzOyAgICAgICAgaWYgYXR0cnNbJiMzOTtydG0tZHN0LWxlbiYjMzk7XSAhPSBkc3RfbGVuOgomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgmIzM5O2RzdCYjMzk7KSAhPSBkc3Q6CiYjNDM7ICAgICAgICAgICAgY29udGludWUKJiM0MzsgICAgICAgIHJldHVybiBhdHRycwomIzQzOyAgICByZXR1cm4gTm9uZQomIzQzOwomIzQzOwomIzQzO2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7R2F0aGVyIGF0dHJzIG9mIG1hdGNoaW5nIG5vdGlmaWNhdGlvbnMsIGtleWVkIGJ5IChkc3RfbGVuLCBkc3QpLiYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIG1zZyBpbiBydG5sLnBvbGxfbnRmKGR1cmF0aW9uPWRlYWRsaW5lKToKJiM0MzsgICAgICAgIGlmIG1zZ1smIzM5O25hbWUmIzM5O10gIT0gbmFtZToKJiM0MzsgICAgICAgICAgICBjb250aW51ZQomIzQzOyAgICAgICAgYXR0cnMgPSBtc2dbJiMzOTttc2cmIzM5O10KJiM0MzsgICAgICAgIGtleSA9IChhdHRyc1smIzM5O3J0bS1kc3QtbGVuJiMzOTtdLCBhdHRycy5nZXQoJiMzOTtkc3QmIzM5OykpCiYjNDM7ICAgICAgICBpZiBrZXkgaW4gd2FudDoKJiM0MzsgICAgICAgICAgICBzZWVuW2tleV0gPSBhdHRycwomIzQzOyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgICAgIGJyZWFrCiYjNDM7ICAgIHJldHVybiBzZWVuCiYjNDM7CiYjNDM7CiYjNDM7ZGVmIF93cml0ZV9pcHY2X3N5c2N0bChuYW1lLCB2YWx1ZSk6CiYjNDM7ICAgIHdpdGggb3BlbihmJiMzNDsvcHJvYy9zeXMvbmV0L2lwdjYve25hbWV9JiMzNDssICYjMzQ7dyYjMzQ7KSBhcyBmOgomIzQzOyAgICAgICAgZi53cml0ZShmJiMzNDt7dmFsdWV9XG4mIzM0OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDtBbiBleHBpcmVkIHJvdXRlIHJlcG9ydHMgUlRBX0RFTF9SRUFTT04gPT0gZXhwaXJlZC4mIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtyb3V0ZS9nY19pbnRlcnZhbCYjMzQ7LCAyKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15JiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiBkdW1teTEgdXAmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsgICAgICAgIGlwKCYjMzQ7LTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMiYjMzQ7LCBucz1zdHIobnMpKQomIzQzOwomIzQzOyAgICAgICAgYXR0cnMgPSBfd2FpdF9yb3V0ZV9udGYocnRubCwgJiMzOTtkZWxyb3V0ZS1udGYmIzM5OywgNjQsICYjMzk7MjAwMTpkYjg6Mjo6JiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFkbGluZT0xNSkKJiM0MzsgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsICYjMzQ7bm8gUlRNX0RFTFJPVVRFIGZvciB0aGUgZXhwaXJlZCByb3V0ZSYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O2V4cGlyZWQmIzM5OykKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0O1RoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSwKJiM0MzsgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lcgomIzQzOyAgICByYSA9IHN0cnVjdC5wYWNrKCYjMzk7IUJCSEJCSElJJiMzOTssIDEzNCwgMCwgMCwgNjQsIDAsIGxpZmV0aW1lLCAwLCAwKQomIzQzOyAgICBpZiByaW8gaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpbwomIzQzOyAgICAgICAgIyBSRkMgNDE5MSByb3V0ZSBpbmZvcm1hdGlvbiBvcHRpb24sIC82NCBwcmVmaXggKDggYnl0ZXMpCiYjNDM7ICAgICAgICByYSAmIzQzOz0gc3RydWN0LnBhY2soJiMzOTshQkJCQkkmIzM5OywgMjQsIDIsIHBsZW4sIDAsIHJpb19saWZldGltZSkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF0KJiM0MzsgICAgaWYgcGlvIGlzIG5vdCBOb25lOgomIzQzOyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW8KJiM0MzsgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcikKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzdHJ1Y3QucGFjaygmIzM5OyFCQkJCSUlJJiMzOTssIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMCkKJiM0MzsgICAgICAgIHJhICYjNDM7PSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KQomIzQzOyAgICBzb2NrLnNlbmR0byhyYSwgKCYjMzk7ZmYwMjo6MSYjMzk7LCAwLCAwLCBpZmluZGV4KSkKJiM0MzsKJiM0MzsKJiM0MztkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6CiYjNDM7ICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOgomIzQzOyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpCiYjNDM7ICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSkKJiM0MzsgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKQomIzQzOwomIzQzOwomIzQzO2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlciYjMzk7cyBsaW5rLWxvY2FsCiYjNDM7ICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuCiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOwomIzQzOyAgICBzZWVuID0ge30KJiM0MzsgICAgZm9yIF8gaW4gcmFuZ2UoMTApOgomIzQzOyAgICAgICAgdHJ5OgomIzQzOyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cykKJiM0MzsgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgomIzQzOyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQomIzQzOyAgICAgICAgICAgIGNvbnRpbnVlCiYjNDM7ICAgICAgICBzZWVuLnVwZGF0ZShfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7bmV3cm91dGUtbnRmJiMzOTssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSkKJiM0MzsgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6CiYjNDM7ICAgICAgICAgICAgYnJlYWsKJiM0MzsgICAgcmV0dXJuIHNlZW4KJiM0MzsKJiM0MzsKJiM0MztkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC0mZ3Q7IE5vbmU6CiYjNDM7ICAgICYjMzQ7JiMzNDsmIzM0OwomIzQzOyAgICBSb3V0ZXMgd2l0aGRyYXduIGJ5IGEgemVyby1saWZldGltZSBSQSAocm91dGVyIGxpZmV0aW1lLCBSRkMgNDg2MQomIzQzOyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1QKJiM0MzsgICAgcm91dGVzID0geygwLCBOb25lKSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjY6OiYjMzk7KSwgKDY0LCAmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7KX0KJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zX2gsIE5ldE5TKCkgYXMgbnNfcjoKJiM0MzsgICAgICAgIGlwKGYmIzM0O2xpbmsgYWRkIHZldGgwIG5ldG5zIHtuc19ofSB0eXBlIHZldGggcGVlciBuYW1lIHZldGgxIG5ldG5zIHtuc19yfSYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMC9hY2NlcHRfcmEmIzM0OywgMikKJiM0MzsgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2ZvcndhcmRpbmcmIzM0OywgMCkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW4mIzM0OywgNjQpCiYjNDM7ICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgomIzQzOyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19yKSk6CiYjNDM7ICAgICAgICAgICAgIyBza2lwIERBRCBzbyB0aGUgcm91dGVyJiMzOTtzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5CiYjNDM7ICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKCYjMzQ7Y29uZi92ZXRoMS9hY2NlcHRfZGFkJiMzNDssIDApCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMCB1cCYjMzQ7LCBucz1zdHIobnNfaCkpCiYjNDM7ICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGRldiB2ZXRoMSB1cCYjMzQ7LCBucz1zdHIobnNfcikpCiYjNDM7CiYjNDM7ICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpCiYjNDM7ICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsICYjMzQ7dmV0aDEmIzM0OykKJiM0MzsKJiM0MzsgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCYjMzk7MjAwMTpkYjg6NTo6JiMzOTssIDY0LCA2MDApLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbz0oJiMzOTsyMDAxOmRiODo2OjomIzM5OywgNjQsIDYwMCkpCiYjNDM7ICAgICAgICBrc2Z0X2VxKHNldChzZWVuKSwgcm91dGVzLCAmIzM0O25vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkJiMzNDspCiYjNDM7ICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOgomIzQzOyAgICAgICAgICAgIHJldHVybgomIzQzOwomIzQzOyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgmIzM5OzIwMDE6ZGI4OjU6OiYjMzk7LCA2NCwgMCksCiYjNDM7ICAgICAgICAgICAgICAgICBwaW89KCYjMzk7MjAwMTpkYjg6Njo6JiMzOTssIDY0LCAwKSkKJiM0MzsgICAgICAgIHNlZW4gPSBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIHJvdXRlcykKJiM0MzsgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOgomIzQzOyAgICAgICAgICAgIGF0dHJzID0gc2Vlbi5nZXQoa2V5KQomIzQzOyAgICAgICAgICAgIGtzZnRfbm90X25vbmUoYXR0cnMsIGYmIzM0O25vIFJUTV9ERUxST1VURSBmb3Ige2tleX0mIzM0OykKJiM0MzsgICAgICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZToKJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhdHRycy5nZXQoJiMzOTtkZWwtcmVhc29uJiMzOTspLCAmIzM5O3JhLXdpdGhkcmF3biYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50KCkgLSZndDsgTm9uZToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7ICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdCkKJiM0MzsgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucykKJiM0MzsgICAgICAgIGlwKCYjMzQ7bGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDtsaW5rIHNldCBkZXYgZHVtbXkxIHVwJiMzNDssIG5zPXN0cihucykpCiYjNDM7ICAgICAgICBpcCgmIzM0Oy02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MSYjMzQ7LCBucz1zdHIobnMpKQomIzQzOyAgICAgICAgaXAoJiMzNDstNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTEmIzM0OywgbnM9c3RyKG5zKSkKJiM0MzsKJiM0MzsgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICYjMzk7ZGVscm91dGUtbnRmJiMzOTssIDY0LCAmIzM5OzIwMDE6ZGI4OjE6OiYjMzk7KQomIzQzOyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgJiMzNDtubyBSVE1fREVMUk9VVEUgZm9yIDIwMDE6ZGI4OjE6Oi82NCYjMzQ7KQomIzQzOyAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6CiYjNDM7ICAgICAgICAgICAga3NmdF9ub3RfaW4oJiMzOTtkZWwtcmVhc29uJiMzOTssIGF0dHJzLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uJiMzNDspCiYjNDM7CiYjNDM7CiBkZWYgbWFpbigpIC0mZ3Q7IE5vbmU6Ci0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKQomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeSwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkLAomIzQzOyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3biwKJiM0MzsgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9hYnNlbnRdKQogICAgIGtzZnRfZXhpdCgpCiAKIGlmIF9fbmFtZV9fID09ICYjMzQ7X19tYWluX18mIzM0OzoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTg6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5OTYKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IElQdjYgUm91dGUgRGVsZXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgd2FycmFudHMgYSBmdXp6aW5nIGNhbXBhaWduLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGVzLCBhbmQgdGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBkb3VidC4gVGhlIGtlcm5lbCBmb2xrcyBhcmUgc3RhcnRpbmcgdG8gcGFzcyBzb21lIG1vcmUgaW5mb3JtYXRpb24uCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIHNldmVyYWwgY29yZSBmdW5jdGlvbnMgbGlrZSBgZmliNl9kZWxgIGFuZCBgaXA2X2RlbF9ydGAgdG8gYWNjZXB0IGEgYGRlbF9yZWFzb25gIHBhcmFtZXRlciwgd2hpY2ggaXMgaHVnZSBhbmQgd2hlcmUgbW9zdCBvZiB0aGUgd29yayBpcyBnb2luZyB0byBiZS4gSXQgdGhlbiBjYXNjYWRlcyBvdXR3YXJkIHRvIHVwZGF0ZSB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbXMsIGBydDZfZmlsbF9ub2RlYCBhbmQgYGluZXQ2X3J0X25vdGlmeWAgc28gdGhhdCB0aGV5IGFjdHVhbGx5IHVzZSB0aGlzIG5ldyBhdHRyaWJ1dGUuIFRoZXkmIzM5O3JlIHBhc3NpbmcgYSBkZWxldGUgcmVhc29uIG5vdywgYW5kIHRoZSBjb25kaXRpb25zIGFyZSBkZWZpbmVkLgoKRXNzZW50aWFsbHksIHRoZXkmIzM5O3JlIHNldHRpbmcgdGhlIGRlbGV0ZSByZWFzb24gYmFzZWQgb24gdGhlIGNhdXNlLiBFeHBpcmVkIHJvdXRlcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGdldCBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAuIFJBIHdpdGhkcmF3YWxzIGdldCBgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOYC4gRXZlcnl0aGluZyBlbHNlIGRlZmF1bHRzIHRvIGBSVEFfREVMX1JFQVNPTl9VTlNQRUNgLgoKU28sIHRoZSBrZXkgaGVyZSBpcyBub3QganVzdCB0aGF0IGl0JiMzOTtzIGEgbmV3IGF0dHJpYnV0ZSwgYnV0IHRoYXQgaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIHRoZSBJUHY2IHJvdXRpbmcgbG9naWMuIFRoaXMgaXMgZGVmaW5pdGVseSBmdXp6LXdvcnRoeS4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBhY3R1YWwgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdGFyZ2V0LiBgZmliNl9kZWxgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIGJ1dCBhcyBpdCYjMzk7cyBpbnRlcm5hbCwgd2UmIzM5O2xsIGhhdmUgdG8gZmluZCB0aGUgZW50cnkgcG9pbnRzLgoKVGhlIHRyaWdnZXIgcG9pbnRzIGZvciBmdXp6aW5nIGFyZSwgZ2VuZXJhbGx5OgoqICAgTmV0bGluayByb3V0ZSBkZWxldGlvbiAod2hlcmUgd2UmIzM5O2xsIGJlIGRlYWxpbmcgd2l0aCBgUlRBX0RFTF9SRUFTT05fVU5TUEVDYCBtb3N0bHksIHRob3VnaCBpdCB3aWxsIGV4ZXJjaXNlIHRoZSBwYXRocykKKiAgIElQdjYgcm91dGUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB2aWEgYGZpYjZfZ2NfdGFibGVgLCBhbmQgYWxzbywgcHJvYmFibHkgYGZpYjZfcnVuX2djYAoqICAgUkEgcHJvY2Vzc2luZzogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfcm91dGVfcmN2YC4gVGhpcyBsb29rcyBqdWljeS4KKiAgIE5ldGxpbmsgcm91dGUgZHVtcC9nZXQsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIHByaW1hcnkgZm9jdXMuCgpUaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfcm91dGVfcmN2YCwgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB3aWxsIGJlOgoqICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgCiogICBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAKKiAgIGBydDZfcm91dGVfcmN2YAoqICAgYGZpYjZfZ2NfdGFibGVgIChhbmQgbGV0JiMzOTtzIGNoZWNrIGZvciBgZmliNl9ydW5fZ2NgIGFzIHdlbGwpLgoqICAgYGluZXQ2X3J0bV9kZWxyb3V0ZWAgaXMgYW4gaW50ZXJlc3Rpbmcgb25lIGJlY2F1c2UgaXQgdHJpZ2dlcnMgYGlwNl9yb3V0ZV9kZWxgIHdoaWNoIGNhbGxzIGBfX2lwNl9kZWxfcnRgLgoKSSB3aWxsIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIG9yIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHksIGFuZCB3aGV0aGVyIGBydDZfcm91dGVfcmN2YCBpcyBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBydDZfcm91dGVfcmN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTIwOD12b2lkIHJ0Nl9wdXJnZV9kZmx0X3JvdXRlcnMoc3RydWN0IG5ldCAqbmV0KTtcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIwOS1cbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjIxMDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjExLVx0XHQgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3dhZGRyKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtOTY5LSNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxubmV0L2lwdjYvcm91dGUuYy05NzEtXHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NzAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqUm91dGluZyBUYWJsZSBhbmQgTmVpZ2hib3IgRGlzY292ZXJ5IFJldmlldyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgcnQ2X3JvdXRlX3JjdmAgLSB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBub24tc3RhdGljIGZ1bmN0aW9uLCBtZWFuaW5nIGl0JiMzOTtzIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG1vZHVsZXMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEkmIzM5O20gYXNzZXNzaW5nIGl0cyBpbXBhY3Qgb24gb3RoZXIgbW9kdWxlcyBhbmQgdGhlIG92ZXJhbGwgc3lzdGVtLiBBbmQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgLi4uc2FtZSBkZWFsLiBOb24tc3RhdGljLCBzbyB0aGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseS4gT2theSwgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLCBidXQgaW1wb3J0YW50IHRvIHJlbWVtYmVyLgoKTm93LCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAuLi50aGF0IG9uZSBpcyByaW5naW5nIGEgYmVsbC4gSXMgdGhhdCBzdGF0aWMgb3Igbm90PyBJICp0aGluayogaXQgbWlnaHQgYmUsIGJ1dCBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gSXQmIzM5O3MgY3J1Y2lhbCwgYmVjYXVzZSBhIHN0YXRpYyBmdW5jdGlvbiBpbXBsaWVzIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBtZWFuaW5nIGl0JiMzOTtzIHByaW1hcmlseSB1c2VkIHdpdGhpbiB0aGUgZGVmaW5pbmcgc291cmNlIGZpbGUsIHJpZ2h0PyBJZiBpdCYjMzk7cyBzdGF0aWMsIHRoZW4gY2hhbmdlcyB0byBpdCBhcmUgbGVzcyBsaWtlbHkgdG8gcmlwcGxlIG91dCBhbmQgaGF2ZSB3aWRlLXJhbmdpbmcgY29uc2VxdWVuY2VzIGFjcm9zcyB0aGUgZW50aXJlIGtlcm5lbCBvciBhZmZlY3QgYSBtb2R1bGUsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHNhZmUgYW5kIHdpbGwgcmVtYWluIGxhcmdlbHkgdGhlIHNhbWUuIEJ1dCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24ganVzdCB0byBiZSBzdXJlLiBJdCYjMzk7cyBhbHdheXMgYmVzdCB0byBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGFueSBmdW5jdGlvbiB5b3UmIzM5O3JlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHN0YXRpYykuKiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L25kaXNjLmM9MTE4Mj1zdGF0aWMgdm9pZCBuZGlzY19yYV91c2Vyb3B0KHN0cnVjdCBza19idWZmICpyYSwgc3RydWN0IG5kX29wdF9oZHIgKm9wdClcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzAtXG5uZXQvaXB2Ni9uZGlzYy5jOjEyMzE6c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L25kaXNjLmMtMTIzMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNDkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGlzY292ZXJ5IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgIOKAkyBpdCYjMzk7cyBzdGF0aWMsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0cyBiZWhhdmlvciBpcyBwcmV0dHkgd2VsbC1kZWZpbmVkLCBhbmQgd2UmIzM5O3JlIG5vdCBkZWFsaW5nIHdpdGggc29tZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGNvbXBsZXggYmVhc3QuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBUaGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBwbGFjZSB3aGVyZSB0aGluZ3Mga2ljayBvZmYsIGlzIGBuZGlzY19yY3ZgLiBTbywgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdOKAmXMgdGhlIHN0YXJ0aW5nIGd1biBmb3IgdGhlIHdob2xlIHByb2Nlc3MuIExldCYjMzk7cyBkaWcgaW50byBgbmRpc2NfcmN2YCBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW5pdGlhbCBkaXNjb3ZlcnkgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKS4qIG5kaXNjX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNzcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBJUHY2IE5laWdoYm9yaG9vZCBEaXNjb3ZlcnkgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoaXMgTmVpZ2hib3Job29kIERpc2NvdmVyeSBzdHVmZiB3aXRoaW4gdGhlIElQdjYgc3RhY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZGlzY19yY3ZgIHJlc2lkZXMuIEl0JiMzOTtzIG9mdGVuIGVhc3kgdG8gbWlzcyBjcnVjaWFsIGRldGFpbHMgd2l0aGluIGEgbGFyZ2UgY29kZWJhc2UuIE15IGluaXRpYWwgc2VhcmNoIGRpZG4mIzM5O3QgeWllbGQgYW4gaW1tZWRpYXRlIGFuc3dlciwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHJlZmluZSBteSBzZWFyY2ggdG8gZmluZCB3aGVyZSBgbmRpc2NfcmN2YCBpcyBsb2NhdGVkLiBMZXQmIzM5O3Mgc2VlLi4uIEFoLWhhISBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHR1Y2tlZCBhd2F5IGluIGBuZXQvaXB2Ni9uZGlzYy5jYC4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBJUHY2IG5laWdoYm9yIGRpc2NvdmVyeSBsb2dpYy4gR29vZC4gTm93IHRoYXQgSSBrbm93IHRoZSBsb2NhdGlvbiwgSSBjYW4gc3RhcnQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kaXNjX3JjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZGlzYy5oPTQwND12b2lkIG5kaXNjX2NsZWFudXAodm9pZCk7XG5pbmNsdWRlL25ldC9uZGlzYy5oLTQwNS1cbmluY2x1ZGUvbmV0L25kaXNjLmg6NDA2OmVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmluY2x1ZGUvbmV0L25kaXNjLmgtNDA3LVxuLS1cbm5ldC9pcHY2L2ljbXAuYz0xMTAxPXN0YXRpYyBpbnQgaWNtcHY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2ljbXAuYy0xMTkyLVx0Y2FzZSBORElTQ19SRURJUkVDVDpcbm5ldC9pcHY2L2ljbXAuYzoxMTkzOlx0XHRyZWFzb24gPSBuZGlzY19yY3Yoc2tiKTtcbm5ldC9pcHY2L2ljbXAuYy0xMTk0LVx0XHRicmVhaztcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTE3OTE9c3RhdGljIGJvb2wgbmRpc2Nfc3VwcHJlc3NfZnJhZ19uZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTgwNC1cbm5ldC9pcHY2L25kaXNjLmM6MTgwNTplbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY2L25kaXNjLmMtMTgwNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTA4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6CgoqKkNoZWNraW5nIHRoZSBTdGF0aWMgRGVjbGFyYXRpb24gb2YgUmVsZXZhbnQgRnVuY3Rpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIE15IGluaXRpYWwgaHVuY2ggd2FzIGNvcnJlY3Q6IGBuZGlzY19yY3ZgIGlzIGluZGVlZCAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBjaGVja3Mgb3V0LiBCdXQsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgYGFkZHJjb25mX3ByZWZpeF9yY3ZgPyBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIGRlY2xhcmF0aW9uIHN0YXR1cyBvZiB0aGF0IG9uZSBhcyB3ZWxsIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBhZGRyY29uZl9wcmVmaXhfcmN2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxuLS1cbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU1LVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTctXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oPTI4Mj1zdGF0aWMgaW5saW5lIGJvb2wgaXB2Nl9pc19tbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIGludCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXG5pbmNsdWRlL25ldC9hZGRyY29uZi5oOjMwNDp2b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMzA1LVx0XHRcdCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI2ODk9c3RhdGljIGJvb2wgaXNfYWRkcl9tb2RlX2dlbmVyYXRlX3N0YWJsZShzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cbm5ldC9pcHY2L2FkZHJjb25mLmM6MjY5NTppbnQgYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI2OTYtXHRcdFx0XHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI3OTY9RVhQT1JUX1NZTUJPTF9HUEwoYWRkcmNvbmZfcHJlZml4X3Jjdl9hZGRfYWRkcik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3OTg6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU1NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJUFY2IFJvdXRpbmcgSXNzdWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjYgcm91dGluZy4uLiBzcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBhdCBgYWRkcmNvbmZfcHJlZml4X3JjdmAuIFRoZSBpbW1lZGlhdGUgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMsIHdoaWNoIHJhaXNlcyBhIGZsYWcuIEhtbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJJiMzOTtkIGV4cGVjdCBnaXZlbiBpdHMgcm9sZSwgcG90ZW50aWFsbHkgaW5kaWNhdGluZyBicm9hZGVyIHNjb3BlIHRoYW4gbWlnaHQgYmUgaW50ZW5kZWQuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCwgdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZG93biB0aGUgbGluZS4KCk5vdywgbXkgbWluZCBzaGlmdHMgdG8gb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIExldCBtZSBjaGVjayB0aGUgaW1wYWN0IG9uIGBpcDZfZGVsX3J0YCBhbmQsIHNwZWNpZmljYWxseSwgYGlwNl9kZWxfcnRfcmVhc29uYC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYW55IGludGVyY29ubmVjdGVkbmVzcyBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyByZWdhcmRpbmcgdGhlaXIgYmVoYXZpb3IgcmVnYXJkaW5nIHJvdXRlIGRlbGV0aW9uIGFuZCByZWFzb24uIElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3RzIG9yIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZW0/IEkgbmVlZCB0byBhbmFseXplIGhvdyBkYXRhIGZsb3dzIGluIHRoaXMgc3BhY2UgdG8gdW5kZXJzdGFuZCBpZiBgYWRkcmNvbmZfcHJlZml4X3JjdmAgaXMgcGxheWluZyBuaWNlIHdpdGggdGhlbS4gUGVyaGFwcyB0aGUgcHJvYmxlbSBpc24mIzM5O3QgaXNvbGF0ZWQsIGFuZCB0aGV5IHJlbGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBpcDZfZGVsX3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oPTEyOD1pbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0xMjktI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoxMzA6aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MTMxOmludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEzMi1cdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtMzk5Ny1cbm5ldC9pcHY2L3JvdXRlLmM6Mzk5ODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcbm5ldC9pcHY2L3JvdXRlLmMtMzk5OS1cdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNDAwOC1cbm5ldC9pcHY2L3JvdXRlLmM6NDAwOTppbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxubmV0L2lwdjYvcm91dGUuYy00MDEwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNjMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBuZXR3b3JrIHJvdXRpbmc6CgoqKkFuYWx5emluZyBJUHY2IFJvdXRlIERlbGV0aW9uIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgaXA2X2RlbF9ydGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAgYXJlICpub3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSXQgc3VnZ2VzdHMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgZXhwb3NlZCwgcGVyaGFwcyB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3IgcGFydHMgb2YgdGhlIGtlcm5lbCBvdXRzaWRlIG9mIHRoZSBpbW1lZGlhdGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50LiBTbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSBmb3IgdXNhZ2Ugb3IgY2FsbCBzaXRlcy4gTW9yZSBjb250ZXh0IGlzIHJlcXVpcmVkLgoKQnV0IHRoYXQgbWFrZXMgbWUgdGhpbmssIHdoYXQgYWJvdXQgdGhlIFJUTV9ERUxST1VURSBoYW5kbGVyIGZvciBJUHY2PyBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgaW5ldDZfcnRtX2RlbHJvdXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgcm91dGUgaXMgZGVsZXRlZCB2aWEgdGhlIHJvdXRpbmcgbWVzc2FnZSBBUEkuIEFyZSBgaXA2X2RlbF9ydGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAgY2FsbGVkICp3aXRoaW4qIHRoYXQgZnVuY3Rpb24sIG9yIGFyZSB0aGV5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZT8gSXMgdGhlcmUgYW4gaW50ZXJhY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxpbmcgaGllcmFyY2h5LiBUaGlzIGxvb2tzIGxpa2UgYSBwb3RlbnRpYWxseSBjcml0aWNhbCBzZWN0aW9uIG9mIHRoZSBJUHY2IHJvdXRpbmcgaW1wbGVtZW50YXRpb24gdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBpbmV0Nl9ydG1fZGVscm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzU5MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJUHY2IFJvdXRlIERlbGV0aW9uIC0gQSBRdWljayBDaGVjayoqCgpIbW0sIHNvIHRoZXkmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVtb3ZpbmcgYSByb3V0ZSBpbiBJUHY2LiBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdW5jdGlvbiBuYW1lIGNvcnJlY3QuIEFoLCB5ZXMsIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIGBpbmV0Nl9ydG1fZGVscm91dGVgLiBHb29kLiBOb3cgSSBuZWVkIHRvIHJlbWVtYmVyIGV4YWN0bHkgd2hlcmUgdGhhdCBsaXZlcy4uLiBBaCwgeWVzLCBgbmV0L2lwdjYvcm91dGUuY2AuIE9mIGNvdXJzZS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIElQdjYgcm91dGluZyBsb2dpYyByZXNpZGVzLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgb3BlcmF0aW9uLCBvciBwb3RlbnRpYWxseSBhIGNhbiBvZiB3b3JtcywgZGVwZW5kaW5nIG9uIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIHRoZSBhZGphY2VudCBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlLCBhcyB3ZWxsIGFzIHRoZSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBkZXRlcm1pbmUgd2hhdCBtaWdodCBjYXVzZSBhbnkgY29tcGxleGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldDZfcnRtX2RlbHJvdXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L3JvdXRlLmM9NTYwMj1zdGF0aWMgaW50IGlwNl9yb3V0ZV9tdWx0aXBhdGhfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNTY0MS1cbm5ldC9pcHY2L3JvdXRlLmM6NTY0MjpzdGF0aWMgaW50IGluZXQ2X3J0bV9kZWxyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY2L3JvdXRlLmMtNTY0My1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvcm91dGUuYz02OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBpcDZfcm91dGVfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy02OTIwLVx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fREVMUk9VVEUsXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MjE6XHQgLmRvaXQgPSBpbmV0Nl9ydG1fZGVscm91dGUsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyMi1cdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUEZfSU5FVDYsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE0NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIE1hbmFnZW1lbnQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoZSBJUHY2IHJvdXRlIG1hbmFnZW1lbnQgY29kZS4gSSBub3RpY2VkIGBpbmV0Nl9ydG1fZGVscm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IG9ubHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhpcyBzcGVjaWZpYyBtb2R1bGUuIEl0JiMzOTtzIG5vdCBkZXNpZ25lZCB0byBiZSBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlLgoKVGhhdCB0aGVuIGdvdCBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYGluZXQ2X3J0bV9nZXRyb3V0ZWA/IElzIGl0IGFsc28gc3RhdGljLCBvciBpcyBpdCBleHBvc2VkIGluIGEgd2F5IHRoYXQgYWxsb3dzIGV4dGVybmFsIGFjY2Vzcz8gSWYgYGRlbHJvdXRlYCBpcyBzdGF0aWMsIGl0IGdpdmVzIG1lIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgYXJlIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYWNjZXNzLiBJcyB0aGVyZSBhIGNvbnNpc3RlbnQgcGF0dGVybiBhY3Jvc3MgZnVuY3Rpb25zPyBPciBpcyBpdCBhIHNwZWNpYWwgY2FzZT8gSSBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaW5ldDZfcnRtX2dldHJvdXRlYCBhbmQgc2VlIHdoYXQgdGhlIHN0b3J5IGlzIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBzdXJyb3VuZGluZyBJUHY2IHJvdXRpbmcgdGFibGUgbWFuaXB1bGF0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgQVBJIHN1cmZhY2UuIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSBhYm91dCBgZ2V0cm91dGVgIG9yIGBkZWxyb3V0ZWA/IFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0Nl9ydG1fZ2V0cm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvcm91dGUuYz02MTU1PXN0YXRpYyBpbnQgaW5ldDZfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjIyOS1cbm5ldC9pcHY2L3JvdXRlLmM6NjIzMDpzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY2L3JvdXRlLmMtNjIzMS1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjYvcm91dGUuYz02OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBpcDZfcm91dGVfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XG4tLVxubmV0L2lwdjYvcm91dGUuYy02OTIyLVx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MjM6XHQgLmRvaXQgPSBpbmV0Nl9ydG1fZ2V0cm91dGUsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyNC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODcyOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOgoKKipOZXR3b3JrIFJvdXRpbmcgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyByb3V0aW5nIGNvZGUgYW5kIEkgc2VlIGBpbmV0Nl9ydG1fZ2V0cm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgZGVjbGFyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJvdXRpbmcgZnVuY3Rpb25zLCBhbmQgSSB3b25kZXIgaWYgSSBjYW4gdHJhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGJlIGltcGFjdGVkLgoKRG9lcyB0aGlzIGhhdmUgYW55IGltcGFjdCBvbiByZWxhdGVkIGZ1bmN0aW9ucyBpbiB0aGUgcm91dGluZyBwcm9jZXNzPyBMZXQgbWUgdGhpbmsuIE15IG1pbmQganVtcHMgdG8gYW5vdGhlciBmdW5jdGlvbjogaG93IGlzIGBydDZfZHVtcF9yb3V0ZWAgaGFuZGxpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0aWMgZGVjbGFyYXRpb24gb2YgYGluZXQ2X3J0bV9nZXRyb3V0ZWAgdGllcyBpbnRvIGZ1bmN0aW9ucyBjYWxsZWQgdG8gZHVtcCB0aGUgcm91dGluZyB0YWJsZXMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgc3RhdGljbmVzcyBoYXMgYW55IGltcGxpY2F0aW9ucyBvbiBkdW1waW5nIHRoZSByb3V0aW5nIGRhdGEsIG9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYSBtb3JlIGdyYW51bGFyIGNvbXBvbmVudCBvZiBhIG1vcmUgYnJvYWQgc2V0IG9mIGZ1bmN0aW9ucy4gSSBzaG91bGQgZXhhbWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWQpLiogcnQ2X2R1bXBfcm91dGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjIzPXN0cnVjdCBydDZfcnRubF9kdW1wX2FyZyB7XG4tLVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjI5LVxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjMwOmludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmksIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcCk7XG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMzEtdm9pZCBydDZfbXR1X2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbXR1KTtcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwMzQ9c3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtNjA4Ni0vKiBSZXR1cm4gLTEgaWYgZG9uZSB3aXRoIG5vZGUsIG51bWJlciBvZiBoYW5kbGVkIHJvdXRlcyBvbiBwYXJ0aWFsIGR1bXAgKi9cbm5ldC9pcHY2L3JvdXRlLmM6NjA4NzppbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcbm5ldC9pcHY2L3JvdXRlLmMtNjA4OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjQ1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgSVB2NiBSb3V0ZSBOb3RpZmljYXRpb25zKioKCkhtbSwgc28gYHJ0Nl9kdW1wX3JvdXRlYCBpc24mIzM5O3Qgc3RhdGljLiBUaGF0JiMzOTtzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgaXRzIHVzYWdlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHJvdXRpbmcgdGFibGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBzZWUuLi4gd2hhdCBhYm91dCB0aGUgbm90aWZpY2F0aW9ucz8gU3BlY2lmaWNhbGx5LCBgaW5ldDZfcnRfbm90aWZ5YCBhbmQgYGluZXQ2X3J0X2RlbF9ub3RpZnlgPyBBcmUgdGhlcmUgbnVhbmNlcyB0byB0aGVpciBvcGVyYXRpb24gdGhhdCBhZmZlY3QgaG93IHJvdXRlIG1vZGlmaWNhdGlvbnMgYXJlIHNpZ25hbGVkLCBhbmQgaG93IHRob3NlIG5vdGlmaWNhdGlvbnMgaW50ZXJhY3Qgd2l0aCB3aGF0ZXZlciBtZWNoYW5pc21zIHVzZSB0aG9zZSBmdW5jdGlvbnM/IEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIHRoZXNlIGZ1bmN0aW9ucyBvcGVyYXRlIHRoZSBzYW1lIGFzIHRoZXkgZG8gaW4gSVB2NCB0byBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIG1vZGlmeSB0aGUgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2Ugbm90aWZpY2F0aW9uIHJvdXRpbmVzIGFyZSB1c2VkLiBBIGRlZXBlciBkaXZlIG1pZ2h0IHJldmVhbCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIHJvdXRlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIGluIHRoZSBJUHY2IHJvdXRpbmcgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaD01MzQ9dm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTM1LVx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NTM2OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTM3LVx0XHRcdCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuLS1cbm5ldC9pcHY2L3JvdXRlLmM9NjQyMT12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MjYtXG5uZXQvaXB2Ni9yb3V0ZS5jOjY0Mjc6dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbm5ldC9pcHY2L3JvdXRlLmMtNjQyOC1cdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc4OQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYW5kIGBmaWI2X2RlbGAgYXJlIGJvdGggZGVjbGFyZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXQgaW1wbGllcyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgb2YgdGhlaXIgaW1tZWRpYXRlIGltcGxlbWVudGF0aW9uIGZpbGUuIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBkZXNpZ25lZCBmb3Igd2lkZXIgbGlua2FnZSwgcG90ZW50aWFsbHkgZXhwb3J0ZWQgb3IgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBUaGF0IGRlc2lnbiBjaG9pY2Ugc3VnZ2VzdHMgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIGFuZCBwb3NzaWJseSBwYXJ0IG9mIGFuIEFQSSBmb3IgSVB2NiByb3V0ZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhc3Nlc3MgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBJdCBpbmRpY2F0ZXMgYSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaW50ZXJkZXBlbmRlbmNlIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggcmVmYWN0b3JpbmcsIG9wdGltaXphdGlvbiwgb3Igc2VjdXJpdHkgYXNzZXNzbWVudHMuIFRoZSAqd2h5KiBpcyB0aGUga2V5IHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkKS4qIGZpYjZfZGVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3MC1cdCAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNDcyLVx0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0xOTY4PXN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXG4tLVxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjQtLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbm5ldC9pcHY2L2lwNl9maWIuYzoyMDY1OmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2Ni1cdCAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwNAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVB2NiBSb3V0aW5nIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbGlzdDogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgcnQ2X3JvdXRlX3JjdmAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpcDZfZGVsX3J0YCwgYHJ0Nl9kdW1wX3JvdXRlYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBhbmQgYGZpYjZfZGVsYC4gVGhlc2Ugc2VlbSB0byBiZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIElQdjYgcm91dGluZywgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGVtLgoKRmlyc3QsIGBDT05GSUdfSVBWNmAgaXMgYSBnaXZlbi4gSSBtZWFuLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBJUHY2LCBzbyB0aGF0JiMzOTtzIGEgYmFzZWxpbmUuIFRoZSB0ZXN0IHNjcmlwdCBhbHNvIG1lbnRpb25zIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCwgYW5kIHRoZXJlJiMzOTtzIGEgYEtzZnRTa2lwRXhgIGV4Y2VwdGlvbiB0aGF0IHJhaXNlcyBpZiBpdCYjMzk7cyBub3QgZm91bmQsIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGNydWNpYWwgb3IgYXQgbGVhc3QgcGFydCBvZiB0aGUgaW50ZW5kZWQgdGVzdCBzZXR1cC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBuZXQvaXB2Ni9LY29uZmlnYCBmaWxlIGluIHRoZSBrZXJuZWwgc291cmNlIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBJUFY2X1JPVVRFX0lORk9gIGNvbnRyb2xzIGFuZCBob3cgaXQgaW1wYWN0cyB0aGVzZSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBoZWxwIG1lIGRldGVybWluZSB0aGUgZXhhY3QgY29udGV4dCBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHRlc3RlZCBhbmQgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjZfUk9VVEVfSU5GTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTIxPWNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMC1cbm5ldC9pcHY2L0tjb25maWc6MzE6Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODQxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnM6IElQdjYgUm91dGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uICp5ZXMsIEkgY29uZmlybSB0aGF0IGBJUFY2X1JPVVRFX0lORk9gIGlzIGEgcGVyZmVjdGx5IHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiogTm8gc3VycHJpc2VzIHRoZXJlLiBPZiBjb3Vyc2UsIHdoZW4gZGVhbGluZyB3aXRoIElQdjYgcm91dGluZywgeW91JiMzOTtyZSBnb2luZyB0byB1c2UgdGhpcy4gTm93LCBsZXQgbWUgdGhpbmsgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zIGEgYml0IGRlZXBlci4uLiBhaCwgYW5kIGl0JiMzOTtzIGNyeXN0YWwgY2xlYXIgdGhhdCBgSVBWNl9ST1VURVJfUFJFRmAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYElQVjZfUk9VVEVfSU5GT2AsIGlzbiYjMzk7dCBpdD8gSXQgYWN0cyBhcyBhIGRlcGVuZGVuY3kuIFlvdSAqbmVlZCogdGhhdCBwcmVmZXJlbmNlIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHV0aWxpemUgdGhlIHJvdXRlIGluZm87IGl0JiMzOTtzIHByYWN0aWNhbGx5IGluc2VwYXJhYmxlIGZvciBjb3JyZWN0IGJlaGF2aW9yLiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGNvcnJlY3RseSBjb25maWd1cmVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uLipJUFY2X1JPVVRFUl9QUkVGJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWc9MzE9Y29uZmlnIElQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvS2NvbmZpZy0zMi1cdGJvb2wgXCYjMzQ7SVB2NjogUm91dGUgSW5mb3JtYXRpb24gKFJGQyA0MTkxKSBzdXBwb3J0XCYjMzQ7XG5uZXQvaXB2Ni9LY29uZmlnOjMzOlx0ZGVwZW5kcyBvbiBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTM0LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTE3MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDMwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlciBQcmVmZXJlbmNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyB3ZSBkZWZpbml0ZWx5IG5lZWQgYElQVjZfUk9VVEVSX1BSRUZgIGFuZCBgSVBWNl9ST1VURV9JTkZPYCBlbmFibGVkIGZvciB0aGlzIHNldHVwLiBgSVBWNl9NVUxUSVBMRV9UQUJMRVNgIGNvdWxkIHBvdGVudGlhbGx5IGNvbWUgaW50byBwbGF5IHRvbywgYnV0IGl0IG1pZ2h0IG5vdCBiZSBhIGhhcmQgcmVxdWlyZW1lbnQgYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgY2hlY2sgaWYganVzdCBgQ09ORklHX0lQVjZgIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyDigJMgeWVwLCB0aGF0IHNlZW1zIHRvIGNvdmVyIHRoZSBiYXNpY3MuIEhvd2V2ZXIsIHRvIGFjdHVhbGx5IGhpdCB0aGUgY29kZSBwYXRoIHRoYXQgaGFuZGxlcyBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU9zKSB3aGVuIHRoZSBSQSBpcyB3aXRoZHJhd24sIHdlIGFic29sdXRlbHkgbmVlZCBgSVBWNl9ST1VURV9JTkZPYC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhhdCB0ZXN0IHNjcmlwdC4gQWhhLCBoZXJlIGl0IGlzOgoKYGBgcHl0aG9uCiAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihuc19oKSk6CiAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvYWNjZXB0X3JhJiMzNDssIDIpCiAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bCgmIzM0O2NvbmYvdmV0aDAvZm9yd2FyZGluZyYjMzQ7LCAwKQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoJiMzNDtjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuJiMzNDssIDY0KQogICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7bm8gQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7KQpgYGAKClRoZSBzY3JpcHQgdHJpZXMgdG8gc2V0IGBhY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbmAsIGFuZCBpZiB0aGF0IGZhaWxzIHdpdGggYSBgRmlsZU5vdEZvdW5kRXJyb3JgLCBpdCBza2lwcyB0aGUgdGVzdCBiZWNhdXNlIGBDT05GSUdfSVBWNl9ST1VURV9JTkZPYCBpcyBtaXNzaW5nLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBTbywgeWVzLCBgSVBWNl9ST1VURV9JTkZPYCBpcyByZXF1aXJlZCBmb3IgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYGFjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuYC4KCkxldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgIGNvZGUuIFllcCwgbG9va2luZyBhdCBgcnQ2X3JvdXRlX3JjdmAsIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiBUaGF0IGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GTyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01MS1cdF9fczMyXHRcdHJ0cl9wcm9iZV9pbnRlcnZhbDtcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjUyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5pbmNsdWRlL2xpbnV4L2lwdjYuaC01My1cdF9fczMyXHRcdGFjY2VwdF9yYV9ydF9pbmZvX21pbl9wbGVuO1xuLS1cbmluY2x1ZGUvbmV0L25kaXNjLmg9MTAwPXN0cnVjdCBuZGlzY19vcHRpb25zIHtcbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAxLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdF9hcnJheVtfX05EX09QVF9BUlJBWV9NQVhdO1xuaW5jbHVkZS9uZXQvbmRpc2MuaDoxMDI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbmluY2x1ZGUvbmV0L25kaXNjLmgtMTAzLVx0c3RydWN0IG5kX29wdF9oZHIgKm5kX29wdHNfcmk7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz0xODE9c3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTEtXHQucnRyX3Byb2JlX2ludGVydmFsXHQ9IDYwICogSFosXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIxMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTMtXHQuYWNjZXB0X3JhX3J0X2luZm9fbWluX3BsZW4gPSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9MjQ2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0IF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzYtXHQucnRyX3Byb2JlX2ludGVydmFsXHQ9IDYwICogSFosXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzgtXHQuYWNjZXB0X3JhX3J0X2luZm9fbWluX3BsZW4gPSAwLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2ND1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwMy1cdFx0amlmZmllc190b19tc2VjcyhSRUFEX09OQ0UoY25mLVx1MDAzZXJ0cl9wcm9iZV9pbnRlcnZhbCkpO1xubmV0L2lwdjYvYWRkcmNvbmYuYzo1NzA0OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MDUtXHRhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01JTl9QTEVOXSA9XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzA3MC1cdH0sXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcwNzE6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L2FkZHJjb25mLmMtNzA3Mi1cdHtcbi0tXG5uZXQvaXB2Ni9uZGlzYy5jPTIyMD1zdHJ1Y3QgbmRpc2Nfb3B0aW9ucyAqbmRpc2NfcGFyc2Vfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMjU2LVx0XHRcdGJyZWFrO1xubmV0L2lwdjYvbmRpc2MuYzoyNTc6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L25kaXNjLmMtMjU4LVx0XHRjYXNlIE5EX09QVF9ST1VURV9JTkZPOlxuLS1cbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L25kaXNjLmMtMTQ5Ni1cbm5ldC9pcHY2L25kaXNjLmM6MTQ5NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xubmV0L2lwdjYvbmRpc2MuYy0xNDk4LVx0aWYgKCFSRUFEX09OQ0UoaW42X2Rldi1cdTAwM2VjbmYuYWNjZXB0X3JhX2Zyb21fbG9jYWwpIFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9pcHY2L3JvdXRlLmM9MTE1PXN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9maW5kX2NhY2hlZF9ydChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcyxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTExOC1cbm5ldC9pcHY2L3JvdXRlLmM6MTE5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9yb3V0ZS5jLTEyMC1zdGF0aWMgc3RydWN0IGZpYjZfaW5mbyAqcnQ2X2FkZF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxuLS1cbm5ldC9pcHY2L3JvdXRlLmMtOTY4LVxubmV0L2lwdjYvcm91dGUuYzo5Njk6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L3JvdXRlLmMtOTcwLWludCBydDZfcm91dGVfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sXG4tLVxubmV0L2lwdjYvcm91dGUuYz00MjM5PXN0YXRpYyB2b2lkIHJ0Nl9kb19yZWRpcmVjdChzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODEtXG5uZXQvaXB2Ni9yb3V0ZS5jOjQzODI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L3JvdXRlLmMtNDM4My1zdGF0aWMgc3RydWN0IGZpYjZfaW5mbyAqcnQ2X2dldF9yb3V0ZV9pbmZvKHN0cnVjdCBuZXQgKm5ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMzQKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA2ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBTeW1ib2wgVmlzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgaW5kZWVkIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBtZWFuaW5nIHdlIGFic29sdXRlbHkgbmVlZCB0byBpbmNsdWRlIGBJUFY2X1JPVVRFX0lORk9gIGFuZCBgSVBWNl9ST1VURVJfUFJFRmAgaW4gYEVuYWJsZUNvbmZpZ3NgLCBhbG9uZyB3aXRoIHRoZSBiYXNlIGBJUFY2YCBjb25maWd1cmF0aW9uLCBvZiBjb3Vyc2UuCgpOZXh0LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJiMzOTt2ZSBnb3Q6IGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYHJ0Nl9yb3V0ZV9yY3ZgLCBgaXA2X2RlbF9ydF9yZWFzb25gLCBgaXA2X2RlbF9ydGAsIGBydDZfZHVtcF9yb3V0ZWAsIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YCwgYW5kIGBmaWI2X2RlbGAuCgpSaWdodCwgbm93LCB3YWl0IGEgc2Vjb25kLi4uIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpcDZfZGVsX3J0YCBhcmUganVzdCB3cmFwcGVycyBmb3IgYF9faXA2X2RlbF9ydGAgd2l0aGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC4gT2theSwgbGV0JiMzOTtzIGNoZWNrIGlmIGBfX2lwNl9kZWxfcnRgIGlzIHN0YXRpYy4gWWVzLCBpdCYjMzk7cyBzdGF0aWMsIHdoaWNoIG1lYW5zIGBpcDZfZGVsX3J0X3JlYXNvbmAgYW5kIGBpcDZfZGVsX3J0YCBhcmUgZmluZSB0byBpbmNsdWRlIGhlcmUuIEdvb2QuIFRoZW4gYGZpYjZfZGVsYCBpcyBpbiBgbmV0L2lwdjYvaXA2X2ZpYi5jYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgIGFuZCBgcnQ2X2R1bXBfcm91dGVgIGFyZSBpbiBgbmV0L2lwdjYvcm91dGUuY2AuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGBmaWI2X2RlbGAmIzM5O3MgdmlzaWJpbGl0eS4gSXQmIzM5O3MgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbmV0L2lwNl9maWIuaGAgYW5kIGRlZmluZWQgaW4gYG5ldC9pcHY2L2lwNl9maWIuY2A6CgpgYGBjCmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCgkgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbikKYGBgCgpTbyBpdCBpcyBub24tc3RhdGljLiBNYWtlcyBzZW5zZS4KCk5vdywgbGV0JiMzOTtzIGdvIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uLgoKYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGlzIG5vbi1zdGF0aWMuCmBgYGMKdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pCmBgYApgcnQ2X3JvdXRlX3JjdmAgaXMgbm9uLXN0YXRpYzoKYGBgYwppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLAoJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpCmBgYApgcnQ2X2R1bXBfcm91dGVgIGlzIG5vbi1zdGF0aWM6CmBgYGMKaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApCmBgYApgaW5ldDZfcnRfZGVsX25vdGlmeWAgaXMgbm9uLXN0YXRpYzoKYGBgYwp2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAoJCQkgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKQpgYGAKCkFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHRoaXM/CmBmaWI2X2djX3RhYmxlYCBpcyBzdGF0aWMsIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBgZmliNl9ydW5fZ2NgIHdoaWNoIGlzIG5vbi1zdGF0aWMuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTk6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8dm9pZCkuKiBmaWI2X3J1bl9nYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcDZfZmliLmg9NTM5PXZvaWQgZmliNl9hZ2VfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncyxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC01NDAtXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDo1NDE6dm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSk7XG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTQyLXZvaWQgZmliNl9nY19jbGVhbnVwKHZvaWQpO1xuLS1cbm5ldC9pcHY2L2lwNl9maWIuYz0yNDA4PXN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbi0tXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQyNy1cbm5ldC9pcHY2L2lwNl9maWIuYzoyNDI4OnZvaWQgZmliNl9ydW5fZ2ModW5zaWduZWQgbG9uZyBleHBpcmVzLCBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjQyOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE5OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTMwCgkJCQkJCQlvdXRwdXQ6IDIzMQoJCQkJCQkJdGhvdWdodHM6IDY2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYFJUQV9ERUxfUkVBU09OYCwgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgZm9yIElQdjYgcm91dGVzLiBUaGlzIGF0dHJpYnV0ZSB3aWxsIGluZGljYXRlIHRoZSByZWFzb24gYmVoaW5kIGEgcm91dGUmIzM5O3MgZGVsZXRpb24g4oCTIHRoaW5ncyBsaWtlIGV4cGlyYXRpb24gb3Igd2l0aGRyYXdhbCBmcm9tIGEgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKS4gVGhlIHByaW1hcnkgZm9jdXMgb2YgdGhpcyBjaGFuZ2UgaXMgdG8gbW9kaWZ5IHRoZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtcywgYW5kIFJBIHByb2Nlc3NpbmcgdG8gaW5jb3Jwb3JhdGUgdGhpcyBuZXcgYXR0cmlidXRlIGludG8gcm91dGUgZGVsZXRpb24gcGF0aHMgYW5kIG5ldGxpbmsgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIHNvbGlkLCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBhbmQgaXQgbmVjZXNzaXRhdGVzIGNhcmVmdWwgZnV6emluZyB0byBjb25maXJtIGNvcnJlY3QgYXR0cmlidXRlIGhhbmRsaW5nIGFuZCBwcmV2ZW50IGFueSByZWdyZXNzaW9uIGluIHJvdXRlIGRlbGV0aW9uIGZ1bmN0aW9uYWxpdHkuCgpJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggdG91Y2hlcy4gVGhlIGBmaWI2X3J1bl9nY2AgaXMgbm9uLXN0YXRpYywgYW5kIGl0JiMzOTtzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRyaWdnZXJzIGdhcmJhZ2UgY29sbGVjdGlvbiBhbmQgbm93IGluY29ycG9yYXRlcyB0aGlzIG5ldyBgUlRBX0RFTF9SRUFTT05fRVhQSVJFRGAgcmVhc29uLiBUaGVuLCB0aGUgZW50cnkgcG9pbnQgZm9yIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCwgYG5kaXNjX3JjdmAsIGlzIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgY3J1Y2lhbC4KCkhlcmUmIzM5O3MgbXkgcmVmaW5lZCBsaXN0IG9mIHRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd2lsbCBiZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZToKCiogICBgYWRkcmNvbmZfcHJlZml4X3JjdmA6IFRoaXMgd2lsbCBiZSBpbnZvbHZlZC4KKiAgIGBydDZfcm91dGVfcmN2YDogVGhpcyB3aWxsIGJlIGludm9sdmVkLgoqICAgYGlwNl9kZWxfcnRfcmVhc29uYDogVGhpcyBpcyBjcnVjaWFsIGFuZCB3aWxsIGxpa2VseSBiZSB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZnV6ei4KKiAgIGBydDZfZHVtcF9yb3V0ZWA6IEltcG9ydGFudCBmb3IgbmV0bGluayBkdW1wcy4KKiAgIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YDogSW52b2x2ZWQgaW4gbm90aWZpY2F0aW9ucy4KKiAgIGBmaWI2X2RlbGA6IFRoaXMgaXMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLgoqICAgYGZpYjZfcnVuX2djYDogV2UmIzM5O3JlIGluY29ycG9yYXRpbmcgdGhlIHJlYXNvbiBoZXJlLgoqICAgYG5kaXNjX3JjdmA6IEtleSBhcyB0aGUgZW50cnkgcG9pbnQgZm9yIHJvdXRlciBkaXNjb3ZlcnkuCgpgaXA2X2RlbF9ydGAgaXMganVzdCBhIHdyYXBwZXIsIHNvIGluY2x1ZGluZyBgaXA2X2RlbF9ydF9yZWFzb25gIGNvdmVycyBpdC4gSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgdGhhdCBgcnQ2X2R1bXBfcm91dGVgIGlzIGNvcnJlY3QgZm9yIG5ldGxpbmsgZHVtcHMuIGBpbmV0Nl9ydG1fZ2V0cm91dGVgIGlzIHN0YXRpYywgc28gZm9jdXNpbmcgb24gYHJ0Nl9kdW1wX3JvdXRlYCBmb3Igcm91dGUgZHVtcHMgbWFrZXMgc2Vuc2UuCgpGb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgdGhlIHBhdGNoIHRvdWNoZXMgYGZpYjZfZGVsYCwgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgbXVsdGlwbGUgdGFibGVzLCB0aHVzIG9ubHkgYElQVjZgLCBgSVBWNl9ST1VURVJfUFJFRmAsIGFuZCBgSVBWNl9ST1VURV9JTkZPYCBhcmUgY3J1Y2lhbC4gYElQVjZgIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciB0ZXN0aW5nIHRoZSBvdmVyYWxsIGVmZmVjdHMgb2YgdGhlIHBhdGNoIHNpbmNlIGl0IG1vZGlmaWVzIGBmaWI2X2RlbGAsIHdoaWNoIGlzIHVzZWQgcmVnYXJkbGVzcyBvZiBtdWx0aXBsZSB0YWJsZXMuCgpJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBwcm92aWRlIG15IGZpbmRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxOTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtydDZfZHVtcF9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2ZpYjZfcnVuX2djJiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUFY2X1JPVVRFUl9QUkVGJiMzNDssCiAgICAmIzM0O0lQVjZfUk9VVEVfSU5GTyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FkZHJjb25mX3ByZWZpeF9yY3YmIzM0OywKICAgICYjMzQ7cnQ2X3JvdXRlX3JjdiYjMzQ7LAogICAgJiMzNDtpcDZfZGVsX3J0X3JlYXNvbiYjMzQ7LAogICAgJiMzNDtydDZfZHVtcF9yb3V0ZSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9ydF9kZWxfbm90aWZ5JiMzNDssCiAgICAmIzM0O2ZpYjZfZGVsJiMzNDssCiAgICAmIzM0O2ZpYjZfcnVuX2djJiMzNDssCiAgICAmIzM0O25kaXNjX3JjdiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE4OjU5OjU3LjU2MzkxMjc4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTIyMzMyMjE4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUFY2X1JPVVRFUl9QUkVGXCIsXG4gICAgXCJJUFY2X1JPVVRFX0lORk9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZGRyY29uZl9wcmVmaXhfcmN2XCIsXG4gICAgXCJydDZfcm91dGVfcmN2XCIsXG4gICAgXCJpcDZfZGVsX3J0X3JlYXNvblwiLFxuICAgIFwicnQ2X2R1bXBfcm91dGVcIixcbiAgICBcImluZXQ2X3J0X2RlbF9ub3RpZnlcIixcbiAgICBcImZpYjZfZGVsXCIsXG4gICAgXCJmaWI2X3J1bl9nY1wiLFxuICAgIFwibmRpc2NfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBgUlRBX0RFTF9SRUFTT05gIGZvciBJUHY2IHJvdXRlcyB0byByZXBvcnQgdGhlIHJlYXNvbiBmb3Igcm91dGUgZGVsZXRpb24gKGUuZy4sIGV4cGlyZWQsIFJBIHdpdGhkcmF3bikuIEl0IG1vZGlmaWVzIGNvcmUgSVB2NiByb3V0aW5nIGZ1bmN0aW9ucywgZ2FyYmFnZSBjb2xsZWN0aW9uLCBhbmQgUm91dGVyIEFkdmVydGlzZW1lbnQgKFJBKSBwcm9jZXNzaW5nIGxvZ2ljIHRvIHBsdW1iIHRoaXMgbmV3IGF0dHJpYnV0ZSB0aHJvdWdoIHRoZSByb3V0ZSBkZWxldGlvbiBwYXRocyBhbmQgbmV0bGluayBub3RpZmljYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdCBoYW5kbGluZyBvZiB0aGUgbmV3IGF0dHJpYnV0ZSBhbmQgbm8gcmVncmVzc2lvbnMgaW4gcm91dGUgZGVsZXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE4OjU5OjU3LjU2MzkxNzY5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4NTY5NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmI5YWU3MDA2Yzk5NzBmMTI0YmQ5MWQwMmYyYmU3YWRjZGJkNGJlNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxODo1OTo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuaW5kZXggMzMxOTVkYjk2NzQ2Yy4uZTM3YTEzMDFlZjFkYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXFxuQEAgLTc4LDYgKzc4LDE1IEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcXG4gICAgICAgICB0eXBlOiB1MzJcXG4rICAtXFxuKyAgICBuYW1lOiBkZWwtcmVhc29uXFxuKyAgICB0eXBlOiBlbnVtXFxuKyAgICBuYW1lLXByZWZpeDogcnRhLWRlbC1yZWFzb24tXFxuKyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uXFxuKyAgICBlbnRyaWVzOlxcbisgICAgICAtIHVuc3BlY1xcbisgICAgICAtIGV4cGlyZWRcXG4rICAgICAgLSByYS13aXRoZHJhd25cXG4gXFxuIGF0dHJpYnV0ZS1zZXRzOlxcbiAgIC1cXG5AQCAtMTg1LDYgKzE5NCwxMCBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgICB0eXBlOiB1MzJcXG4gICAgICAgICBieXRlLW9yZGVyOiBiaWctZW5kaWFuXFxuICAgICAgICAgZGlzcGxheS1oaW50OiBoZXhcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IGRlbC1yZWFzb25cXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXFxuICAgLVxcbiAgICAgbmFtZTogbWV0cmljc1xcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXFxuQEAgLTI5OSw2ICszMTIsNyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIGRwb3J0XFxuICAgICAgICAgICAgIC0gbmgtaWRcXG4gICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4rICAgICAgICAgICAgLSBkZWwtcmVhc29uXFxuICAgICAgIGR1bXA6XFxuICAgICAgICAgcmVxdWVzdDpcXG4gICAgICAgICAgIHZhbHVlOiAyNlxcbkBAIC0zMTMsNyArMzI3LDM4IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgIGRvOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuICAgICAgICAgICB2YWx1ZTogMjRcXG4tICAgICAgICAgIGF0dHJpYnV0ZXM6ICphbGwtcm91dGUtYXR0cnNcXG4rICAgICAgICAgICMgZGVsLXJlYXNvbiBpcyBub3RpZmljYXRpb24tb25seS4gSXQgaXMgYWJvdmVcXG4rICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcXG4rICAgICAgICAgICMgaXQgaW4gcmVxdWVzdHMuXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiBcXHUwMDI2cm91dGUtcmVxLWF0dHJzXFxuKyAgICAgICAgICAgIC0gZHN0XFxuKyAgICAgICAgICAgIC0gc3JjXFxuKyAgICAgICAgICAgIC0gaWlmXFxuKyAgICAgICAgICAgIC0gb2lmXFxuKyAgICAgICAgICAgIC0gZ2F0ZXdheVxcbisgICAgICAgICAgICAtIHByaW9yaXR5XFxuKyAgICAgICAgICAgIC0gcHJlZnNyY1xcbisgICAgICAgICAgICAtIG1ldHJpY3NcXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcXG4rICAgICAgICAgICAgLSBmbG93XFxuKyAgICAgICAgICAgIC0gY2FjaGVpbmZvXFxuKyAgICAgICAgICAgIC0gdGFibGVcXG4rICAgICAgICAgICAgLSBtYXJrXFxuKyAgICAgICAgICAgIC0gbWZjLXN0YXRzXFxuKyAgICAgICAgICAgIC0gdmlhXFxuKyAgICAgICAgICAgIC0gbmV3ZHN0XFxuKyAgICAgICAgICAgIC0gcHJlZlxcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcXG4rICAgICAgICAgICAgLSBlbmNhcFxcbisgICAgICAgICAgICAtIGV4cGlyZXNcXG4rICAgICAgICAgICAgLSBwYWRcXG4rICAgICAgICAgICAgLSB1aWRcXG4rICAgICAgICAgICAgLSB0dGwtcHJvcGFnYXRlXFxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cXG4rICAgICAgICAgICAgLSBzcG9ydFxcbisgICAgICAgICAgICAtIGRwb3J0XFxuKyAgICAgICAgICAgIC0gbmgtaWRcXG4rICAgICAgICAgICAgLSBmbG93bGFiZWxcXG4gICAgIC1cXG4gICAgICAgbmFtZTogZGVscm91dGVcXG4gICAgICAgZG9jOiBEZWxldGUgYW4gZXhpc3Rpbmcgcm91dGVcXG5AQCAtMzIxLDQgKzM2NiwyMyBAQCBvcGVyYXRpb25zOlxcbiAgICAgICBkbzpcXG4gICAgICAgICByZXF1ZXN0OlxcbiAgICAgICAgICAgdmFsdWU6IDI1XFxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOiAqcm91dGUtcmVxLWF0dHJzXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGNyZWF0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNFxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IGRlbHJvdXRlLW50ZlxcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXFxuKyAgICAgIHZhbHVlOiAyNVxcbisgICAgICBub3RpZnk6IGdldHJvdXRlXFxuK1xcbittY2FzdC1ncm91cHM6XFxuKyAgbGlzdDpcXG4rICAgIC1cXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY0LXJvdXRlXFxuKyAgICAgIHZhbHVlOiA3XFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHJ0bmxncnAtaXB2Ni1yb3V0ZVxcbisgICAgICB2YWx1ZTogMTFcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXFxuaW5kZXggOWNkMjdlMWI5YjY5Mi4uYzZkYzIzYTQyYzExOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcXG5AQCAtNDY4LDcgKzQ2OCw4IEBAIHZvaWQgZmliNl9jbGVhbl9hbGxfc2tpcF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbiBcXHQgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcXG4raW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiBcXG4gc3RhdGljIGlubGluZVxcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXFxuQEAgLTUzMiw2ICs1MzMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4gI2VuZGlmXFxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRcXHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XFxuK3ZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiBcXG4gdm9pZCBmaWI2X2FnZV9leGNlcHRpb25zKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9nY19hcmdzICpnY19hcmdzLFxcbiBcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBub3cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuaW5kZXggMDlmZmUwZjEzY2U3NS4uOTJhZDVhMGQwM2EyNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXFxuQEAgLTEyOCwxMiArMTI4LDIxIEBAIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLCBnZnBfdCBnZnBfZmxhZ3MsXFxuIGludCBpcDZfaW5zX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5KTtcXG4raW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLCBib29sIHNraXBfbm90aWZ5LFxcbitcXHRcXHQgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbiBcXHRcXHRcXHQgICAgIGJvb2wgc2tpcF9ub3RpZnkpXFxuIHtcXG4gXFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnRfcmVhc29uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqZjZpLFxcbitcXHRcXHRcXHRcXHQgICAgYm9vbCBza2lwX25vdGlmeSxcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4re1xcbitcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4rfVxcbiAjZW5kaWZcXG4gXFxuIHZvaWQgcnQ2X2ZsdXNoX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqZjZpKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uZmUwMGU2MjRmM2MzYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmhcXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XFxuIFxcdFJUQV9EUE9SVCxcXG4gXFx0UlRBX05IX0lELFxcbiBcXHRSVEFfRkxPV0xBQkVMLFxcbitcXHRSVEFfREVMX1JFQVNPTixcXG4gXFx0X19SVEFfTUFYXFxuIH07XFxuIFxcbkBAIC00MDcsNiArNDA4LDIyIEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XFxuICNkZWZpbmUgUlRNX1JUQShyKSAgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpKSlcXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXFxuIFxcbisvKiBSVEFfREVMX1JFQVNPTjogd2h5IHRoZSBrZXJuZWwgZGVsZXRlZCB0aGUgcm91dGUuIHUzMi5cXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxcbisgKiBwYXRoIHJlY29yZHMgYSBjYXVzZS4gQWJzZW5jZSBtZWFucyBlaXRoZXIgYW4gb2xkZXIga2VybmVsIG9yIGFcXG4rICogZGVsZXRpb24gcGF0aCB0aGF0IGRvZXMgbm90ICh5ZXQpIHJlY29yZCBpdHMgY2F1c2UgLSBjb25zdW1lcnMgbXVzdFxcbisgKiB0cmVhdCBcXFwiYWJzZW50XFxcIiBhbmQgXFxcInVuc3BlY1xcXCIgaWRlbnRpY2FsbHkuIE5ldyBjYXVzZXMgbWF5IGJlIGFwcGVuZGVkLlxcbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxcbisgKi9cXG4rZW51bSBydGFfZGVsX3JlYXNvbiB7XFxuK1xcdFJUQV9ERUxfUkVBU09OX1VOU1BFQyxcXHRcXHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fRVhQSVJFRCxcXHRcXHQvKiBSVEZfRVhQSVJFUyBsaWZldGltZSByYW4gb3V0IChHQykgKi9cXG4rXFx0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFxcdC8qIHplcm8tbGlmZXRpbWUgUkEgLyBQSU8gLyBSSU8gKi9cXG4rXFx0X19SVEFfREVMX1JFQVNPTl9NQVhcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXFxuK1xcbiAvKiBSVE1fTVVMVElQQVRIIC0tLSBhcnJheSBvZiBzdHJ1Y3QgcnRuZXh0aG9wLlxcbiAgKlxcbiAgKiBcXFwic3RydWN0IHJ0bmV4dGhvcFxcXCIgZGVzY3JpYmVzIGFsbCBuZWNlc3NhcnkgbmV4dGhvcCBpbmZvcm1hdGlvbixcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcXG5pbmRleCBmNmZhMjcxNWI0NTBiLi4wYzNkMzhmNjlmYzQzIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuQEAgLTI4NzQsNyArMjg3NCw4IEBAIHZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbiBcXHRcXHRpZiAocnQpIHtcXG4gXFx0XFx0XFx0LyogQXV0b2NvbmYgcHJlZml4IHJvdXRlICovXFxuIFxcdFxcdFxcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xcbi1cXHRcXHRcXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOKTtcXG4gXFx0XFx0XFx0XFx0cnQgPSBOVUxMO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRcXHR0YWJsZSA9IHJ0LVxcdTAwM2VmaWI2X3RhYmxlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcXG5pbmRleCBhMTMwY2RmYWViZmJlLi4xNTlkYjEwYTg0NmNjIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNl9maWIuY1xcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xcbkBAIC0xOTY2LDcgKzE5NjYsOCBAQCBzdGF0aWMgc3RydWN0IGZpYjZfbm9kZSAqZmliNl9yZXBhaXJfdHJlZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHAsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0XFx0ICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBmaWI2X2luZm8gKmxlYWYsICpyZXBsYWNlX3J0ID0gTlVMTDtcXG4gXFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xcbkBAIC0yMDU1LDEzICsyMDU2LDE0IEBAIHN0YXRpYyB2b2lkIGZpYjZfZGVsX3JvdXRlKHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZSwgc3RydWN0IGZpYjZfbm9kZSAqZm4sXFxuIFxcdFxcdFxcdGNhbGxfZmliNl9lbnRyeV9ub3RpZmllcnNfcmVwbGFjZShuZXQsIHJlcGxhY2VfcnQpO1xcbiBcXHR9XFxuIFxcdGlmICghaW5mby1cXHUwMDNlc2tpcF9ub3RpZnkpXFxuLVxcdFxcdGluZXQ2X3J0X25vdGlmeShSVE1fREVMUk9VVEUsIHJ0LCBpbmZvLCAwKTtcXG4rXFx0XFx0aW5ldDZfcnRfZGVsX25vdGlmeShydCwgaW5mbywgZGVsX3JlYXNvbik7XFxuIFxcbiBcXHRmaWI2X2luZm9fcmVsZWFzZShydCk7XFxuIH1cXG4gXFxuIC8qIE5lZWQgdG8gb3duIHRhYmxlLVxcdTAwM2V0YjZfbG9jayAqL1xcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XFxuQEAgLTIwOTAsNyArMjA5Miw3IEBAIGludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXFxuIFxcdFxcdGlmIChydCA9PSBjdXIpIHtcXG4gXFx0XFx0XFx0aWYgKGZpYjZfcmVxdWlyZXNfc3JjKGN1cikpXFxuIFxcdFxcdFxcdFxcdGZpYjZfcm91dGVzX3JlcXVpcmVfc3JjX2RlYyhpbmZvLVxcdTAwM2VubF9uZXQpO1xcbi1cXHRcXHRcXHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XFxuK1xcdFxcdFxcdGZpYjZfZGVsX3JvdXRlKHRhYmxlLCBmbiwgcnRwLCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cnRwX25leHQgPSBcXHUwMDI2Y3VyLVxcdTAwM2VmaWI2X25leHQ7XFxuQEAgLTIyNTIsNyArMjI1NCw3IEBAIHN0YXRpYyBpbnQgZmliNl9jbGVhbl9ub2RlKHN0cnVjdCBmaWI2X3dhbGtlciAqdylcXG4gXFx0XFx0cmVzID0gYy1cXHUwMDNlZnVuYyhydCwgYy1cXHUwMDNlYXJnKTtcXG4gXFx0XFx0aWYgKHJlcyA9PSAtMSkge1xcbiBcXHRcXHRcXHR3LVxcdTAwM2VsZWFmID0gcnQ7XFxuLVxcdFxcdFxcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdFxcdFxcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKHJlcykge1xcbiAjaWYgUlQ2X0RFQlVHIFxcdTAwM2U9IDJcXG4gXFx0XFx0XFx0XFx0cHJfZGVidWcoXFxcIiVzOiBkZWwgZmFpbGVkOiBydD0lcEAlcCBlcnI9JWRcXFxcblxcXCIsXFxuQEAgLTI0MDAsNyArMjQwMiw3IEBAIHN0YXRpYyB2b2lkIGZpYjZfZ2NfdGFibGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXG4gXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShydCwgbiwgXFx1MDAyNnRiNi1cXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxcbiBcXHRcXHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxcbi1cXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8pO1xcbitcXHRcXHRcXHRmaWI2X2RlbChydCwgXFx1MDAyNmluZm8sIFJUQV9ERUxfUkVBU09OX0VYUElSRUQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBmaWI2X2djX2FsbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MpXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jXFxuaW5kZXggZjg2N2VjOGQzZDkwNS4uNzEzZGI5MDg5ZDVlMSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZGlzYy5jXFxuKysrIGIvbmV0L2lwdjYvbmRpc2MuY1xcbkBAIC0xMzYxLDcgKzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRkZWZydHJfdXNyX21ldHJpYyA9IGluNl9kZXYtXFx1MDAzZWNuZi5yYV9kZWZydHJfbWV0cmljO1xcbiBcXHQvKiBkZWxldGUgdGhlIHJvdXRlIGlmIGxpZmV0aW1lIGlzIDAgb3IgaWYgbWV0cmljIG5lZWRzIGNoYW5nZSAqL1xcbiBcXHRpZiAocnQgXFx1MDAyNlxcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXFx1MDAzZWZpYjZfbWV0cmljICE9IGRlZnJ0cl91c3JfbWV0cmljKSkge1xcbi1cXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsXFxuK1xcdFxcdFxcdFxcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0cnQgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuY1xcbmluZGV4IGZjNDJkNjdlNTgyMjYuLjk0Zjk2NDZkNWViYzMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvcm91dGUuY1xcbisrKyBiL25ldC9pcHY2L3JvdXRlLmNcXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxcbiBcXHRcXHRcXHQgc3RydWN0IGluNl9hZGRyICpkZXN0LCBzdHJ1Y3QgaW42X2FkZHIgKnNyYyxcXG4gXFx0XFx0XFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbi1cXHRcXHRcXHQgdW5zaWduZWQgaW50IGZsYWdzKTtcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcXG5AQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4gXFx0XFx0XFx0XFx0XFx0Z3dhZGRyLCBkZXYpO1xcbiBcXG4gXFx0aWYgKHJ0IFxcdTAwMjZcXHUwMDI2ICFsaWZldGltZSkge1xcbi1cXHRcXHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcXG4rXFx0XFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XFxuIFxcdFxcdHJ0ID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtMzk3Myw3ICszOTczLDggQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbitzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTtcXG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXG4gXFx0dGFibGUgPSBydC1cXHUwMDNlZmliNl90YWJsZTtcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0YWJsZS1cXHUwMDNldGI2X2xvY2spO1xcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRhYmxlLVxcdTAwM2V0YjZfbG9jayk7XFxuIFxcbiBvdXQ6XFxuQEAgLTM5OTQsMTQgKzM5OTUsMjAgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbitpbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcXG4rXFx0XFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBubF9pbmZvIGluZm8gPSB7XFxuIFxcdFxcdC5ubF9uZXQgPSBuZXQsXFxuIFxcdFxcdC5za2lwX25vdGlmeSA9IHNraXBfbm90aWZ5XFxuIFxcdH07XFxuIFxcbi1cXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2aW5mbyk7XFxuK1xcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZpbmZvLCBkZWxfcmVhc29uKTtcXG4rfVxcbitcXG4raW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSlcXG4re1xcbitcXHRyZXR1cm4gaXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgc2tpcF9ub3RpZnksIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcXG5AQCAtNDAyOCw3ICs0MDM1LDggQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxcbiBcXG4gXFx0XFx0XFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLFxcbiBcXHRcXHRcXHRcXHRcXHQgIE5VTEwsIE5VTEwsIDAsIFJUTV9ERUxST1VURSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBpbmZvLVxcdTAwM2Vwb3J0aWQsIHNlcSwgMCkgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuIFxcdFxcdFxcdH0gZWxzZVxcbkBAIC00MDY0LDEzICs0MDcyLDEzIEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpYmxpbmcsIG5leHRfc2libGluZyxcXG4gXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZydC1cXHUwMDNlZmliNl9zaWJsaW5ncyxcXG4gXFx0XFx0XFx0XFx0XFx0IGZpYjZfc2libGluZ3MpIHtcXG4tXFx0XFx0XFx0ZXJyID0gZmliNl9kZWwoc2libGluZywgaW5mbyk7XFxuK1xcdFxcdFxcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBmaWI2X2RlbChydCwgaW5mbyk7XFxuK1xcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGFibGUtXFx1MDAzZXRiNl9sb2NrKTtcXG4gb3V0X3B1dDpcXG5AQCAtNDE5Niw3ICs0MjA0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxcbiBcXHRcXHRcXHRcXHRpZiAoIWZpYjZfaW5mb19ob2xkX3NhZmUocnQpKVxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdFxcdGVyciA9ICBfX2lwNl9kZWxfcnQocnQsIFxcdTAwMjZjZmctXFx1MDAzZWZjX25saW5mbyk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoY2ZnLVxcdTAwM2VmY19uaF9pZClcXG5AQCAtNDIxNSw3ICs0MjI0LDggQEAgc3RhdGljIGludCBpcDZfcm91dGVfZGVsKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnLFxcbiBcXG4gXFx0XFx0XFx0LyogaWYgZ2F0ZXdheSB3YXMgc3BlY2lmaWVkIG9ubHkgZGVsZXRlIHRoZSBvbmUgaG9wICovXFxuIFxcdFxcdFxcdGlmIChjZmctXFx1MDAzZWZjX2ZsYWdzIFxcdTAwMjYgUlRGX0dBVEVXQVkpXFxuLVxcdFxcdFxcdFxcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXFx1MDAyNmNmZy1cXHUwMDNlZmNfbmxpbmZvKTtcXG4rXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0KHJ0LCBcXHUwMDI2Y2ZnLVxcdTAwM2VmY19ubGluZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0ZXJyID0gX19pcDZfZGVsX3J0X3NpYmxpbmdzKHJ0LCBjZmcpO1xcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtNTczOSw2ICs1NzQ5LDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCkgLyogUlRBWF9DQ19BTEdPICovXFxuIFxcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXFxuK1xcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9ERUxfUkVBU09OICovXFxuIFxcdCAgICAgICArIG5leHRob3BfbGVuO1xcbiB9XFxuIFxcbkBAIC01Nzc1LDcgKzU3ODYsNyBAQCBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXFxuIFxcdFxcdFxcdCBpbnQgaWlmLCBpbnQgdHlwZSwgdTMyIHBvcnRpZCwgdTMyIHNlcSxcXG4tXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncylcXG4rXFx0XFx0XFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbiB7XFxuIFxcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XFxuIFxcdHN0cnVjdCBydDZrZXkgKnJ0Nl9kc3QsICpydDZfc3JjO1xcbkBAIC01OTU0LDYgKzU5NjUsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsIGRzdCwgMCwgZXhwaXJlcywgZHN0ID8gZHN0LVxcdTAwM2VlcnJvciA6IDApIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbitcXHRpZiAoZGVsX3JlYXNvbiAhPSBSVEFfREVMX1JFQVNPTl9VTlNQRUMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0RFTF9SRUFTT04sIGRlbF9yZWFzb24pKVxcbitcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4rXFxuIFxcdGlmIChubGFfcHV0X3U4KHNrYiwgUlRBX1BSRUYsIElQVjZfRVhUUkFDVF9QUkVGKHJ0Nl9mbGFncykpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuQEAgLTYwNTUsNyArNjA3MCw4IEBAIHN0YXRpYyBpbnQgcnQ2X25oX2R1bXBfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9uaCAqbmgsIHZvaWQgKmFyZylcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZydDZfZXgtXFx1MDAzZXJ0NmktXFx1MDAzZWRzdCwgTlVMTCwgTlVMTCwgMCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoZHVtcC1cXHUwMDNlY2ItXFx1MDAzZXNrYikucG9ydGlkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZHVtcC1cXHUwMDNlY2ItXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfc2VxLCB3LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBkdW1wLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIHctXFx1MDAzZWZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuQEAgLTYxMDMsNyArNjExOSw4IEBAIGludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxcbiBcXHRcXHRcXHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIGFyZy1cXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAwLCBSVE1fTkVXUk9VVEUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgTkVUTElOS19DQihhcmctXFx1MDAzZWNiLVxcdTAwM2Vza2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICBhcmctXFx1MDAzZWNiLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3NlcSwgZmxhZ3MpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdCAgYXJnLVxcdTAwM2VjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHRcXHQgIFJUQV9ERUxfUkVBU09OX1VOU1BFQykpIHtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0Y291bnQrKztcXG5AQCAtNjMzNiwxMiArNjM1MywxNCBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0XFx0XFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgTlVMTCwgTlVMTCwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGlpZiwgUlRNX05FV1JPVVRFLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG5saC1cXHUwMDNlbmxtc2dfc2VxLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmcm9tLCBkc3QsIFxcdTAwMjZmbDYuZGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Zmw2LnNhZGRyLCBpaWYsIFJUTV9ORVdST1VURSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBubGgtXFx1MDAzZW5sbXNnX3NlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IC1FTkVUVU5SRUFDSDtcXG4gXFx0fVxcbkBAIC02MzU3LDggKzYzNzYsOSBAQCBzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuLVxcdFxcdCAgICAgdW5zaWduZWQgaW50IG5sbV9mbGFncylcXG4rc3RhdGljIHZvaWQgX19pbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXFxuK1xcdFxcdFxcdCAgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVxcdTAwM2VubF9uZXQ7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuQEAgLTYzNzcsNyArNjM5Nyw3IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbiBcXHRcXHRnb3RvIGVycm91dDtcXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIHJ0LCBOVUxMLCBOVUxMLCBOVUxMLCAwLFxcbi1cXHRcXHRcXHQgICAgZXZlbnQsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MpO1xcbitcXHRcXHRcXHQgICAgZXZlbnQsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXFxuQEAgLTYzOTgsNiArNjQxOCwxOCBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4gXFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xcbiB9XFxuIFxcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4rXFx0XFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbit9XFxuK1xcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbitcXHRcXHRcXHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbit7XFxuK1xcdF9faW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDAsIGRlbF9yZWFzb24pO1xcbit9XFxuK1xcbiB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcXG4ge1xcbkBAIC02NDEwLDcgKzY0NDIsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG4gXFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXFxuLVxcdFxcdFxcdCAgICBSVE1fTkVXUk9VVEUsIGluZm8tXFx1MDAzZXBvcnRpZCwgc2VxLCBOTE1fRl9SRVBMQUNFKTtcXG4rXFx0XFx0XFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cXHUwMDNlcG9ydGlkLCBzZXEsIE5MTV9GX1JFUExBQ0UsXFxuK1xcdFxcdFxcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xcbiBcXHRcXHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xcbkBAIC02NDYzLDcgKzY0OTYsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGY2aSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgUlRNX05FV1JPVVRFLCAwLFxcbi1cXHRcXHRcXHQgICAgMCwgMCk7XFxuK1xcdFxcdFxcdCAgICAwLCAwLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHQvKiAtRU1TR1NJWkUgaW1wbGllcyBCVUcgaW4gcnQ2X25sbXNnX3NpemUoKSAqL1xcbiBcXHRcXHRXQVJOX09OKGVyciA9PSAtRU1TR1NJWkUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcXG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXFxuIGZyb20gLmJwZiBpbXBvcnQgYnBmX21hcF9zZXQsIGJwZl9tYXBfZHVtcCwgYnBmX3Byb2dfbWFwX2lkc1xcbiBmcm9tIC55bmwgaW1wb3J0IE5sRXJyb3IsIE5sY3RybEZhbWlseSwgWW5sRmFtaWx5LCBcXFxcXFxuLSAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5XFxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gZnJvbSAueW5sIGltcG9ydCBOZXRzaGFwZXJGYW1pbHksIERldmxpbmtGYW1pbHksIFBTUEZhbWlseSwgTmV0bGlua1xcbiBcXG4gX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuQEAgLTM0LDQgKzM0LDQgQEAgX19hbGxfXyA9IFtcXFwiS1NSQ1xcXCIsXFxuICAgICAgICAgICAgXFxcIk5ldGRldlNpbVxcXCIsIFxcXCJOZXRkZXZTaW1EZXZcXFwiLFxcbiAgICAgICAgICAgIFxcXCJOZXRzaGFwZXJGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsIFxcXCJQU1BGYW1pbHlcXFwiLCBcXFwiTmxFcnJvclxcXCIsXFxuICAgICAgICAgICAgXFxcIllubEZhbWlseVxcXCIsIFxcXCJFdGh0b29sRmFtaWx5XFxcIiwgXFxcIk5ldGRldkZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIixcXG4tICAgICAgICAgICBcXFwiTmxjdHJsRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbisgICAgICAgICAgIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiUnRubEFkZHJGYW1pbHlcXFwiLCBcXFwiUnRubFJvdXRlRmFtaWx5XFxcIiwgXFxcIk5ldGxpbmtcXFwiXVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XFxuQEAgLTI5LDcgKzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZTpcXG4gXFxuIF9fYWxsX18gPSBbXFxuICAgICBcXFwiTmxFcnJvclxcXCIsIFxcXCJObFBvbGljeVxcXCIsIFxcXCJOZXRsaW5rXFxcIiwgXFxcIllubEZhbWlseVxcXCIsIFxcXCJTUEVDX1BBVEhcXFwiLFxcbi0gICAgXFxcIkV0aHRvb2xGYW1pbHlcXFwiLCBcXFwiUnRubEZhbWlseVxcXCIsIFxcXCJSdG5sQWRkckZhbWlseVxcXCIsXFxuKyAgICBcXFwiRXRodG9vbEZhbWlseVxcXCIsIFxcXCJSdG5sRmFtaWx5XFxcIiwgXFxcIlJ0bmxBZGRyRmFtaWx5XFxcIiwgXFxcIlJ0bmxSb3V0ZUZhbWlseVxcXCIsXFxuICAgICBcXFwiTmV0ZGV2RmFtaWx5XFxcIiwgXFxcIk5ldHNoYXBlckZhbWlseVxcXCIsIFxcXCJObGN0cmxGYW1pbHlcXFwiLCBcXFwiRGV2bGlua0ZhbWlseVxcXCIsXFxuICAgICBcXFwiUFNQRmFtaWx5XFxcIixcXG4gXVxcbkBAIC01NCw2ICs1NCwxMSBAQCBjbGFzcyBSdG5sQWRkckZhbWlseShZbmxGYW1pbHkpOlxcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LWFkZHIueWFtbCcpKS5hc19wb3NpeCgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hPScnLCByZWN2X3NpemU9cmVjdl9zaXplKVxcbiBcXG4rY2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XFxuKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9zaXplPTApOlxcbisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LXJvdXRlLnlhbWwnKSkuYXNfcG9zaXgoKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcXG4rXFxuIGNsYXNzIE5ldGRldkZhbWlseShZbmxGYW1pbHkpOlxcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcXG4gICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCduZXRkZXYueWFtbCcpKS5hc19wb3NpeCgpLFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbmluZGV4IDBjNjdjN2MwMGQ4NDEuLmY3NGNjZDVjMmQxM2EgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtNSw3ICs1LDggQEAgaW1wb3J0IHNvY2tldFxcbiBpbXBvcnQgc3RydWN0XFxuIGltcG9ydCB0aW1lXFxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcXG4tZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGtzZnRfbm90X2luLCBrc2Z0X25vdF9ub25lXFxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcXG4gXFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFxcXHhlMFxcXFx4MDBcXFxceDAwXFxcXHgwMSdcXG4gSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFxcXHhlZlxcXFx4MDFcXFxceDAxXFxcXHgwMSdcXG5AQCAtMTM0LDggKzEzNSwxODQgQEAgZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAga3NmdF90cnVlKGZcXFwiaW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXFxcIiBpbiBjbWRfb2JqLnN0ZG91dCxcXG4gICAgICAgICAgICAgICBmXFxcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cXFwiKVxcbiBcXG4rZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XFxuKyAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XFxuKyAgICAgICAgcnRubCA9IFJ0bmxSb3V0ZUZhbWlseSgpXFxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXFxcInJ0bmxncnAtaXB2Ni1yb3V0ZVxcXCIpXFxuKyAgICByZXR1cm4gcnRubFxcbitcXG4rXFxuK2RlZiBfd2FpdF9yb3V0ZV9udGYocnRubCwgbmFtZSwgZHN0X2xlbiwgZHN0PU5vbmUsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxcbisgICAgICAgICAgICBjb250aW51ZVxcbisgICAgICAgIGlmIGRzdCBpcyBub3QgTm9uZSBhbmQgYXR0cnMuZ2V0KCdkc3QnKSAhPSBkc3Q6XFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgcmV0dXJuIGF0dHJzXFxuKyAgICByZXR1cm4gTm9uZVxcbitcXG4rXFxuK2RlZiBfY29sbGVjdF9yb3V0ZV9udGZzKHJ0bmwsIG5hbWUsIHdhbnQsIGRlYWRsaW5lPTEwKTpcXG4rICAgIFxcXCJcXFwiXFxcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBzZWVuID0ge31cXG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XFxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcXG4rICAgICAgICAgICAgY29udGludWVcXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cXG4rICAgICAgICBrZXkgPSAoYXR0cnNbJ3J0bS1kc3QtbGVuJ10sIGF0dHJzLmdldCgnZHN0JykpXFxuKyAgICAgICAgaWYga2V5IGluIHdhbnQ6XFxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXFxuKyAgICAgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XFxuKyAgICAgICAgICAgICAgICBicmVha1xcbisgICAgcmV0dXJuIHNlZW5cXG4rXFxuK1xcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcXG4rICAgIHdpdGggb3BlbihmXFxcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cXFwiLCBcXFwid1xcXCIpIGFzIGY6XFxuKyAgICAgICAgZi53cml0ZShmXFxcInt2YWx1ZX1cXFxcblxcXCIpXFxuK1xcbitcXG4rZGVmIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9leHBpcmVkKCkgLVxcdTAwM2UgTm9uZTpcXG4rICAgIFxcXCJcXFwiXFxcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJyb3V0ZS9nY19pbnRlcnZhbFxcXCIsIDIpXFxuKyAgICAgICAgaXAoXFxcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcXFwiLCBucz1zdHIobnMpKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwiLTYgcm91dGUgYWRkIDIwMDE6ZGI4OjI6Oi82NCBkZXYgZHVtbXkxIGV4cGlyZXMgMlxcXCIsIG5zPXN0cihucykpXFxuK1xcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjI6OicsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXFxcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcXFwiKVxcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxcbisgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAnZXhwaXJlZCcpXFxuK1xcbitcXG4rZGVmIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsIGxpZmV0aW1lLCByaW89Tm9uZSwgcGlvPU5vbmUpOlxcbisgICAgXFxcIlxcXCJcXFwiVGhlIGtlcm5lbCBmaWxscyBpbiB0aGUgSUNNUHY2IGNoZWNrc3VtIG9uIHJhdyBJQ01QdjYgc29ja2V0cy5cXFwiXFxcIlxcXCJcXG4rXFxuKyAgICAjIHR5cGUsIGNvZGUsIGNrc3VtLCBob3AgbGltaXQsIGZsYWdzLCByb3V0ZXIgbGlmZXRpbWUsXFxuKyAgICAjIHJlYWNoYWJsZSB0aW1lLCByZXRyYW5zIHRpbWVyXFxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcXG4rICAgIGlmIHJpbyBpcyBub3QgTm9uZTpcXG4rICAgICAgICBwcmVmaXgsIHBsZW4sIHJpb19saWZldGltZSA9IHJpb1xcbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQkknLCAyNCwgMiwgcGxlbiwgMCwgcmlvX2xpZmV0aW1lKVxcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpWzo4XVxcbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxcbisgICAgICAgIHByZWZpeCwgcGxlbiwgdmFsaWRfbGZ0ID0gcGlvXFxuKyAgICAgICAgIyBSRkMgNDg2MSBwcmVmaXggaW5mb3JtYXRpb24gb3B0aW9uLCBvbi1saW5rIG9ubHkgKEwgc2V0LCBBIGNsZWFyKVxcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVxcbisgICAgc29jay5zZW5kdG8ocmEsICgnZmYwMjo6MScsIDAsIDAsIGlmaW5kZXgpKVxcbitcXG4rXFxuK2RlZiBfcmFfcm91dGVyX3NvY2sobnNfciwgaWZuYW1lKTpcXG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxcbisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfUkFXLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFBST1RPX0lDTVBWNilcXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcXG4rICAgICAgICByZXR1cm4gc29jaywgc29ja2V0LmlmX25hbWV0b2luZGV4KGlmbmFtZSlcXG4rXFxuK1xcbitkZWYgX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgd2FudCwgKipyYV9vcHRzKTpcXG4rICAgIFxcXCJcXFwiXFxcIlxcbisgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlcidzIGxpbmstbG9jYWxcXG4rICAgIGFkZHJlc3MgcGFzc2VzIERBRCwgc28gcmV0cnkuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICBzZWVuID0ge31cXG4rICAgIGZvciBfIGluIHJhbmdlKDEwKTpcXG4rICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgIF9zZW5kX3JhKHNvY2ssIGlmaW5kZXgsICoqcmFfb3B0cylcXG4rICAgICAgICBleGNlcHQgT1NFcnJvcjpcXG4rICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpXFxuKyAgICAgICAgICAgIGNvbnRpbnVlXFxuKyAgICAgICAgc2Vlbi51cGRhdGUoX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnbmV3cm91dGUtbnRmJyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcXG4rICAgICAgICBpZiBsZW4oc2VlbikgPT0gbGVuKHdhbnQpOlxcbisgICAgICAgICAgICBicmVha1xcbisgICAgcmV0dXJuIHNlZW5cXG4rXFxuK1xcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXFxuKyAgICBQSU8sIFJGQyA0MTkxIFJJTykgcmVwb3J0IFJUQV9ERUxfUkVBU09OID09IHJhLXdpdGhkcmF3bi5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgICMgKHJ0bS1kc3QtbGVuLCBkc3QpOyB0aGUgZGVmYXVsdCByb3V0ZSBjYXJyaWVzIG5vIFJUQV9EU1RcXG4rICAgIHJvdXRlcyA9IHsoMCwgTm9uZSksICg2NCwgJzIwMDE6ZGI4OjY6OicpLCAoNjQsICcyMDAxOmRiODo1OjonKX1cXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnNfaCwgTmV0TlMoKSBhcyBuc19yOlxcbisgICAgICAgIGlwKGZcXFwibGluayBhZGQgdmV0aDAgbmV0bnMge25zX2h9IHR5cGUgdmV0aCBwZWVyIG5hbWUgdmV0aDEgbmV0bnMge25zX3J9XFxcIilcXG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zX2gpKTpcXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2FjY2VwdF9yYVxcXCIsIDIpXFxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcXFwiY29uZi92ZXRoMC9mb3J3YXJkaW5nXFxcIiwgMClcXG4rICAgICAgICAgICAgdHJ5OlxcbisgICAgICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFxcXCJjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXFxcIiwgNjQpXFxuKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXFwiKVxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxcbisgICAgICAgICAgICAjIHNraXAgREFEIHNvIHRoZSByb3V0ZXIncyBsaW5rLWxvY2FsIHNvdXJjZSBpcyB1c2FibGUgcmlnaHQgYXdheVxcbisgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXFxcImNvbmYvdmV0aDEvYWNjZXB0X2RhZFxcXCIsIDApXFxuKyAgICAgICAgaXAoXFxcImxpbmsgc2V0IGRldiB2ZXRoMCB1cFxcXCIsIG5zPXN0cihuc19oKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IHZldGgxIHVwXFxcIiwgbnM9c3RyKG5zX3IpKVxcbitcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXFxuKyAgICAgICAgc29jaywgaWZpbmRleCA9IF9yYV9yb3V0ZXJfc29jayhuc19yLCBcXFwidmV0aDFcXFwiKVxcbitcXG4rICAgICAgICBzZWVuID0gX3JhX2FkdmVydGlzZV9yb3V0ZXMocnRubCwgc29jaywgaWZpbmRleCwgcm91dGVzLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZT0xODAwLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgNjAwKSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlvPSgnMjAwMTpkYjg6Njo6JywgNjQsIDYwMCkpXFxuKyAgICAgICAga3NmdF9lcShzZXQoc2VlbiksIHJvdXRlcywgXFxcIm5vdCBhbGwgUkEgcm91dGVzIHdlcmUgaW5zdGFsbGVkXFxcIilcXG4rICAgICAgICBpZiBzZXQoc2VlbikgIT0gcm91dGVzOlxcbisgICAgICAgICAgICByZXR1cm5cXG4rXFxuKyAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgMCwgcmlvPSgnMjAwMTpkYjg6NTo6JywgNjQsIDApLFxcbisgICAgICAgICAgICAgICAgIHBpbz0oJzIwMDE6ZGI4OjY6OicsIDY0LCAwKSlcXG4rICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnZGVscm91dGUtbnRmJywgcm91dGVzKVxcbisgICAgICAgIGZvciBrZXkgaW4gcm91dGVzOlxcbisgICAgICAgICAgICBhdHRycyA9IHNlZW4uZ2V0KGtleSlcXG4rICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlxcXCJubyBSVE1fREVMUk9VVEUgZm9yIHtrZXl9XFxcIilcXG4rICAgICAgICAgICAgaWYgYXR0cnMgaXMgbm90IE5vbmU6XFxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAncmEtd2l0aGRyYXduJylcXG4rXFxuK1xcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cXHUwMDNlIE5vbmU6XFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcXG4rICAgIG11c3Qgbm90IGNhcnJ5IFJUQV9ERUxfUkVBU09OIGF0IGFsbC5cXG4rICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxcbisgICAgICAgIGlwKFxcXCJsaW5rIGFkZCBuYW1lIGR1bW15MSB0eXBlIGR1bW15XFxcIiwgbnM9c3RyKG5zKSlcXG4rICAgICAgICBpcChcXFwibGluayBzZXQgZGV2IGR1bW15MSB1cFxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVxcXCIsIG5zPXN0cihucykpXFxuKyAgICAgICAgaXAoXFxcIi02IHJvdXRlIGRlbCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVxcXCIsIG5zPXN0cihucykpXFxuK1xcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjE6OicpXFxuKyAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgXFxcIm5vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XFxcIilcXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcXG4rICAgICAgICAgICAga3NmdF9ub3RfaW4oJ2RlbC1yZWFzb24nLCBhdHRycyxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgXFxcInVzZXIgZGVsZXRpb24gbXVzdCBub3QgY2FycnkgZGVsLXJlYXNvblxcXCIpXFxuK1xcbitcXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQsXFxuKyAgICAgICAgICAgICAgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bixcXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxODo1OTo1Ny45OTMzMzkwOThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTg3OTM4ODc3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwicnQ2X3JvdXRlX3JjdlwiLFxuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcInJ0Nl9kdW1wX3JvdXRlXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiZmliNl9ydW5fZ2NcIixcbiAgICBcIm5kaXNjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZXMgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIHJvdXRlIGRlbGV0aW9uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBmdW5jdGlvbnMsIGdhcmJhZ2UgY29sbGVjdGlvbiwgYW5kIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgcHJvY2Vzc2luZyBsb2dpYyB0byBwbHVtYiB0aGlzIG5ldyBhdHRyaWJ1dGUgdGhyb3VnaCB0aGUgcm91dGUgZGVsZXRpb24gcGF0aHMgYW5kIG5ldGxpbmsgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIG5ldyBhdHRyaWJ1dGUgYW5kIG5vIHJlZ3Jlc3Npb25zIGluIHJvdXRlIGRlbGV0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYjlhZTcwMDZjOTk3MGYxMjRiZDkxZDAyZjJiZTdhZGNkYmQ0YmU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTg6NTk6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtcm91dGUueWFtbCBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5pbmRleCAzMzE5NWRiOTY3NDZjLi5lMzdhMTMwMWVmMWRiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LXJvdXRlLnlhbWxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1yb3V0ZS55YW1sXG5AQCAtNzgsNiArNzgsMTUgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcnRhLXVzZWRcbiAgICAgICAgIHR5cGU6IHUzMlxuKyAgLVxuKyAgICBuYW1lOiBkZWwtcmVhc29uXG4rICAgIHR5cGU6IGVudW1cbisgICAgbmFtZS1wcmVmaXg6IHJ0YS1kZWwtcmVhc29uLVxuKyAgICBlbnVtLW5hbWU6IHJ0YS1kZWwtcmVhc29uXG4rICAgIGVudHJpZXM6XG4rICAgICAgLSB1bnNwZWNcbisgICAgICAtIGV4cGlyZWRcbisgICAgICAtIHJhLXdpdGhkcmF3blxuIFxuIGF0dHJpYnV0ZS1zZXRzOlxuICAgLVxuQEAgLTE4NSw2ICsxOTQsMTAgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICB0eXBlOiB1MzJcbiAgICAgICAgIGJ5dGUtb3JkZXI6IGJpZy1lbmRpYW5cbiAgICAgICAgIGRpc3BsYXktaGludDogaGV4XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogZGVsLXJlYXNvblxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgICBlbnVtOiBkZWwtcmVhc29uXG4gICAtXG4gICAgIG5hbWU6IG1ldHJpY3NcbiAgICAgbmFtZS1wcmVmaXg6IHJ0YXgtXG5AQCAtMjk5LDYgKzMxMiw3IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSBkcG9ydFxuICAgICAgICAgICAgIC0gbmgtaWRcbiAgICAgICAgICAgICAtIGZsb3dsYWJlbFxuKyAgICAgICAgICAgIC0gZGVsLXJlYXNvblxuICAgICAgIGR1bXA6XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjZcbkBAIC0zMTMsNyArMzI3LDM4IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgZG86XG4gICAgICAgICByZXF1ZXN0OlxuICAgICAgICAgICB2YWx1ZTogMjRcbi0gICAgICAgICAgYXR0cmlidXRlczogKmFsbC1yb3V0ZS1hdHRyc1xuKyAgICAgICAgICAjIGRlbC1yZWFzb24gaXMgbm90aWZpY2F0aW9uLW9ubHkuIEl0IGlzIGFib3ZlXG4rICAgICAgICAgICMgc3RyaWN0X3N0YXJ0X3R5cGUgaW4gcnRtX2lwdjZfcG9saWN5LCBzbyB0aGUga2VybmVsIHJlamVjdHNcbisgICAgICAgICAgIyBpdCBpbiByZXF1ZXN0cy5cbisgICAgICAgICAgYXR0cmlidXRlczogXHUwMDI2cm91dGUtcmVxLWF0dHJzXG4rICAgICAgICAgICAgLSBkc3RcbisgICAgICAgICAgICAtIHNyY1xuKyAgICAgICAgICAgIC0gaWlmXG4rICAgICAgICAgICAgLSBvaWZcbisgICAgICAgICAgICAtIGdhdGV3YXlcbisgICAgICAgICAgICAtIHByaW9yaXR5XG4rICAgICAgICAgICAgLSBwcmVmc3JjXG4rICAgICAgICAgICAgLSBtZXRyaWNzXG4rICAgICAgICAgICAgLSBtdWx0aXBhdGhcbisgICAgICAgICAgICAtIGZsb3dcbisgICAgICAgICAgICAtIGNhY2hlaW5mb1xuKyAgICAgICAgICAgIC0gdGFibGVcbisgICAgICAgICAgICAtIG1hcmtcbisgICAgICAgICAgICAtIG1mYy1zdGF0c1xuKyAgICAgICAgICAgIC0gdmlhXG4rICAgICAgICAgICAgLSBuZXdkc3RcbisgICAgICAgICAgICAtIHByZWZcbisgICAgICAgICAgICAtIGVuY2FwLXR5cGVcbisgICAgICAgICAgICAtIGVuY2FwXG4rICAgICAgICAgICAgLSBleHBpcmVzXG4rICAgICAgICAgICAgLSBwYWRcbisgICAgICAgICAgICAtIHVpZFxuKyAgICAgICAgICAgIC0gdHRsLXByb3BhZ2F0ZVxuKyAgICAgICAgICAgIC0gaXAtcHJvdG9cbisgICAgICAgICAgICAtIHNwb3J0XG4rICAgICAgICAgICAgLSBkcG9ydFxuKyAgICAgICAgICAgIC0gbmgtaWRcbisgICAgICAgICAgICAtIGZsb3dsYWJlbFxuICAgICAtXG4gICAgICAgbmFtZTogZGVscm91dGVcbiAgICAgICBkb2M6IERlbGV0ZSBhbiBleGlzdGluZyByb3V0ZVxuQEAgLTMyMSw0ICszNjYsMjMgQEAgb3BlcmF0aW9uczpcbiAgICAgICBkbzpcbiAgICAgICAgIHJlcXVlc3Q6XG4gICAgICAgICAgIHZhbHVlOiAyNVxuLSAgICAgICAgICBhdHRyaWJ1dGVzOiAqYWxsLXJvdXRlLWF0dHJzXG4rICAgICAgICAgIGF0dHJpYnV0ZXM6ICpyb3V0ZS1yZXEtYXR0cnNcbisgICAgLVxuKyAgICAgIG5hbWU6IG5ld3JvdXRlLW50ZlxuKyAgICAgIGRvYzogTm90aWZpY2F0aW9uIGFib3V0IGEgY3JlYXRlZCByb3V0ZS5cbisgICAgICB2YWx1ZTogMjRcbisgICAgICBub3RpZnk6IGdldHJvdXRlXG4rICAgIC1cbisgICAgICBuYW1lOiBkZWxyb3V0ZS1udGZcbisgICAgICBkb2M6IE5vdGlmaWNhdGlvbiBhYm91dCBhIGRlbGV0ZWQgcm91dGUuXG4rICAgICAgdmFsdWU6IDI1XG4rICAgICAgbm90aWZ5OiBnZXRyb3V0ZVxuK1xuK21jYXN0LWdyb3VwczpcbisgIGxpc3Q6XG4rICAgIC1cbisgICAgICBuYW1lOiBydG5sZ3JwLWlwdjQtcm91dGVcbisgICAgICB2YWx1ZTogN1xuKyAgICAtXG4rICAgICAgbmFtZTogcnRubGdycC1pcHY2LXJvdXRlXG4rICAgICAgdmFsdWU6IDExXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG5pbmRleCA5Y2QyN2UxYjliNjkyLi5jNmRjMjNhNDJjMTE4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oXG4rKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmhcbkBAIC00NjgsNyArNDY4LDggQEAgdm9pZCBmaWI2X2NsZWFuX2FsbF9za2lwX25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuIFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTtcbitpbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0ICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pO1xuIFxuIHN0YXRpYyBpbmxpbmVcbiB2b2lkIHJ0Nl9nZXRfcHJlZnNyYyhjb25zdCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpXG5AQCAtNTMyLDYgKzUzMyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3J0X3VwZGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxuICNlbmRpZlxuIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0XHQgICAgIHVuc2lnbmVkIGludCBmbGFncyk7XG4rdm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiBcbiB2b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXG4gXHRcdFx0IHVuc2lnbmVkIGxvbmcgbm93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5pbmRleCAwOWZmZTBmMTNjZTc1Li45MmFkNWEwZDAzYTI1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oXG5AQCAtMTI4LDEyICsxMjgsMjEgQEAgaW50IGlwNl9yb3V0ZV9hZGQoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsIGdmcF90IGdmcF9mbGFncyxcbiBpbnQgaXA2X2luc19ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSk7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSwgYm9vbCBza2lwX25vdGlmeSxcbitcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHRcdFx0ICAgICBib29sIHNraXBfbm90aWZ5KVxuIHtcbiBcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKmY2aSxcbitcdFx0XHRcdCAgICBib29sIHNraXBfbm90aWZ5LFxuK1x0XHRcdFx0ICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbit7XG4rXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbit9XG4gI2VuZGlmXG4gXG4gdm9pZCBydDZfZmx1c2hfZXhjZXB0aW9ucyhzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuaW5kZXggMjcyNjVmZDMxZTVmYy4uZmUwMGU2MjRmM2MzYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oXG5AQCAtMzk5LDYgKzM5OSw3IEBAIGVudW0gcnRhdHRyX3R5cGVfdCB7XG4gXHRSVEFfRFBPUlQsXG4gXHRSVEFfTkhfSUQsXG4gXHRSVEFfRkxPV0xBQkVMLFxuK1x0UlRBX0RFTF9SRUFTT04sXG4gXHRfX1JUQV9NQVhcbiB9O1xuIFxuQEAgLTQwNyw2ICs0MDgsMjIgQEAgZW51bSBydGF0dHJfdHlwZV90IHtcbiAjZGVmaW5lIFJUTV9SVEEocikgICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpXG4gI2RlZmluZSBSVE1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBydG1zZykpXG4gXG4rLyogUlRBX0RFTF9SRUFTT046IHdoeSB0aGUga2VybmVsIGRlbGV0ZWQgdGhlIHJvdXRlLiB1MzIuXG4rICogRW1pdHRlZCBvbmx5IG9uIFJUTV9ERUxST1VURSBub3RpZmljYXRpb25zLCBhbmQgb25seSB3aGVuIHRoZSBkZWxldGlvblxuKyAqIHBhdGggcmVjb3JkcyBhIGNhdXNlLiBBYnNlbmNlIG1lYW5zIGVpdGhlciBhbiBvbGRlciBrZXJuZWwgb3IgYVxuKyAqIGRlbGV0aW9uIHBhdGggdGhhdCBkb2VzIG5vdCAoeWV0KSByZWNvcmQgaXRzIGNhdXNlIC0gY29uc3VtZXJzIG11c3RcbisgKiB0cmVhdCBcImFic2VudFwiIGFuZCBcInVuc3BlY1wiIGlkZW50aWNhbGx5LiBOZXcgY2F1c2VzIG1heSBiZSBhcHBlbmRlZC5cbisgKiBDdXJyZW50bHkgb25seSBJUHY2IGRlbGV0aW9uIHBhdGhzIHJlY29yZCBhIGNhdXNlLlxuKyAqL1xuK2VudW0gcnRhX2RlbF9yZWFzb24ge1xuK1x0UlRBX0RFTF9SRUFTT05fVU5TUEVDLFx0XHQvKiBjYXVzZSBub3QgcmVjb3JkZWQgKi9cbitcdFJUQV9ERUxfUkVBU09OX0VYUElSRUQsXHRcdC8qIFJURl9FWFBJUkVTIGxpZmV0aW1lIHJhbiBvdXQgKEdDKSAqL1xuK1x0UlRBX0RFTF9SRUFTT05fUkFfV0lUSERSQVdOLFx0LyogemVyby1saWZldGltZSBSQSAvIFBJTyAvIFJJTyAqL1xuK1x0X19SVEFfREVMX1JFQVNPTl9NQVhcbit9O1xuK1xuKyNkZWZpbmUgUlRBX0RFTF9SRUFTT05fTUFYIChfX1JUQV9ERUxfUkVBU09OX01BWCAtIDEpXG4rXG4gLyogUlRNX01VTFRJUEFUSCAtLS0gYXJyYXkgb2Ygc3RydWN0IHJ0bmV4dGhvcC5cbiAgKlxuICAqIFwic3RydWN0IHJ0bmV4dGhvcFwiIGRlc2NyaWJlcyBhbGwgbmVjZXNzYXJ5IG5leHRob3AgaW5mb3JtYXRpb24sXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGY2ZmEyNzE1YjQ1MGIuLjBjM2QzOGY2OWZjNDMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXG4rKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jXG5AQCAtMjg3NCw3ICsyODc0LDggQEAgdm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pXG4gXHRcdGlmIChydCkge1xuIFx0XHRcdC8qIEF1dG9jb25mIHByZWZpeCByb3V0ZSAqL1xuIFx0XHRcdGlmICh2YWxpZF9sZnQgPT0gMCkge1xuLVx0XHRcdFx0aXA2X2RlbF9ydChuZXQsIHJ0LCBmYWxzZSk7XG4rXHRcdFx0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbitcdFx0XHRcdFx0XHQgIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdFx0XHRydCA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHRhYmxlID0gcnQtXHUwMDNlZmliNl90YWJsZTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmNcbmluZGV4IGExMzBjZGZhZWJmYmUuLjE1OWRiMTBhODQ2Y2MgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmNcbisrKyBiL25ldC9pcHY2L2lwNl9maWIuY1xuQEAgLTE5NjYsNyArMTk2Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgZmliNl9ub2RlICpmaWI2X3JlcGFpcl90cmVlKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbi1cdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbitcdFx0XHQgICBzdHJ1Y3QgZmliNl9pbmZvIF9fcmN1ICoqcnRwLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHQgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IGZpYjZfaW5mbyAqbGVhZiwgKnJlcGxhY2VfcnQgPSBOVUxMO1xuIFx0c3RydWN0IGZpYjZfd2Fsa2VyICp3O1xuQEAgLTIwNTUsMTMgKzIwNTYsMTQgQEAgc3RhdGljIHZvaWQgZmliNl9kZWxfcm91dGUoc3RydWN0IGZpYjZfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgZmliNl9ub2RlICpmbixcbiBcdFx0XHRjYWxsX2ZpYjZfZW50cnlfbm90aWZpZXJzX3JlcGxhY2UobmV0LCByZXBsYWNlX3J0KTtcbiBcdH1cbiBcdGlmICghaW5mby1cdTAwM2Vza2lwX25vdGlmeSlcbi1cdFx0aW5ldDZfcnRfbm90aWZ5KFJUTV9ERUxST1VURSwgcnQsIGluZm8sIDApO1xuK1x0XHRpbmV0Nl9ydF9kZWxfbm90aWZ5KHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcbiBcdGZpYjZfaW5mb19yZWxlYXNlKHJ0KTtcbiB9XG4gXG4gLyogTmVlZCB0byBvd24gdGFibGUtXHUwMDNldGI2X2xvY2sgKi9cbi1pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK2ludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG4rXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBpbmZvLVx1MDAzZW5sX25ldDtcbiBcdHN0cnVjdCBmaWI2X2luZm8gX19yY3UgKipydHA7XG5AQCAtMjA5MCw3ICsyMDkyLDcgQEAgaW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbylcbiBcdFx0aWYgKHJ0ID09IGN1cikge1xuIFx0XHRcdGlmIChmaWI2X3JlcXVpcmVzX3NyYyhjdXIpKVxuIFx0XHRcdFx0ZmliNl9yb3V0ZXNfcmVxdWlyZV9zcmNfZGVjKGluZm8tXHUwMDNlbmxfbmV0KTtcbi1cdFx0XHRmaWI2X2RlbF9yb3V0ZSh0YWJsZSwgZm4sIHJ0cCwgaW5mbyk7XG4rXHRcdFx0ZmliNl9kZWxfcm91dGUodGFibGUsIGZuLCBydHAsIGluZm8sIGRlbF9yZWFzb24pO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHRcdHJ0cF9uZXh0ID0gXHUwMDI2Y3VyLVx1MDAzZWZpYjZfbmV4dDtcbkBAIC0yMjUyLDcgKzIyNTQsNyBAQCBzdGF0aWMgaW50IGZpYjZfY2xlYW5fbm9kZShzdHJ1Y3QgZmliNl93YWxrZXIgKncpXG4gXHRcdHJlcyA9IGMtXHUwMDNlZnVuYyhydCwgYy1cdTAwM2VhcmcpO1xuIFx0XHRpZiAocmVzID09IC0xKSB7XG4gXHRcdFx0dy1cdTAwM2VsZWFmID0gcnQ7XG4tXHRcdFx0cmVzID0gZmliNl9kZWwocnQsIFx1MDAyNmluZm8pO1xuK1x0XHRcdHJlcyA9IGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRcdGlmIChyZXMpIHtcbiAjaWYgUlQ2X0RFQlVHIFx1MDAzZT0gMlxuIFx0XHRcdFx0cHJfZGVidWcoXCIlczogZGVsIGZhaWxlZDogcnQ9JXBAJXAgZXJyPSVkXFxuXCIsXG5AQCAtMjQwMCw3ICsyNDAyLDcgQEAgc3RhdGljIHZvaWQgZmliNl9nY190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ0LCBuLCBcdTAwMjZ0YjYtXHUwMDNldGI2X2djX2hsaXN0LCBnY19saW5rKVxuIFx0XHRpZiAoZmliNl9hZ2UocnQsIGdjX2FyZ3MpID09IC0xKVxuLVx0XHRcdGZpYjZfZGVsKHJ0LCBcdTAwMjZpbmZvKTtcbitcdFx0XHRmaWI2X2RlbChydCwgXHUwMDI2aW5mbywgUlRBX0RFTF9SRUFTT05fRVhQSVJFRCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuY1xuaW5kZXggZjg2N2VjOGQzZDkwNS4uNzEzZGI5MDg5ZDVlMSAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25kaXNjLmNcbisrKyBiL25ldC9pcHY2L25kaXNjLmNcbkBAIC0xMzYxLDcgKzEzNjEsOSBAQCBzdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0ZGVmcnRyX3Vzcl9tZXRyaWMgPSBpbjZfZGV2LVx1MDAzZWNuZi5yYV9kZWZydHJfbWV0cmljO1xuIFx0LyogZGVsZXRlIHRoZSByb3V0ZSBpZiBsaWZldGltZSBpcyAwIG9yIGlmIG1ldHJpYyBuZWVkcyBjaGFuZ2UgKi9cbiBcdGlmIChydCBcdTAwMjZcdTAwMjYgKGxpZmV0aW1lID09IDAgfHwgcnQtXHUwMDNlZmliNl9tZXRyaWMgIT0gZGVmcnRyX3Vzcl9tZXRyaWMpKSB7XG4tXHRcdGlwNl9kZWxfcnQobmV0LCBydCwgZmFsc2UpO1xuK1x0XHRpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBmYWxzZSxcbitcdFx0XHRcdCAgbGlmZXRpbWUgPT0gMCA/IFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTiA6XG4rXHRcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRydCA9IE5VTEw7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmNcbmluZGV4IGZjNDJkNjdlNTgyMjYuLjk0Zjk2NDZkNWViYzMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jXG4rKysgYi9uZXQvaXB2Ni9yb3V0ZS5jXG5AQCAtMTExLDcgKzExMSw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuK1x0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XG4gc3RhdGljIHN0cnVjdCBydDZfaW5mbyAqcnQ2X2ZpbmRfY2FjaGVkX3J0KGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLFxuIFx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKTtcbkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuIFx0XHRcdFx0XHRnd2FkZHIsIGRldik7XG4gXG4gXHRpZiAocnQgXHUwMDI2XHUwMDI2ICFsaWZldGltZSkge1xuLVx0XHRpcDZfZGVsX3J0KG5ldCwgcnQsIGZhbHNlKTtcbitcdFx0aXA2X2RlbF9ydF9yZWFzb24obmV0LCBydCwgZmFsc2UsIFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTik7XG4gXHRcdHJ0ID0gTlVMTDtcbiBcdH1cbiBcbkBAIC0zOTczLDcgKzM5NzMsOCBAQCBpbnQgaXA2X3JvdXRlX2FkZChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuK3N0YXRpYyBpbnQgX19pcDZfZGVsX3J0KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0XHRlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gaW5mby1cdTAwM2VubF9uZXQ7XG4gXHRzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7XG5AQCAtMzk4Niw3ICszOTg3LDcgQEAgc3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIFxuIFx0dGFibGUgPSBydC1cdTAwM2VmaWI2X3RhYmxlO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbi1cdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvKTtcbitcdGVyciA9IGZpYjZfZGVsKHJ0LCBpbmZvLCBkZWxfcmVhc29uKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBcbiBvdXQ6XG5AQCAtMzk5NCwxNCArMzk5NSwyMCBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8pXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1pbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuK2ludCBpcDZfZGVsX3J0X3JlYXNvbihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5LFxuK1x0XHQgICAgICBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4ge1xuIFx0c3RydWN0IG5sX2luZm8gaW5mbyA9IHtcbiBcdFx0Lm5sX25ldCA9IG5ldCxcbiBcdFx0LnNraXBfbm90aWZ5ID0gc2tpcF9ub3RpZnlcbiBcdH07XG4gXG4tXHRyZXR1cm4gX19pcDZfZGVsX3J0KHJ0LCBcdTAwMjZpbmZvKTtcbitcdHJldHVybiBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmluZm8sIGRlbF9yZWFzb24pO1xuK31cbitcbitpbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxuK3tcbitcdHJldHVybiBpcDZfZGVsX3J0X3JlYXNvbihuZXQsIHJ0LCBza2lwX25vdGlmeSwgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiB9XG4gXG4gc3RhdGljIGludCBfX2lwNl9kZWxfcnRfc2libGluZ3Moc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKVxuQEAgLTQwMjgsNyArNDAzNSw4IEBAIHN0YXRpYyBpbnQgX19pcDZfZGVsX3J0X3NpYmxpbmdzKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZylcbiBcbiBcdFx0XHRpZiAocnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsXG4gXHRcdFx0XHRcdCAgTlVMTCwgTlVMTCwgMCwgUlRNX0RFTFJPVVRFLFxuLVx0XHRcdFx0XHQgIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIDApIFx1MDAzYyAwKSB7XG4rXHRcdFx0XHRcdCAgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgMCxcbitcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpIFx1MDAzYyAwKSB7XG4gXHRcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRcdHNrYiA9IE5VTEw7XG4gXHRcdFx0fSBlbHNlXG5AQCAtNDA2NCwxMyArNDA3MiwxMyBAQCBzdGF0aWMgaW50IF9faXA2X2RlbF9ydF9zaWJsaW5ncyhzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcpXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWJsaW5nLCBuZXh0X3NpYmxpbmcsXG4gXHRcdFx0XHRcdCBcdTAwMjZydC1cdTAwM2VmaWI2X3NpYmxpbmdzLFxuIFx0XHRcdFx0XHQgZmliNl9zaWJsaW5ncykge1xuLVx0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8pO1xuK1x0XHRcdGVyciA9IGZpYjZfZGVsKHNpYmxpbmcsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZXJyID0gZmliNl9kZWwocnQsIGluZm8pO1xuK1x0ZXJyID0gZmliNl9kZWwocnQsIGluZm8sIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gb3V0X3VubG9jazpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRhYmxlLVx1MDAzZXRiNl9sb2NrKTtcbiBvdXRfcHV0OlxuQEAgLTQxOTYsNyArNDIwNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcdFx0XHRcdGlmICghZmliNl9pbmZvX2hvbGRfc2FmZShydCkpXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0ZXJyID0gIF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX25oX2lkKVxuQEAgLTQyMTUsNyArNDIyNCw4IEBAIHN0YXRpYyBpbnQgaXA2X3JvdXRlX2RlbChzdHJ1Y3QgZmliNl9jb25maWcgKmNmZyxcbiBcbiBcdFx0XHQvKiBpZiBnYXRld2F5IHdhcyBzcGVjaWZpZWQgb25seSBkZWxldGUgdGhlIG9uZSBob3AgKi9cbiBcdFx0XHRpZiAoY2ZnLVx1MDAzZWZjX2ZsYWdzIFx1MDAyNiBSVEZfR0FURVdBWSlcbi1cdFx0XHRcdGVyciA9IF9faXA2X2RlbF9ydChydCwgXHUwMDI2Y2ZnLVx1MDAzZWZjX25saW5mbyk7XG4rXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnQocnQsIFx1MDAyNmNmZy1cdTAwM2VmY19ubGluZm8sXG4rXHRcdFx0XHRcdFx0ICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRlcnIgPSBfX2lwNl9kZWxfcnRfc2libGluZ3MocnQsIGNmZyk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtNTczOSw2ICs1NzQ5LDcgQEAgc3RhdGljIHNpemVfdCBydDZfbmxtc2dfc2l6ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmkpXG4gXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKVxuIFx0ICAgICAgICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKSAvKiBSVEFYX0NDX0FMR08gKi9cbiBcdCAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIFJUQV9QUkVGICovXG4rXHQgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfREVMX1JFQVNPTiAqL1xuIFx0ICAgICAgICsgbmV4dGhvcF9sZW47XG4gfVxuIFxuQEAgLTU3NzUsNyArNTc4Niw3IEBAIHN0YXRpYyBpbnQgcnQ2X2ZpbGxfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0IHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4gXHRcdFx0IHN0cnVjdCBpbjZfYWRkciAqZGVzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsXG4gXHRcdFx0IGludCBpaWYsIGludCB0eXBlLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuLVx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4rXHRcdFx0IHVuc2lnbmVkIGludCBmbGFncywgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBydDZfaW5mbyAqcnQ2ID0gZHN0X3J0Nl9pbmZvKGRzdCk7XG4gXHRzdHJ1Y3QgcnQ2a2V5ICpydDZfZHN0LCAqcnQ2X3NyYztcbkBAIC01OTU0LDYgKzU5NjUsMTAgQEAgc3RhdGljIGludCBydDZfZmlsbF9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCBkc3QsIDAsIGV4cGlyZXMsIGRzdCA/IGRzdC1cdTAwM2VlcnJvciA6IDApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbitcdGlmIChkZWxfcmVhc29uICE9IFJUQV9ERUxfUkVBU09OX1VOU1BFQyBcdTAwMjZcdTAwMjZcbitcdCAgICBubGFfcHV0X3UzMihza2IsIFJUQV9ERUxfUkVBU09OLCBkZWxfcmVhc29uKSlcbitcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4rXG4gXHRpZiAobmxhX3B1dF91OChza2IsIFJUQV9QUkVGLCBJUFY2X0VYVFJBQ1RfUFJFRihydDZfZmxhZ3MpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtNjA1NSw3ICs2MDcwLDggQEAgc3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxuIFx0XHRcdFx0XHQgICAgXHUwMDI2cnQ2X2V4LVx1MDAzZXJ0NmktXHUwMDNlZHN0LCBOVUxMLCBOVUxMLCAwLFxuIFx0XHRcdFx0XHQgICAgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihkdW1wLVx1MDAzZWNiLVx1MDAzZXNrYikucG9ydGlkLFxuLVx0XHRcdFx0XHQgICAgZHVtcC1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCB3LVx1MDAzZWZsYWdzKTtcbitcdFx0XHRcdFx0ICAgIGR1bXAtXHUwMDNlY2ItXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3NlcSwgdy1cdTAwM2VmbGFncyxcbitcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXG5AQCAtNjEwMyw3ICs2MTE5LDggQEAgaW50IHJ0Nl9kdW1wX3JvdXRlKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCB2b2lkICpwX2FyZywgdW5zaWduZWQgaW50IHNraXApXG4gXHRcdFx0aWYgKHJ0Nl9maWxsX25vZGUobmV0LCBhcmctXHUwMDNlc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCxcbiBcdFx0XHRcdFx0ICAwLCBSVE1fTkVXUk9VVEUsXG4gXHRcdFx0XHRcdCAgTkVUTElOS19DQihhcmctXHUwMDNlY2ItXHUwMDNlc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgYXJnLVx1MDAzZWNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsIGZsYWdzKSkge1xuK1x0XHRcdFx0XHQgIGFyZy1cdTAwM2VjYi1cdTAwM2VubGgtXHUwMDNlbmxtc2dfc2VxLCBmbGFncyxcbitcdFx0XHRcdFx0ICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpKSB7XG4gXHRcdFx0XHRyZXR1cm4gMDtcbiBcdFx0XHR9XG4gXHRcdFx0Y291bnQrKztcbkBAIC02MzM2LDEyICs2MzUzLDE0IEBAIHN0YXRpYyBpbnQgaW5ldDZfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxuIFx0XHRcdGVyciA9IHJ0Nl9maWxsX25vZGUobmV0LCBza2IsIGZyb20sIE5VTEwsIE5VTEwsIE5VTEwsXG4gXHRcdFx0XHRcdCAgICBpaWYsIFJUTV9ORVdST1VURSxcbiBcdFx0XHRcdFx0ICAgIE5FVExJTktfQ0IoaW5fc2tiKS5wb3J0aWQsXG4tXHRcdFx0XHRcdCAgICBubGgtXHUwMDNlbmxtc2dfc2VxLCAwKTtcbitcdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDAsXG4rXHRcdFx0XHRcdCAgICBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuIFx0XHRlbHNlXG4gXHRcdFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgZnJvbSwgZHN0LCBcdTAwMjZmbDYuZGFkZHIsXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmbDYuc2FkZHIsIGlpZiwgUlRNX05FV1JPVVRFLFxuIFx0XHRcdFx0XHQgICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCxcbi1cdFx0XHRcdFx0ICAgIG5saC1cdTAwM2VubG1zZ19zZXEsIDApO1xuK1x0XHRcdFx0XHQgICAgbmxoLVx1MDAzZW5sbXNnX3NlcSwgMCxcbitcdFx0XHRcdFx0ICAgIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSAtRU5FVFVOUkVBQ0g7XG4gXHR9XG5AQCAtNjM1Nyw4ICs2Mzc2LDkgQEAgc3RhdGljIGludCBpbmV0Nl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbi1cdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3N0YXRpYyB2b2lkIF9faW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBubG1fZmxhZ3MsXG4rXHRcdFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuIHtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGluZm8tXHUwMDNlbmxfbmV0O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbkBAIC02Mzc3LDcgKzYzOTcsNyBAQCB2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbiBcdFx0Z290byBlcnJvdXQ7XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBydCwgTlVMTCwgTlVMTCwgTlVMTCwgMCxcbi1cdFx0XHQgICAgZXZlbnQsIGluZm8tXHUwMDNlcG9ydGlkLCBzZXEsIG5sbV9mbGFncyk7XG4rXHRcdFx0ICAgIGV2ZW50LCBpbmZvLVx1MDAzZXBvcnRpZCwgc2VxLCBubG1fZmxhZ3MsIGRlbF9yZWFzb24pO1xuIFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgbmVlZGVkIHNwYWNlIGdyZXcgdW5kZXIgdXMuICovXG5AQCAtNjM5OCw2ICs2NDE4LDE4IEBAIHZvaWQgaW5ldDZfcnRfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuIFx0cnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpO1xuIH1cbiBcbit2b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcbitcdFx0ICAgICB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKVxuK3tcbitcdF9faW5ldDZfcnRfbm90aWZ5KGV2ZW50LCBydCwgaW5mbywgbmxtX2ZsYWdzLCBSVEFfREVMX1JFQVNPTl9VTlNQRUMpO1xuK31cbitcbit2b2lkIGluZXQ2X3J0X2RlbF9ub3RpZnkoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuK1x0XHRcdCBlbnVtIHJ0YV9kZWxfcmVhc29uIGRlbF9yZWFzb24pXG4re1xuK1x0X19pbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbywgMCwgZGVsX3JlYXNvbik7XG4rfVxuK1xuIHZvaWQgZmliNl9ydF91cGRhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCxcbiBcdFx0ICAgIHN0cnVjdCBubF9pbmZvICppbmZvKVxuIHtcbkBAIC02NDEwLDcgKzY0NDIsOCBAQCB2b2lkIGZpYjZfcnRfdXBkYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfaW5mbyAqcnQsXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuIFx0ZXJyID0gcnQ2X2ZpbGxfbm9kZShuZXQsIHNrYiwgcnQsIE5VTEwsIE5VTEwsIE5VTEwsIDAsXG4tXHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSk7XG4rXHRcdFx0ICAgIFJUTV9ORVdST1VURSwgaW5mby1cdTAwM2Vwb3J0aWQsIHNlcSwgTkxNX0ZfUkVQTEFDRSxcbitcdFx0XHQgICAgUlRBX0RFTF9SRUFTT05fVU5TUEVDKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0LyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi9cbiBcdFx0V0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTtcbkBAIC02NDYzLDcgKzY0OTYsNyBAQCB2b2lkIGZpYjZfaW5mb19od19mbGFnc19zZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksXG4gXHR9XG4gXG4gXHRlcnIgPSBydDZfZmlsbF9ub2RlKG5ldCwgc2tiLCBmNmksIE5VTEwsIE5VTEwsIE5VTEwsIDAsIFJUTV9ORVdST1VURSwgMCxcbi1cdFx0XHQgICAgMCwgMCk7XG4rXHRcdFx0ICAgIDAsIDAsIFJUQV9ERUxfUkVBU09OX1VOU1BFQyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdC8qIC1FTVNHU0laRSBpbXBsaWVzIEJVRyBpbiBydDZfbmxtc2dfc2l6ZSgpICovXG4gXHRcdFdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS9fX2luaXRfXy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkvX19pbml0X18ucHlcbmluZGV4IGU1OGJkYmRjNThlZWEuLjM0OTM1ODg2YjZhZGYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L19faW5pdF9fLnB5XG5AQCAtMTcsNyArMTcsNyBAQCBmcm9tIC51dGlscyBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIGZkX3JlYWRfdGltZW91dCwgY21kLCBia2csIGRlZmVyLCBcXFxuICAgICB3YWl0X2ZpbGUsIHRvb2wsIHRjXG4gZnJvbSAuYnBmIGltcG9ydCBicGZfbWFwX3NldCwgYnBmX21hcF9kdW1wLCBicGZfcHJvZ19tYXBfaWRzXG4gZnJvbSAueW5sIGltcG9ydCBObEVycm9yLCBObGN0cmxGYW1pbHksIFlubEZhbWlseSwgXFxcbi0gICAgRXRodG9vbEZhbWlseSwgTmV0ZGV2RmFtaWx5LCBSdG5sRmFtaWx5LCBSdG5sQWRkckZhbWlseVxuKyAgICBFdGh0b29sRmFtaWx5LCBOZXRkZXZGYW1pbHksIFJ0bmxGYW1pbHksIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBmcm9tIC55bmwgaW1wb3J0IE5ldHNoYXBlckZhbWlseSwgRGV2bGlua0ZhbWlseSwgUFNQRmFtaWx5LCBOZXRsaW5rXG4gXG4gX19hbGxfXyA9IFtcIktTUkNcIixcbkBAIC0zNCw0ICszNCw0IEBAIF9fYWxsX18gPSBbXCJLU1JDXCIsXG4gICAgICAgICAgICBcIk5ldGRldlNpbVwiLCBcIk5ldGRldlNpbURldlwiLFxuICAgICAgICAgICAgXCJOZXRzaGFwZXJGYW1pbHlcIiwgXCJEZXZsaW5rRmFtaWx5XCIsIFwiUFNQRmFtaWx5XCIsIFwiTmxFcnJvclwiLFxuICAgICAgICAgICAgXCJZbmxGYW1pbHlcIiwgXCJFdGh0b29sRmFtaWx5XCIsIFwiTmV0ZGV2RmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLFxuLSAgICAgICAgICAgXCJObGN0cmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIk5ldGxpbmtcIl1cbisgICAgICAgICAgIFwiTmxjdHJsRmFtaWx5XCIsIFwiUnRubEFkZHJGYW1pbHlcIiwgXCJSdG5sUm91dGVGYW1pbHlcIiwgXCJOZXRsaW5rXCJdXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2xpYi9weS95bmwucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuaW5kZXggMmU1NjcwNjJhYTZjYy4uMDhkZWZmNzU2ZjI5YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9saWIvcHkveW5sLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbGliL3B5L3lubC5weVxuQEAgLTI5LDcgKzI5LDcgQEAgZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3IgYXMgZTpcbiBcbiBfX2FsbF9fID0gW1xuICAgICBcIk5sRXJyb3JcIiwgXCJObFBvbGljeVwiLCBcIk5ldGxpbmtcIiwgXCJZbmxGYW1pbHlcIiwgXCJTUEVDX1BBVEhcIixcbi0gICAgXCJFdGh0b29sRmFtaWx5XCIsIFwiUnRubEZhbWlseVwiLCBcIlJ0bmxBZGRyRmFtaWx5XCIsXG4rICAgIFwiRXRodG9vbEZhbWlseVwiLCBcIlJ0bmxGYW1pbHlcIiwgXCJSdG5sQWRkckZhbWlseVwiLCBcIlJ0bmxSb3V0ZUZhbWlseVwiLFxuICAgICBcIk5ldGRldkZhbWlseVwiLCBcIk5ldHNoYXBlckZhbWlseVwiLCBcIk5sY3RybEZhbWlseVwiLCBcIkRldmxpbmtGYW1pbHlcIixcbiAgICAgXCJQU1BGYW1pbHlcIixcbiBdXG5AQCAtNTQsNiArNTQsMTEgQEAgY2xhc3MgUnRubEFkZHJGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ3J0LWFkZHIueWFtbCcpKS5hc19wb3NpeCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE9JycsIHJlY3Zfc2l6ZT1yZWN2X3NpemUpXG4gXG4rY2xhc3MgUnRubFJvdXRlRmFtaWx5KFlubEZhbWlseSk6XG4rICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWN2X3NpemU9MCk6XG4rICAgICAgICBzdXBlcigpLl9faW5pdF9fKChTUEVDX1BBVEggLyBQYXRoKCdydC1yb3V0ZS55YW1sJykpLmFzX3Bvc2l4KCksXG4rICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYT0nJywgcmVjdl9zaXplPXJlY3Zfc2l6ZSlcbitcbiBjbGFzcyBOZXRkZXZGYW1pbHkoWW5sRmFtaWx5KTpcbiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlY3Zfc2l6ZT0wKTpcbiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKFNQRUNfUEFUSCAvIFBhdGgoJ25ldGRldi55YW1sJykpLmFzX3Bvc2l4KCksXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDBjNjdjN2MwMGQ4NDEuLmY3NGNjZDVjMmQxM2EgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtNSw3ICs1LDggQEAgaW1wb3J0IHNvY2tldFxuIGltcG9ydCBzdHJ1Y3RcbiBpbXBvcnQgdGltZVxuIGZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbi1mcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuK2Zyb20gbGliLnB5IGltcG9ydCBrc2Z0X25vdF9pbiwga3NmdF9ub3Rfbm9uZVxuK2Zyb20gbGliLnB5IGltcG9ydCBDbWRFeGl0RmFpbHVyZSwgTmV0TlMsIE5ldE5TRW50ZXIsIFJ0bmxBZGRyRmFtaWx5LCBSdG5sUm91dGVGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJ1xceGUwXFx4MDBcXHgwMFxceDAxJ1xuIElQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJ1xceGVmXFx4MDFcXHgwMVxceDAxJ1xuQEAgLTEzNCw4ICsxMzUsMTg0IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBrc2Z0X3RydWUoZlwiaW5ldCB7aWZuYW1lfSBmb3J3YXJkaW5nIG9uXCIgaW4gY21kX29iai5zdGRvdXQsXG4gICAgICAgICAgICAgICBmXCJObyAnZm9yd2FyZGluZyBvbicgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9XCIpXG4gXG4rZGVmIF9ydG5sX3JvdXRlX3N1YnNjcmliZShucyk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgIHJ0bmwgPSBSdG5sUm91dGVGYW1pbHkoKVxuKyAgICBydG5sLm50Zl9zdWJzY3JpYmUoXCJydG5sZ3JwLWlwdjYtcm91dGVcIilcbisgICAgcmV0dXJuIHJ0bmxcbitcbitcbitkZWYgX3dhaXRfcm91dGVfbnRmKHJ0bmwsIG5hbWUsIGRzdF9sZW4sIGRzdD1Ob25lLCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIlJldHVybiB0aGUgYXR0cnMgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIG5vdGlmaWNhdGlvbiwgTm9uZSBvbiB0aW1lb3V0LlwiXCJcIlxuK1xuKyAgICBmb3IgbXNnIGluIHJ0bmwucG9sbF9udGYoZHVyYXRpb249ZGVhZGxpbmUpOlxuKyAgICAgICAgaWYgbXNnWyduYW1lJ10gIT0gbmFtZTpcbisgICAgICAgICAgICBjb250aW51ZVxuKyAgICAgICAgYXR0cnMgPSBtc2dbJ21zZyddXG4rICAgICAgICBpZiBhdHRyc1sncnRtLWRzdC1sZW4nXSAhPSBkc3RfbGVuOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBpZiBkc3QgaXMgbm90IE5vbmUgYW5kIGF0dHJzLmdldCgnZHN0JykgIT0gZHN0OlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICByZXR1cm4gYXR0cnNcbisgICAgcmV0dXJuIE5vbmVcbitcbitcbitkZWYgX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCBuYW1lLCB3YW50LCBkZWFkbGluZT0xMCk6XG4rICAgIFwiXCJcIkdhdGhlciBhdHRycyBvZiBtYXRjaGluZyBub3RpZmljYXRpb25zLCBrZXllZCBieSAoZHN0X2xlbiwgZHN0KS5cIlwiXCJcbitcbisgICAgc2VlbiA9IHt9XG4rICAgIGZvciBtc2cgaW4gcnRubC5wb2xsX250ZihkdXJhdGlvbj1kZWFkbGluZSk6XG4rICAgICAgICBpZiBtc2dbJ25hbWUnXSAhPSBuYW1lOlxuKyAgICAgICAgICAgIGNvbnRpbnVlXG4rICAgICAgICBhdHRycyA9IG1zZ1snbXNnJ11cbisgICAgICAgIGtleSA9IChhdHRyc1sncnRtLWRzdC1sZW4nXSwgYXR0cnMuZ2V0KCdkc3QnKSlcbisgICAgICAgIGlmIGtleSBpbiB3YW50OlxuKyAgICAgICAgICAgIHNlZW5ba2V5XSA9IGF0dHJzXG4rICAgICAgICAgICAgaWYgbGVuKHNlZW4pID09IGxlbih3YW50KTpcbisgICAgICAgICAgICAgICAgYnJlYWtcbisgICAgcmV0dXJuIHNlZW5cbitcbitcbitkZWYgX3dyaXRlX2lwdjZfc3lzY3RsKG5hbWUsIHZhbHVlKTpcbisgICAgd2l0aCBvcGVuKGZcIi9wcm9jL3N5cy9uZXQvaXB2Ni97bmFtZX1cIiwgXCJ3XCIpIGFzIGY6XG4rICAgICAgICBmLndyaXRlKGZcInt2YWx1ZX1cXG5cIilcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2V4cGlyZWQoKSAtXHUwMDNlIE5vbmU6XG4rICAgIFwiXCJcIkFuIGV4cGlyZWQgcm91dGUgcmVwb3J0cyBSVEFfREVMX1JFQVNPTiA9PSBleHBpcmVkLlwiXCJcIlxuK1xuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zKVxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcInJvdXRlL2djX2ludGVydmFsXCIsIDIpXG4rICAgICAgICBpcChcImxpbmsgYWRkIG5hbWUgZHVtbXkxIHR5cGUgZHVtbXlcIiwgbnM9c3RyKG5zKSlcbisgICAgICAgIGlwKFwibGluayBzZXQgZGV2IGR1bW15MSB1cFwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBhZGQgMjAwMTpkYjg6Mjo6LzY0IGRldiBkdW1teTEgZXhwaXJlcyAyXCIsIG5zPXN0cihucykpXG4rXG4rICAgICAgICBhdHRycyA9IF93YWl0X3JvdXRlX250ZihydG5sLCAnZGVscm91dGUtbnRmJywgNjQsICcyMDAxOmRiODoyOjonLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVhZGxpbmU9MTUpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgdGhlIGV4cGlyZWQgcm91dGVcIilcbisgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgIGtzZnRfZXEoYXR0cnMuZ2V0KCdkZWwtcmVhc29uJyksICdleHBpcmVkJylcbitcbitcbitkZWYgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgbGlmZXRpbWUsIHJpbz1Ob25lLCBwaW89Tm9uZSk6XG4rICAgIFwiXCJcIlRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIElDTVB2NiBjaGVja3N1bSBvbiByYXcgSUNNUHY2IHNvY2tldHMuXCJcIlwiXG4rXG4rICAgICMgdHlwZSwgY29kZSwgY2tzdW0sIGhvcCBsaW1pdCwgZmxhZ3MsIHJvdXRlciBsaWZldGltZSxcbisgICAgIyByZWFjaGFibGUgdGltZSwgcmV0cmFucyB0aW1lclxuKyAgICByYSA9IHN0cnVjdC5wYWNrKCchQkJIQkJISUknLCAxMzQsIDAsIDAsIDY0LCAwLCBsaWZldGltZSwgMCwgMClcbisgICAgaWYgcmlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCByaW9fbGlmZXRpbWUgPSByaW9cbisgICAgICAgICMgUkZDIDQxOTEgcm91dGUgaW5mb3JtYXRpb24gb3B0aW9uLCAvNjQgcHJlZml4ICg4IGJ5dGVzKVxuKyAgICAgICAgcmEgKz0gc3RydWN0LnBhY2soJyFCQkJCSScsIDI0LCAyLCBwbGVuLCAwLCByaW9fbGlmZXRpbWUpXG4rICAgICAgICByYSArPSBzb2NrZXQuaW5ldF9wdG9uKHNvY2tldC5BRl9JTkVUNiwgcHJlZml4KVs6OF1cbisgICAgaWYgcGlvIGlzIG5vdCBOb25lOlxuKyAgICAgICAgcHJlZml4LCBwbGVuLCB2YWxpZF9sZnQgPSBwaW9cbisgICAgICAgICMgUkZDIDQ4NjEgcHJlZml4IGluZm9ybWF0aW9uIG9wdGlvbiwgb24tbGluayBvbmx5IChMIHNldCwgQSBjbGVhcilcbisgICAgICAgIHJhICs9IHN0cnVjdC5wYWNrKCchQkJCQklJSScsIDMsIDQsIHBsZW4sIDB4ODAsIHZhbGlkX2xmdCwgMCwgMClcbisgICAgICAgIHJhICs9IHNvY2tldC5pbmV0X3B0b24oc29ja2V0LkFGX0lORVQ2LCBwcmVmaXgpXG4rICAgIHNvY2suc2VuZHRvKHJhLCAoJ2ZmMDI6OjEnLCAwLCAwLCBpZmluZGV4KSlcbitcbitcbitkZWYgX3JhX3JvdXRlcl9zb2NrKG5zX3IsIGlmbmFtZSk6XG4rICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19SQVcsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuSVBQUk9UT19JQ01QVjYpXG4rICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfTVVMVElDQVNUX0hPUFMsIDI1NSlcbisgICAgICAgIHJldHVybiBzb2NrLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoaWZuYW1lKVxuK1xuK1xuK2RlZiBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCB3YW50LCAqKnJhX29wdHMpOlxuKyAgICBcIlwiXCJcbisgICAgU2VuZGluZyBmYWlscyB3aXRoIEVBRERSTk9UQVZBSUwgdW50aWwgdGhlIHJvdXRlcidzIGxpbmstbG9jYWxcbisgICAgYWRkcmVzcyBwYXNzZXMgREFELCBzbyByZXRyeS5cbisgICAgXCJcIlwiXG4rXG4rICAgIHNlZW4gPSB7fVxuKyAgICBmb3IgXyBpbiByYW5nZSgxMCk6XG4rICAgICAgICB0cnk6XG4rICAgICAgICAgICAgX3NlbmRfcmEoc29jaywgaWZpbmRleCwgKipyYV9vcHRzKVxuKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6XG4rICAgICAgICAgICAgdGltZS5zbGVlcCgwLjIpXG4rICAgICAgICAgICAgY29udGludWVcbisgICAgICAgIHNlZW4udXBkYXRlKF9jb2xsZWN0X3JvdXRlX250ZnMocnRubCwgJ25ld3JvdXRlLW50ZicsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgLSBzZXQoc2Vlbi5rZXlzKCkpLCBkZWFkbGluZT0yKSlcbisgICAgICAgIGlmIGxlbihzZWVuKSA9PSBsZW4od2FudCk6XG4rICAgICAgICAgICAgYnJlYWtcbisgICAgcmV0dXJuIHNlZW5cbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX3JhX3dpdGhkcmF3bigpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIFJvdXRlcyB3aXRoZHJhd24gYnkgYSB6ZXJvLWxpZmV0aW1lIFJBIChyb3V0ZXIgbGlmZXRpbWUsIFJGQyA0ODYxXG4rICAgIFBJTywgUkZDIDQxOTEgUklPKSByZXBvcnQgUlRBX0RFTF9SRUFTT04gPT0gcmEtd2l0aGRyYXduLlxuKyAgICBcIlwiXCJcbitcbisgICAgIyAocnRtLWRzdC1sZW4sIGRzdCk7IHRoZSBkZWZhdWx0IHJvdXRlIGNhcnJpZXMgbm8gUlRBX0RTVFxuKyAgICByb3V0ZXMgPSB7KDAsIE5vbmUpLCAoNjQsICcyMDAxOmRiODo2OjonKSwgKDY0LCAnMjAwMTpkYjg6NTo6Jyl9XG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuc19oLCBOZXROUygpIGFzIG5zX3I6XG4rICAgICAgICBpcChmXCJsaW5rIGFkZCB2ZXRoMCBuZXRucyB7bnNfaH0gdHlwZSB2ZXRoIHBlZXIgbmFtZSB2ZXRoMSBuZXRucyB7bnNfcn1cIilcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuKyAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhXCIsIDIpXG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9mb3J3YXJkaW5nXCIsIDApXG4rICAgICAgICAgICAgdHJ5OlxuKyAgICAgICAgICAgICAgICBfd3JpdGVfaXB2Nl9zeXNjdGwoXCJjb25mL3ZldGgwL2FjY2VwdF9yYV9ydF9pbmZvX21heF9wbGVuXCIsIDY0KVxuKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cIilcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfcikpOlxuKyAgICAgICAgICAgICMgc2tpcCBEQUQgc28gdGhlIHJvdXRlcidzIGxpbmstbG9jYWwgc291cmNlIGlzIHVzYWJsZSByaWdodCBhd2F5XG4rICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMS9hY2NlcHRfZGFkXCIsIDApXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMCB1cFwiLCBucz1zdHIobnNfaCkpXG4rICAgICAgICBpcChcImxpbmsgc2V0IGRldiB2ZXRoMSB1cFwiLCBucz1zdHIobnNfcikpXG4rXG4rICAgICAgICBydG5sID0gX3J0bmxfcm91dGVfc3Vic2NyaWJlKG5zX2gpXG4rICAgICAgICBzb2NrLCBpZmluZGV4ID0gX3JhX3JvdXRlcl9zb2NrKG5zX3IsIFwidmV0aDFcIilcbitcbisgICAgICAgIHNlZW4gPSBfcmFfYWR2ZXJ0aXNlX3JvdXRlcyhydG5sLCBzb2NrLCBpZmluZGV4LCByb3V0ZXMsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlmZXRpbWU9MTgwMCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgNjAwKSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgNjAwKSlcbisgICAgICAgIGtzZnRfZXEoc2V0KHNlZW4pLCByb3V0ZXMsIFwibm90IGFsbCBSQSByb3V0ZXMgd2VyZSBpbnN0YWxsZWRcIilcbisgICAgICAgIGlmIHNldChzZWVuKSAhPSByb3V0ZXM6XG4rICAgICAgICAgICAgcmV0dXJuXG4rXG4rICAgICAgICBfc2VuZF9yYShzb2NrLCBpZmluZGV4LCAwLCByaW89KCcyMDAxOmRiODo1OjonLCA2NCwgMCksXG4rICAgICAgICAgICAgICAgICBwaW89KCcyMDAxOmRiODo2OjonLCA2NCwgMCkpXG4rICAgICAgICBzZWVuID0gX2NvbGxlY3Rfcm91dGVfbnRmcyhydG5sLCAnZGVscm91dGUtbnRmJywgcm91dGVzKVxuKyAgICAgICAgZm9yIGtleSBpbiByb3V0ZXM6XG4rICAgICAgICAgICAgYXR0cnMgPSBzZWVuLmdldChrZXkpXG4rICAgICAgICAgICAga3NmdF9ub3Rfbm9uZShhdHRycywgZlwibm8gUlRNX0RFTFJPVVRFIGZvciB7a2V5fVwiKVxuKyAgICAgICAgICAgIGlmIGF0dHJzIGlzIG5vdCBOb25lOlxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGF0dHJzLmdldCgnZGVsLXJlYXNvbicpLCAncmEtd2l0aGRyYXduJylcbitcbitcbitkZWYgaXB2Nl9yb3V0ZV9kZWxfcmVhc29uX2Fic2VudCgpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIEEgZGVsZXRpb24gcGF0aCB0aGF0IHJlY29yZHMgbm8gY2F1c2UgKGhlcmUgYSB1c2Vyc3BhY2UgcmVxdWVzdClcbisgICAgbXVzdCBub3QgY2FycnkgUlRBX0RFTF9SRUFTT04gYXQgYWxsLlxuKyAgICBcIlwiXCJcbitcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuKyAgICAgICAgcnRubCA9IF9ydG5sX3JvdXRlX3N1YnNjcmliZShucylcbisgICAgICAgIGlwKFwibGluayBhZGQgbmFtZSBkdW1teTEgdHlwZSBkdW1teVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCJsaW5rIHNldCBkZXYgZHVtbXkxIHVwXCIsIG5zPXN0cihucykpXG4rICAgICAgICBpcChcIi02IHJvdXRlIGFkZCAyMDAxOmRiODoxOjovNjQgZGV2IGR1bW15MVwiLCBucz1zdHIobnMpKVxuKyAgICAgICAgaXAoXCItNiByb3V0ZSBkZWwgMjAwMTpkYjg6MTo6LzY0IGRldiBkdW1teTFcIiwgbnM9c3RyKG5zKSlcbitcbisgICAgICAgIGF0dHJzID0gX3dhaXRfcm91dGVfbnRmKHJ0bmwsICdkZWxyb3V0ZS1udGYnLCA2NCwgJzIwMDE6ZGI4OjE6OicpXG4rICAgICAgICBrc2Z0X25vdF9ub25lKGF0dHJzLCBcIm5vIFJUTV9ERUxST1VURSBmb3IgMjAwMTpkYjg6MTo6LzY0XCIpXG4rICAgICAgICBpZiBhdHRycyBpcyBub3QgTm9uZTpcbisgICAgICAgICAgICBrc2Z0X25vdF9pbignZGVsLXJlYXNvbicsIGF0dHJzLFxuKyAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlciBkZWxldGlvbiBtdXN0IG5vdCBjYXJyeSBkZWwtcmVhc29uXCIpXG4rXG4rXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnksXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fZXhwaXJlZCxcbisgICAgICAgICAgICAgIGlwdjZfcm91dGVfZGVsX3JlYXNvbl9yYV93aXRoZHJhd24sXG4rICAgICAgICAgICAgICBpcHY2X3JvdXRlX2RlbF9yZWFzb25fYWJzZW50XSlcbiAgICAga3NmdF9leGl0KClcbiBcbiBpZiBfX25hbWVfXyA9PSBcIl9fbWFpbl9fXCI6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxODo1OTo1Ny45OTMzNDA2MDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDc5MjQ1MjM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogSVB2NiBSb3V0ZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgd2FycmFudHMgYSBmdXp6aW5nIGNhbXBhaWduLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlLCBgUlRBX0RFTF9SRUFTT05gLCBzcGVjaWZpY2FsbHkgZm9yIElQdjYgcm91dGVzLCBhbmQgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIGRvdWJ0LiBUaGUga2VybmVsIGZvbGtzIGFyZSBzdGFydGluZyB0byBwYXNzIHNvbWUgbW9yZSBpbmZvcm1hdGlvbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBtb2RpZmllcyBzZXZlcmFsIGNvcmUgZnVuY3Rpb25zIGxpa2UgYGZpYjZfZGVsYCBhbmQgYGlwNl9kZWxfcnRgIHRvIGFjY2VwdCBhIGBkZWxfcmVhc29uYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGh1Z2UgYW5kIHdoZXJlIG1vc3Qgb2YgdGhlIHdvcmsgaXMgZ29pbmcgdG8gYmUuIEl0IHRoZW4gY2FzY2FkZXMgb3V0d2FyZCB0byB1cGRhdGUgdGhlIG5vdGlmaWNhdGlvbiBtZWNoYW5pc21zLCBgcnQ2X2ZpbGxfbm9kZWAgYW5kIGBpbmV0Nl9ydF9ub3RpZnlgIHNvIHRoYXQgdGhleSBhY3R1YWxseSB1c2UgdGhpcyBuZXcgYXR0cmlidXRlLiBUaGV5J3JlIHBhc3NpbmcgYSBkZWxldGUgcmVhc29uIG5vdywgYW5kIHRoZSBjb25kaXRpb25zIGFyZSBkZWZpbmVkLlxuXG5Fc3NlbnRpYWxseSwgdGhleSdyZSBzZXR0aW5nIHRoZSBkZWxldGUgcmVhc29uIGJhc2VkIG9uIHRoZSBjYXVzZS4gRXhwaXJlZCByb3V0ZXMgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBnZXQgYFJUQV9ERUxfUkVBU09OX0VYUElSRURgLiBSQSB3aXRoZHJhd2FscyBnZXQgYFJUQV9ERUxfUkVBU09OX1JBX1dJVEhEUkFXTmAuIEV2ZXJ5dGhpbmcgZWxzZSBkZWZhdWx0cyB0byBgUlRBX0RFTF9SRUFTT05fVU5TUEVDYC5cblxuU28sIHRoZSBrZXkgaGVyZSBpcyBub3QganVzdCB0aGF0IGl0J3MgYSBuZXcgYXR0cmlidXRlLCBidXQgdGhhdCBpdCdzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgSVB2NiByb3V0aW5nIGxvZ2ljLiBUaGlzIGlzIGRlZmluaXRlbHkgZnV6ei13b3J0aHkuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGFjdHVhbCBmdW5jdGlvbnMgd2UgbmVlZCB0byB0YXJnZXQuIGBmaWI2X2RlbGAgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgYnV0IGFzIGl0J3MgaW50ZXJuYWwsIHdlJ2xsIGhhdmUgdG8gZmluZCB0aGUgZW50cnkgcG9pbnRzLlxuXG5UaGUgdHJpZ2dlciBwb2ludHMgZm9yIGZ1enppbmcgYXJlLCBnZW5lcmFsbHk6XG4qICAgTmV0bGluayByb3V0ZSBkZWxldGlvbiAod2hlcmUgd2UnbGwgYmUgZGVhbGluZyB3aXRoIGBSVEFfREVMX1JFQVNPTl9VTlNQRUNgIG1vc3RseSwgdGhvdWdoIGl0IHdpbGwgZXhlcmNpc2UgdGhlIHBhdGhzKVxuKiAgIElQdjYgcm91dGUgZ2FyYmFnZSBjb2xsZWN0aW9uLCB2aWEgYGZpYjZfZ2NfdGFibGVgLCBhbmQgYWxzbywgcHJvYmFibHkgYGZpYjZfcnVuX2djYFxuKiAgIFJBIHByb2Nlc3Npbmc6IGBhZGRyY29uZl9wcmVmaXhfcmN2YCwgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLCBgcnQ2X3JvdXRlX3JjdmAuIFRoaXMgbG9va3MganVpY3kuXG4qICAgTmV0bGluayByb3V0ZSBkdW1wL2dldCwgYnV0IGl0J3Mgbm90IHRoZSBwcmltYXJ5IGZvY3VzLlxuXG5UaGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZTogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBydDZfcm91dGVfcmN2YCwgYGZpYjZfZGVsYCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYHJ0Nl9maWxsX25vZGVgLCBgaW5ldDZfcnRfbm90aWZ5YCwgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmU6XG4qICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgXG4qICAgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgXG4qICAgYHJ0Nl9yb3V0ZV9yY3ZgXG4qICAgYGZpYjZfZ2NfdGFibGVgIChhbmQgbGV0J3MgY2hlY2sgZm9yIGBmaWI2X3J1bl9nY2AgYXMgd2VsbCkuXG4qICAgYGluZXQ2X3J0bV9kZWxyb3V0ZWAgaXMgYW4gaW50ZXJlc3Rpbmcgb25lIGJlY2F1c2UgaXQgdHJpZ2dlcnMgYGlwNl9yb3V0ZV9kZWxgIHdoaWNoIGNhbGxzIGBfX2lwNl9kZWxfcnRgLlxuXG5JIHdpbGwgZG91YmxlLWNoZWNrIHdoZXRoZXIgYGZpYjZfZ2NfdGFibGVgIGlzIHN0YXRpYywgb3IgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSwgYW5kIHdoZXRoZXIgYHJ0Nl9yb3V0ZV9yY3ZgIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTYsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDowOC43ODU3OTU4MjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4OTA1OTA5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIHJ0Nl9yb3V0ZV9yY3ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjA4PXZvaWQgcnQ2X3B1cmdlX2RmbHRfcm91dGVycyhzdHJ1Y3QgbmV0ICpuZXQpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTIwOS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoyMTA6aW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMTEtXFx0XFx0ICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3YWRkcik7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTk2Mz1zdGF0aWMgYm9vbCBydDZfaXNfZ3dfb3Jfbm9uZXh0aG9wKGNvbnN0IHN0cnVjdCBmaWI2X3Jlc3VsdCAqcmVzKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy05NjktI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9yb3V0ZS5jOjk3MDppbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxcbm5ldC9pcHY2L3JvdXRlLmMtOTcxLVxcdFxcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjExLjQ3NDg2MDA1NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODE2MDI1NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlJvdXRpbmcgVGFibGUgYW5kIE5laWdoYm9yIERpc2NvdmVyeSBSZXZpZXcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBydDZfcm91dGVfcmN2YCAtIHRoYXQncyBkZWZpbml0ZWx5IGEgbm9uLXN0YXRpYyBmdW5jdGlvbiwgbWVhbmluZyBpdCdzIGV4dGVybmFsbHkgdmlzaWJsZSBhbmQgcG90ZW50aWFsbHkgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBvciBldmVuIG1vZHVsZXMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIEknbSBhc3Nlc3NpbmcgaXRzIGltcGFjdCBvbiBvdGhlciBtb2R1bGVzIGFuZCB0aGUgb3ZlcmFsbCBzeXN0ZW0uIEFuZCBgYWRkcmNvbmZfcHJlZml4X3JjdmAuLi5zYW1lIGRlYWwuIE5vbi1zdGF0aWMsIHNvIHRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5LiBPa2F5LCBub3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUsIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIuXG5cbk5vdywgYG5kaXNjX3JvdXRlcl9kaXNjb3ZlcnlgLi4udGhhdCBvbmUgaXMgcmluZ2luZyBhIGJlbGwuIElzIHRoYXQgc3RhdGljIG9yIG5vdD8gSSAqdGhpbmsqIGl0IG1pZ2h0IGJlLCBidXQgSSBzaG91bGQgdmVyaWZ5IHRoYXQuIEl0J3MgY3J1Y2lhbCwgYmVjYXVzZSBhIHN0YXRpYyBmdW5jdGlvbiBpbXBsaWVzIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBtZWFuaW5nIGl0J3MgcHJpbWFyaWx5IHVzZWQgd2l0aGluIHRoZSBkZWZpbmluZyBzb3VyY2UgZmlsZSwgcmlnaHQ/IElmIGl0J3Mgc3RhdGljLCB0aGVuIGNoYW5nZXMgdG8gaXQgYXJlIGxlc3MgbGlrZWx5IHRvIHJpcHBsZSBvdXQgYW5kIGhhdmUgd2lkZS1yYW5naW5nIGNvbnNlcXVlbmNlcyBhY3Jvc3MgdGhlIGVudGlyZSBrZXJuZWwgb3IgYWZmZWN0IGEgbW9kdWxlLCBzbyBpdCdzIHByb2JhYmx5IHNhZmUgYW5kIHdpbGwgcmVtYWluIGxhcmdlbHkgdGhlIHNhbWUuIEJ1dCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgYWx3YXlzIGJlc3QgdG8gaGF2ZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBhbnkgZnVuY3Rpb24geW91J3JlIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2NzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoxNS41NTY0NjUwODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMjU2MTM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfHN0YXRpYykuKiBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L25kaXNjLmM9MTE4Mj1zdGF0aWMgdm9pZCBuZGlzY19yYV91c2Vyb3B0KHN0cnVjdCBza19idWZmICpyYSwgc3RydWN0IG5kX29wdF9oZHIgKm9wdClcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMTIzMC1cXG5uZXQvaXB2Ni9uZGlzYy5jOjEyMzE6c3RhdGljIGVudW0gc2tiX2Ryb3BfcmVhc29uIG5kaXNjX3JvdXRlcl9kaXNjb3Zlcnkoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9uZGlzYy5jLTEyMzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoxOC40ODkwNTE0MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzg4Nzc2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipBbmFseXppbmcgdGhlIE5ldHdvcmsgRGlzY292ZXJ5IFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAg4oCTIGl0J3Mgc3RhdGljLCByaWdodD8gVGhhdCBtZWFucyBpdHMgYmVoYXZpb3IgaXMgcHJldHR5IHdlbGwtZGVmaW5lZCwgYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggc29tZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIGNvbXBsZXggYmVhc3QuIFRoYXQncyBnb29kIHRvIGtub3cuIFRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHBsYWNlIHdoZXJlIHRoaW5ncyBraWNrIG9mZiwgaXMgYG5kaXNjX3JjdmAuIFNvLCB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXTigJlzIHRoZSBzdGFydGluZyBndW4gZm9yIHRoZSB3aG9sZSBwcm9jZXNzLiBMZXQncyBkaWcgaW50byBgbmRpc2NfcmN2YCBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWwgZGlzY292ZXJ5IGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE0OSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjIxLjg3NzgzMDA1NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA4NzI1MDM3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIG5kaXNjX3JjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDA6MjQuMjg2NTY1ODA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0MjEyMDAyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgSVB2NiBOZWlnaGJvcmhvb2QgRGlzY292ZXJ5IENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBOZWlnaGJvcmhvb2QgRGlzY292ZXJ5IHN0dWZmIHdpdGhpbiB0aGUgSVB2NiBzdGFjay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG5kaXNjX3JjdmAgcmVzaWRlcy4gSXQncyBvZnRlbiBlYXN5IHRvIG1pc3MgY3J1Y2lhbCBkZXRhaWxzIHdpdGhpbiBhIGxhcmdlIGNvZGViYXNlLiBNeSBpbml0aWFsIHNlYXJjaCBkaWRuJ3QgeWllbGQgYW4gaW1tZWRpYXRlIGFuc3dlciwgc28gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIHJlZmluZSBteSBzZWFyY2ggdG8gZmluZCB3aGVyZSBgbmRpc2NfcmN2YCBpcyBsb2NhdGVkLiBMZXQncyBzZWUuLi4gQWgtaGEhIEl0IGxvb2tzIGxpa2UgaXQncyB0dWNrZWQgYXdheSBpbiBgbmV0L2lwdjYvbmRpc2MuY2AuIFRoYXQncyBwcmVjaXNlbHkgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIElQdjYgbmVpZ2hib3IgZGlzY292ZXJ5IGxvZ2ljLiBHb29kLiBOb3cgdGhhdCBJIGtub3cgdGhlIGxvY2F0aW9uLCBJIGNhbiBzdGFydCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmIGFuZCBpdHMgc3Vycm91bmRpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoyNy42Mjg2ODc0NzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTg1ODk0MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmRpc2NfcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25kaXNjLmg9NDA0PXZvaWQgbmRpc2NfY2xlYW51cCh2b2lkKTtcXG5pbmNsdWRlL25ldC9uZGlzYy5oLTQwNS1cXG5pbmNsdWRlL25ldC9uZGlzYy5oOjQwNjplbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvbmRpc2MuaC00MDctXFxuLS1cXG5uZXQvaXB2Ni9pY21wLmM9MTEwMT1zdGF0aWMgaW50IGljbXB2Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY2L2ljbXAuYy0xMTkyLVxcdGNhc2UgTkRJU0NfUkVESVJFQ1Q6XFxubmV0L2lwdjYvaWNtcC5jOjExOTM6XFx0XFx0cmVhc29uID0gbmRpc2NfcmN2KHNrYik7XFxubmV0L2lwdjYvaWNtcC5jLTExOTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvaXB2Ni9uZGlzYy5jPTE3OTE9c3RhdGljIGJvb2wgbmRpc2Nfc3VwcHJlc3NfZnJhZ19uZGlzYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xODA0LVxcbm5ldC9pcHY2L25kaXNjLmM6MTgwNTplbnVtIHNrYl9kcm9wX3JlYXNvbiBuZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2Ni9uZGlzYy5jLTE4MDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDoyOS4wODcyODY0NzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NzY0NTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBTdGF0aWMgRGVjbGFyYXRpb24gb2YgUmVsZXZhbnQgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLiBNeSBpbml0aWFsIGh1bmNoIHdhcyBjb3JyZWN0OiBgbmRpc2NfcmN2YCBpcyBpbmRlZWQgKm5vdCogYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgY2hlY2tzIG91dC4gQnV0LCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGFib3V0IGBhZGRyY29uZl9wcmVmaXhfcmN2YD8gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBkZWNsYXJhdGlvbiBzdGF0dXMgb2YgdGhhdCBvbmUgYXMgd2VsbCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSXQncyBpbXBvcnRhbnQgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZXNlIHRvIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU5MDgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDozMi4yODQ5MzQ2MzZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjIwMzc4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZCkuKiBhZGRyY29uZl9wcmVmaXhfcmN2XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2FkZHJjb25mLmg9MTUzPXZvaWQgYWRkcmNvbmZfYWRkX2xpbmtsb2NhbChzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0xNTUtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDoxNTY6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmluY2x1ZGUvbmV0L2FkZHJjb25mLmgtMTU3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcHJlZml4X2luZm8gKnBpbmZvLFxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaD0yODI9c3RhdGljIGlubGluZSBib29sIGlwdjZfaXNfbWxkKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBpbnQgb2Zmc2V0KVxcbi0tXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDMtXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaDozMDQ6dm9pZCBhZGRyY29uZl9wcmVmaXhfcmN2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuaW5jbHVkZS9uZXQvYWRkcmNvbmYuaC0zMDUtXFx0XFx0XFx0IHU4ICpvcHQsIGludCBsZW4sIGJvb2wgc2xsYW8pO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0yNjg5PXN0YXRpYyBib29sIGlzX2FkZHJfbW9kZV9nZW5lcmF0ZV9zdGFibGUoc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5NC1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI2OTU6aW50IGFkZHJjb25mX3ByZWZpeF9yY3ZfYWRkX2FkZHIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjY5Ni1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHByZWZpeF9pbmZvICpwaW5mbyxcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9Mjc5Nj1FWFBPUlRfU1lNQk9MX0dQTChhZGRyY29uZl9wcmVmaXhfcmN2X2FkZF9hZGRyKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI3OTctXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyNzk4OnZvaWQgYWRkcmNvbmZfcHJlZml4X3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLCBib29sIHNsbGFvKVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc5OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjM0LjYwNjk3NjQxNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODY0NDc3NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBJUFY2IFJvdXRpbmcgSXNzdWVzKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBJJ20gZGlnZ2luZyBpbnRvIHNvbWV0aGluZyByZWxhdGVkIHRvIElQdjYgcm91dGluZy4uLiBzcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBhZGRyY29uZl9wcmVmaXhfcmN2YC4gVGhlIGltbWVkaWF0ZSBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0J3MgKm5vdCogZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCByYWlzZXMgYSBmbGFnLiBIbW0sIHRoYXQncyBub3Qgd2hhdCBJJ2QgZXhwZWN0IGdpdmVuIGl0cyByb2xlLCBwb3RlbnRpYWxseSBpbmRpY2F0aW5nIGJyb2FkZXIgc2NvcGUgdGhhbiBtaWdodCBiZSBpbnRlbmRlZC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLCB0aGlzIGNvdWxkIGJlIGltcG9ydGFudCBkb3duIHRoZSBsaW5lLlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgdGhlIGltcGFjdCBvbiBgaXA2X2RlbF9ydGAgYW5kLCBzcGVjaWZpY2FsbHksIGBpcDZfZGVsX3J0X3JlYXNvbmAuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhbnkgaW50ZXJjb25uZWN0ZWRuZXNzIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zIHJlZ2FyZGluZyB0aGVpciBiZWhhdmlvciByZWdhcmRpbmcgcm91dGUgZGVsZXRpb24gYW5kIHJlYXNvbi4gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgdW5pbnRlbmRlZCBzaWRlLWVmZmVjdHMgb3IgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlbT8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGRhdGEgZmxvd3MgaW4gdGhpcyBzcGFjZSB0byB1bmRlcnN0YW5kIGlmIGBhZGRyY29uZl9wcmVmaXhfcmN2YCBpcyBwbGF5aW5nIG5pY2Ugd2l0aCB0aGVtLiBQZXJoYXBzIHRoZSBwcm9ibGVtIGlzbid0IGlzb2xhdGVkLCBhbmQgdGhleSByZWxhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTU3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDA6MzguNDcxNDU2MDU5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA1OTQ0MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogaXA2X2RlbF9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9pcDZfcm91dGUuaD0xMjg9aW50IGlwNl9pbnNfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oLTEyOS0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaDoxMzA6aW50IGlwNl9kZWxfcnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnkpO1xcbmluY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oOjEzMTppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpmNmksIGJvb2wgc2tpcF9ub3RpZnksXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMTMyLVxcdFxcdCAgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTM5NzY9c3RhdGljIGludCBfX2lwNl9kZWxfcnQoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy0zOTk3LVxcbm5ldC9pcHY2L3JvdXRlLmM6Mzk5ODppbnQgaXA2X2RlbF9ydF9yZWFzb24oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmliNl9pbmZvICpydCwgYm9vbCBza2lwX25vdGlmeSxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTM5OTktXFx0XFx0ICAgICAgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy00MDA4LVxcbm5ldC9pcHY2L3JvdXRlLmM6NDAwOTppbnQgaXA2X2RlbF9ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBib29sIHNraXBfbm90aWZ5KVxcbm5ldC9pcHY2L3JvdXRlLmMtNDAxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjQwLjc3NzQwNjE4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ3OTIwMTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggbmV0d29yayByb3V0aW5nOlxuXG4qKkFuYWx5emluZyBJUHY2IFJvdXRlIERlbGV0aW9uIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGlwNl9kZWxfcnRgIGFuZCBgaXA2X2RlbF9ydF9yZWFzb25gIGFyZSAqbm90KiBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEl0IHN1Z2dlc3RzIHRoYXQgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIGV4cG9zZWQsIHBlcmhhcHMgdXNlZCBieSBvdGhlciBtb2R1bGVzIG9yIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIHJvdXRpbmcgdGFibGUgbWFuYWdlbWVudC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgZm9yIHVzYWdlIG9yIGNhbGwgc2l0ZXMuIE1vcmUgY29udGV4dCBpcyByZXF1aXJlZC5cblxuQnV0IHRoYXQgbWFrZXMgbWUgdGhpbmssIHdoYXQgYWJvdXQgdGhlIFJUTV9ERUxST1VURSBoYW5kbGVyIGZvciBJUHY2PyBNeSB1bmRlcnN0YW5kaW5nIGlzLCBgaW5ldDZfcnRtX2RlbHJvdXRlYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGNhbGxlZCB3aGVuIGEgcm91dGUgaXMgZGVsZXRlZCB2aWEgdGhlIHJvdXRpbmcgbWVzc2FnZSBBUEkuIEFyZSBgaXA2X2RlbF9ydGAgYW5kIGBpcDZfZGVsX3J0X3JlYXNvbmAgY2FsbGVkICp3aXRoaW4qIHRoYXQgZnVuY3Rpb24sIG9yIGFyZSB0aGV5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZT8gSXMgdGhlcmUgYW4gaW50ZXJhY3Rpb24gdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGluZyBoaWVyYXJjaHkuIFRoaXMgbG9va3MgbGlrZSBhIHBvdGVudGlhbGx5IGNyaXRpY2FsIHNlY3Rpb24gb2YgdGhlIElQdjYgcm91dGluZyBpbXBsZW1lbnRhdGlvbiB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo0NC4zMjUzMjg0MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTg1OTczOTAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogaW5ldDZfcnRtX2RlbHJvdXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo0Ni42ODM5MzE3MjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcxMjA3NTM2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSVB2NiBSb3V0ZSBEZWxldGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5IbW0sIHNvIHRoZXkncmUgdGFsa2luZyBhYm91dCByZW1vdmluZyBhIHJvdXRlIGluIElQdjYuIExldCBtZSBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bmN0aW9uIG5hbWUgY29ycmVjdC4gQWgsIHllcywgdGhhdCByaW5ncyBhIGJlbGwuIEl0IGxvb2tzIGxpa2Ugd2UncmUgemVyb2luZyBpbiBvbiBgaW5ldDZfcnRtX2RlbHJvdXRlYC4gR29vZC4gTm93IEkgbmVlZCB0byByZW1lbWJlciBleGFjdGx5IHdoZXJlIHRoYXQgbGl2ZXMuLi4gQWgsIHllcywgYG5ldC9pcHY2L3JvdXRlLmNgLiBPZiBjb3Vyc2UuIFRoYXQncyB3aGVyZSBhbGwgdGhlIElQdjYgcm91dGluZyBsb2dpYyByZXNpZGVzLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgb3BlcmF0aW9uLCBvciBwb3RlbnRpYWxseSBhIGNhbiBvZiB3b3JtcywgZGVwZW5kaW5nIG9uIHdoYXQgZWxzZSBpcyBnb2luZyBvbiBpbiB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgdGhlIGFkamFjZW50IGZ1bmN0aW9ucyBpbiB0aGF0IGZpbGUsIGFzIHdlbGwgYXMgdGhlIHJlbGF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGRldGVybWluZSB3aGF0IG1pZ2h0IGNhdXNlIGFueSBjb21wbGV4aXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU5MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjUwLjM5NjAwOTMwNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzI0NDc5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9ydG1fZGVscm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz01NjAyPXN0YXRpYyBpbnQgaXA2X3JvdXRlX211bHRpcGF0aF9kZWwoc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTU2NDEtXFxubmV0L2lwdjYvcm91dGUuYzo1NjQyOnN0YXRpYyBpbnQgaW5ldDZfcnRtX2RlbHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L3JvdXRlLmMtNTY0My1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTY5MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIGlwNl9yb3V0ZV9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0X29yX21vZHVsZSA9IHtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyMC1cXHR7Lm93bmVyID0gVEhJU19NT0RVTEUsIC5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9ERUxST1VURSxcXG5uZXQvaXB2Ni9yb3V0ZS5jOjY5MjE6XFx0IC5kb2l0ID0gaW5ldDZfcnRtX2RlbHJvdXRlLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRH0sXFxubmV0L2lwdjYvcm91dGUuYy02OTIyLVxcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUEZfSU5FVDYsIC5tc2d0eXBlID0gUlRNX0dFVFJPVVRFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo1MS45MDMyNjEyMjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3NDMxNjAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZyBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBSb3V0ZSBNYW5hZ2VtZW50IEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoZSBJUHY2IHJvdXRlIG1hbmFnZW1lbnQgY29kZS4gSSBub3RpY2VkIGBpbmV0Nl9ydG1fZGVscm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIFRoYXQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgb25seSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGlzIHNwZWNpZmljIG1vZHVsZS4gSXQncyBub3QgZGVzaWduZWQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZS5cblxuVGhhdCB0aGVuIGdvdCBtZSB0aGlua2luZy4uLiB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYGluZXQ2X3J0bV9nZXRyb3V0ZWA/IElzIGl0IGFsc28gc3RhdGljLCBvciBpcyBpdCBleHBvc2VkIGluIGEgd2F5IHRoYXQgYWxsb3dzIGV4dGVybmFsIGFjY2Vzcz8gSWYgYGRlbHJvdXRlYCBpcyBzdGF0aWMsIGl0IGdpdmVzIG1lIGNsdWVzIGFib3V0IGhvdyB0aGUgbWFpbnRhaW5lcnMgYXJlIHRoaW5raW5nIGFib3V0IG5ldHdvcmsgY29uZmlndXJhdGlvbiBhbmQgYWNjZXNzLiBJcyB0aGVyZSBhIGNvbnNpc3RlbnQgcGF0dGVybiBhY3Jvc3MgZnVuY3Rpb25zPyBPciBpcyBpdCBhIHNwZWNpYWwgY2FzZT8gSSBuZWVkIHRvIGdvIGFuZCBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgaW5ldDZfcnRtX2dldHJvdXRlYCBhbmQgc2VlIHdoYXQgdGhlIHN0b3J5IGlzIHRoZXJlLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXNpZ24gcGhpbG9zb3BoeSBzdXJyb3VuZGluZyBJUHY2IHJvdXRpbmcgdGFibGUgbWFuaXB1bGF0aW9uLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgQVBJIHN1cmZhY2UuIElzIHRoZXJlIHNvbWV0aGluZyBzcGVjaWFsIG9yIHVuaXF1ZSBhYm91dCBgZ2V0cm91dGVgIG9yIGBkZWxyb3V0ZWA/IFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE0NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAwOjU1LjU3NzU4MDE4NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzUzMzMwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbmV0Nl9ydG1fZ2V0cm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvcm91dGUuYz02MTU1PXN0YXRpYyBpbnQgaW5ldDZfcnRtX3ZhbGlkX2dldHJvdXRlX3JlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02MjI5LVxcbm5ldC9pcHY2L3JvdXRlLmM6NjIzMDpzdGF0aWMgaW50IGluZXQ2X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTYyMzEtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz02OTE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBpcDZfcm91dGVfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdF9vcl9tb2R1bGUgPSB7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTY5MjItXFx0ey5vd25lciA9IFRISVNfTU9EVUxFLCAucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXFxubmV0L2lwdjYvcm91dGUuYzo2OTIzOlxcdCAuZG9pdCA9IGluZXQ2X3J0bV9nZXRyb3V0ZSwgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfVU5MT0NLRUR9LFxcbm5ldC9pcHY2L3JvdXRlLmMtNjkyNC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMDo1Ny4yNzUxMTg0NDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNzY1NzM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKk5ldHdvcmsgUm91dGluZyBJbnF1aXJ5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyByb3V0aW5nIGNvZGUgYW5kIEkgc2VlIGBpbmV0Nl9ydG1fZ2V0cm91dGVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzdGF0aWMgZGVjbGFyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJvdXRpbmcgZnVuY3Rpb25zLCBhbmQgSSB3b25kZXIgaWYgSSBjYW4gdHJhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdCB3aWxsIGJlIGltcGFjdGVkLlxuXG5Eb2VzIHRoaXMgaGF2ZSBhbnkgaW1wYWN0IG9uIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSByb3V0aW5nIHByb2Nlc3M/IExldCBtZSB0aGluay4gTXkgbWluZCBqdW1wcyB0byBhbm90aGVyIGZ1bmN0aW9uOiBob3cgaXMgYHJ0Nl9kdW1wX3JvdXRlYCBoYW5kbGluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0YXRpYyBkZWNsYXJhdGlvbiBvZiBgaW5ldDZfcnRtX2dldHJvdXRlYCB0aWVzIGludG8gZnVuY3Rpb25zIGNhbGxlZCB0byBkdW1wIHRoZSByb3V0aW5nIHRhYmxlcy4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIHN0YXRpY25lc3MgaGFzIGFueSBpbXBsaWNhdGlvbnMgb24gZHVtcGluZyB0aGUgcm91dGluZyBkYXRhLCBvciBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbW9yZSBncmFudWxhciBjb21wb25lbnQgb2YgYSBtb3JlIGJyb2FkIHNldCBvZiBmdW5jdGlvbnMuIEkgc2hvdWxkIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODcyOSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjAwLjg4Mjc3ODA1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyNzI5NDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogcnQ2X2R1bXBfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg9MjIzPXN0cnVjdCBydDZfcnRubF9kdW1wX2FyZyB7XFxuLS1cXG5pbmNsdWRlL25ldC9pcDZfcm91dGUuaC0yMjktXFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmg6MjMwOmludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpmNmksIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcCk7XFxuaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgtMjMxLXZvaWQgcnQ2X210dV9jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG10dSk7XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTYwMzQ9c3RhdGljIGludCBydDZfbmhfZHVtcF9leGNlcHRpb25zKHN0cnVjdCBmaWI2X25oICpuaCwgdm9pZCAqYXJnKVxcbi0tXFxubmV0L2lwdjYvcm91dGUuYy02MDg2LS8qIFJldHVybiAtMSBpZiBkb25lIHdpdGggbm9kZSwgbnVtYmVyIG9mIGhhbmRsZWQgcm91dGVzIG9uIHBhcnRpYWwgZHVtcCAqL1xcbm5ldC9pcHY2L3JvdXRlLmM6NjA4NzppbnQgcnQ2X2R1bXBfcm91dGUoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHZvaWQgKnBfYXJnLCB1bnNpZ25lZCBpbnQgc2tpcClcXG5uZXQvaXB2Ni9yb3V0ZS5jLTYwODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTowMy4yNzU1MTMyNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwODE4MjQ2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBJUHY2IFJvdXRlIE5vdGlmaWNhdGlvbnMqKlxuXG5IbW0sIHNvIGBydDZfZHVtcF9yb3V0ZWAgaXNuJ3Qgc3RhdGljLiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBpdHMgdXNhZ2UgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgcm91dGluZyB0YWJsZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlLi4uIHdoYXQgYWJvdXQgdGhlIG5vdGlmaWNhdGlvbnM/IFNwZWNpZmljYWxseSwgYGluZXQ2X3J0X25vdGlmeWAgYW5kIGBpbmV0Nl9ydF9kZWxfbm90aWZ5YD8gQXJlIHRoZXJlIG51YW5jZXMgdG8gdGhlaXIgb3BlcmF0aW9uIHRoYXQgYWZmZWN0IGhvdyByb3V0ZSBtb2RpZmljYXRpb25zIGFyZSBzaWduYWxlZCwgYW5kIGhvdyB0aG9zZSBub3RpZmljYXRpb25zIGludGVyYWN0IHdpdGggd2hhdGV2ZXIgbWVjaGFuaXNtcyB1c2UgdGhvc2UgZnVuY3Rpb25zPyBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBmdW5jdGlvbnMgb3BlcmF0ZSB0aGUgc2FtZSBhcyB0aGV5IGRvIGluIElQdjQgdG8gYWNjdXJhdGVseSBhbmFseXplIGFuZCBtb2RpZnkgdGhlIGNvZGUuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIG5vdGlmaWNhdGlvbiByb3V0aW5lcyBhcmUgdXNlZC4gQSBkZWVwZXIgZGl2ZSBtaWdodCByZXZlYWwgaG93IHdlJ3JlIGhhbmRsaW5nIHJvdXRlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIGluIHRoZSBJUHY2IHJvdXRpbmcgY29udGV4dCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNDUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTowNi41ODM2OTgzMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5NDQ2NzIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIGluZXQ2X3J0X2RlbF9ub3RpZnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X2ZpYi5oPTUzND12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5pbmNsdWRlL25ldC9pcDZfZmliLmgtNTM1LVxcdFxcdCAgICAgdW5zaWduZWQgaW50IGZsYWdzKTtcXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NTM2OnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTUzNy1cXHRcXHRcXHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKTtcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NjQyMT12b2lkIGluZXQ2X3J0X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtNjQyNi1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjY0Mjc6dm9pZCBpbmV0Nl9ydF9kZWxfbm90aWZ5KHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2Ni9yb3V0ZS5jLTY0MjgtXFx0XFx0XFx0IGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDE6MDguODc4MTY5MzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNTUwOTU2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIHNlZS4uLiBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYW5kIGBmaWI2X2RlbGAgYXJlIGJvdGggZGVjbGFyZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBpbXBsaWVzIHRoZXkncmUgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbiBmaWxlLiBXZSdyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBkZXNpZ25lZCBmb3Igd2lkZXIgbGlua2FnZSwgcG90ZW50aWFsbHkgZXhwb3J0ZWQgb3IgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcyBvciBzdWJzeXN0ZW1zLiBUaGF0IGRlc2lnbiBjaG9pY2Ugc3VnZ2VzdHMgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBjb3JlIGFuZCBwb3NzaWJseSBwYXJ0IG9mIGFuIEFQSSBmb3IgSVB2NiByb3V0ZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBhc3Nlc3MgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlLiBJdCBpbmRpY2F0ZXMgYSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaW50ZXJkZXBlbmRlbmNlIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggcmVmYWN0b3JpbmcsIG9wdGltaXphdGlvbiwgb3Igc2VjdXJpdHkgYXNzZXNzbWVudHMuIFRoZSAqd2h5KiBpcyB0aGUga2V5IHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc4OSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjEyLjAzMzI2Nzg3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MTc0OTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkKS4qIGZpYjZfZGVsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwNl9maWIuaD00Njk9aW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBmaWI2X2luZm8gKnJ0LFxcbmluY2x1ZGUvbmV0L2lwNl9maWIuaC00NzAtXFx0ICAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5pbmNsdWRlL25ldC9pcDZfZmliLmg6NDcxOmludCBmaWI2X2RlbChzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTQ3Mi1cXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZmliLmM9MTk2OD1zdGF0aWMgdm9pZCBmaWI2X2RlbF9yb3V0ZShzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGUsIHN0cnVjdCBmaWI2X25vZGUgKmZuLFxcbi0tXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTIwNjQtLyogTmVlZCB0byBvd24gdGFibGUtXFx1MDAzZXRiNl9sb2NrICovXFxubmV0L2lwdjYvaXA2X2ZpYi5jOjIwNjU6aW50IGZpYjZfZGVsKHN0cnVjdCBmaWI2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyxcXG5uZXQvaXB2Ni9pcDZfZmliLmMtMjA2Ni1cXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDE6MTQuNDg1MDIxMDEyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODQwOTc2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIElQdjYgUm91dGluZyBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBsaXN0OiBgYWRkcmNvbmZfcHJlZml4X3JjdmAsIGBydDZfcm91dGVfcmN2YCwgYGlwNl9kZWxfcnRfcmVhc29uYCwgYGlwNl9kZWxfcnRgLCBgcnQ2X2R1bXBfcm91dGVgLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAsIGFuZCBgZmliNl9kZWxgLiBUaGVzZSBzZWVtIHRvIGJlIGNvcmUgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gSVB2NiByb3V0aW5nLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgZm9yIHRoZW0uXG5cbkZpcnN0LCBgQ09ORklHX0lQVjZgIGlzIGEgZ2l2ZW4uIEkgbWVhbiwgd2UncmUgdGFsa2luZyBhYm91dCBJUHY2LCBzbyB0aGF0J3MgYSBiYXNlbGluZS4gVGhlIHRlc3Qgc2NyaXB0IGFsc28gbWVudGlvbnMgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLCBhbmQgdGhlcmUncyBhIGBLc2Z0U2tpcEV4YCBleGNlcHRpb24gdGhhdCByYWlzZXMgaWYgaXQncyBub3QgZm91bmQsIHdoaWNoIHN1Z2dlc3RzIGl0J3MgY3J1Y2lhbCBvciBhdCBsZWFzdCBwYXJ0IG9mIHRoZSBpbnRlbmRlZCB0ZXN0IHNldHVwLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L2lwdjYvS2NvbmZpZ2AgZmlsZSBpbiB0aGUga2VybmVsIHNvdXJjZSB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBgSVBWNl9ST1VURV9JTkZPYCBjb250cm9scyBhbmQgaG93IGl0IGltcGFjdHMgdGhlc2UgZnVuY3Rpb25zLiBUaGlzIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgdGhlIGV4YWN0IGNvbnRleHQgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB0ZXN0ZWQgYW5kIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMzA0LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjE4Ljg2OTEyMTcyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NDg0NDAxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9ST1VURV9JTkZPXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjE9Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjIwLjMxMzk3MDA2M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTc0OTMwMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zOiBJUHY2IFJvdXRpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKnllcywgSSBjb25maXJtIHRoYXQgYElQVjZfUk9VVEVfSU5GT2AgaXMgYSBwZXJmZWN0bHkgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24uKiBObyBzdXJwcmlzZXMgdGhlcmUuIE9mIGNvdXJzZSwgd2hlbiBkZWFsaW5nIHdpdGggSVB2NiByb3V0aW5nLCB5b3UncmUgZ29pbmcgdG8gdXNlIHRoaXMuIE5vdywgbGV0IG1lIHRoaW5rIHRocm91Z2ggdGhlIGltcGxpY2F0aW9ucyBhIGJpdCBkZWVwZXIuLi4gYWgsIGFuZCBpdCdzIGNyeXN0YWwgY2xlYXIgdGhhdCBgSVBWNl9ST1VURVJfUFJFRmAgaXMgaW5oZXJlbnRseSBsaW5rZWQgdG8gYElQVjZfUk9VVEVfSU5GT2AsIGlzbid0IGl0PyBJdCBhY3RzIGFzIGEgZGVwZW5kZW5jeS4gWW91ICpuZWVkKiB0aGF0IHByZWZlcmVuY2UgaW5mb3JtYXRpb24gdG8gcHJvcGVybHkgdXRpbGl6ZSB0aGUgcm91dGUgaW5mbzsgaXQncyBwcmFjdGljYWxseSBpbnNlcGFyYWJsZSBmb3IgY29ycmVjdCBiZWhhdmlvci4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBjb3JyZWN0bHkgY29uZmlndXJlZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4NDEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMToyNC4yODg5MDIyNTRaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDUzOTcxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qSVBWNl9ST1VURVJfUFJFRlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnPTMxPWNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG5uZXQvaXB2Ni9LY29uZmlnOjMzOlxcdGRlcGVuZHMgb24gSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMzQtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMToyNi4zOTQzMDc2MjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMwOTIxNjcwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBJUHY2IFJvdXRlciBQcmVmZXJlbmNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgd2UgZGVmaW5pdGVseSBuZWVkIGBJUFY2X1JPVVRFUl9QUkVGYCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgZW5hYmxlZCBmb3IgdGhpcyBzZXR1cC4gYElQVjZfTVVMVElQTEVfVEFCTEVTYCBjb3VsZCBwb3RlbnRpYWxseSBjb21lIGludG8gcGxheSB0b28sIGJ1dCBpdCBtaWdodCBub3QgYmUgYSBoYXJkIHJlcXVpcmVtZW50IGF0IHRoaXMgc3RhZ2UuIEknbGwgY2hlY2sgaWYganVzdCBgQ09ORklHX0lQVjZgIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjb3JlIGZ1bmN0aW9ucyDigJMgeWVwLCB0aGF0IHNlZW1zIHRvIGNvdmVyIHRoZSBiYXNpY3MuIEhvd2V2ZXIsIHRvIGFjdHVhbGx5IGhpdCB0aGUgY29kZSBwYXRoIHRoYXQgaGFuZGxlcyBSb3V0ZSBJbmZvcm1hdGlvbiBPcHRpb25zIChSSU9zKSB3aGVuIHRoZSBSQSBpcyB3aXRoZHJhd24sIHdlIGFic29sdXRlbHkgbmVlZCBgSVBWNl9ST1VURV9JTkZPYC5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoYXQgdGVzdCBzY3JpcHQuIEFoYSwgaGVyZSBpdCBpczpcblxuYGBgcHl0aG9uXG4gICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnNfaCkpOlxuICAgICAgICAgICAgX3dyaXRlX2lwdjZfc3lzY3RsKFwiY29uZi92ZXRoMC9hY2NlcHRfcmFcIiwgMilcbiAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvZm9yd2FyZGluZ1wiLCAwKVxuICAgICAgICAgICAgdHJ5OlxuICAgICAgICAgICAgICAgIF93cml0ZV9pcHY2X3N5c2N0bChcImNvbmYvdmV0aDAvYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5cIiwgNjQpXG4gICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6XG4gICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcIm5vIENPTkZJR19JUFY2X1JPVVRFX0lORk9cIilcbmBgYFxuXG5UaGUgc2NyaXB0IHRyaWVzIHRvIHNldCBgYWNjZXB0X3JhX3J0X2luZm9fbWF4X3BsZW5gLCBhbmQgaWYgdGhhdCBmYWlscyB3aXRoIGEgYEZpbGVOb3RGb3VuZEVycm9yYCwgaXQgc2tpcHMgdGhlIHRlc3QgYmVjYXVzZSBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AgaXMgbWlzc2luZy4gTWFrZXMgcGVyZmVjdCBzZW5zZS4gU28sIHllcywgYElQVjZfUk9VVEVfSU5GT2AgaXMgcmVxdWlyZWQgZm9yIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBhY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbmAuXG5cbkxldCBtZSBxdWlja2x5IGNyb3NzLXJlZmVyZW5jZSB0aGF0IHdpdGggdGhlIGBuZGlzY19yb3V0ZXJfZGlzY292ZXJ5YCBhbmQgYHJ0Nl9yb3V0ZV9yY3ZgIGNvZGUuIFllcCwgbG9va2luZyBhdCBgcnQ2X3JvdXRlX3JjdmAsIGl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX0lQVjZfUk9VVEVfSU5GT2AuIFRoYXQgY29uZmlybXMgdGhlIGRlcGVuZGVuY3kgYWdhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTcyLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE5OjAxOjMyLjcwMzUyNjg5NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MjUyNzcwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2lwdjYuaD0xMz1zdHJ1Y3QgaXB2Nl9kZXZjb25mIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaXB2Ni5oLTUxLVxcdF9fczMyXFx0XFx0cnRyX3Byb2JlX2ludGVydmFsO1xcbmluY2x1ZGUvbGludXgvaXB2Ni5oOjUyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxuaW5jbHVkZS9saW51eC9pcHY2LmgtNTMtXFx0X19zMzJcXHRcXHRhY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbjtcXG4tLVxcbmluY2x1ZGUvbmV0L25kaXNjLmg9MTAwPXN0cnVjdCBuZGlzY19vcHRpb25zIHtcXG5pbmNsdWRlL25ldC9uZGlzYy5oLTEwMS1cXHRzdHJ1Y3QgbmRfb3B0X2hkciAqbmRfb3B0X2FycmF5W19fTkRfT1BUX0FSUkFZX01BWF07XFxuaW5jbHVkZS9uZXQvbmRpc2MuaDoxMDI6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5pbmNsdWRlL25ldC9uZGlzYy5oLTEwMy1cXHRzdHJ1Y3QgbmRfb3B0X2hkciAqbmRfb3B0c19yaTtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MTgxPXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZiBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yMTEtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIxMjojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjEzLVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yNzYtXFx0LnJ0cl9wcm9iZV9pbnRlcnZhbFxcdD0gNjAgKiBIWixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI3NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjc4LVxcdC5hY2NlcHRfcmFfcnRfaW5mb19taW5fcGxlbiA9IDAsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjQ9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwMy1cXHRcXHRqaWZmaWVzX3RvX21zZWNzKFJFQURfT05DRShjbmYtXFx1MDAzZXJ0cl9wcm9iZV9pbnRlcnZhbCkpO1xcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTcwNDojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTcwNS1cXHRhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9SVF9JTkZPX01JTl9QTEVOXSA9XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTY4NDk9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgYWRkcmNvbmZfc3lzY3RsW10gPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwNzAtXFx0fSxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcwNzE6I2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcwNzItXFx0e1xcbi0tXFxubmV0L2lwdjYvbmRpc2MuYz0yMjA9c3RydWN0IG5kaXNjX29wdGlvbnMgKm5kaXNjX3BhcnNlX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmMtMjU2LVxcdFxcdFxcdGJyZWFrO1xcbm5ldC9pcHY2L25kaXNjLmM6MjU3OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvbmRpc2MuYy0yNTgtXFx0XFx0Y2FzZSBORF9PUFRfUk9VVEVfSU5GTzpcXG4tLVxcbm5ldC9pcHY2L25kaXNjLmM9MTIzMT1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvbmRpc2MuYy0xNDk2LVxcbm5ldC9pcHY2L25kaXNjLmM6MTQ5NzojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L25kaXNjLmMtMTQ5OC1cXHRpZiAoIVJFQURfT05DRShpbjZfZGV2LVxcdTAwM2VjbmYuYWNjZXB0X3JhX2Zyb21fbG9jYWwpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jPTExNT1zdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICpydDZfZmluZF9jYWNoZWRfcnQoY29uc3Qgc3RydWN0IGZpYjZfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTExOC1cXG5uZXQvaXB2Ni9yb3V0ZS5jOjExOTojaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfSU5GT1xcbm5ldC9pcHY2L3JvdXRlLmMtMTIwLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfYWRkX3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L2lwdjYvcm91dGUuYz05NjM9c3RhdGljIGJvb2wgcnQ2X2lzX2d3X29yX25vbmV4dGhvcChjb25zdCBzdHJ1Y3QgZmliNl9yZXN1bHQgKnJlcylcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmMtOTY4LVxcbm5ldC9pcHY2L3JvdXRlLmM6OTY5OiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy05NzAtaW50IHJ0Nl9yb3V0ZV9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbixcXG4tLVxcbm5ldC9pcHY2L3JvdXRlLmM9NDIzOT1zdGF0aWMgdm9pZCBydDZfZG9fcmVkaXJlY3Qoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9yb3V0ZS5jLTQzODEtXFxubmV0L2lwdjYvcm91dGUuYzo0MzgyOiNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvcm91dGUuYy00MzgzLXN0YXRpYyBzdHJ1Y3QgZmliNl9pbmZvICpydDZfZ2V0X3JvdXRlX2luZm8oc3RydWN0IG5ldCAqbmV0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTozNC4xNzYwNTkyMzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIwNTIyNDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVB2NiBSb3V0aW5nIFN5bWJvbCBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgSVB2NiByb3V0aW5nIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgcnQ2X3JvdXRlX3JjdmAgaXMgaW5kZWVkIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JUFY2X1JPVVRFX0lORk9gLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24sIG1lYW5pbmcgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGluY2x1ZGUgYElQVjZfUk9VVEVfSU5GT2AgYW5kIGBJUFY2X1JPVVRFUl9QUkVGYCBpbiBgRW5hYmxlQ29uZmlnc2AsIGFsb25nIHdpdGggdGhlIGJhc2UgYElQVjZgIGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZS5cblxuTmV4dCwgbGV0J3MgbG9vayBhdCB0aGUgc3ltYm9scyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJJ3ZlIGdvdDogYGFkZHJjb25mX3ByZWZpeF9yY3ZgLCBgcnQ2X3JvdXRlX3JjdmAsIGBpcDZfZGVsX3J0X3JlYXNvbmAsIGBpcDZfZGVsX3J0YCwgYHJ0Nl9kdW1wX3JvdXRlYCwgYGluZXQ2X3J0X2RlbF9ub3RpZnlgLCBhbmQgYGZpYjZfZGVsYC5cblxuUmlnaHQsIG5vdywgd2FpdCBhIHNlY29uZC4uLiBgaXA2X2RlbF9ydF9yZWFzb25gIGFuZCBgaXA2X2RlbF9ydGAgYXJlIGp1c3Qgd3JhcHBlcnMgZm9yIGBfX2lwNl9kZWxfcnRgIHdpdGhpbiBgbmV0L2lwdjYvcm91dGUuY2AuIE9rYXksIGxldCdzIGNoZWNrIGlmIGBfX2lwNl9kZWxfcnRgIGlzIHN0YXRpYy4gWWVzLCBpdCdzIHN0YXRpYywgd2hpY2ggbWVhbnMgYGlwNl9kZWxfcnRfcmVhc29uYCBhbmQgYGlwNl9kZWxfcnRgIGFyZSBmaW5lIHRvIGluY2x1ZGUgaGVyZS4gR29vZC4gVGhlbiBgZmliNl9kZWxgIGlzIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgLCBgaW5ldDZfcnRfZGVsX25vdGlmeWAgYW5kIGBydDZfZHVtcF9yb3V0ZWAgYXJlIGluIGBuZXQvaXB2Ni9yb3V0ZS5jYC5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGBmaWI2X2RlbGAncyB2aXNpYmlsaXR5LiBJdCdzIGRlY2xhcmVkIGluIGBpbmNsdWRlL25ldC9pcDZfZmliLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvaXB2Ni9pcDZfZmliLmNgOlxuXG5gYGBjXG5pbnQgZmliNl9kZWwoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLFxuXHQgICAgIGVudW0gcnRhX2RlbF9yZWFzb24gZGVsX3JlYXNvbilcbmBgYFxuXG5TbyBpdCBpcyBub24tc3RhdGljLiBNYWtlcyBzZW5zZS5cblxuTm93LCBsZXQncyBnbyBmdW5jdGlvbiBieSBmdW5jdGlvbi5cblxuYGFkZHJjb25mX3ByZWZpeF9yY3ZgIGlzIG5vbi1zdGF0aWMuXG5gYGBjXG52b2lkIGFkZHJjb25mX3ByZWZpeF9yY3Yoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm9wdCwgaW50IGxlbiwgYm9vbCBzbGxhbylcbmBgYFxuYHJ0Nl9yb3V0ZV9yY3ZgIGlzIG5vbi1zdGF0aWM6XG5gYGBjXG5pbnQgcnQ2X3JvdXRlX3JjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqb3B0LCBpbnQgbGVuLFxuXHRcdCAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpnd2FkZHIpXG5gYGBcbmBydDZfZHVtcF9yb3V0ZWAgaXMgbm9uLXN0YXRpYzpcbmBgYGNcbmludCBydDZfZHVtcF9yb3V0ZShzdHJ1Y3QgZmliNl9pbmZvICpydCwgdm9pZCAqcF9hcmcsIHVuc2lnbmVkIGludCBza2lwKVxuYGBgXG5gaW5ldDZfcnRfZGVsX25vdGlmeWAgaXMgbm9uLXN0YXRpYzpcbmBgYGNcbnZvaWQgaW5ldDZfcnRfZGVsX25vdGlmeShzdHJ1Y3QgZmliNl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sXG5cdFx0XHQgZW51bSBydGFfZGVsX3JlYXNvbiBkZWxfcmVhc29uKVxuYGBgXG5cbkFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHRoaXM/XG5gZmliNl9nY190YWJsZWAgaXMgc3RhdGljLCBidXQgaXQgaXMgY2FsbGVkIGZyb20gYGZpYjZfcnVuX2djYCB3aGljaCBpcyBub24tc3RhdGljLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyMzQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTk6MDE6NDMuMzgxMjg2MDE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjk4ODgxNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWQpLiogZmliNl9ydW5fZ2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvaXA2X2ZpYi5oPTUzOT12b2lkIGZpYjZfYWdlX2V4Y2VwdGlvbnMoc3RydWN0IGZpYjZfaW5mbyAqcnQsIHN0cnVjdCBmaWI2X2djX2FyZ3MgKmdjX2FyZ3MsXFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTU0MC1cXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBub3cpO1xcbmluY2x1ZGUvbmV0L2lwNl9maWIuaDo1NDE6dm9pZCBmaWI2X3J1bl9nYyh1bnNpZ25lZCBsb25nIGV4cGlyZXMsIHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBmb3JjZSk7XFxuaW5jbHVkZS9uZXQvaXA2X2ZpYi5oLTU0Mi12b2lkIGZpYjZfZ2NfY2xlYW51cCh2b2lkKTtcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYz0yNDA4PXN0YXRpYyB2b2lkIGZpYjZfZ2NfYWxsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpYjZfZ2NfYXJncyAqZ2NfYXJncylcXG4tLVxcbm5ldC9pcHY2L2lwNl9maWIuYy0yNDI3LVxcbm5ldC9pcHY2L2lwNl9maWIuYzoyNDI4OnZvaWQgZmliNl9ydW5fZ2ModW5zaWduZWQgbG9uZyBleHBpcmVzLCBzdHJ1Y3QgbmV0ICpuZXQsIGJvb2wgZm9yY2UpXFxubmV0L2lwdjYvaXA2X2ZpYi5jLTI0Mjkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTo0NS42ODAxNzg2MDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMzUyMzEyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIElQdjYgUm91dGUgRGVsZXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBgUlRBX0RFTF9SRUFTT05gLCBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBmb3IgSVB2NiByb3V0ZXMuIFRoaXMgYXR0cmlidXRlIHdpbGwgaW5kaWNhdGUgdGhlIHJlYXNvbiBiZWhpbmQgYSByb3V0ZSdzIGRlbGV0aW9uIOKAkyB0aGluZ3MgbGlrZSBleHBpcmF0aW9uIG9yIHdpdGhkcmF3YWwgZnJvbSBhIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkuIFRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoaXMgY2hhbmdlIGlzIHRvIG1vZGlmeSB0aGUgSVB2NiByb3V0aW5nIGZ1bmN0aW9ucywgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXMsIGFuZCBSQSBwcm9jZXNzaW5nIHRvIGluY29ycG9yYXRlIHRoaXMgbmV3IGF0dHJpYnV0ZSBpbnRvIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBzb2xpZCwgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgYW5kIGl0IG5lY2Vzc2l0YXRlcyBjYXJlZnVsIGZ1enppbmcgdG8gY29uZmlybSBjb3JyZWN0IGF0dHJpYnV0ZSBoYW5kbGluZyBhbmQgcHJldmVudCBhbnkgcmVncmVzc2lvbiBpbiByb3V0ZSBkZWxldGlvbiBmdW5jdGlvbmFsaXR5LlxuXG5JJ3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMgdGhpcyBwYXRjaCB0b3VjaGVzLiBUaGUgYGZpYjZfcnVuX2djYCBpcyBub24tc3RhdGljLCBhbmQgaXQncyBpbXBvcnRhbnQgYmVjYXVzZSBpdCB0cmlnZ2VycyBnYXJiYWdlIGNvbGxlY3Rpb24gYW5kIG5vdyBpbmNvcnBvcmF0ZXMgdGhpcyBuZXcgYFJUQV9ERUxfUkVBU09OX0VYUElSRURgIHJlYXNvbi4gVGhlbiwgdGhlIGVudHJ5IHBvaW50IGZvciBgbmRpc2Nfcm91dGVyX2Rpc2NvdmVyeWAsIGBuZGlzY19yY3ZgLCBpcyBhbHNvIG5vbi1zdGF0aWMsIHdoaWNoIGlzIGNydWNpYWwuXG5cbkhlcmUncyBteSByZWZpbmVkIGxpc3Qgb2YgdGhlIHByaW1hcnkgZnVuY3Rpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlOlxuXG4qICAgYGFkZHJjb25mX3ByZWZpeF9yY3ZgOiBUaGlzIHdpbGwgYmUgaW52b2x2ZWQuXG4qICAgYHJ0Nl9yb3V0ZV9yY3ZgOiBUaGlzIHdpbGwgYmUgaW52b2x2ZWQuXG4qICAgYGlwNl9kZWxfcnRfcmVhc29uYDogVGhpcyBpcyBjcnVjaWFsIGFuZCB3aWxsIGxpa2VseSBiZSB0aGUgcHJpbWFyeSBzeW1ib2wgdG8gZnV6ei5cbiogICBgcnQ2X2R1bXBfcm91dGVgOiBJbXBvcnRhbnQgZm9yIG5ldGxpbmsgZHVtcHMuXG4qICAgYGluZXQ2X3J0X2RlbF9ub3RpZnlgOiBJbnZvbHZlZCBpbiBub3RpZmljYXRpb25zLlxuKiAgIGBmaWI2X2RlbGA6IFRoaXMgaXMgbW9kaWZpZWQgYnkgdGhlIHBhdGNoLlxuKiAgIGBmaWI2X3J1bl9nY2A6IFdlJ3JlIGluY29ycG9yYXRpbmcgdGhlIHJlYXNvbiBoZXJlLlxuKiAgIGBuZGlzY19yY3ZgOiBLZXkgYXMgdGhlIGVudHJ5IHBvaW50IGZvciByb3V0ZXIgZGlzY292ZXJ5LlxuXG5gaXA2X2RlbF9ydGAgaXMganVzdCBhIHdyYXBwZXIsIHNvIGluY2x1ZGluZyBgaXA2X2RlbF9ydF9yZWFzb25gIGNvdmVycyBpdC4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBydDZfZHVtcF9yb3V0ZWAgaXMgY29ycmVjdCBmb3IgbmV0bGluayBkdW1wcy4gYGluZXQ2X3J0bV9nZXRyb3V0ZWAgaXMgc3RhdGljLCBzbyBmb2N1c2luZyBvbiBgcnQ2X2R1bXBfcm91dGVgIGZvciByb3V0ZSBkdW1wcyBtYWtlcyBzZW5zZS5cblxuRm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZSBwYXRjaCB0b3VjaGVzIGBmaWI2X2RlbGAsIHdoaWNoIGlzIGluZGVwZW5kZW50IG9mIG11bHRpcGxlIHRhYmxlcywgdGh1cyBvbmx5IGBJUFY2YCwgYElQVjZfUk9VVEVSX1BSRUZgLCBhbmQgYElQVjZfUk9VVEVfSU5GT2AgYXJlIGNydWNpYWwuIGBJUFY2YCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGVzdGluZyB0aGUgb3ZlcmFsbCBlZmZlY3RzIG9mIHRoZSBwYXRjaCBzaW5jZSBpdCBtb2RpZmllcyBgZmliNl9kZWxgLCB3aGljaCBpcyB1c2VkIHJlZ2FyZGxlc3Mgb2YgbXVsdGlwbGUgdGFibGVzLlxuXG5JJ20gcmVhZHkgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHByb3ZpZGUgbXkgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTMwLCJPdXRwdXRUb2tlbnMiOjIzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxOTowMTo1Ni43MTU0MTI3OTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTgxMTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiLFxuICAgIFwiSVBWNl9ST1VURVJfUFJFRlwiLFxuICAgIFwiSVBWNl9ST1VURV9JTkZPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWRkcmNvbmZfcHJlZml4X3JjdlwiLFxuICAgIFwicnQ2X3JvdXRlX3JjdlwiLFxuICAgIFwiaXA2X2RlbF9ydF9yZWFzb25cIixcbiAgICBcInJ0Nl9kdW1wX3JvdXRlXCIsXG4gICAgXCJpbmV0Nl9ydF9kZWxfbm90aWZ5XCIsXG4gICAgXCJmaWI2X2RlbFwiLFxuICAgIFwiZmliNl9ydW5fZ2NcIixcbiAgICBcIm5kaXNjX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgYFJUQV9ERUxfUkVBU09OYCBmb3IgSVB2NiByb3V0ZXMgdG8gcmVwb3J0IHRoZSByZWFzb24gZm9yIHJvdXRlIGRlbGV0aW9uIChlLmcuLCBleHBpcmVkLCBSQSB3aXRoZHJhd24pLiBJdCBtb2RpZmllcyBjb3JlIElQdjYgcm91dGluZyBmdW5jdGlvbnMsIGdhcmJhZ2UgY29sbGVjdGlvbiwgYW5kIFJvdXRlciBBZHZlcnRpc2VtZW50IChSQSkgcHJvY2Vzc2luZyBsb2dpYyB0byBwbHVtYiB0aGlzIG5ldyBhdHRyaWJ1dGUgdGhyb3VnaCB0aGUgcm91dGUgZGVsZXRpb24gcGF0aHMgYW5kIG5ldGxpbmsgbm90aWZpY2F0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGhlIG5ldyBhdHRyaWJ1dGUgYW5kIG5vIHJlZ3Jlc3Npb25zIGluIHJvdXRlIGRlbGV0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQVjZfUk9VVEVSX1BSRUZcIixcbiAgICBcIklQVjZfUk9VVEVfSU5GT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFkZHJjb25mX3ByZWZpeF9yY3ZcIixcbiAgICBcInJ0Nl9yb3V0ZV9yY3ZcIixcbiAgICBcImlwNl9kZWxfcnRfcmVhc29uXCIsXG4gICAgXCJydDZfZHVtcF9yb3V0ZVwiLFxuICAgIFwiaW5ldDZfcnRfZGVsX25vdGlmeVwiLFxuICAgIFwiZmliNl9kZWxcIixcbiAgICBcImZpYjZfcnVuX2djXCIsXG4gICAgXCJuZGlzY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGBSVEFfREVMX1JFQVNPTmAgZm9yIElQdjYgcm91dGVzIHRvIHJlcG9ydCB0aGUgcmVhc29uIGZvciByb3V0ZSBkZWxldGlvbiAoZS5nLiwgZXhwaXJlZCwgUkEgd2l0aGRyYXduKS4gSXQgbW9kaWZpZXMgY29yZSBJUHY2IHJvdXRpbmcgZnVuY3Rpb25zLCBnYXJiYWdlIGNvbGxlY3Rpb24sIGFuZCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCAoUkEpIHByb2Nlc3NpbmcgbG9naWMgdG8gcGx1bWIgdGhpcyBuZXcgYXR0cmlidXRlIHRocm91Z2ggdGhlIHJvdXRlIGRlbGV0aW9uIHBhdGhzIGFuZCBuZXRsaW5rIG5vdGlmaWNhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0IGhhbmRsaW5nIG9mIHRoZSBuZXcgYXR0cmlidXRlIGFuZCBubyByZWdyZXNzaW9ucyBpbiByb3V0ZSBkZWxldGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[1] Phase: Succeeded StartedAt: 2026-07-30 19:02:07 +0000 UTC FinishedAt: 2026-07-30 19:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 19:02:07 +0000 UTC FinishedAt: 2026-07-30 19:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2] Phase: Succeeded StartedAt: 2026-07-30 19:02:07 +0000 UTC FinishedAt: 2026-07-30 22:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 19:02:07 +0000 UTC FinishedAt: 2026-07-30 22:40:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 19:02:07 +0000 UTC FinishedAt: 2026-07-30 19:02:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 19:02:07 +0000 UTC FinishedAt: 2026-07-30 19:02:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-3181893100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 19:02:18 +0000 UTC FinishedAt: 2026-07-30 19:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 19:02:18 +0000 UTC FinishedAt: 2026-07-30 19:18:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ec86f89-e4e3-4979-801e-a3601793d97c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-3181893100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "350abb95-db19-42ef-81a7-f50ed6b4be80", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-2378514458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 19:02:18 +0000 UTC FinishedAt: 2026-07-30 19:18:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ec86f89-e4e3-4979-801e-a3601793d97c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-3181893100/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "350abb95-db19-42ef-81a7-f50ed6b4be80", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-2378514458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 19:18:27 +0000 UTC FinishedAt: 2026-07-30 19:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 19:18:27 +0000 UTC FinishedAt: 2026-07-30 19:18:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 19:18:27 +0000 UTC FinishedAt: 2026-07-30 19:18:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 19:18:27 +0000 UTC FinishedAt: 2026-07-30 19:18:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-33037227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 19:18:38 +0000 UTC FinishedAt: 2026-07-30 19:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 19:18:38 +0000 UTC FinishedAt: 2026-07-30 19:20:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*350abb95-db19-42ef-81a7-f50ed6b4be80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-2378514458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 19:20:42 +0000 UTC FinishedAt: 2026-07-30 19:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 19:20:42 +0000 UTC FinishedAt: 2026-07-30 19:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 19:20:42 +0000 UTC FinishedAt: 2026-07-30 19:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 19:20:42 +0000 UTC FinishedAt: 2026-07-30 19:36:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ec86f89-e4e3-4979-801e-a3601793d97c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-33037227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d5c396e5-7373-4eae-b5e3-07d429684ed9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-585223119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 19:20:42 +0000 UTC FinishedAt: 2026-07-30 19:36:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4ec86f89-e4e3-4979-801e-a3601793d97c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-33037227/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d5c396e5-7373-4eae-b5e3-07d429684ed9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-585223119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 19:36:30 +0000 UTC FinishedAt: 2026-07-30 19:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 19:36:30 +0000 UTC FinishedAt: 2026-07-30 19:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 19:36:30 +0000 UTC FinishedAt: 2026-07-30 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 19:36:30 +0000 UTC FinishedAt: 2026-07-30 19:38:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5c396e5-7373-4eae-b5e3-07d429684ed9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-585223119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 22:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 22:40:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*350abb95-db19-42ef-81a7-f50ed6b4be80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5c396e5-7373-4eae-b5e3-07d429684ed9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-2378514458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-585223119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 19:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 19:38:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-675959492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 19:38:31 +0000 UTC FinishedAt: 2026-07-30 19:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 19:38:42 +0000 UTC FinishedAt: 2026-07-30 22:40:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz849n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["addrconf_prefix_rcv","rt6_route_rcv","ip6_del_rt_reason","rt6_dump_route","inet6_rt_del_notify","fib6_del","fib6_run_gc","ndisc_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IPV6_ROUTER_PREF","IPV6_ROUTE_INFO"],"series_id":"a75f6c55-682e-41e5-b167-c7bdc1240afb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 19:38:42 +0000 UTC FinishedAt: 2026-07-30 22:40:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*350abb95-db19-42ef-81a7-f50ed6b4be80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d5c396e5-7373-4eae-b5e3-07d429684ed9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-2378514458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-build-action-585223119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz849n/series-workflowz849n-convert-artifact-675959492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}