Name: series-workflowwx6bf Phase: Succeeded StartedAt: 2026-08-17 13:39:28 +0000 UTC FinishedAt: 2026-08-17 18:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[0] Phase: Succeeded StartedAt: 2026-08-17 13:39:28 +0000 UTC FinishedAt: 2026-08-17 14:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 13:39:28 +0000 UTC FinishedAt: 2026-08-17 14:36:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "50f6d3a5-67ad-41b1-be31-d2b800b089f8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_rthdr_rcv", "ipv6_srh_rcv", "ipv6_rpl_srh_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+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHY2X3J0aGRyX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3NyaF9yY3YmIzM0OywKICAgICYjMzQ7aXB2Nl9ycGxfc3JoX3JjdiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlcmUgYGlkZXZgIHdhcyBmZXRjaGVkIGJ1dCBub3QgY2hlY2tlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGBpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWRgLiBUaGUgZml4IGNoZWNrcyBgaWRldmAgaW4gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBwYXNzZXMgaXQgYXMgYW4gYXJndW1lbnQsIGRyb3BwaW5nIHRoZSBwYWNrZXQgaWYgYGlkZXZgIGlzIE5VTEwuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGlzc3VlIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UpIHRoYXQgaXMgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIG9yIEtBU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBpcHY2X3JwbF9zcmhfcmN2YCB3aGVuIGBpZGV2YCBpcyBOVUxMIGJ5IG1vdmluZyB0aGUgYGlkZXZgIGNoZWNrIHRvIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHByb2Nlc3NpbmcgcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHNlbmRpbmcgY3JhZnRlZCBJUHY2IHBhY2tldHMgd2l0aCBTZWdtZW50IFJvdXRpbmcgb3IgUlBMIFNlZ21lbnQgUm91dGluZyBoZWFkZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWU2Y2VhNTY5MDdhYTQzYTc0ZGNlM2RlNmFlYjRlMThkZmQ1ZTExYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE0OjMzOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggOWM2NzdlYjFkMWE2MS4uNTE5NDFhZDY1NmEzNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtMzY4LDIzICYjNDM7MzY4LDE2IEBAIHN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHQgICAoX19iZTMyICopYWRkcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcbiBcdGludCBhY2NlcHRfc2VnNjtcbiBcbiBcdGhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXHRpZiAoIWlkZXYpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbiBcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIFxuQEAgLTQ4NSwxMiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XG4gXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XG4gXHR1bnNpZ25lZCBjaGFyICpidWY7XG5AQCAtNDk5LDggJiM0Mzs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHU2NCBuID0gMDtcbiBcdHUzMiByO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXG4gXHRhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcbiBcdFx0XHQgICAgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcbiBcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcbkBAIC02ODksMTAgJiM0Mzs2NzksMTQgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3dpdGNoIChoZHItXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfNDpcbiBcdFx0Lyogc2VnbWVudCByb3V0aW5nICovXG4tXHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbiYjNDM7XHRcdGlmICghaWRldilcbiYjNDM7XHRcdFx0Z290byBkaXNhYmxlZDtcbiYjNDM7XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiBcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4gXHRcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cbi1cdFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiKTtcbiYjNDM7XHRcdGlmICghaWRldilcbiYjNDM7XHRcdFx0Z290byBkaXNhYmxlZDtcbiYjNDM7XHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYiwgaWRldik7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC04MzcsNiAmIzQzOzgzMSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXG4gXHRcdFx0ICAoXHUwMDI2aGRyLVx1MDAzZXR5cGUpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpO1xuIFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7ZGlzYWJsZWQ6XG4mIzQzO1x0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRUQpO1xuJiM0MztcdHJldHVybiAtMTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlbiBgaWRldmAgaXMgTlVMTCBieSBtb3ZpbmcgdGhlIGBpZGV2YCBjaGVjayB0byB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBwcm9jZXNzaW5nIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSBzZW5kaW5nIGNyYWZ0ZWQgSVB2NiBwYWNrZXRzIHdpdGggU2VnbWVudCBSb3V0aW5nIG9yIFJQTCBTZWdtZW50IFJvdXRpbmcgaGVhZGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVlNmNlYTU2OTA3YWE0M2E3NGRjZTNkZTZhZWI0ZTE4ZGZkNWUxMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi41MTk0MWFkNjU2YTM2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC0zNjgsMjMgJiM0MzszNjgsMTYgQEAgc3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJICAgKF9fYmUzMiAqKWFkZHIpOwogfQogCi1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwogCXN0cnVjdCBpcHY2X3NyX2hkciAqaGRyOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGluNl9hZGRyICphZGRyOwogCWludCBhY2NlcHRfc2VnNjsKIAogCWhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCi0JaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpOwotCWlmICghaWRldikgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtJmd0O2lwdjYuZGV2Y29uZl9hbGwtJmd0O3NlZzZfZW5hYmxlZCksCiAJCQkgIFJFQURfT05DRShpZGV2LSZndDtjbmYuc2VnNl9lbmFibGVkKSk7CiAKQEAgLTQ4NSwxMiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZoZHIgKm9sZGhkcjsKIAl1bnNpZ25lZCBpbnQgY2hkcl9sZW47CiAJdW5zaWduZWQgY2hhciAqYnVmOwpAQCAtNDk5LDggJiM0Mzs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgbiA9IDA7CiAJdTMyIHI7CiAKLQlpZGV2ID0gX19pbjZfZGV2X2dldChza2ItJmd0O2Rldik7Ci0KIAlhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LSZndDtpcHY2LmRldmNvbmZfYWxsLSZndDtycGxfc2VnX2VuYWJsZWQpLAogCQkJICAgICBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLnJwbF9zZWdfZW5hYmxlZCkpOwogCWlmICghYWNjZXB0X3JwbF9zZWcpIHsKQEAgLTY4OSwxMCAmIzQzOzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc3dpdGNoIChoZHItJmd0O3R5cGUpIHsKIAljYXNlIElQVjZfU1JDUlRfVFlQRV80OgogCQkvKiBzZWdtZW50IHJvdXRpbmcgKi8KLQkJcmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7CiAJY2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzoKIAkJLyogcnBsIHNlZ21lbnQgcm91dGluZyAqLwotCQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTgzNyw2ICYjNDM7ODMxLDEwIEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsCiAJCQkgICgmYW1wO2hkci0mZ3Q7dHlwZSkgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CiAJcmV0dXJuIC0xOwomIzQzOwomIzQzO2Rpc2FibGVkOgomIzQzOwlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7CiYjNDM7CXJldHVybiAtMTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBJUHY2IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoYXQgaXQgbW9kaWZpZXMgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCB0byBhY2NlcHQgYSBgc3RydWN0IGluZXQ2X2RldiAqaWRldmAgYXJndW1lbnQgaW5zdGVhZCBvZiBmaWd1cmluZyBpdCBvdXQgdGhlbXNlbHZlcyB2aWEgYF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCByZWZhY3RvcmluZyBhaW1lZCBhdCBpbXByb3Zpbmcgc2FmZXR5LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBub3cgY2hlY2tzIGlmIGBpZGV2YCBpcyBOVUxMICpiZWZvcmUqIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLiBJZiBpdCBpcywgdGhlIGNvZGUganVtcHMgdG8gYSBgZGlzYWJsZWRgIGxhYmVsIGFuZCBkcm9wcyB0aGUgYHNrYmAgd2l0aCB0aGUgYFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRURgLgoKVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgbWl0aWdhdGlvbiYjMzQ7IGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFNlZ21lbnQgUm91dGluZyAoU1JIKSBhbmQgUlBMIFNlZ21lbnQgUm91dGluZy4gVGhpcyBjbGVhcmx5IHByZXZlbnRzIGEgcG9zc2libGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHNvbWUga2luZCBvZiBsb2dpY2FsIGVycm9yIHdoZW4gYGlkZXZgIGlzIHVuZXhwZWN0ZWRseSBOVUxMLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCwgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gY2hlY2sgZm9yIGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtaXNzZWQgZHVyaW5nIGRldmVsb3BtZW50LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgc2NlbmFyaW8uIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldC9pcHY2L2V4dGhkcnMuY2AsIElQdjYgaXMgb2J2aW91c2x5IGVzc2VudGlhbC4gU2VnbWVudCBSb3V0aW5nIGlzIHRoZSBrZXkgaGVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWcgb3B0aW9ucy4gYENPTkZJR19JUFY2X1NFRzZfSE1BQ2AsIGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgcHJvYmFibHkgY29udHJvbHMgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2Agb3IgYG5ldC9pcHY2L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9yIEkgY2FuIGp1c3QgZ3JlcCBmb3IgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBpbiB0aGUgcmVsZXZhbnQgZmlsZXMgb3IgSSBjYW4ganVzdCBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvZXh0aGRycy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGhpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTY0NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cdFx0XHRnb3RvIGRpc2FibGVkO1xubmV0L2lwdjYvZXh0aGRycy5jOjY4NDpcdFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTY4NS1cdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEJlZm9yZSBJIHN0YXJ0IHRlYXJpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgYSBjb3VwbGUgb2Yga2V5IHRoaW5ncyByZWxhdGVkIHRvIFNlZ21lbnQgUm91dGluZy4gSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMsIHByZS1leGlzdGluZyBjb25maWd1cmF0aW9uIGJsb2NrcyBvciBmbGFncyB0aGF0IGRpcmVjdGx5IHBlcnRhaW4gdG8gU2VnbWVudCBSb3V0aW5nJiMzOTtzIGdsb2JhbCBlbmFibGVtZW50IG9yIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2U6CgoqICAgKipHbG9iYWwgU1IgZW5hYmxlbWVudDoqKiBJcyBTZWdtZW50IFJvdXRpbmcgZXZlbiBnbG9iYWxseSBlbmFibGVkIG9uIHRoaXMgZGV2aWNlIG9yIHBsYXRmb3JtPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoaXMgYmVmb3JlIHByb2NlZWRpbmcuIEEgc2ltcGxlIGBzaG93YCBjb21tYW5kIG9yIGNvbmZpZyBjaGVjayBzaG91bGQgc3VyZmFjZSB0aGlzLgoqICAgKipTUi1NUExTIHZzLiBTUnY2OioqIFRoZSBzeXN0ZW0gbWlnaHQgYmUgc2V0IHVwIGZvciBlaXRoZXIgU1ItTVBMUyBvciBTUnY2LCBvciBldmVuIGJvdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmxhdm9yIG9mIFNlZ21lbnQgUm91dGluZyBpcyBpbiBwbGF5LiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgaW50ZXJwcmV0IHRoZSBleGlzdGluZyBjb25maWcgYW5kIHdoYXQgSSBuZWVkIHRvIGFkZC4gSSYjMzk7bGwgY2hlY2sgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtzZWdtZW50LXJvdXRpbmcmIzM0OywgJiMzNDttcGxzJiMzNDssICYjMzQ7aXB2NiYjMzQ7LCBvciByZWxhdGVkIHRlcm1zIGluIHRoZSBnbG9iYWwgY29uZmlnIG9yIFZSRiBjb250ZXh0cy4KKiAgICoqRXhpc3RpbmcgUG9saWNpZXMvUGF0aHM6KiogV2VyZSB0aGVyZSBzb21lIHByZS1leGlzdGluZyBzZWdtZW50LXJvdXRpbmcgcG9saWNpZXMgYWxyZWFkeSBkZWZpbmVkLCBvciBhbnkgc291cmNlLXJvdXRlZCBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBTUiBwb2xpY2llcy9wYXRocyBjb25maWd1cmVkLCBldmVuIGlmIHRoZXkmIzM5O3JlIGN1cnJlbnRseSBpbmFjdGl2ZSBvciBpbiBhICYjMzQ7ZG93biYjMzQ7IHN0YXRlPyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgYW55IGV4aXN0aW5nIGNvbnN0cmFpbnRzIG9yIGludGVyYWN0aW9ucy4KKiAgICoqQ29udHJvbCBQbGFuZSBJbnRlcmFjdGlvbnM6KiogTGV0IG1lIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgcmVsYXRlZCB0byBjb250cm9sIHBsYW5lIGludGVyYWN0aW9uLiBJcyBhbiBJR1AgbGlrZSBPU1BGIG9yIElTLUlTIGNvbmZpZ3VyZWQ/IE1heWJlIEJHUC1MUyBpcyBpbiBwbGF5PyBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIHBsYW5lIGFyY2hpdGVjdHVyZSBpcyBjcnVjaWFsIGZvciBzdWNjZXNzZnVsIGludGVncmF0aW9uLgoqICAgKipMYWJlbCBTcGFjZS9TSUQgQWxsb2NhdGlvbjoqKiBJZiBTUi1NUExTIGlzIHByZXNlbnQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxhYmVsIHNwYWNlIGFuZCBTSUQgYWxsb2NhdGlvbiBzY2hlbWUgKGlmIHRoZSBwbGF0Zm9ybSBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uKS4KKiAgICoqUHJlZml4IFNJRHMgYW5kIE5vZGUgU0lEczoqKiBBcmUgYW55IHByZWZpeCBvciBub2RlIFNJRHMgY29uZmlndXJlZCBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBvciBwZXIgaW50ZXJmYWNlPyBBbnkgcHJlLWNvbmZpZ3VyZWQgU0lEcyBjYW4gaW5mbHVlbmNlIG15IG5leHQgc3RlcHMuCgpCYXNpY2FsbHksIEkgbmVlZCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgU2VnbWVudCBSb3V0aW5nIG9uIHRoaXMgYm94ICpiZWZvcmUqIEkgZXZlbiBzdGFydCB0aGlua2luZyBhYm91dCBtYWtpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBmb3Igcmlzay1mcmVlIGludGVncmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOC1cdC5rZWVwX2FkZHJfb25fZG93blx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMjk6XHQuc2VnNl9lbmFibGVkXHRcdD0gMCxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjMwLSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjkzLVx0LmtlZXBfYWRkcl9vbl9kb3duXHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NDpcdC5zZWc2X2VuYWJsZWRcdFx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTUtI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2Mj1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNS1cdGFycmF5W0RFVkNPTkZfS0VFUF9BRERSX09OX0RPV05dID0gUkVBRF9PTkNFKGNuZi1cdTAwM2VrZWVwX2FkZHJfb25fZG93bik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3MzY6XHRhcnJheVtERVZDT05GX1NFRzZfRU5BQkxFRF0gPSBSRUFEX09OQ0UoY25mLVx1MDAzZXNlZzZfZW5hYmxlZCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzctI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMzMtXHR7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzQ6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtzZWc2X2VuYWJsZWRcJiMzNDssXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzU6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aXB2Nl9kZXZjb25mLnNlZzZfZW5hYmxlZCxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIzNi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzgwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM4MTpcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxubmV0L2lwdjYvZXh0aGRycy5jOjM4MjpcdFx0XHQgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5zZWc2X2VuYWJsZWQpKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgSVB2NiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgbGlrZWx5IGludm9sdmVzIElQdjYsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSBzdGFuZCB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGJhc2ljcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyBgQ09ORklHX0lQVjZgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZ1bmRhbWVudGFsIElQdjYgc3VwcG9ydC4gSWYgdGhhdCYjMzk7cyBkaXNhYmxlZCwgd2UmIzM5O3JlIG5vdCBnb2luZyBhbnl3aGVyZS4gQXNzdW1pbmcgdGhhdCYjMzk7cyBlbmFibGVkLCB0aGVuIGxldCYjMzk7cyBnbyBhIGxheWVyIGRlZXBlci4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc2VnbWVudGVkIElQdjYgc3VwcG9ydC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBhbnl0aGluZyBsaWtlIGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCBvciBhbnkgc2ltaWxhciBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGVzZSBhcmUga2V5IGZvciBtb3JlIGFkdmFuY2VkIElQdjYgZmVhdHVyZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBiZWNhdXNlLi4uIHdlbGwsIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIExpZ2h0d2VpZ2h0IFR1bm5lbCBzdXBwb3J0IGVuYWJsZWQuIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc2VhcmNoIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZS01LVxubmV0L2lwdjYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfSVBWNikgJiM0Mzs9IGlwdjYub1xubmV0L2lwdjYvTWFrZWZpbGUtNy1cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0xNT1pcHY2LSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZToxNjppcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSAmIzQzOz0gaXA2bXIub1xubmV0L2lwdjYvTWFrZWZpbGUtMTctXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9MjA9aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xubmV0L2lwdjYvTWFrZWZpbGU6MjE6aXB2Ni0kKENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUykgJiM0Mzs9IGZpYjZfcnVsZXMub1xubmV0L2lwdjYvTWFrZWZpbGUtMjItaXB2Ni0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9MjQ9aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xubmV0L2lwdjYvTWFrZWZpbGU6MjU6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUwpICYjNDM7PSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNjppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSAmIzQzOz0gc2VnNl9obWFjLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI3OmlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGU6Mjg6aXB2Ni0kKENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMKSAmIzQzOz0gaW9hbTZfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtMjktXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgJiM0Mzs9IHR1bm5lbDYub1xubmV0L2lwdjYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0lQVjZfTUlQNikgJiM0Mzs9IG1pcDYub1xubmV0L2lwdjYvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xubmV0L2lwdjYvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05FVEZJTFRFUilcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvaXB2Ni9NYWtlZmlsZS0zOS1cbm5ldC9pcHY2L01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG5uZXQvaXB2Ni9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfSVBWNl9GT1UpICYjNDM7PSBmb3U2Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ1LVxuLS1cbm5ldC9pcHY2L01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19JTkVUKSAmIzQzOz0gb3V0cHV0X2NvcmUubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjYvTWFrZWZpbGUtNDktXG5uZXQvaXB2Ni9NYWtlZmlsZTo1MDpvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBpbmV0Nl9oYXNodGFibGVzLm9cbm5ldC9pcHY2L01ha2VmaWxlLTUxLVxubmV0L2lwdjYvTWFrZWZpbGU6NTI6aWZuZXEgKCQoQ09ORklHX0lQVjYpLClcbm5ldC9pcHY2L01ha2VmaWxlLTUzLW9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgJiM0Mzs9IGlwNl91ZHBfdHVubmVsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhpcyBmaWxlIGlzIGRlZmluaXRlbHkgbGlua2VkIGludG8gYGlwdjYub2AsIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCDigJMgaXQmIzM5O3MgYWxsIHBhcnQgb2YgYENPTkZJR19JUFY2YCwgc28gcHJldHR5IGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBhcmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaG93IGNvbmRpdGlvbmFsIHRoZXkgYXJlLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGAjaWZkZWZgcyBvciBzaW1pbGFyIGNvbnN0cnVjdHMsIHRoYXQgbWlnaHQgbGltaXQgd2hlbiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGZpbmFsIGltYWdlLiBBcmUgdGhleSBhbHdheXMgaW5jbHVkZWQsIG9yIGFyZSB0aGV5IG9ubHkgYnVpbHQgaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3Igd2l0aCBwYXJ0aWN1bGFyIG9wdGlvbnMgZW5hYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIElQdjYgaW1wbGVtZW50YXRpb24uIFRoaXMgaW1wYWN0cyBzZWN1cml0eSwgZWZmaWNpZW5jeSwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdW51c3VhbCBvciBjb21wbGV4IElQdjYgcGFja2V0cywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3NyaF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM3MC1cbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy02ODMtXHRcdFx0Z290byBkaXNhYmxlZDtcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgc3BlYWtpbmcgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSVB2NiBTUkggUmVjZWl2ZXIgQ29kZSBQYXRocyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb2RlIGRlYWxpbmcgd2l0aCBJUHY2IFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlcHRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZmAgYmxvY2tzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgdXNhZ2UgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoZXNlIGRpcmVjdGl2ZXMgY291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIHRoZSBiZWhhdmlvciBvciBldmVuIGluY2x1c2lvbiBvZiB0aGUgY29kZSBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGtlcm5lbCBmZWF0dXJlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGljaCBzeXN0ZW0gYnVpbGRzIG9yIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGhhdmUgdGhpcyBmdW5jdGlvbmFsaXR5IGVuYWJsZWQgb3IgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzYwOlx0XG4gMzYxOlx0XHQvKiB1cGRhdGUgc2tiIGNzdW0gd2l0aCBkaWZmIHJlc3VsdGluZyBmcm9tIHNlZ19sZWZ0IGRlY3JlbWVudCAqL1xuIDM2MjpcdFxuIDM2MzpcdFx0dXBkYXRlX2NzdW1fZGlmZjQoc2tiLCBmcm9tLCB0byk7XG4gMzY0Olx0XG4gMzY1Olx0XHQvKiBjb21wdXRlIGNzdW0gZGlmZiBiZXR3ZWVuIGN1cnJlbnQgYW5kIG5leHQgc2VnbWVudCBhbmQgdXBkYXRlICovXG4gMzY2Olx0XG4gMzY3Olx0XHR1cGRhdGVfY3N1bV9kaWZmMTYoc2tiLCAoX19iZTMyICopKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpLFxuIDM2ODpcdFx0XHRcdCAgIChfX2JlMzIgKilhZGRyKTtcbiAzNjk6XHR9XG4gMzcwOlx0XG4gMzcxOlx0c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiAzNzI6XHR7XG4gMzczOlx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gMzc0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDM3NTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XG4gMzc2Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMzc3Olx0XHRpbnQgYWNjZXB0X3NlZzY7XG4gMzc4Olx0XG4gMzc5Olx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzODA6XHRcbiAzODE6XHRcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIDM4MjpcdFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKCFhY2NlcHRfc2VnNikge1xuIDM4NTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzODY6XHRcdFx0cmV0dXJuIC0xO1xuIDM4NzpcdFx0fVxuIDM4ODpcdFxuIDM4OTpcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbiAzOTA6XHRcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4gMzkxOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM5MjpcdFx0XHRyZXR1cm4gLTE7XG4gMzkzOlx0XHR9XG4gMzk0Olx0I2VuZGlmXG4gMzk1Olx0XG4gMzk2Olx0bG9vcGVkX2JhY2s6XG4gMzk3Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xuIDM5ODpcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2IHx8IGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNCkge1xuIDM5OTpcdFx0XHRcdGludCBvZmZzZXQgPSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0MDA6XHRcbiA0MDE6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA0MDI6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA0MDM6XHRcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gNDA0Olx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcbiA0MDU6XHRcdFx0XHRcdFx0ICAgb2Zmc2V0KTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA0MDg6XHRcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDQwOTpcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiA0MTA6XHRcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KVxuIDQxMTpcdFx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIDQxMjpcdFx0XHRcdF9fc2tiX3R1bm5lbF9yeChza2IsIHNrYi1cdTAwM2VkZXYsIG5ldCk7XG4gNDEzOlx0XG4gNDE0Olx0XHRcdFx0bmV0aWZfcngoc2tiKTtcbiA0MTU6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDE2Olx0XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRcdFx0b3B0LVx1MDAzZXNyY3J0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xuIDQxOTpcdFx0XHRvcHQtXHUwMDNlbGFzdG9wdCA9IG9wdC1cdTAwM2VzcmNydDtcbiA0MjA6XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDQyMTpcdFx0XHRvcHQtXHUwMDNlbmhvZmYgPSAoXHUwMDI2aGRyLVx1MDAzZW5leHRoZHIpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNDIyOlx0XG4gNDIzOlx0XHRcdHJldHVybiAxO1xuIDQyNDpcdFx0fVxuIDQyNTpcdFxuIDQyNjpcdFx0aWYgKGhkci1cdTAwM2VzZWdtZW50c19sZWZ0IFx1MDAzZT0gKGhkci1cdTAwM2VoZHJsZW4gXHUwMDNlXHUwMDNlIDEpKSB7XG4gNDI3Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0Mjg6XHRcdFx0aWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELFxuIDQyOTpcdFx0XHRcdFx0ICAoKFx1MDAyNmhkci1cdTAwM2VzZWdtZW50c19sZWZ0KSAtXG4gNDMwOlx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSkpO1xuIDQzMTpcdFx0XHRyZXR1cm4gLTE7XG4gNDMyOlx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XG4gNDM1Olx0XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHtcbiA0MzY6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcbiA0Mzc6XHRcdFx0XHRcdFx0SVBTVEFUU19NSUJfT1VURElTQ0FSRFMpO1xuIDQzODpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQzOTpcdFx0XHRcdHJldHVybiAtMTtcbiA0NDA6XHRcdFx0fVxuIDQ0MTpcdFxuIDQ0MjpcdFx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiA0NDM6XHRcdH1cbiA0NDQ6XHRcbiA0NDU6XHRcdGhkci1cdTAwM2VzZWdtZW50c19sZWZ0LS07XG4gNDQ2Olx0XHRhZGRyID0gaGRyLVx1MDAzZXNlZ21lbnRzICYjNDM7IGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIDQ0NzpcdFxuIDQ0ODpcdFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiA0NDk6XHRcbiA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQdjYgU1JIIFJlY2VpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyAqbm90KiBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGFueSBzcGVjaWZpYyBTRUc2IExXVFVOTkVMIGNvbmZpZ3VyYXRpb24gZmxhZ3MsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIEl0JiMzOTtzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLCB3aGljaCBpcyBwcmV0dHkgbXVjaCB0aGUgYmFzZWxpbmUgZm9yIGFueSBJUHY2IGltcGxlbWVudGF0aW9uLgoKQnV0IGhlcmUmIzM5O3MgdGhlIGNhdGNoOiBpdCAqZG9lcyogY2hlY2sgdGhlIGBzZWc2X2VuYWJsZWRgIHN5c2N0bCB2YXJpYWJsZS4gVGhhdCBmZWVscyBhIGJpdCBvZmYuIEkmIzM5O20gd29uZGVyaW5nIHdoeSwgZ2l2ZW4gaXQmIzM5O3MgY2hlY2tpbmcgYHNlZzZfZW5hYmxlZGAuIFdhaXQsIGlzIGBzZWc2X2VuYWJsZWRgIGF2YWlsYWJsZSB1bmNvbmRpdGlvbmFsbHkgYXMgd2VsbD8gVGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzIGRyYW1hdGljYWxseS4gSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgc29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSByaWdodC4KCkFscmlnaHQsIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9pcHY2L2FkZHJjb25mLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBzZWc2X2VuYWJsZWRgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZSByZWdhcmRsZXNzIG9mIHRoZSBTRUc2IExXVFVOTkVMIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgdGhlIG1pc3NpbmcgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdFx0LmFjY2VwdF9kYWRcdFx0PSAwLFxuIDIyMTpcdFx0LnN1cHByZXNzX2ZyYWdfbmRpc2NcdD0gMSxcbiAyMjI6XHRcdC5hY2NlcHRfcmFfbXR1XHRcdD0gMSxcbiAyMjM6XHRcdC5zdGFibGVfc2VjcmV0XHRcdD0ge1xuIDIyNDpcdFx0XHQuaW5pdGlhbGl6ZWQgPSBmYWxzZSxcbiAyMjU6XHRcdH0sXG4gMjI2Olx0XHQudXNlX29pZl9hZGRyc19vbmx5XHQ9IDAsXG4gMjI3Olx0XHQuaWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duID0gMCxcbiAyMjg6XHRcdC5rZWVwX2FkZHJfb25fZG93blx0PSAwLFxuIDIyOTpcdFx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG4gMjMwOlx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDIzMTpcdFx0LnNlZzZfcmVxdWlyZV9obWFjXHQ9IDAsXG4gMjMyOlx0I2VuZGlmXG4gMjMzOlx0XHQuZW5oYW5jZWRfZGFkICAgICAgICAgICA9IDEsXG4gMjM0Olx0XHQuYWRkcl9nZW5fbW9kZVx0XHQ9IElONl9BRERSX0dFTl9NT0RFX0VVSTY0LFxuIDIzNTpcdFx0LmRpc2FibGVfcG9saWN5XHRcdD0gMCxcbiAyMzY6XHRcdC5ycGxfc2VnX2VuYWJsZWRcdD0gMCxcbiAyMzc6XHRcdC5pb2FtNl9lbmFibGVkXHRcdD0gMCxcbiAyMzg6XHRcdC5pb2FtNl9pZCAgICAgICAgICAgICAgID0gSU9BTTZfREVGQVVMVF9JRl9JRCxcbiAyMzk6XHRcdC5pb2FtNl9pZF93aWRlXHRcdD0gSU9BTTZfREVGQVVMVF9JRl9JRF9XSURFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHNlZzZfZW5hYmxlZGAgYW5kIGBycGxfc2VnX2VuYWJsZWRgIGFyZSAqdW5jb25kaXRpb25hbGx5KiBiYWtlZCBpbnRvIGBpcHY2X2RldmNvbmZgLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaGF2aW5nIGBDT05GSUdfSVBWNmAgZGVmaW5lZCBpcyB0aGUgb25seSAqYWJzb2x1dGUqIHJlcXVpcmVtZW50IGhlcmUuIEV4Y2VsbGVudC4KCk5vdywgbXkgbWluZCBzaGlmdHMgdG8gYSBtb3JlIGNvbXByZWhlbnNpdmUgYXBwcm9hY2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBjb25zaWRlciBlbmFibGluZyBmb3IgYnJvYWRlciBmdW5jdGlvbmFsaXR5PyBXZWxsLCB3aGlsZSBgQ09ORklHX0lQVjZgIHNlZW1zIHRvIGJlIHRoZSBsaW5jaHBpbiwgYW5kIHRoZSBwcmltYXJ5IGZvY3VzLCBJIHNob3VsZCBhbHNvIHRoaW5rIGFib3V0IGFkZGluZyBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgLCBhbmQgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAuIFRoZXNlIG1pZ2h0IHByb3ZpZGUgc29tZSBtb3JlIGluIGRlcHRoIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2YgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBsaXZlIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgSSBrbm93IHRoYXQgZmlsZSBpcyBjb21waWxlZCBhcyBsb25nIGFzIGBDT05GSUdfSVBWNmAgaXMgc2V0LgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byBgaXB2Nl9ycGxfc3JoX3JjdmAuIEkgdGhpbmsgSSYjMzk7bGwgYmUgYWJsZSB0byBmaWd1cmUgdGhpbmdzIG91dCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNDcxOlx0XG4gNDcyOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRkc3RfaW5wdXQoc2tiKTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdHJldHVybiAtMTtcbiA0Nzk6XHR9XG4gNDgwOlx0XG4gNDgxOlx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gNDgyOlx0e1xuIDQ4MzpcdFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gNDg0Olx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gNDg1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDQ4NjpcdFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcbiA0ODc6XHRcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcbiA0ODg6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcbiA0ODk6XHRcdGludCBhY2NlcHRfcnBsX3NlZztcbiA0OTA6XHRcdGludCBpLCBlcnI7XG4gNDkxOlx0XHR1NjQgbiA9IDA7XG4gNDkyOlx0XHR1MzIgcjtcbiA0OTM6XHRcbiA0OTQ6XHRcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VycGxfc2VnX2VuYWJsZWQpLFxuIDQ5NTpcdFx0XHRcdCAgICAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZCkpO1xuIDQ5NjpcdFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xuIDQ5NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0OTg6XHRcdFx0cmV0dXJuIC0xO1xuIDQ5OTpcdFx0fVxuIDUwMDpcdFxuIDUwMTpcdGxvb3BlZF9iYWNrOlxuIDUwMjpcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDUwMzpcdFxuIDUwNDpcdFx0aWYgKGhkci1cdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcbiA1MDU6XHRcdFx0aWYgKGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNikge1xuIDUwNjpcdFx0XHRcdGludCBvZmZzZXQgPSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA1MDc6XHRcbiA1MDg6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA1MDk6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA1MTA6XHRcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gNTExOlx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcbiA1MTI6XHRcdFx0XHRcdFx0ICAgb2Zmc2V0KTtcbiA1MTM6XHRcbiA1MTQ6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA1MTU6XHRcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDUxNjpcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiA1MTc6XHRcbiA1MTg6XHRcdFx0XHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXHUwMDNlZGV2LCBuZXQpO1xuIDUxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVB2NiBSb3V0aW5nIEhlYWRlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb25zLiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSB2ZXJ5IGxpa2VseSBzY2VuYXJpby4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgaWRldmAgbWlnaHQgYmUgTlVMTCBpbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgcGF0Y2ggZml4ZXMgdGhlIHBvdGVudGlhbCBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBidWdmaXguCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUga2V5IHBsYXllcnMgaGVyZSBhcmUgYGlwdjZfc3JoX3JjdmAsIGBpcHY2X3JwbF9zcmhfcmN2YCwgYW5kLCBzaW5jZSB0aGVzZSBkZWFsIHdpdGggcm91dGluZyBoZWFkZXJzLCBgaXB2Nl9ydGhkcl9yY3ZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGhlcmUuIEEgcXVpY2sgdGhvdWdodDogSSBzaG91bGQgY29uZmlybSB3aGV0aGVyIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgYXJlIGlubGluZWQuIEdpdmVuIHRoZWlyIGxpa2VseSBzaXplLCBJIGRvdWJ0IGl0LiBCdXQgSSBzaG91bGQgY2hlY2ssIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0aCB0byB0aGlzIHZ1bG5lcmFiaWxpdHkuIE9rYXksIEkmIzM5O2xsIGluY2x1ZGUgYGlwdjZfcnRoZHJfcmN2YCwgYXMgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyByb3V0aW5nIGhlYWRlcnMuCgpOZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSBpZiBgaXB2Nl9ydGhkcl9yY3ZgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIGlmIGl0JiMzOTtzIHN0YXRpYyB3aWxsIGltcGFjdCBob3cgSSBzaG91bGQgdGhpbmsgYWJvdXQgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9ydGhkcl9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ0LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjY0NTpzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ2LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7XG5uZXQvaXB2Ni9leHRoZHJzLmM6ODQxOlx0LmhhbmRsZXJcdD1cdGlwdjZfcnRoZHJfcmN2LFxubmV0L2lwdjYvZXh0aGRycy5jLTg0Mi1cdC5mbGFnc1x0XHQ9XHRJTkVUNl9QUk9UT19OT1BPTElDWSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTUKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMTQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBJUHY2IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbiBhbmQgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdC4gYGlwdjZfcnRoZHJfcmN2YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgYnVtbWVyIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgaXQgKmlzKiByZWdpc3RlcmVkIGFzIGEgcHJvdG9jb2wgaGFuZGxlciwgbWFraW5nIGl0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiAgU2luY2UgdGhlIGluc3RydWN0aW9ucyBmYXZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgYnV0IHRoZXJlIGFyZW4mIzM5O3QgYW55IGhlcmUsIEkmIzM5O2xsIGdvIHdpdGggYGlwdjZfcnRoZHJfcmN2YCBhcyBteSBmb2N1cyBzeW1ib2wuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBMb29raW5nIGF0IGl0LCBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIGFyZSBhbHNvIHN0YXRpYy4gIFNvLCAgYGlwdjZfcnRoZHJfcmN2YCByZWFsbHkgaXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBkZXBlbmRlbmNpZXMuICBJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGluIGBleHRoZHJzLmNgICpwcmltYXJpbHkqIGhpbmdlcyBvbiBgQ09ORklHX0lQVjZgLiBJIGRvbiYjMzk7dCBzZWUgYW55IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiAgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIG9yICBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCAqaW4gdGhpcyBzcGVjaWZpYyBjb2RlKi4gVGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGxpa2VseSBmb3Igc2VnbWVudCByb3V0aW5nICp0dW5uZWxpbmcqLCBub3QgbmVjZXNzYXJpbHkganVzdCByZWNlaXZpbmcgcGFja2V0cyB3aXRoIHRob3NlIGhlYWRlcnMuICBJIHNlZSB0aGF0IHJlY2VpdmluZyBTUkggcGFja2V0cyBvbmx5IHJlbGllcyBvbiBgQ09ORklHX0lQVjZgLgoKSG93ZXZlciwgdGhlIGNvZGUgKmRvZXMqIHVzZSBzeXNjdGxzLiAgSSBjYW4gc2VlIHRoYXQgYHNlZzZfZW5hYmxlZGAgYW5kIGBycGxfc2VnX2VuYWJsZWRgIGFyZSBpbXBvcnRhbnQuICBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgaGF2ZSB0byBiZSBzZXQgdG8gMSBpbiBvcmRlciBmb3IgdGhlIGNvZGUgdG8gZXZlbiByZWFjaCB0aGUgY29yZSBsb2dpYyBpbiBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgLCBhbmQgU3l6a2FsbGVyIGNhbiBoYW5kbGUgc2V0dGluZyB0aG9zZSwgc28gaXQmIzM5O3Mgbm90IGEgbWFqb3IgaXNzdWUuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGZpeGVkLiAgSXQmIzM5O3MgdGhlIGBpZGV2YCBwb2ludGVyLCB3aGljaCBzdGFuZHMgZm9yIGBpbmV0Nl9kZXZgIGFuZCByZXByZXNlbnRzIHRoZSBJUHY2IGludGVyZmFjZS4gIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoYXQgYGlkZXZgIGlzIE5VTEwgZnJvbSBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIHVwIGludG8gYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGJlY2F1c2UgdGhlIGNvZGUgd2FzIGRlcmVmZXJlbmNpbmcgIGBpZGV2YCB3aXRob3V0IGNoZWNraW5nIGlmIGl0IHdhcyBhIHZhbGlkIHBvaW50ZXIgZmlyc3QsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaXMgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIE5vdywgaWYgdGhlIGludGVyZmFjZSBkb2VzbiYjMzk7dCBoYXZlIElQdjYgY29uZmlndXJlZCwgdGhlIHBhY2tldCBnZXRzIGRyb3BwZWQgZWFybHkuICBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggdG8gYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXR5LgoKVGhpcyBpcyBhIGJ1ZyBmaXggaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYGlwdjZfcnRoZHJfcmN2YCwgYGlwdjZfc3JoX3JjdmAsIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAuIFRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGlzIGBJUFY2YC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGNvbmZpZ3MgdG8gd29ycnkgYWJvdXQsIGJ1dCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBgQ09ORklHX0lQVjZgIGlzIHN1ZmZpY2llbnQuICBBbmQgd2l0aCB0aGF0LCBJJiMzOTtsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlbiBgaWRldmAgaXMgTlVMTCBieSBtb3ZpbmcgdGhlIGBpZGV2YCBjaGVjayB0byB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBwcm9jZXNzaW5nIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSBzZW5kaW5nIGNyYWZ0ZWQgSVB2NiBwYWNrZXRzIHdpdGggU2VnbWVudCBSb3V0aW5nIG9yIFJQTCBTZWdtZW50IFJvdXRpbmcgaGVhZGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlbiBgaWRldmAgaXMgTlVMTCBieSBtb3ZpbmcgdGhlIGBpZGV2YCBjaGVjayB0byB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBwcm9jZXNzaW5nIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSBzZW5kaW5nIGNyYWZ0ZWQgSVB2NiBwYWNrZXRzIHdpdGggU2VnbWVudCBSb3V0aW5nIG9yIFJQTCBTZWdtZW50IFJvdXRpbmcgaGVhZGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVlNmNlYTU2OTA3YWE0M2E3NGRjZTNkZTZhZWI0ZTE4ZGZkNWUxMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi41MTk0MWFkNjU2YTM2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC0zNjgsMjMgJiM0MzszNjgsMTYgQEAgc3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJICAgKF9fYmUzMiAqKWFkZHIpOwogfQogCi1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwogCXN0cnVjdCBpcHY2X3NyX2hkciAqaGRyOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGluNl9hZGRyICphZGRyOwogCWludCBhY2NlcHRfc2VnNjsKIAogCWhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCi0JaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpOwotCWlmICghaWRldikgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtJmd0O2lwdjYuZGV2Y29uZl9hbGwtJmd0O3NlZzZfZW5hYmxlZCksCiAJCQkgIFJFQURfT05DRShpZGV2LSZndDtjbmYuc2VnNl9lbmFibGVkKSk7CiAKQEAgLTQ4NSwxMiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZoZHIgKm9sZGhkcjsKIAl1bnNpZ25lZCBpbnQgY2hkcl9sZW47CiAJdW5zaWduZWQgY2hhciAqYnVmOwpAQCAtNDk5LDggJiM0Mzs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgbiA9IDA7CiAJdTMyIHI7CiAKLQlpZGV2ID0gX19pbjZfZGV2X2dldChza2ItJmd0O2Rldik7Ci0KIAlhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LSZndDtpcHY2LmRldmNvbmZfYWxsLSZndDtycGxfc2VnX2VuYWJsZWQpLAogCQkJICAgICBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLnJwbF9zZWdfZW5hYmxlZCkpOwogCWlmICghYWNjZXB0X3JwbF9zZWcpIHsKQEAgLTY4OSwxMCAmIzQzOzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc3dpdGNoIChoZHItJmd0O3R5cGUpIHsKIAljYXNlIElQVjZfU1JDUlRfVFlQRV80OgogCQkvKiBzZWdtZW50IHJvdXRpbmcgKi8KLQkJcmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7CiAJY2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzoKIAkJLyogcnBsIHNlZ21lbnQgcm91dGluZyAqLwotCQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTgzNyw2ICYjNDM7ODMxLDEwIEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsCiAJCQkgICgmYW1wO2hkci0mZ3Q7dHlwZSkgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CiAJcmV0dXJuIC0xOwomIzQzOwomIzQzO2Rpc2FibGVkOgomIzQzOwlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7CiYjNDM7CXJldHVybiAtMTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODkKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogNzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YC4gVGhlIHByaW1hcnkgY2hhbmdlIGlzIHRoZSBwYXNzaW5nIG9mIGBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2YCBhcyBhbiBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuIEl0JiMzOTtzIGEgY2xlYW4gdXAgb2Ygc29ydHMsIHJlbW92aW5nIHRoZSBpbnRlcm5hbCBmZXRjaCBvZiBgaWRldmAgd2l0aCBgX19pbjZfZGV2X2dldChza2ItJmd0O2RldilgLgoKVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBmb3IgYCFpZGV2YCB3aXRoaW4gYGlwdjZfcnRoZHJfcmN2YC4gSWYgYGlkZXZgIGlzIE5VTEwsIHRoZSBjb2RlIGp1bXBzIHRvIGBkaXNhYmxlZGAsIGFuZCB0aGUgYHNrYmAgaXMgZHJvcHBlZCB3aXRoIGBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVEYC4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgY29yZSBmaXguCgpOb3csIGxvb2tpbmcgYXQgdGhlIHJvb3QgY2F1c2UsIEkgc2VlIHRoZSB2dWxuZXJhYmlsaXR5IGxpZXMgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgLiBQcmV2aW91c2x5LCBgaWRldmAgd2FzIHJldHJpZXZlZCB1c2luZyBgX19pbjZfZGV2X2dldChza2ItJmd0O2RldilgICpidXQqIG5vdCB2YWxpZGF0ZWQgYmVmb3JlIHVzZToKYGBgYwoJaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpOwoKCWFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtJmd0O2lwdjYuZGV2Y29uZl9hbGwtJmd0O3JwbF9zZWdfZW5hYmxlZCksCgkJCSAgICAgUkVBRF9PTkNFKGlkZXYtJmd0O2NuZi5ycGxfc2VnX2VuYWJsZWQpKTsKYGBgClRoaXMgaXMgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIElmIGBfX2luNl9kZXZfZ2V0YCByZXR1cm5lZCBOVUxMLCBkZXJlZmVyZW5jaW5nIGBpZGV2LSZndDtjbmYucnBsX3NlZ19lbmFibGVkYCB3b3VsZCBjcmFzaCB0aGUga2VybmVsLiBUaGUgcGF0Y2ggbmVhdGx5IGFkZHJlc3NlcyB0aGlzIGJ5IHBlcmZvcm1pbmcgdGhlIGNoZWNrIGhpZ2hlciB1cCB0aGUgY2FsbCBzdGFjayB3aXRoaW4gYGlwdjZfcnRoZHJfcmN2YC4gVGhlIHVwZGF0ZWQgY29kZSBwcm9wYWdhdGVzIHRoZSBgaWRldmAgcG9pbnRlciBmcm9tIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgYWxsb3dzIGZvciBhIGNsZWFuIGNoZWNrIGFuZCBhdm9pZHMgdGhlIHBvdGVudGlhbCBjcmFzaC4KCk5vdywgbXkga2V5IHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZ3Jlc3Npb25zLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBZnRlciBhIHF1aWNrIHJldmlldywgSSBkb24mIzM5O3Qgc2VlIGFueSBldmlkZW5jZSBvZiB0aGF0LiBJdCYjMzk7cyBzdHJpY3RseSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBmaXguIEtBU0FOIHdvdWxkIGhhdmUgbGlrZWx5IGNhdWdodCB0aGlzLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyB3b3VsZCBoYXZlIHJlc3VsdGVkLiBUaGVyZSYjMzk7cyBubyBjb21wbGV4IGFsbG9jYXRpb24sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBvYnZpb3VzIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuIFRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjM0LjAxOTA1NDM4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzExNjcyMzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9ydGhkcl9yY3ZcIixcbiAgICBcImlwdjZfc3JoX3JjdlwiLFxuICAgIFwiaXB2Nl9ycGxfc3JoX3JjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGluIGBpcHY2X3JwbF9zcmhfcmN2YCB3aGVyZSBgaWRldmAgd2FzIGZldGNoZWQgYnV0IG5vdCBjaGVja2VkIGZvciBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgYGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWRgLiBUaGUgZml4IGNoZWNrcyBgaWRldmAgaW4gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBwYXNzZXMgaXQgYXMgYW4gYXJndW1lbnQsIGRyb3BwaW5nIHRoZSBwYWNrZXQgaWYgYGlkZXZgIGlzIE5VTEwuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGlzc3VlIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UpIHRoYXQgaXMgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIG9yIEtBU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZW4gYGlkZXZgIGlzIE5VTEwgYnkgbW92aW5nIHRoZSBgaWRldmAgY2hlY2sgdG8gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZyBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgYnkgc2VuZGluZyBjcmFmdGVkIElQdjYgcGFja2V0cyB3aXRoIFNlZ21lbnQgUm91dGluZyBvciBSUEwgU2VnbWVudCBSb3V0aW5nIGhlYWRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjM0LjAxOTA2MDY1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNDU1ODM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlNmNlYTU2OTA3YWE0M2E3NGRjZTNkZTZhZWI0ZTE4ZGZkNWUxMWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MzM6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuaW5kZXggOWM2NzdlYjFkMWE2MS4uNTE5NDFhZDY1NmEzNiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5AQCAtMzY4LDIzICszNjgsMTYgQEAgc3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHQgICAoX19iZTMyICopYWRkcik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuK3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gXFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XFxuLVxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcXG4gXFx0aW50IGFjY2VwdF9zZWc2O1xcbiBcXG4gXFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcbi1cXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxuLVxcdGlmICghaWRldikge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHR9XFxuLVxcbiBcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbiBcXHRcXHRcXHQgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XFxuIFxcbkBAIC00ODUsMTIgKzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gLTE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcXG4gXFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4tXFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcXG4gXFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xcbiBcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuQEAgLTQ5OSw4ICs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0dTY0IG4gPSAwO1xcbiBcXHR1MzIgcjtcXG4gXFxuLVxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG4tXFxuIFxcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXFxuIFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcXG4gXFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xcbkBAIC02ODksMTAgKzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN3aXRjaCAoaGRyLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzQ6XFxuIFxcdFxcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xcbi1cXHRcXHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XFxuK1xcdFxcdGlmICghaWRldilcXG4rXFx0XFx0XFx0Z290byBkaXNhYmxlZDtcXG4rXFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiBcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxcbiBcXHRcXHQvKiBycGwgc2VnbWVudCByb3V0aW5nICovXFxuLVxcdFxcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYik7XFxuK1xcdFxcdGlmICghaWRldilcXG4rXFx0XFx0XFx0Z290byBkaXNhYmxlZDtcXG4rXFx0XFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtODM3LDYgKzgzMSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcXG4gXFx0XFx0XFx0ICAoXFx1MDAyNmhkci1cXHUwMDNldHlwZSkgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7XFxuIFxcdHJldHVybiAtMTtcXG4rXFxuK2Rpc2FibGVkOlxcbitcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7XFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzUuNDQ0Mzk2Nzg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0Njg4MjUxOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiLFxuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBpcHY2X3JwbF9zcmhfcmN2YCB3aGVuIGBpZGV2YCBpcyBOVUxMIGJ5IG1vdmluZyB0aGUgYGlkZXZgIGNoZWNrIHRvIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHByb2Nlc3NpbmcgcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHNlbmRpbmcgY3JhZnRlZCBJUHY2IHBhY2tldHMgd2l0aCBTZWdtZW50IFJvdXRpbmcgb3IgUlBMIFNlZ21lbnQgUm91dGluZyBoZWFkZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZTZjZWE1NjkwN2FhNDNhNzRkY2UzZGU2YWViNGUxOGRmZDVlMTFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MzM6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjUxOTQxYWQ2NTZhMzYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTM2OCwyMyArMzY4LDE2IEBAIHN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHQgICAoX19iZTMyICopYWRkcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiB7XG4gXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XG4tXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIFx0c3RydWN0IGluNl9hZGRyICphZGRyO1xuIFx0aW50IGFjY2VwdF9zZWc2O1xuIFxuIFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXG4tXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbi1cdGlmICghaWRldikge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuIFx0YWNjZXB0X3NlZzYgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXNlZzZfZW5hYmxlZCksXG4gXHRcdFx0ICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XG4gXG5AQCAtNDg1LDEyICs0NzgsMTEgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4tc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XG4gXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XG4gXHR1bnNpZ25lZCBjaGFyICpidWY7XG5AQCAtNDk5LDggKzQ5MSw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0dTY0IG4gPSAwO1xuIFx0dTMyIHI7XG4gXG4tXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbi1cbiBcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VycGxfc2VnX2VuYWJsZWQpLFxuIFx0XHRcdCAgICAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZCkpO1xuIFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xuQEAgLTY4OSwxMCArNjc5LDE0IEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN3aXRjaCAoaGRyLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzQ6XG4gXHRcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xuLVx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XG4rXHRcdGlmICghaWRldilcbitcdFx0XHRnb3RvIGRpc2FibGVkO1xuK1x0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XG4gXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuIFx0XHQvKiBycGwgc2VnbWVudCByb3V0aW5nICovXG4tXHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYik7XG4rXHRcdGlmICghaWRldilcbitcdFx0XHRnb3RvIGRpc2FibGVkO1xuK1x0XHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtODM3LDYgKzgzMSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXG4gXHRcdFx0ICAoXHUwMDI2aGRyLVx1MDAzZXR5cGUpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpO1xuIFx0cmV0dXJuIC0xO1xuK1xuK2Rpc2FibGVkOlxuK1x0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRUQpO1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzUuNDQ0NDEwOTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDEzOTc1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgSVB2NiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCBpdCBtb2RpZmllcyBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2YCBhcmd1bWVudCBpbnN0ZWFkIG9mIGZpZ3VyaW5nIGl0IG91dCB0aGVtc2VsdmVzIHZpYSBgX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KWAuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCByZWZhY3RvcmluZyBhaW1lZCBhdCBpbXByb3Zpbmcgc2FmZXR5LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBub3cgY2hlY2tzIGlmIGBpZGV2YCBpcyBOVUxMICpiZWZvcmUqIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLiBJZiBpdCBpcywgdGhlIGNvZGUganVtcHMgdG8gYSBgZGlzYWJsZWRgIGxhYmVsIGFuZCBkcm9wcyB0aGUgYHNrYmAgd2l0aCB0aGUgYFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRURgLlxuXG5UaGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBtaXRpZ2F0aW9uXCIgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgU2VnbWVudCBSb3V0aW5nIChTUkgpIGFuZCBSUEwgU2VnbWVudCBSb3V0aW5nLiBUaGlzIGNsZWFybHkgcHJldmVudHMgYSBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igc29tZSBraW5kIG9mIGxvZ2ljYWwgZXJyb3Igd2hlbiBgaWRldmAgaXMgdW5leHBlY3RlZGx5IE5VTEwuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBjaGVjayBmb3IgY29ybmVyIGNhc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgc2NlbmFyaW8uIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmV0L2lwdjYvZXh0aGRycy5jYCwgSVB2NiBpcyBvYnZpb3VzbHkgZXNzZW50aWFsLiBTZWdtZW50IFJvdXRpbmcgaXMgdGhlIGtleSBoZXJlLCBzbyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbnMuIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgLCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyIHByb2JhYmx5IGNvbnRyb2xzIHRoaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2Agb3IgYG5ldC9pcHY2L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9yIEkgY2FuIGp1c3QgZ3JlcCBmb3IgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBpbiB0aGUgcmVsZXZhbnQgZmlsZXMgb3IgSSBjYW4ganVzdCBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvZXh0aGRycy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGhpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNTg1ODEwNzg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODUxNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNjMxNjc4NjczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MzMwOTYyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBCZWZvcmUgSSBzdGFydCB0ZWFyaW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSB0aGluZ3MgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljLCBwcmUtZXhpc3RpbmcgY29uZmlndXJhdGlvbiBibG9ja3Mgb3IgZmxhZ3MgdGhhdCBkaXJlY3RseSBwZXJ0YWluIHRvIFNlZ21lbnQgUm91dGluZydzIGdsb2JhbCBlbmFibGVtZW50IG9yIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMuIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTpcblxuKiAgICoqR2xvYmFsIFNSIGVuYWJsZW1lbnQ6KiogSXMgU2VnbWVudCBSb3V0aW5nIGV2ZW4gZ2xvYmFsbHkgZW5hYmxlZCBvbiB0aGlzIGRldmljZSBvciBwbGF0Zm9ybT8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGJlZm9yZSBwcm9jZWVkaW5nLiBBIHNpbXBsZSBgc2hvd2AgY29tbWFuZCBvciBjb25maWcgY2hlY2sgc2hvdWxkIHN1cmZhY2UgdGhpcy5cbiogICAqKlNSLU1QTFMgdnMuIFNSdjY6KiogVGhlIHN5c3RlbSBtaWdodCBiZSBzZXQgdXAgZm9yIGVpdGhlciBTUi1NUExTIG9yIFNSdjYsIG9yIGV2ZW4gYm90aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmbGF2b3Igb2YgU2VnbWVudCBSb3V0aW5nIGlzIGluIHBsYXkuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgSSBpbnRlcnByZXQgdGhlIGV4aXN0aW5nIGNvbmZpZyBhbmQgd2hhdCBJIG5lZWQgdG8gYWRkLiBJJ2xsIGNoZWNrIGZvciBrZXl3b3JkcyBsaWtlIFwic2VnbWVudC1yb3V0aW5nXCIsIFwibXBsc1wiLCBcImlwdjZcIiwgb3IgcmVsYXRlZCB0ZXJtcyBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBvciBWUkYgY29udGV4dHMuXG4qICAgKipFeGlzdGluZyBQb2xpY2llcy9QYXRoczoqKiBXZXJlIHRoZXJlIHNvbWUgcHJlLWV4aXN0aW5nIHNlZ21lbnQtcm91dGluZyBwb2xpY2llcyBhbHJlYWR5IGRlZmluZWQsIG9yIGFueSBzb3VyY2Utcm91dGVkIHBhdGhzIGluIHRoZSBjb25maWd1cmF0aW9uPyBBcmUgdGhlcmUgYW55IFNSIHBvbGljaWVzL3BhdGhzIGNvbmZpZ3VyZWQsIGV2ZW4gaWYgdGhleSdyZSBjdXJyZW50bHkgaW5hY3RpdmUgb3IgaW4gYSBcImRvd25cIiBzdGF0ZT8gSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGFueSBleGlzdGluZyBjb25zdHJhaW50cyBvciBpbnRlcmFjdGlvbnMuXG4qICAgKipDb250cm9sIFBsYW5lIEludGVyYWN0aW9uczoqKiBMZXQgbWUgYWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyByZWxhdGVkIHRvIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb24uIElzIGFuIElHUCBsaWtlIE9TUEYgb3IgSVMtSVMgY29uZmlndXJlZD8gTWF5YmUgQkdQLUxTIGlzIGluIHBsYXk/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgcGxhbmUgYXJjaGl0ZWN0dXJlIGlzIGNydWNpYWwgZm9yIHN1Y2Nlc3NmdWwgaW50ZWdyYXRpb24uXG4qICAgKipMYWJlbCBTcGFjZS9TSUQgQWxsb2NhdGlvbjoqKiBJZiBTUi1NUExTIGlzIHByZXNlbnQsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgbGFiZWwgc3BhY2UgYW5kIFNJRCBhbGxvY2F0aW9uIHNjaGVtZSAoaWYgdGhlIHBsYXRmb3JtIGlzIGZsZXhpYmxlIGVub3VnaCB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24pLlxuKiAgICoqUHJlZml4IFNJRHMgYW5kIE5vZGUgU0lEczoqKiBBcmUgYW55IHByZWZpeCBvciBub2RlIFNJRHMgY29uZmlndXJlZCBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBvciBwZXIgaW50ZXJmYWNlPyBBbnkgcHJlLWNvbmZpZ3VyZWQgU0lEcyBjYW4gaW5mbHVlbmNlIG15IG5leHQgc3RlcHMuXG5cbkJhc2ljYWxseSwgSSBuZWVkIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBTZWdtZW50IFJvdXRpbmcgb24gdGhpcyBib3ggKmJlZm9yZSogSSBldmVuIHN0YXJ0IHRoaW5raW5nIGFib3V0IG1ha2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIGZvciByaXNrLWZyZWUgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDoyNy41NjQ3NzY3NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjExMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9lbmFibGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI4LVxcdC5rZWVwX2FkZHJfb25fZG93blxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIyOTpcXHQuc2VnNl9lbmFibGVkXFx0XFx0PSAwLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjMwLSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjQ2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0IF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5My1cXHQua2VlcF9hZGRyX29uX2Rvd25cXHQ9IDAsXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTQ6XFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NS0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjI9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNS1cXHRhcnJheVtERVZDT05GX0tFRVBfQUREUl9PTl9ET1dOXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZWtlZXBfYWRkcl9vbl9kb3duKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3MzY6XFx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cXHUwMDNlc2VnNl9lbmFibGVkKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzctI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MjMzLVxcdHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzQ6XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwic2VnNl9lbmFibGVkXFxcIixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzU6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpcHY2X2RldmNvbmYuc2VnNl9lbmFibGVkLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIzNi1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4MTpcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbm5ldC9pcHY2L2V4dGhkcnMuYzozODI6XFx0XFx0XFx0ICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjI3LjYwOTE0Mjg2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTE1NTcwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGxpa2VseSBpbnZvbHZlcyBJUHY2LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgd2Ugc3RhbmQgd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGJhc2ljcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfSVBWNmAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBJUHY2IHN1cHBvcnQuIElmIHRoYXQncyBkaXNhYmxlZCwgd2UncmUgbm90IGdvaW5nIGFueXdoZXJlLiBBc3N1bWluZyB0aGF0J3MgZW5hYmxlZCwgdGhlbiBsZXQncyBnbyBhIGxheWVyIGRlZXBlci4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc2VnbWVudGVkIElQdjYgc3VwcG9ydC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGFueXRoaW5nIGxpa2UgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIG9yIGFueSBzaW1pbGFyIG9wdGlvbnMgYXJlIGVuYWJsZWQuIFRoZXNlIGFyZSBrZXkgZm9yIG1vcmUgYWR2YW5jZWQgSVB2NiBmZWF0dXJlcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYmVjYXVzZS4uLiB3ZWxsLCBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIExpZ2h0d2VpZ2h0IFR1bm5lbCBzdXBwb3J0IGVuYWJsZWQuIEknbGwga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzZWFyY2ggdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDozMS41NjA3MDIyMzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTg4MTAzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlLTUtXFxubmV0L2lwdjYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNy1cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTE1PWlwdjYtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjE2OmlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICs9IGlwNm1yLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xNy1cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTIwPWlwdjYtJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIub1xcbm5ldC9pcHY2L01ha2VmaWxlOjIxOmlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYjZfcnVsZXMub1xcbm5ldC9pcHY2L01ha2VmaWxlLTIyLWlwdjYtJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI2OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyODppcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOS1cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICs9IHR1bm5lbDYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JUFY2X01JUDYpICs9IG1pcDYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhL1xcbm5ldC9pcHY2L01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0Kz0gbmV0ZmlsdGVyL1xcbm5ldC9pcHY2L01ha2VmaWxlLTM5LVxcbm5ldC9pcHY2L01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUFY2X1ZUSSkgKz0gaXA2X3Z0aS5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSArPSBzaXQub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgKz0gaXA2X3R1bm5lbC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX0lQVjZfR1JFKSArPSBpcDZfZ3JlLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfSVBWNl9GT1UpICs9IGZvdTYub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQ1LVxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGU9NDc9b2JqLSQoQ09ORklHX0lORVQpICs9IG91dHB1dF9jb3JlLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZS00OS1cXG5uZXQvaXB2Ni9NYWtlZmlsZTo1MDpvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGluZXQ2X2hhc2h0YWJsZXMub1xcbm5ldC9pcHY2L01ha2VmaWxlLTUxLVxcbm5ldC9pcHY2L01ha2VmaWxlOjUyOmlmbmVxICgkKENPTkZJR19JUFY2KSwpXFxubmV0L2lwdjYvTWFrZWZpbGUtNTMtb2JqLSQoQ09ORklHX05FVF9VRFBfVFVOTkVMKSArPSBpcDZfdWRwX3R1bm5lbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjMyLjkyNjU5MDk2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NzI0NjU2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgSVB2NiBFeHRlbnNpb24gSGVhZGVyIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGlzIGZpbGUgaXMgZGVmaW5pdGVseSBsaW5rZWQgaW50byBgaXB2Ni5vYCwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIOKAkyBpdCdzIGFsbCBwYXJ0IG9mIGBDT05GSUdfSVBWNmAsIHNvIHByZXR0eSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgYXJlIGRlZmluZWQgaW4gdGhpcyBmaWxlLiBJdCdzIHRpbWUgdG8gY2hlY2sgaG93IGNvbmRpdGlvbmFsIHRoZXkgYXJlLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGAjaWZkZWZgcyBvciBzaW1pbGFyIGNvbnN0cnVjdHMsIHRoYXQgbWlnaHQgbGltaXQgd2hlbiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGZpbmFsIGltYWdlLiBBcmUgdGhleSBhbHdheXMgaW5jbHVkZWQsIG9yIGFyZSB0aGV5IG9ubHkgYnVpbHQgaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3Igd2l0aCBwYXJ0aWN1bGFyIG9wdGlvbnMgZW5hYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIElQdjYgaW1wbGVtZW50YXRpb24uIFRoaXMgaW1wYWN0cyBzZWN1cml0eSwgZWZmaWNpZW5jeSwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdW51c3VhbCBvciBjb21wbGV4IElQdjYgcGFja2V0cywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNjMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDo0MS40OTkwNTg0NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcwOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDEuNTUxMjM0NTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTAwMTQ5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBzcGVha2luZyBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElQdjYgU1JIIFJlY2VpdmVyIENvZGUgUGF0aHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb2RlIGRlYWxpbmcgd2l0aCBJUHY2IFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlcHRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCdzIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBoYW5kbGluZy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGJsb2NrcyBhcm91bmQgdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIHVzYWdlIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGVzZSBkaXJlY3RpdmVzIGNvdWxkIGRyYXN0aWNhbGx5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb3IgZXZlbiBpbmNsdXNpb24gb2YgdGhlIGNvZGUgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBrZXJuZWwgZmVhdHVyZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hpY2ggc3lzdGVtIGJ1aWxkcyBvciBjb25maWd1cmF0aW9ucyBtaWdodCBoYXZlIHRoaXMgZnVuY3Rpb25hbGl0eSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDQuODYxMjUxNDc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MDpcXHRcXG4gMzYxOlxcdFxcdC8qIHVwZGF0ZSBza2IgY3N1bSB3aXRoIGRpZmYgcmVzdWx0aW5nIGZyb20gc2VnX2xlZnQgZGVjcmVtZW50ICovXFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdHVwZGF0ZV9jc3VtX2RpZmY0KHNrYiwgZnJvbSwgdG8pO1xcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHQvKiBjb21wdXRlIGNzdW0gZGlmZiBiZXR3ZWVuIGN1cnJlbnQgYW5kIG5leHQgc2VnbWVudCBhbmQgdXBkYXRlICovXFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdHVwZGF0ZV9jc3VtX2RpZmYxNihza2IsIChfX2JlMzIgKikoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyKSxcXG4gMzY4OlxcdFxcdFxcdFxcdCAgIChfX2JlMzIgKilhZGRyKTtcXG4gMzY5OlxcdH1cXG4gMzcwOlxcdFxcbiAzNzE6XFx0c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gMzcyOlxcdHtcXG4gMzczOlxcdFxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4gMzc0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiAzNzU6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XFxuIDM3NjpcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XFxuIDM3NzpcXHRcXHRpbnQgYWNjZXB0X3NlZzY7XFxuIDM3ODpcXHRcXG4gMzc5OlxcdFxcdGhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbiAzODI6XFx0XFx0XFx0XFx0ICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoIWFjY2VwdF9zZWc2KSB7XFxuIDM4NTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzg2OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMzg3OlxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAzOTA6XFx0XFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcXG4gMzkxOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAzOTM6XFx0XFx0fVxcbiAzOTQ6XFx0I2VuZGlmXFxuIDM5NTpcXHRcXG4gMzk2OlxcdGxvb3BlZF9iYWNrOlxcbiAzOTc6XFx0XFx0aWYgKGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XFxuIDM5ODpcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNiB8fCBoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KSB7XFxuIDM5OTpcXHRcXHRcXHRcXHRpbnQgb2Zmc2V0ID0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDQwMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA0MDM6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiA0MDQ6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA0MDg6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gNDA5OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuIDQxMDpcXHRcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNClcXG4gNDExOlxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuIDQxMjpcXHRcXHRcXHRcXHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXFx1MDAzZWRldiwgbmV0KTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDE2OlxcdFxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0XFx0b3B0LVxcdTAwM2VzcmNydCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG4gNDE5OlxcdFxcdFxcdG9wdC1cXHUwMDNlbGFzdG9wdCA9IG9wdC1cXHUwMDNlc3JjcnQ7XFxuIDQyMDpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDIxOlxcdFxcdFxcdG9wdC1cXHUwMDNlbmhvZmYgPSAoXFx1MDAyNmhkci1cXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZT0gKGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDEpKSB7XFxuIDQyNzpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDQyODpcXHRcXHRcXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXFxuIDQyOTpcXHRcXHRcXHRcXHRcXHQgICgoXFx1MDAyNmhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiA0NDY6XFx0XFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcXG4gNDUxOlxcdFxcdFxcdHNlZzZfdXBkYXRlX2NzdW0oc2tiKTtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIgPSAqYWRkcjtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdGlmIChza2JfZHN0KHNrYiktXFx1MDAzZWVycm9yKSB7XFxuIDQ1ODpcXHRcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDQuODYxMzc3Mzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjY4ODYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBTUkggUmVjZWl2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzICpub3QqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYW55IHNwZWNpZmljIFNFRzYgTFdUVU5ORUwgY29uZmlndXJhdGlvbiBmbGFncywgd2hpY2ggaXMgYSBiaXQgdW51c3VhbC4gSXQncyBjb21waWxlZCBhcyBsb25nIGFzIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggdGhlIGJhc2VsaW5lIGZvciBhbnkgSVB2NiBpbXBsZW1lbnRhdGlvbi5cblxuQnV0IGhlcmUncyB0aGUgY2F0Y2g6IGl0ICpkb2VzKiBjaGVjayB0aGUgYHNlZzZfZW5hYmxlZGAgc3lzY3RsIHZhcmlhYmxlLiBUaGF0IGZlZWxzIGEgYml0IG9mZi4gSSdtIHdvbmRlcmluZyB3aHksIGdpdmVuIGl0J3MgY2hlY2tpbmcgYHNlZzZfZW5hYmxlZGAuIFdhaXQsIGlzIGBzZWc2X2VuYWJsZWRgIGF2YWlsYWJsZSB1bmNvbmRpdGlvbmFsbHkgYXMgd2VsbD8gVGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzIGRyYW1hdGljYWxseS4gSSdtIGdldHRpbmcgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBzb21ldGhpbmcgaXNuJ3QgcXVpdGUgcmlnaHQuXG5cbkFscmlnaHQsIGxldCdzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjYvYWRkcmNvbmYuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHNlZzZfZW5hYmxlZGAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlIFNFRzYgTFdUVU5ORUwgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBtaXNzaW5nIHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDguNjg4MjY3MDc3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHQuYWNjZXB0X2RhZFxcdFxcdD0gMCxcXG4gMjIxOlxcdFxcdC5zdXBwcmVzc19mcmFnX25kaXNjXFx0PSAxLFxcbiAyMjI6XFx0XFx0LmFjY2VwdF9yYV9tdHVcXHRcXHQ9IDEsXFxuIDIyMzpcXHRcXHQuc3RhYmxlX3NlY3JldFxcdFxcdD0ge1xcbiAyMjQ6XFx0XFx0XFx0LmluaXRpYWxpemVkID0gZmFsc2UsXFxuIDIyNTpcXHRcXHR9LFxcbiAyMjY6XFx0XFx0LnVzZV9vaWZfYWRkcnNfb25seVxcdD0gMCxcXG4gMjI3OlxcdFxcdC5pZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd24gPSAwLFxcbiAyMjg6XFx0XFx0LmtlZXBfYWRkcl9vbl9kb3duXFx0PSAwLFxcbiAyMjk6XFx0XFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG4gMjMwOlxcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG4gMjMxOlxcdFxcdC5zZWc2X3JlcXVpcmVfaG1hY1xcdD0gMCxcXG4gMjMyOlxcdCNlbmRpZlxcbiAyMzM6XFx0XFx0LmVuaGFuY2VkX2RhZCAgICAgICAgICAgPSAxLFxcbiAyMzQ6XFx0XFx0LmFkZHJfZ2VuX21vZGVcXHRcXHQ9IElONl9BRERSX0dFTl9NT0RFX0VVSTY0LFxcbiAyMzU6XFx0XFx0LmRpc2FibGVfcG9saWN5XFx0XFx0PSAwLFxcbiAyMzY6XFx0XFx0LnJwbF9zZWdfZW5hYmxlZFxcdD0gMCxcXG4gMjM3OlxcdFxcdC5pb2FtNl9lbmFibGVkXFx0XFx0PSAwLFxcbiAyMzg6XFx0XFx0LmlvYW02X2lkICAgICAgICAgICAgICAgPSBJT0FNNl9ERUZBVUxUX0lGX0lELFxcbiAyMzk6XFx0XFx0LmlvYW02X2lkX3dpZGVcXHRcXHQ9IElPQU02X0RFRkFVTFRfSUZfSURfV0lERSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDguNjg4NTQ2MDk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTgwNjc2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgc2VnNl9lbmFibGVkYCBhbmQgYHJwbF9zZWdfZW5hYmxlZGAgYXJlICp1bmNvbmRpdGlvbmFsbHkqIGJha2VkIGludG8gYGlwdjZfZGV2Y29uZmAuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBoYXZpbmcgYENPTkZJR19JUFY2YCBkZWZpbmVkIGlzIHRoZSBvbmx5ICphYnNvbHV0ZSogcmVxdWlyZW1lbnQgaGVyZS4gRXhjZWxsZW50LlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGEgbW9yZSBjb21wcmVoZW5zaXZlIGFwcHJvYWNoLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgY29uc2lkZXIgZW5hYmxpbmcgZm9yIGJyb2FkZXIgZnVuY3Rpb25hbGl0eT8gV2VsbCwgd2hpbGUgYENPTkZJR19JUFY2YCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4sIGFuZCB0aGUgcHJpbWFyeSBmb2N1cywgSSBzaG91bGQgYWxzbyB0aGluayBhYm91dCBhZGRpbmcgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgLCBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCwgYW5kIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgLiBUaGVzZSBtaWdodCBwcm92aWRlIHNvbWUgbW9yZSBpbiBkZXB0aCBmdW5jdGlvbmFsaXR5LCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzIG9mIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgbGl2ZSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgYW5kIEkga25vdyB0aGF0IGZpbGUgaXMgY29tcGlsZWQgYXMgbG9uZyBhcyBgQ09ORklHX0lQVjZgIGlzIHNldC5cblxuTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBpcHY2X3JwbF9zcmhfcmN2YC4gSSB0aGluayBJJ2xsIGJlIGFibGUgdG8gZmlndXJlIHRoaW5ncyBvdXQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjU1LjE0NjYxNTkxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG4gNDczOlxcdFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRcXHRyZXR1cm4gLTE7XFxuIDQ3OTpcXHR9XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbiA0ODI6XFx0e1xcbiA0ODM6XFx0XFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XFxuIDQ4NDpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDQ4NTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNDg2OlxcdFxcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XFxuIDQ4NzpcXHRcXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XFxuIDQ4ODpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuIDQ4OTpcXHRcXHRpbnQgYWNjZXB0X3JwbF9zZWc7XFxuIDQ5MDpcXHRcXHRpbnQgaSwgZXJyO1xcbiA0OTE6XFx0XFx0dTY0IG4gPSAwO1xcbiA0OTI6XFx0XFx0dTMyIHI7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXFxuIDQ5NTpcXHRcXHRcXHRcXHQgICAgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XFxuIDQ5NjpcXHRcXHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XFxuIDQ5NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDk5OlxcdFxcdH1cXG4gNTAwOlxcdFxcbiA1MDE6XFx0bG9vcGVkX2JhY2s6XFxuIDUwMjpcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDUwMzpcXHRcXG4gNTA0OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xcbiA1MDU6XFx0XFx0XFx0aWYgKGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjYpIHtcXG4gNTA2OlxcdFxcdFxcdFxcdGludCBvZmZzZXQgPSAoaGRyLVxcdTAwM2VoZHJsZW4gKyAxKSBcXHUwMDNjXFx1MDAzYyAzO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcXG4gNTA5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XFxuIDUxMDpcXHRcXHRcXHRcXHRza2JfcHVsbChza2IsIG9mZnNldCk7XFxuIDUxMTpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxcbiA1MTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgb2Zmc2V0KTtcXG4gNTEzOlxcdFxcbiA1MTQ6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDUxNTpcXHRcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiA1MTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0XFx0XFx0X19za2JfdHVubmVsX3J4KHNrYiwgc2tiLVxcdTAwM2VkZXYsIG5ldCk7XFxuIDUxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NTUuMTQ2NzM2NzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NjI0NDE2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgUm91dGluZyBIZWFkZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb25zLiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSB2ZXJ5IGxpa2VseSBzY2VuYXJpby4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgaWRldmAgbWlnaHQgYmUgTlVMTCBpbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgcGF0Y2ggZml4ZXMgdGhlIHBvdGVudGlhbCBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBidWdmaXguXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGtleSBwbGF5ZXJzIGhlcmUgYXJlIGBpcHY2X3NyaF9yY3ZgLCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGFuZCwgc2luY2UgdGhlc2UgZGVhbCB3aXRoIHJvdXRpbmcgaGVhZGVycywgYGlwdjZfcnRoZHJfcmN2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBoZXJlLiBBIHF1aWNrIHRob3VnaHQ6IEkgc2hvdWxkIGNvbmZpcm0gd2hldGhlciBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIGFyZSBpbmxpbmVkLiBHaXZlbiB0aGVpciBsaWtlbHkgc2l6ZSwgSSBkb3VidCBpdC4gQnV0IEkgc2hvdWxkIGNoZWNrLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0aCB0byB0aGlzIHZ1bG5lcmFiaWxpdHkuIE9rYXksIEknbGwgaW5jbHVkZSBgaXB2Nl9ydGhkcl9yY3ZgLCBhcyBpdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgcm91dGluZyBoZWFkZXJzLlxuXG5OZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSBpZiBgaXB2Nl9ydGhkcl9yY3ZgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIHdpbGwgaW1wYWN0IGhvdyBJIHNob3VsZCB0aGluayBhYm91dCB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjAzLjEwOTE4MTU4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2MzkxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9ydGhkcl9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYz00ODE9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ0LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2NDU6c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy02NDYte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTg0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo4NDE6XFx0LmhhbmRsZXJcXHQ9XFx0aXB2Nl9ydGhkcl9yY3YsXFxubmV0L2lwdjYvZXh0aGRycy5jLTg0Mi1cXHQuZmxhZ3NcXHRcXHQ9XFx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjAzLjE1Nzg1NzE1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg5ODQxMTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBJUHY2IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbiBhbmQgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuIGBpcHY2X3J0aGRyX3JjdmAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIGJ1bW1lciBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYnV0IGl0ICppcyogcmVnaXN0ZXJlZCBhcyBhIHByb3RvY29sIGhhbmRsZXIsIG1ha2luZyBpdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gIFNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgZmF2b3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGJ1dCB0aGVyZSBhcmVuJ3QgYW55IGhlcmUsIEknbGwgZ28gd2l0aCBgaXB2Nl9ydGhkcl9yY3ZgIGFzIG15IGZvY3VzIHN5bWJvbC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gTG9va2luZyBhdCBpdCwgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBhcmUgYWxzbyBzdGF0aWMuICBTbywgIGBpcHY2X3J0aGRyX3JjdmAgcmVhbGx5IGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGRlcGVuZGVuY2llcy4gIEkndmUgZ290IHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb25zLiBUaGUgY29kZSBpbiBgZXh0aGRycy5jYCAqcHJpbWFyaWx5KiBoaW5nZXMgb24gYENPTkZJR19JUFY2YC4gSSBkb24ndCBzZWUgYW55IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiAgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIG9yICBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCAqaW4gdGhpcyBzcGVjaWZpYyBjb2RlKi4gVGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGxpa2VseSBmb3Igc2VnbWVudCByb3V0aW5nICp0dW5uZWxpbmcqLCBub3QgbmVjZXNzYXJpbHkganVzdCByZWNlaXZpbmcgcGFja2V0cyB3aXRoIHRob3NlIGhlYWRlcnMuICBJIHNlZSB0aGF0IHJlY2VpdmluZyBTUkggcGFja2V0cyBvbmx5IHJlbGllcyBvbiBgQ09ORklHX0lQVjZgLlxuXG5Ib3dldmVyLCB0aGUgY29kZSAqZG9lcyogdXNlIHN5c2N0bHMuICBJIGNhbiBzZWUgdGhhdCBgc2VnNl9lbmFibGVkYCBhbmQgYHJwbF9zZWdfZW5hYmxlZGAgYXJlIGltcG9ydGFudC4gIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGhhdmUgdG8gYmUgc2V0IHRvIDEgaW4gb3JkZXIgZm9yIHRoZSBjb2RlIHRvIGV2ZW4gcmVhY2ggdGhlIGNvcmUgbG9naWMgaW4gYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCwgYW5kIFN5emthbGxlciBjYW4gaGFuZGxlIHNldHRpbmcgdGhvc2UsIHNvIGl0J3Mgbm90IGEgbWFqb3IgaXNzdWUuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgSSBjYW4gc2VlIHdoYXQncyBiZWluZyBmaXhlZC4gIEl0J3MgdGhlIGBpZGV2YCBwb2ludGVyLCB3aGljaCBzdGFuZHMgZm9yIGBpbmV0Nl9kZXZgIGFuZCByZXByZXNlbnRzIHRoZSBJUHY2IGludGVyZmFjZS4gIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoYXQgYGlkZXZgIGlzIE5VTEwgZnJvbSBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIHVwIGludG8gYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGJlY2F1c2UgdGhlIGNvZGUgd2FzIGRlcmVmZXJlbmNpbmcgIGBpZGV2YCB3aXRob3V0IGNoZWNraW5nIGlmIGl0IHdhcyBhIHZhbGlkIHBvaW50ZXIgZmlyc3QsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaXMgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIE5vdywgaWYgdGhlIGludGVyZmFjZSBkb2Vzbid0IGhhdmUgSVB2NiBjb25maWd1cmVkLCB0aGUgcGFja2V0IGdldHMgZHJvcHBlZCBlYXJseS4gIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4IHRvIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eS5cblxuVGhpcyBpcyBhIGJ1ZyBmaXggaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgaXB2Nl9ydGhkcl9yY3ZgLCBgaXB2Nl9zcmhfcmN2YCwgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YC4gVGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gaXMgYElQVjZgLiAgSSdsbCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGNvbmZpZ3MgdG8gd29ycnkgYWJvdXQsIGJ1dCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGF0IGBDT05GSUdfSVBWNmAgaXMgc3VmZmljaWVudC4gIEFuZCB3aXRoIHRoYXQsIEknbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTUsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNTozMC4wNTYyNzE1NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM3NDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfcnRoZHJfcmN2XCIsXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnBsX3NyaF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZW4gYGlkZXZgIGlzIE5VTEwgYnkgbW92aW5nIHRoZSBgaWRldmAgY2hlY2sgdG8gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZyBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgYnkgc2VuZGluZyBjcmFmdGVkIElQdjYgcGFja2V0cyB3aXRoIFNlZ21lbnQgUm91dGluZyBvciBSUEwgU2VnbWVudCBSb3V0aW5nIGhlYWRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfcnRoZHJfcmN2XCIsXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnBsX3NyaF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZW4gYGlkZXZgIGlzIE5VTEwgYnkgbW92aW5nIHRoZSBgaWRldmAgY2hlY2sgdG8gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZyBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgYnkgc2VuZGluZyBjcmFmdGVkIElQdjYgcGFja2V0cyB3aXRoIFNlZ21lbnQgUm91dGluZyBvciBSUEwgU2VnbWVudCBSb3V0aW5nIGhlYWRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjMwLjEzMjY1MTkwOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDMxMTYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNTozMC4xMzMwOTAxMTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwMDI2NzMxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlcmUgYGlkZXZgIHdhcyBmZXRjaGVkIGJ1dCBub3QgY2hlY2tlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGBpZGV2LVxcdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWU2Y2VhNTY5MDdhYTQzYTc0ZGNlM2RlNmFlYjRlMThkZmQ1ZTExYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE0OjMzOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA5YzY3N2ViMWQxYTYxLi41MTk0MWFkNjU2YTM2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC0zNjgsMjMgKzM2OCwxNiBAQCBzdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ICAgKF9fYmUzMiAqKWFkZHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcbiBcdGludCBhY2NlcHRfc2VnNjtcbiBcbiBcdGhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXHRpZiAoIWlkZXYpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbiBcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIFxuQEAgLTQ4NSwxMiArNDc4LDExIEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3N0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIHtcbiBcdHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKmhkciwgKm9oZHIsICpjaGRyO1xuIFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbi1cdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIFx0dW5zaWduZWQgY2hhciAqYnVmO1xuQEAgLTQ5OSw4ICs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHU2NCBuID0gMDtcbiBcdHUzMiByO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXG4gXHRhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcbiBcdFx0XHQgICAgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcbiBcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcbkBAIC02ODksMTAgKzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzd2l0Y2ggKGhkci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxuIFx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbi1cdFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpO1xuK1x0XHRpZiAoIWlkZXYpXG4rXHRcdFx0Z290byBkaXNhYmxlZDtcbitcdFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xuIFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiBcdFx0LyogcnBsIHNlZ21lbnQgcm91dGluZyAqL1xuLVx0XHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IpO1xuK1x0XHRpZiAoIWlkZXYpXG4rXHRcdFx0Z290byBkaXNhYmxlZDtcbitcdFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTgzNyw2ICs4MzEsMTAgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELFxuIFx0XHRcdCAgKFx1MDAyNmhkci1cdTAwM2V0eXBlKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTtcbiBcdHJldHVybiAtMTtcbitcbitkaXNhYmxlZDpcbitcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVEKTtcbitcdHJldHVybiAtMTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjMwLjEzMzA5MDk4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAwMjY0OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHBhc3Npbmcgb2YgYHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXZgIGFzIGFuIGFyZ3VtZW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyBhIGNsZWFuIHVwIG9mIHNvcnRzLCByZW1vdmluZyB0aGUgaW50ZXJuYWwgZmV0Y2ggb2YgYGlkZXZgIHdpdGggYF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldilgLlxuXG5UaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBgIWlkZXZgIHdpdGhpbiBgaXB2Nl9ydGhkcl9yY3ZgLiBJZiBgaWRldmAgaXMgTlVMTCwgdGhlIGNvZGUganVtcHMgdG8gYGRpc2FibGVkYCwgYW5kIHRoZSBgc2tiYCBpcyBkcm9wcGVkIHdpdGggYFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRURgLiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBjb3JlIGZpeC5cblxuTm93LCBsb29raW5nIGF0IHRoZSByb290IGNhdXNlLCBJIHNlZSB0aGUgdnVsbmVyYWJpbGl0eSBsaWVzIGluIGBpcHY2X3JwbF9zcmhfcmN2YC4gUHJldmlvdXNseSwgYGlkZXZgIHdhcyByZXRyaWV2ZWQgdXNpbmcgYF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldilgICpidXQqIG5vdCB2YWxpZGF0ZWQgYmVmb3JlIHVzZTpcbmBgYGNcblx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5cblx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG5cdFx0XHQgICAgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcbmBgYFxuVGhpcyBpcyBhIHRleHRib29rIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gSWYgYF9faW42X2Rldl9nZXRgIHJldHVybmVkIE5VTEwsIGRlcmVmZXJlbmNpbmcgYGlkZXYtXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZGAgd291bGQgY3Jhc2ggdGhlIGtlcm5lbC4gVGhlIHBhdGNoIG5lYXRseSBhZGRyZXNzZXMgdGhpcyBieSBwZXJmb3JtaW5nIHRoZSBjaGVjayBoaWdoZXIgdXAgdGhlIGNhbGwgc3RhY2sgd2l0aGluIGBpcHY2X3J0aGRyX3JjdmAuIFRoZSB1cGRhdGVkIGNvZGUgcHJvcGFnYXRlcyB0aGUgYGlkZXZgIHBvaW50ZXIgZnJvbSBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGFsbG93cyBmb3IgYSBjbGVhbiBjaGVjayBhbmQgYXZvaWRzIHRoZSBwb3RlbnRpYWwgY3Jhc2guXG5cbk5vdywgbXkga2V5IHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZ3Jlc3Npb25zLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBZnRlciBhIHF1aWNrIHJldmlldywgSSBkb24ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHRoYXQuIEl0J3Mgc3RyaWN0bHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZml4LiBLQVNBTiB3b3VsZCBoYXZlIGxpa2VseSBjYXVnaHQgdGhpcywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgd291bGQgaGF2ZSByZXN1bHRlZC4gVGhlcmUncyBubyBjb21wbGV4IGFsbG9jYXRpb24sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBvYnZpb3VzIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuIFRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODksIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NDEuMTM1NzQ0MDE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZGAuIFRoZSBmaXggY2hlY2tzIGBpZGV2YCBpbiB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAgYW5kIHBhc3NlcyBpdCBhcyBhbiBhcmd1bWVudCwgZHJvcHBpbmcgdGhlIHBhY2tldCBpZiBgaWRldmAgaXMgTlVMTC4gVGhpcyBpcyBhIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgaXNzdWUgKE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG9vcHMgb3IgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlcmUgYGlkZXZgIHdhcyBmZXRjaGVkIGJ1dCBub3QgY2hlY2tlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGBpZGV2LVxcdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwx6bf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 13:39:28 +0000 UTC FinishedAt: 2026-08-17 14:35:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "50f6d3a5-67ad-41b1-be31-d2b800b089f8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipv6_rthdr_rcv", "ipv6_srh_rcv", "ipv6_rpl_srh_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+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHY2X3J0aGRyX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3NyaF9yY3YmIzM0OywKICAgICYjMzQ7aXB2Nl9ycGxfc3JoX3JjdiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlcmUgYGlkZXZgIHdhcyBmZXRjaGVkIGJ1dCBub3QgY2hlY2tlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGBpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWRgLiBUaGUgZml4IGNoZWNrcyBgaWRldmAgaW4gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBwYXNzZXMgaXQgYXMgYW4gYXJndW1lbnQsIGRyb3BwaW5nIHRoZSBwYWNrZXQgaWYgYGlkZXZgIGlzIE5VTEwuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGlzc3VlIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UpIHRoYXQgaXMgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIG9yIEtBU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBpcHY2X3JwbF9zcmhfcmN2YCB3aGVuIGBpZGV2YCBpcyBOVUxMIGJ5IG1vdmluZyB0aGUgYGlkZXZgIGNoZWNrIHRvIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHByb2Nlc3NpbmcgcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHNlbmRpbmcgY3JhZnRlZCBJUHY2IHBhY2tldHMgd2l0aCBTZWdtZW50IFJvdXRpbmcgb3IgUlBMIFNlZ21lbnQgUm91dGluZyBoZWFkZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjMzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWU2Y2VhNTY5MDdhYTQzYTc0ZGNlM2RlNmFlYjRlMThkZmQ1ZTExYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE0OjMzOjMyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuaW5kZXggOWM2NzdlYjFkMWE2MS4uNTE5NDFhZDY1NmEzNiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2V4dGhkcnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jXG5AQCAtMzY4LDIzICYjNDM7MzY4LDE2IEBAIHN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHQgICAoX19iZTMyICopYWRkcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcbiBcdGludCBhY2NlcHRfc2VnNjtcbiBcbiBcdGhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXHRpZiAoIWlkZXYpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbiBcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIFxuQEAgLTQ4NSwxMiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIC0xO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XG4gXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XG4gXHR1bnNpZ25lZCBjaGFyICpidWY7XG5AQCAtNDk5LDggJiM0Mzs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHU2NCBuID0gMDtcbiBcdHUzMiByO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXG4gXHRhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcbiBcdFx0XHQgICAgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcbiBcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcbkBAIC02ODksMTAgJiM0Mzs2NzksMTQgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3dpdGNoIChoZHItXHUwMDNldHlwZSkge1xuIFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfNDpcbiBcdFx0Lyogc2VnbWVudCByb3V0aW5nICovXG4tXHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiKTtcbiYjNDM7XHRcdGlmICghaWRldilcbiYjNDM7XHRcdFx0Z290byBkaXNhYmxlZDtcbiYjNDM7XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiBcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4gXHRcdC8qIHJwbCBzZWdtZW50IHJvdXRpbmcgKi9cbi1cdFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiKTtcbiYjNDM7XHRcdGlmICghaWRldilcbiYjNDM7XHRcdFx0Z290byBkaXNhYmxlZDtcbiYjNDM7XHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYiwgaWRldik7XG4gXHRkZWZhdWx0OlxuIFx0XHRicmVhaztcbiBcdH1cbkBAIC04MzcsNiAmIzQzOzgzMSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXG4gXHRcdFx0ICAoXHUwMDI2aGRyLVx1MDAzZXR5cGUpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpO1xuIFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7ZGlzYWJsZWQ6XG4mIzQzO1x0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRUQpO1xuJiM0MztcdHJldHVybiAtMTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlbiBgaWRldmAgaXMgTlVMTCBieSBtb3ZpbmcgdGhlIGBpZGV2YCBjaGVjayB0byB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBwcm9jZXNzaW5nIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSBzZW5kaW5nIGNyYWZ0ZWQgSVB2NiBwYWNrZXRzIHdpdGggU2VnbWVudCBSb3V0aW5nIG9yIFJQTCBTZWdtZW50IFJvdXRpbmcgaGVhZGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVlNmNlYTU2OTA3YWE0M2E3NGRjZTNkZTZhZWI0ZTE4ZGZkNWUxMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi41MTk0MWFkNjU2YTM2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC0zNjgsMjMgJiM0MzszNjgsMTYgQEAgc3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJICAgKF9fYmUzMiAqKWFkZHIpOwogfQogCi1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwogCXN0cnVjdCBpcHY2X3NyX2hkciAqaGRyOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGluNl9hZGRyICphZGRyOwogCWludCBhY2NlcHRfc2VnNjsKIAogCWhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCi0JaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpOwotCWlmICghaWRldikgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtJmd0O2lwdjYuZGV2Y29uZl9hbGwtJmd0O3NlZzZfZW5hYmxlZCksCiAJCQkgIFJFQURfT05DRShpZGV2LSZndDtjbmYuc2VnNl9lbmFibGVkKSk7CiAKQEAgLTQ4NSwxMiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZoZHIgKm9sZGhkcjsKIAl1bnNpZ25lZCBpbnQgY2hkcl9sZW47CiAJdW5zaWduZWQgY2hhciAqYnVmOwpAQCAtNDk5LDggJiM0Mzs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgbiA9IDA7CiAJdTMyIHI7CiAKLQlpZGV2ID0gX19pbjZfZGV2X2dldChza2ItJmd0O2Rldik7Ci0KIAlhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LSZndDtpcHY2LmRldmNvbmZfYWxsLSZndDtycGxfc2VnX2VuYWJsZWQpLAogCQkJICAgICBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLnJwbF9zZWdfZW5hYmxlZCkpOwogCWlmICghYWNjZXB0X3JwbF9zZWcpIHsKQEAgLTY4OSwxMCAmIzQzOzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc3dpdGNoIChoZHItJmd0O3R5cGUpIHsKIAljYXNlIElQVjZfU1JDUlRfVFlQRV80OgogCQkvKiBzZWdtZW50IHJvdXRpbmcgKi8KLQkJcmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7CiAJY2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzoKIAkJLyogcnBsIHNlZ21lbnQgcm91dGluZyAqLwotCQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTgzNyw2ICYjNDM7ODMxLDEwIEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsCiAJCQkgICgmYW1wO2hkci0mZ3Q7dHlwZSkgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CiAJcmV0dXJuIC0xOwomIzQzOwomIzQzO2Rpc2FibGVkOgomIzQzOwlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7CiYjNDM7CXJldHVybiAtMTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBJUHY2IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRoYXQgaXQgbW9kaWZpZXMgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCB0byBhY2NlcHQgYSBgc3RydWN0IGluZXQ2X2RldiAqaWRldmAgYXJndW1lbnQgaW5zdGVhZCBvZiBmaWd1cmluZyBpdCBvdXQgdGhlbXNlbHZlcyB2aWEgYF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCByZWZhY3RvcmluZyBhaW1lZCBhdCBpbXByb3Zpbmcgc2FmZXR5LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBub3cgY2hlY2tzIGlmIGBpZGV2YCBpcyBOVUxMICpiZWZvcmUqIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLiBJZiBpdCBpcywgdGhlIGNvZGUganVtcHMgdG8gYSBgZGlzYWJsZWRgIGxhYmVsIGFuZCBkcm9wcyB0aGUgYHNrYmAgd2l0aCB0aGUgYFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRURgLgoKVGhpcyBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgbWl0aWdhdGlvbiYjMzQ7IGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHByb2Nlc3NpbmcsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFNlZ21lbnQgUm91dGluZyAoU1JIKSBhbmQgUlBMIFNlZ21lbnQgUm91dGluZy4gVGhpcyBjbGVhcmx5IHByZXZlbnRzIGEgcG9zc2libGUgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIHNvbWUga2luZCBvZiBsb2dpY2FsIGVycm9yIHdoZW4gYGlkZXZgIGlzIHVuZXhwZWN0ZWRseSBOVUxMLiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCwgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gY2hlY2sgZm9yIGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBtaXNzZWQgZHVyaW5nIGRldmVsb3BtZW50LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgc2NlbmFyaW8uIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldC9pcHY2L2V4dGhkcnMuY2AsIElQdjYgaXMgb2J2aW91c2x5IGVzc2VudGlhbC4gU2VnbWVudCBSb3V0aW5nIGlzIHRoZSBrZXkgaGVyZSwgc28gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBjb25maWcgb3B0aW9ucy4gYENPTkZJR19JUFY2X1NFRzZfSE1BQ2AsIGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgcHJvYmFibHkgY29udHJvbHMgdGhpcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2Agb3IgYG5ldC9pcHY2L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9yIEkgY2FuIGp1c3QgZ3JlcCBmb3IgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBpbiB0aGUgcmVsZXZhbnQgZmlsZXMgb3IgSSBjYW4ganVzdCBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvZXh0aGRycy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGhpbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmM9MzQyPXN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM3MTpzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxubmV0L2lwdjYvZXh0aGRycy5jLTM3Mi17XG4tLVxubmV0L2lwdjYvZXh0aGRycy5jPTY0NT1zdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cdFx0XHRnb3RvIGRpc2FibGVkO1xubmV0L2lwdjYvZXh0aGRycy5jOjY4NDpcdFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xubmV0L2lwdjYvZXh0aGRycy5jLTY4NS1cdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1NAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEJlZm9yZSBJIHN0YXJ0IHRlYXJpbmcgaW50byB0aGlzIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byB2ZXJpZnkgYSBjb3VwbGUgb2Yga2V5IHRoaW5ncyByZWxhdGVkIHRvIFNlZ21lbnQgUm91dGluZy4gSSBzaG91bGQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMsIHByZS1leGlzdGluZyBjb25maWd1cmF0aW9uIGJsb2NrcyBvciBmbGFncyB0aGF0IGRpcmVjdGx5IHBlcnRhaW4gdG8gU2VnbWVudCBSb3V0aW5nJiMzOTtzIGdsb2JhbCBlbmFibGVtZW50IG9yIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpbmdzIGxpa2U6CgoqICAgKipHbG9iYWwgU1IgZW5hYmxlbWVudDoqKiBJcyBTZWdtZW50IFJvdXRpbmcgZXZlbiBnbG9iYWxseSBlbmFibGVkIG9uIHRoaXMgZGV2aWNlIG9yIHBsYXRmb3JtPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoaXMgYmVmb3JlIHByb2NlZWRpbmcuIEEgc2ltcGxlIGBzaG93YCBjb21tYW5kIG9yIGNvbmZpZyBjaGVjayBzaG91bGQgc3VyZmFjZSB0aGlzLgoqICAgKipTUi1NUExTIHZzLiBTUnY2OioqIFRoZSBzeXN0ZW0gbWlnaHQgYmUgc2V0IHVwIGZvciBlaXRoZXIgU1ItTVBMUyBvciBTUnY2LCBvciBldmVuIGJvdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmxhdm9yIG9mIFNlZ21lbnQgUm91dGluZyBpcyBpbiBwbGF5LiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbXBhY3QgaG93IEkgaW50ZXJwcmV0IHRoZSBleGlzdGluZyBjb25maWcgYW5kIHdoYXQgSSBuZWVkIHRvIGFkZC4gSSYjMzk7bGwgY2hlY2sgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtzZWdtZW50LXJvdXRpbmcmIzM0OywgJiMzNDttcGxzJiMzNDssICYjMzQ7aXB2NiYjMzQ7LCBvciByZWxhdGVkIHRlcm1zIGluIHRoZSBnbG9iYWwgY29uZmlnIG9yIFZSRiBjb250ZXh0cy4KKiAgICoqRXhpc3RpbmcgUG9saWNpZXMvUGF0aHM6KiogV2VyZSB0aGVyZSBzb21lIHByZS1leGlzdGluZyBzZWdtZW50LXJvdXRpbmcgcG9saWNpZXMgYWxyZWFkeSBkZWZpbmVkLCBvciBhbnkgc291cmNlLXJvdXRlZCBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIGFueSBTUiBwb2xpY2llcy9wYXRocyBjb25maWd1cmVkLCBldmVuIGlmIHRoZXkmIzM5O3JlIGN1cnJlbnRseSBpbmFjdGl2ZSBvciBpbiBhICYjMzQ7ZG93biYjMzQ7IHN0YXRlPyBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgYW55IGV4aXN0aW5nIGNvbnN0cmFpbnRzIG9yIGludGVyYWN0aW9ucy4KKiAgICoqQ29udHJvbCBQbGFuZSBJbnRlcmFjdGlvbnM6KiogTGV0IG1lIGFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgcmVsYXRlZCB0byBjb250cm9sIHBsYW5lIGludGVyYWN0aW9uLiBJcyBhbiBJR1AgbGlrZSBPU1BGIG9yIElTLUlTIGNvbmZpZ3VyZWQ/IE1heWJlIEJHUC1MUyBpcyBpbiBwbGF5PyBVbmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIHBsYW5lIGFyY2hpdGVjdHVyZSBpcyBjcnVjaWFsIGZvciBzdWNjZXNzZnVsIGludGVncmF0aW9uLgoqICAgKipMYWJlbCBTcGFjZS9TSUQgQWxsb2NhdGlvbjoqKiBJZiBTUi1NUExTIGlzIHByZXNlbnQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxhYmVsIHNwYWNlIGFuZCBTSUQgYWxsb2NhdGlvbiBzY2hlbWUgKGlmIHRoZSBwbGF0Zm9ybSBpcyBmbGV4aWJsZSBlbm91Z2ggdG8gc3VwcG9ydCBjb25maWd1cmF0aW9uKS4KKiAgICoqUHJlZml4IFNJRHMgYW5kIE5vZGUgU0lEczoqKiBBcmUgYW55IHByZWZpeCBvciBub2RlIFNJRHMgY29uZmlndXJlZCBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBvciBwZXIgaW50ZXJmYWNlPyBBbnkgcHJlLWNvbmZpZ3VyZWQgU0lEcyBjYW4gaW5mbHVlbmNlIG15IG5leHQgc3RlcHMuCgpCYXNpY2FsbHksIEkgbmVlZCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBkZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgU2VnbWVudCBSb3V0aW5nIG9uIHRoaXMgYm94ICpiZWZvcmUqIEkgZXZlbiBzdGFydCB0aGlua2luZyBhYm91dCBtYWtpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBmb3Igcmlzay1mcmVlIGludGVncmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlZzZfZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTIyOC1cdC5rZWVwX2FkZHJfb25fZG93blx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyMjk6XHQuc2VnNl9lbmFibGVkXHRcdD0gMCxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjMwLSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTI0Nj1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmZfZGZsdCBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMjkzLVx0LmtlZXBfYWRkcl9vbl9kb3duXHQ9IDAsXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjI5NDpcdC5zZWc2X2VuYWJsZWRcdFx0PSAwLFxubmV0L2lwdjYvYWRkcmNvbmYuYy0yOTUtI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTY2Mj1zdGF0aWMgdm9pZCBpcHY2X3N0b3JlX2RldmNvbmYoY29uc3Qgc3RydWN0IGlwdjZfZGV2Y29uZiAqY25mLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNS1cdGFycmF5W0RFVkNPTkZfS0VFUF9BRERSX09OX0RPV05dID0gUkVBRF9PTkNFKGNuZi1cdTAwM2VrZWVwX2FkZHJfb25fZG93bik7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3MzY6XHRhcnJheVtERVZDT05GX1NFRzZfRU5BQkxFRF0gPSBSRUFEX09OQ0UoY25mLVx1MDAzZXNlZzZfZW5hYmxlZCk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzctI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9Njg2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBhZGRyY29uZl9zeXNjdGxbXSA9IHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTcyMzMtXHR7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzQ6XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtzZWc2X2VuYWJsZWRcJiMzNDssXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzU6XHRcdC5kYXRhXHRcdD0gXHUwMDI2aXB2Nl9kZXZjb25mLnNlZzZfZW5hYmxlZCxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIzNi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzgwLVxubmV0L2lwdjYvZXh0aGRycy5jOjM4MTpcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxubmV0L2lwdjYvZXh0aGRycy5jOjM4MjpcdFx0XHQgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5zZWc2X2VuYWJsZWQpKTtcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3OQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgSVB2NiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQgbGlrZWx5IGludm9sdmVzIElQdjYsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB3ZSBzdGFuZCB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGJhc2ljcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjaGVja2luZyBgQ09ORklHX0lQVjZgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZ1bmRhbWVudGFsIElQdjYgc3VwcG9ydC4gSWYgdGhhdCYjMzk7cyBkaXNhYmxlZCwgd2UmIzM5O3JlIG5vdCBnb2luZyBhbnl3aGVyZS4gQXNzdW1pbmcgdGhhdCYjMzk7cyBlbmFibGVkLCB0aGVuIGxldCYjMzk7cyBnbyBhIGxheWVyIGRlZXBlci4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc2VnbWVudGVkIElQdjYgc3VwcG9ydC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBhbnl0aGluZyBsaWtlIGBDT05GSUdfSVBWNl9TRUc2X0xXVFVOTkVMYCBvciBhbnkgc2ltaWxhciBvcHRpb25zIGFyZSBlbmFibGVkLiBUaGVzZSBhcmUga2V5IGZvciBtb3JlIGFkdmFuY2VkIElQdjYgZmVhdHVyZXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhpcyBiZWNhdXNlLi4uIHdlbGwsIEkgaGF2ZSB0byBmaWd1cmUgb3V0IGlmIHRoZXJlJiMzOTtzIGFueSBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIExpZ2h0d2VpZ2h0IFR1bm5lbCBzdXBwb3J0IGVuYWJsZWQuIEkmIzM5O2xsIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgc2VhcmNoIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZS01LVxubmV0L2lwdjYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfSVBWNikgJiM0Mzs9IGlwdjYub1xubmV0L2lwdjYvTWFrZWZpbGUtNy1cbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZT0xNT1pcHY2LSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfaXB2Ni5vXG5uZXQvaXB2Ni9NYWtlZmlsZToxNjppcHY2LSQoQ09ORklHX0lQVjZfTVJPVVRFKSAmIzQzOz0gaXA2bXIub1xubmV0L2lwdjYvTWFrZWZpbGUtMTctXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9MjA9aXB2Ni0kKENPTkZJR19ORVRGSUxURVIpICYjNDM7PSBuZXRmaWx0ZXIub1xubmV0L2lwdjYvTWFrZWZpbGU6MjE6aXB2Ni0kKENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUykgJiM0Mzs9IGZpYjZfcnVsZXMub1xubmV0L2lwdjYvTWFrZWZpbGUtMjItaXB2Ni0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9MjQ9aXB2Ni0kKENPTkZJR19ORVRMQUJFTCkgJiM0Mzs9IGNhbGlwc28ub1xubmV0L2lwdjYvTWFrZWZpbGU6MjU6aXB2Ni0kKENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUwpICYjNDM7PSBzZWc2X2lwdHVubmVsLm8gc2VnNl9sb2NhbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZToyNjppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9ITUFDKSAmIzQzOz0gc2VnNl9obWFjLm9cbm5ldC9pcHY2L01ha2VmaWxlOjI3OmlwdjYtJChDT05GSUdfSVBWNl9SUExfTFdUVU5ORUwpICYjNDM7PSBycGxfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGU6Mjg6aXB2Ni0kKENPTkZJR19JUFY2X0lPQU02X0xXVFVOTkVMKSAmIzQzOz0gaW9hbTZfaXB0dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGUtMjktXG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9MzU9b2JqLSQoQ09ORklHX0lORVQ2X1RVTk5FTCkgJiM0Mzs9IHR1bm5lbDYub1xubmV0L2lwdjYvTWFrZWZpbGU6MzY6b2JqLSQoQ09ORklHX0lQVjZfTUlQNikgJiM0Mzs9IG1pcDYub1xubmV0L2lwdjYvTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0lQVjZfSUxBKSAmIzQzOz0gaWxhL1xubmV0L2lwdjYvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05FVEZJTFRFUilcdCYjNDM7PSBuZXRmaWx0ZXIvXG5uZXQvaXB2Ni9NYWtlZmlsZS0zOS1cbm5ldC9pcHY2L01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUFY2X1ZUSSkgJiM0Mzs9IGlwNl92dGkub1xubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSAmIzQzOz0gc2l0Lm9cbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgJiM0Mzs9IGlwNl90dW5uZWwub1xubmV0L2lwdjYvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX0lQVjZfR1JFKSAmIzQzOz0gaXA2X2dyZS5vXG5uZXQvaXB2Ni9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfSVBWNl9GT1UpICYjNDM7PSBmb3U2Lm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ1LVxuLS1cbm5ldC9pcHY2L01ha2VmaWxlPTQ3PW9iai0kKENPTkZJR19JTkVUKSAmIzQzOz0gb3V0cHV0X2NvcmUubyBwcm90b2NvbC5vIFxcXG4tLVxubmV0L2lwdjYvTWFrZWZpbGUtNDktXG5uZXQvaXB2Ni9NYWtlZmlsZTo1MDpvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBpbmV0Nl9oYXNodGFibGVzLm9cbm5ldC9pcHY2L01ha2VmaWxlLTUxLVxubmV0L2lwdjYvTWFrZWZpbGU6NTI6aWZuZXEgKCQoQ09ORklHX0lQVjYpLClcbm5ldC9pcHY2L01ha2VmaWxlLTUzLW9iai0kKENPTkZJR19ORVRfVURQX1RVTk5FTCkgJiM0Mzs9IGlwNl91ZHBfdHVubmVsLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjYzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBJUHY2IEV4dGVuc2lvbiBIZWFkZXIgSGFuZGxpbmcqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0L2lwdjYvZXh0aGRycy5jYC4gVGhpcyBmaWxlIGlzIGRlZmluaXRlbHkgbGlua2VkIGludG8gYGlwdjYub2AsIHdoaWNoIGlzIHByZXR0eSBmdW5kYW1lbnRhbCDigJMgaXQmIzM5O3MgYWxsIHBhcnQgb2YgYENPTkZJR19JUFY2YCwgc28gcHJldHR5IGNvcmUgZnVuY3Rpb25hbGl0eS4gSSBzZWUgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBhcmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaG93IGNvbmRpdGlvbmFsIHRoZXkgYXJlLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGAjaWZkZWZgcyBvciBzaW1pbGFyIGNvbnN0cnVjdHMsIHRoYXQgbWlnaHQgbGltaXQgd2hlbiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGZpbmFsIGltYWdlLiBBcmUgdGhleSBhbHdheXMgaW5jbHVkZWQsIG9yIGFyZSB0aGV5IG9ubHkgYnVpbHQgaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3Igd2l0aCBwYXJ0aWN1bGFyIG9wdGlvbnMgZW5hYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIElQdjYgaW1wbGVtZW50YXRpb24uIFRoaXMgaW1wYWN0cyBzZWN1cml0eSwgZWZmaWNpZW5jeSwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdW51c3VhbCBvciBjb21wbGV4IElQdjYgcGFja2V0cywgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHY2X3NyaF9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjYvZXh0aGRycy5jLTM3MC1cbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbm5ldC9pcHY2L2V4dGhkcnMuYy0zNzIte1xuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY2L2V4dGhkcnMuYy02ODMtXHRcdFx0Z290byBkaXNhYmxlZDtcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XHRcdHJldHVybiBpcHY2X3NyaF9yY3Yoc2tiLCBpZGV2KTtcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODY0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgc3BlYWtpbmcgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgSVB2NiBTUkggUmVjZWl2ZXIgQ29kZSBQYXRocyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb2RlIGRlYWxpbmcgd2l0aCBJUHY2IFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlcHRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBJUHY2IGV4dGVuc2lvbiBoZWFkZXIgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgYCNpZmRlZmAgYmxvY2tzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgdXNhZ2UgaW4gYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoZXNlIGRpcmVjdGl2ZXMgY291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIHRoZSBiZWhhdmlvciBvciBldmVuIGluY2x1c2lvbiBvZiB0aGUgY29kZSBkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGtlcm5lbCBmZWF0dXJlcy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGljaCBzeXN0ZW0gYnVpbGRzIG9yIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IGhhdmUgdGhpcyBmdW5jdGlvbmFsaXR5IGVuYWJsZWQgb3IgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzYwOlx0XG4gMzYxOlx0XHQvKiB1cGRhdGUgc2tiIGNzdW0gd2l0aCBkaWZmIHJlc3VsdGluZyBmcm9tIHNlZ19sZWZ0IGRlY3JlbWVudCAqL1xuIDM2MjpcdFxuIDM2MzpcdFx0dXBkYXRlX2NzdW1fZGlmZjQoc2tiLCBmcm9tLCB0byk7XG4gMzY0Olx0XG4gMzY1Olx0XHQvKiBjb21wdXRlIGNzdW0gZGlmZiBiZXR3ZWVuIGN1cnJlbnQgYW5kIG5leHQgc2VnbWVudCBhbmQgdXBkYXRlICovXG4gMzY2Olx0XG4gMzY3Olx0XHR1cGRhdGVfY3N1bV9kaWZmMTYoc2tiLCAoX19iZTMyICopKFx1MDAyNmlwdjZfaGRyKHNrYiktXHUwMDNlZGFkZHIpLFxuIDM2ODpcdFx0XHRcdCAgIChfX2JlMzIgKilhZGRyKTtcbiAzNjk6XHR9XG4gMzcwOlx0XG4gMzcxOlx0c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiAzNzI6XHR7XG4gMzczOlx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gMzc0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDM3NTpcdFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XG4gMzc2Olx0XHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XG4gMzc3Olx0XHRpbnQgYWNjZXB0X3NlZzY7XG4gMzc4Olx0XG4gMzc5Olx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiAzODA6XHRcbiAzODE6XHRcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIDM4MjpcdFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIDM4MzpcdFxuIDM4NDpcdFx0aWYgKCFhY2NlcHRfc2VnNikge1xuIDM4NTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAzODY6XHRcdFx0cmV0dXJuIC0xO1xuIDM4NzpcdFx0fVxuIDM4ODpcdFxuIDM4OTpcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcbiAzOTA6XHRcdGlmICghc2VnNl9obWFjX3ZhbGlkYXRlX3NrYihza2IpKSB7XG4gMzkxOlx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDM5MjpcdFx0XHRyZXR1cm4gLTE7XG4gMzkzOlx0XHR9XG4gMzk0Olx0I2VuZGlmXG4gMzk1Olx0XG4gMzk2Olx0bG9vcGVkX2JhY2s6XG4gMzk3Olx0XHRpZiAoaGRyLVx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xuIDM5ODpcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY2IHx8IGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNCkge1xuIDM5OTpcdFx0XHRcdGludCBvZmZzZXQgPSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA0MDA6XHRcbiA0MDE6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA0MDI6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA0MDM6XHRcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gNDA0Olx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcbiA0MDU6XHRcdFx0XHRcdFx0ICAgb2Zmc2V0KTtcbiA0MDY6XHRcbiA0MDc6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA0MDg6XHRcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDQwOTpcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiA0MTA6XHRcdFx0XHRpZiAoaGRyLVx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KVxuIDQxMTpcdFx0XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xuIDQxMjpcdFx0XHRcdF9fc2tiX3R1bm5lbF9yeChza2IsIHNrYi1cdTAwM2VkZXYsIG5ldCk7XG4gNDEzOlx0XG4gNDE0Olx0XHRcdFx0bmV0aWZfcngoc2tiKTtcbiA0MTU6XHRcdFx0XHRyZXR1cm4gLTE7XG4gNDE2Olx0XHRcdH1cbiA0MTc6XHRcbiA0MTg6XHRcdFx0b3B0LVx1MDAzZXNyY3J0ID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpO1xuIDQxOTpcdFx0XHRvcHQtXHUwMDNlbGFzdG9wdCA9IG9wdC1cdTAwM2VzcmNydDtcbiA0MjA6XHRcdFx0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgJiM0Mzs9IChoZHItXHUwMDNlaGRybGVuICYjNDM7IDEpIFx1MDAzY1x1MDAzYyAzO1xuIDQyMTpcdFx0XHRvcHQtXHUwMDNlbmhvZmYgPSAoXHUwMDI2aGRyLVx1MDAzZW5leHRoZHIpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7XG4gNDIyOlx0XG4gNDIzOlx0XHRcdHJldHVybiAxO1xuIDQyNDpcdFx0fVxuIDQyNTpcdFxuIDQyNjpcdFx0aWYgKGhkci1cdTAwM2VzZWdtZW50c19sZWZ0IFx1MDAzZT0gKGhkci1cdTAwM2VoZHJsZW4gXHUwMDNlXHUwMDNlIDEpKSB7XG4gNDI3Olx0XHRcdF9fSVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTtcbiA0Mjg6XHRcdFx0aWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELFxuIDQyOTpcdFx0XHRcdFx0ICAoKFx1MDAyNmhkci1cdTAwM2VzZWdtZW50c19sZWZ0KSAtXG4gNDMwOlx0XHRcdFx0XHQgICBza2JfbmV0d29ya19oZWFkZXIoc2tiKSkpO1xuIDQzMTpcdFx0XHRyZXR1cm4gLTE7XG4gNDMyOlx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRpZiAoc2tiX2Nsb25lZChza2IpKSB7XG4gNDM1Olx0XHRcdGlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHtcbiA0MzY6XHRcdFx0XHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSxcbiA0Mzc6XHRcdFx0XHRcdFx0SVBTVEFUU19NSUJfT1VURElTQ0FSRFMpO1xuIDQzODpcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIDQzOTpcdFx0XHRcdHJldHVybiAtMTtcbiA0NDA6XHRcdFx0fVxuIDQ0MTpcdFxuIDQ0MjpcdFx0XHRoZHIgPSAoc3RydWN0IGlwdjZfc3JfaGRyICopc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcbiA0NDM6XHRcdH1cbiA0NDQ6XHRcbiA0NDU6XHRcdGhkci1cdTAwM2VzZWdtZW50c19sZWZ0LS07XG4gNDQ2Olx0XHRhZGRyID0gaGRyLVx1MDAzZXNlZ21lbnRzICYjNDM7IGhkci1cdTAwM2VzZWdtZW50c19sZWZ0O1xuIDQ0NzpcdFxuIDQ0ODpcdFx0c2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiA0NDk6XHRcbiA0NTA6XHRcdGlmIChza2ItXHUwMDNlaXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKVxuIDQ1MTpcdFx0XHRzZWc2X3VwZGF0ZV9jc3VtKHNrYik7XG4gNDUyOlx0XG4gNDUzOlx0XHRpcHY2X2hkcihza2IpLVx1MDAzZWRhZGRyID0gKmFkZHI7XG4gNDU0Olx0XG4gNDU1Olx0XHRpcDZfcm91dGVfaW5wdXQoc2tiKTtcbiA0NTY6XHRcbiA0NTc6XHRcdGlmIChza2JfZHN0KHNrYiktXHUwMDNlZXJyb3IpIHtcbiA0NTg6XHRcdFx0ZHN0X2lucHV0KHNrYik7XG4gNDU5Olx0XHRcdHJldHVybiAtMTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIElQdjYgU1JIIFJlY2VpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCYjMzk7cyAqbm90KiBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGJhc2VkIG9uIGFueSBzcGVjaWZpYyBTRUc2IExXVFVOTkVMIGNvbmZpZ3VyYXRpb24gZmxhZ3MsIHdoaWNoIGlzIGEgYml0IHVudXN1YWwuIEl0JiMzOTtzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLCB3aGljaCBpcyBwcmV0dHkgbXVjaCB0aGUgYmFzZWxpbmUgZm9yIGFueSBJUHY2IGltcGxlbWVudGF0aW9uLgoKQnV0IGhlcmUmIzM5O3MgdGhlIGNhdGNoOiBpdCAqZG9lcyogY2hlY2sgdGhlIGBzZWc2X2VuYWJsZWRgIHN5c2N0bCB2YXJpYWJsZS4gVGhhdCBmZWVscyBhIGJpdCBvZmYuIEkmIzM5O20gd29uZGVyaW5nIHdoeSwgZ2l2ZW4gaXQmIzM5O3MgY2hlY2tpbmcgYHNlZzZfZW5hYmxlZGAuIFdhaXQsIGlzIGBzZWc2X2VuYWJsZWRgIGF2YWlsYWJsZSB1bmNvbmRpdGlvbmFsbHkgYXMgd2VsbD8gVGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzIGRyYW1hdGljYWxseS4gSSYjMzk7bSBnZXR0aW5nIGEgbmFnZ2luZyBmZWVsaW5nIHRoYXQgc29tZXRoaW5nIGlzbiYjMzk7dCBxdWl0ZSByaWdodC4KCkFscmlnaHQsIGxldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG5ldC9pcHY2L2FkZHJjb25mLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBzZWc2X2VuYWJsZWRgIGlzIGFjdHVhbGx5IGF2YWlsYWJsZSByZWdhcmRsZXNzIG9mIHRoZSBTRUc2IExXVFVOTkVMIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgdGhlIG1pc3NpbmcgcGllY2Ugb2YgdGhlIHB1enpsZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2FkZHJjb25mLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIyMDpcdFx0LmFjY2VwdF9kYWRcdFx0PSAwLFxuIDIyMTpcdFx0LnN1cHByZXNzX2ZyYWdfbmRpc2NcdD0gMSxcbiAyMjI6XHRcdC5hY2NlcHRfcmFfbXR1XHRcdD0gMSxcbiAyMjM6XHRcdC5zdGFibGVfc2VjcmV0XHRcdD0ge1xuIDIyNDpcdFx0XHQuaW5pdGlhbGl6ZWQgPSBmYWxzZSxcbiAyMjU6XHRcdH0sXG4gMjI2Olx0XHQudXNlX29pZl9hZGRyc19vbmx5XHQ9IDAsXG4gMjI3Olx0XHQuaWdub3JlX3JvdXRlc193aXRoX2xpbmtkb3duID0gMCxcbiAyMjg6XHRcdC5rZWVwX2FkZHJfb25fZG93blx0PSAwLFxuIDIyOTpcdFx0LnNlZzZfZW5hYmxlZFx0XHQ9IDAsXG4gMjMwOlx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xuIDIzMTpcdFx0LnNlZzZfcmVxdWlyZV9obWFjXHQ9IDAsXG4gMjMyOlx0I2VuZGlmXG4gMjMzOlx0XHQuZW5oYW5jZWRfZGFkICAgICAgICAgICA9IDEsXG4gMjM0Olx0XHQuYWRkcl9nZW5fbW9kZVx0XHQ9IElONl9BRERSX0dFTl9NT0RFX0VVSTY0LFxuIDIzNTpcdFx0LmRpc2FibGVfcG9saWN5XHRcdD0gMCxcbiAyMzY6XHRcdC5ycGxfc2VnX2VuYWJsZWRcdD0gMCxcbiAyMzc6XHRcdC5pb2FtNl9lbmFibGVkXHRcdD0gMCxcbiAyMzg6XHRcdC5pb2FtNl9pZCAgICAgICAgICAgICAgID0gSU9BTTZfREVGQVVMVF9JRl9JRCxcbiAyMzk6XHRcdC5pb2FtNl9pZF93aWRlXHRcdD0gSU9BTTZfREVGQVVMVF9JRl9JRF9XSURFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHNlZzZfZW5hYmxlZGAgYW5kIGBycGxfc2VnX2VuYWJsZWRgIGFyZSAqdW5jb25kaXRpb25hbGx5KiBiYWtlZCBpbnRvIGBpcHY2X2RldmNvbmZgLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgaGF2aW5nIGBDT05GSUdfSVBWNmAgZGVmaW5lZCBpcyB0aGUgb25seSAqYWJzb2x1dGUqIHJlcXVpcmVtZW50IGhlcmUuIEV4Y2VsbGVudC4KCk5vdywgbXkgbWluZCBzaGlmdHMgdG8gYSBtb3JlIGNvbXByZWhlbnNpdmUgYXBwcm9hY2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBjb25zaWRlciBlbmFibGluZyBmb3IgYnJvYWRlciBmdW5jdGlvbmFsaXR5PyBXZWxsLCB3aGlsZSBgQ09ORklHX0lQVjZgIHNlZW1zIHRvIGJlIHRoZSBsaW5jaHBpbiwgYW5kIHRoZSBwcmltYXJ5IGZvY3VzLCBJIHNob3VsZCBhbHNvIHRoaW5rIGFib3V0IGFkZGluZyBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgLCBhbmQgYENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTGAuIFRoZXNlIG1pZ2h0IHByb3ZpZGUgc29tZSBtb3JlIGluIGRlcHRoIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGUgY29yZSBmdW5jdGlvbmFsaXRpZXMgb2YgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBsaXZlIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBhbmQgSSBrbm93IHRoYXQgZmlsZSBpcyBjb21waWxlZCBhcyBsb25nIGFzIGBDT05GSUdfSVBWNmAgaXMgc2V0LgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byBgaXB2Nl9ycGxfc3JoX3JjdmAuIEkgdGhpbmsgSSYjMzk7bGwgYmUgYWJsZSB0byBmaWd1cmUgdGhpbmdzIG91dCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2V4dGhkcnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0XHRcdGlwdjZfaGRyKHNrYiktXHUwMDNlaG9wX2xpbWl0LS07XG4gNDcxOlx0XG4gNDcyOlx0XHRcdHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gNDczOlx0XHRcdGdvdG8gbG9vcGVkX2JhY2s7XG4gNDc0Olx0XHR9XG4gNDc1Olx0XG4gNDc2Olx0XHRkc3RfaW5wdXQoc2tiKTtcbiA0Nzc6XHRcbiA0Nzg6XHRcdHJldHVybiAtMTtcbiA0Nzk6XHR9XG4gNDgwOlx0XG4gNDgxOlx0c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4gNDgyOlx0e1xuIDQ4MzpcdFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gNDg0Olx0XHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gNDg1Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIDQ4NjpcdFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcbiA0ODc6XHRcdHVuc2lnbmVkIGludCBjaGRyX2xlbjtcbiA0ODg6XHRcdHVuc2lnbmVkIGNoYXIgKmJ1ZjtcbiA0ODk6XHRcdGludCBhY2NlcHRfcnBsX3NlZztcbiA0OTA6XHRcdGludCBpLCBlcnI7XG4gNDkxOlx0XHR1NjQgbiA9IDA7XG4gNDkyOlx0XHR1MzIgcjtcbiA0OTM6XHRcbiA0OTQ6XHRcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VycGxfc2VnX2VuYWJsZWQpLFxuIDQ5NTpcdFx0XHRcdCAgICAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZCkpO1xuIDQ5NjpcdFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xuIDQ5NzpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiA0OTg6XHRcdFx0cmV0dXJuIC0xO1xuIDQ5OTpcdFx0fVxuIDUwMDpcdFxuIDUwMTpcdGxvb3BlZF9iYWNrOlxuIDUwMjpcdFx0aGRyID0gKHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDUwMzpcdFxuIDUwNDpcdFx0aWYgKGhkci1cdTAwM2VzZWdtZW50c19sZWZ0ID09IDApIHtcbiA1MDU6XHRcdFx0aWYgKGhkci1cdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNikge1xuIDUwNjpcdFx0XHRcdGludCBvZmZzZXQgPSAoaGRyLVx1MDAzZWhkcmxlbiAmIzQzOyAxKSBcdTAwM2NcdTAwM2MgMztcbiA1MDc6XHRcbiA1MDg6XHRcdFx0XHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcbiA1MDk6XHRcdFx0XHRcdFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTtcbiA1MTA6XHRcdFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gNTExOlx0XHRcdFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcbiA1MTI6XHRcdFx0XHRcdFx0ICAgb2Zmc2V0KTtcbiA1MTM6XHRcbiA1MTQ6XHRcdFx0XHRza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTtcbiA1MTU6XHRcdFx0XHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIDUxNjpcdFx0XHRcdHNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcbiA1MTc6XHRcbiA1MTg6XHRcdFx0XHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXHUwMDNlZGV2LCBuZXQpO1xuIDUxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSVB2NiBSb3V0aW5nIEhlYWRlciBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb25zLiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSB2ZXJ5IGxpa2VseSBzY2VuYXJpby4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgaWRldmAgbWlnaHQgYmUgTlVMTCBpbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgcGF0Y2ggZml4ZXMgdGhlIHBvdGVudGlhbCBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBidWdmaXguCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUga2V5IHBsYXllcnMgaGVyZSBhcmUgYGlwdjZfc3JoX3JjdmAsIGBpcHY2X3JwbF9zcmhfcmN2YCwgYW5kLCBzaW5jZSB0aGVzZSBkZWFsIHdpdGggcm91dGluZyBoZWFkZXJzLCBgaXB2Nl9ydGhkcl9yY3ZgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGhlcmUuIEEgcXVpY2sgdGhvdWdodDogSSBzaG91bGQgY29uZmlybSB3aGV0aGVyIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgYXJlIGlubGluZWQuIEdpdmVuIHRoZWlyIGxpa2VseSBzaXplLCBJIGRvdWJ0IGl0LiBCdXQgSSBzaG91bGQgY2hlY2ssIGp1c3QgdG8gYmUgc3VyZS4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0aCB0byB0aGlzIHZ1bG5lcmFiaWxpdHkuIE9rYXksIEkmIzM5O2xsIGluY2x1ZGUgYGlwdjZfcnRoZHJfcmN2YCwgYXMgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyByb3V0aW5nIGhlYWRlcnMuCgpOZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSBpZiBgaXB2Nl9ydGhkcl9yY3ZgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIGlmIGl0JiMzOTtzIHN0YXRpYyB3aWxsIGltcGFjdCBob3cgSSBzaG91bGQgdGhpbmsgYWJvdXQgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9ydGhkcl9yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9leHRoZHJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvZXh0aGRycy5jPTQ4MT1zdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ0LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xubmV0L2lwdjYvZXh0aGRycy5jOjY0NTpzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ2LXtcbi0tXG5uZXQvaXB2Ni9leHRoZHJzLmM9ODQwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgcnRoZHJfcHJvdG9jb2wgPSB7XG5uZXQvaXB2Ni9leHRoZHJzLmM6ODQxOlx0LmhhbmRsZXJcdD1cdGlwdjZfcnRoZHJfcmN2LFxubmV0L2lwdjYvZXh0aGRycy5jLTg0Mi1cdC5mbGFnc1x0XHQ9XHRJTkVUNl9QUk9UT19OT1BPTElDWSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1OTUKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogMTQyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBJUHY2IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbiBhbmQgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdC4gYGlwdjZfcnRoZHJfcmN2YCBpcyBzdGF0aWMsIHdoaWNoIGlzIGEgYml0IG9mIGEgYnVtbWVyIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgaXQgKmlzKiByZWdpc3RlcmVkIGFzIGEgcHJvdG9jb2wgaGFuZGxlciwgbWFraW5nIGl0IHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiAgU2luY2UgdGhlIGluc3RydWN0aW9ucyBmYXZvciBub24tc3RhdGljIGVudHJ5IHBvaW50cywgYnV0IHRoZXJlIGFyZW4mIzM5O3QgYW55IGhlcmUsIEkmIzM5O2xsIGdvIHdpdGggYGlwdjZfcnRoZHJfcmN2YCBhcyBteSBmb2N1cyBzeW1ib2wuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgcmVsZXZhbnQgZnVuY3Rpb25zLiBMb29raW5nIGF0IGl0LCBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIGFyZSBhbHNvIHN0YXRpYy4gIFNvLCAgYGlwdjZfcnRoZHJfcmN2YCByZWFsbHkgaXMgdGhlIGJlc3Qgc3RhcnRpbmcgcG9pbnQuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBkZXBlbmRlbmNpZXMuICBJJiMzOTt2ZSBnb3QgdG8gY29uc2lkZXIgY29uZmlndXJhdGlvbnMuIFRoZSBjb2RlIGluIGBleHRoZHJzLmNgICpwcmltYXJpbHkqIGhpbmdlcyBvbiBgQ09ORklHX0lQVjZgLiBJIGRvbiYjMzk7dCBzZWUgYW55IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiAgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIG9yICBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCAqaW4gdGhpcyBzcGVjaWZpYyBjb2RlKi4gVGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGxpa2VseSBmb3Igc2VnbWVudCByb3V0aW5nICp0dW5uZWxpbmcqLCBub3QgbmVjZXNzYXJpbHkganVzdCByZWNlaXZpbmcgcGFja2V0cyB3aXRoIHRob3NlIGhlYWRlcnMuICBJIHNlZSB0aGF0IHJlY2VpdmluZyBTUkggcGFja2V0cyBvbmx5IHJlbGllcyBvbiBgQ09ORklHX0lQVjZgLgoKSG93ZXZlciwgdGhlIGNvZGUgKmRvZXMqIHVzZSBzeXNjdGxzLiAgSSBjYW4gc2VlIHRoYXQgYHNlZzZfZW5hYmxlZGAgYW5kIGBycGxfc2VnX2VuYWJsZWRgIGFyZSBpbXBvcnRhbnQuICBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgaGF2ZSB0byBiZSBzZXQgdG8gMSBpbiBvcmRlciBmb3IgdGhlIGNvZGUgdG8gZXZlbiByZWFjaCB0aGUgY29yZSBsb2dpYyBpbiBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgLCBhbmQgU3l6a2FsbGVyIGNhbiBoYW5kbGUgc2V0dGluZyB0aG9zZSwgc28gaXQmIzM5O3Mgbm90IGEgbWFqb3IgaXNzdWUuCgpMb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIEkgY2FuIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGZpeGVkLiAgSXQmIzM5O3MgdGhlIGBpZGV2YCBwb2ludGVyLCB3aGljaCBzdGFuZHMgZm9yIGBpbmV0Nl9kZXZgIGFuZCByZXByZXNlbnRzIHRoZSBJUHY2IGludGVyZmFjZS4gIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoYXQgYGlkZXZgIGlzIE5VTEwgZnJvbSBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIHVwIGludG8gYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGJlY2F1c2UgdGhlIGNvZGUgd2FzIGRlcmVmZXJlbmNpbmcgIGBpZGV2YCB3aXRob3V0IGNoZWNraW5nIGlmIGl0IHdhcyBhIHZhbGlkIHBvaW50ZXIgZmlyc3QsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaXMgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIE5vdywgaWYgdGhlIGludGVyZmFjZSBkb2VzbiYjMzk7dCBoYXZlIElQdjYgY29uZmlndXJlZCwgdGhlIHBhY2tldCBnZXRzIGRyb3BwZWQgZWFybHkuICBJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggdG8gYSBwb3RlbnRpYWxseSBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXR5LgoKVGhpcyBpcyBhIGJ1ZyBmaXggaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC4KClNvLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgYGlwdjZfcnRoZHJfcmN2YCwgYGlwdjZfc3JoX3JjdmAsIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAuIFRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGlzIGBJUFY2YC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgaGlkZGVuIGNvbmZpZ3MgdG8gd29ycnkgYWJvdXQsIGJ1dCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBgQ09ORklHX0lQVjZgIGlzIHN1ZmZpY2llbnQuICBBbmQgd2l0aCB0aGF0LCBJJiMzOTtsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlbiBgaWRldmAgaXMgTlVMTCBieSBtb3ZpbmcgdGhlIGBpZGV2YCBjaGVjayB0byB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBwcm9jZXNzaW5nIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSBzZW5kaW5nIGNyYWZ0ZWQgSVB2NiBwYWNrZXRzIHdpdGggU2VnbWVudCBSb3V0aW5nIG9yIFJQTCBTZWdtZW50IFJvdXRpbmcgaGVhZGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdjZfcnRoZHJfcmN2JiMzNDssCiAgICAmIzM0O2lwdjZfc3JoX3JjdiYjMzQ7LAogICAgJiMzNDtpcHY2X3JwbF9zcmhfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlbiBgaWRldmAgaXMgTlVMTCBieSBtb3ZpbmcgdGhlIGBpZGV2YCBjaGVjayB0byB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgSVB2NiBleHRlbnNpb24gaGVhZGVycyBwcm9jZXNzaW5nIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSBieSBzZW5kaW5nIGNyYWZ0ZWQgSVB2NiBwYWNrZXRzIHdpdGggU2VnbWVudCBSb3V0aW5nIG9yIFJQTCBTZWdtZW50IFJvdXRpbmcgaGVhZGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMTQ6MzU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVlNmNlYTU2OTA3YWE0M2E3NGRjZTNkZTZhZWI0ZTE4ZGZkNWUxMWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAxNDozMzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA5YzY3N2ViMWQxYTYxLi41MTk0MWFkNjU2YTM2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC0zNjgsMjMgJiM0MzszNjgsMTYgQEAgc3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkJICAgKF9fYmUzMiAqKWFkZHIpOwogfQogCi1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwogCXN0cnVjdCBpcHY2X3NyX2hkciAqaGRyOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGluNl9hZGRyICphZGRyOwogCWludCBhY2NlcHRfc2VnNjsKIAogCWhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpOwogCi0JaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpOwotCWlmICghaWRldikgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCWFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtJmd0O2lwdjYuZGV2Y29uZl9hbGwtJmd0O3NlZzZfZW5hYmxlZCksCiAJCQkgIFJFQURfT05DRShpZGV2LSZndDtjbmYuc2VnNl9lbmFibGVkKSk7CiAKQEAgLTQ4NSwxMiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7CiAJc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpOwogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLSZndDtkZXYpOwotCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IGlwdjZoZHIgKm9sZGhkcjsKIAl1bnNpZ25lZCBpbnQgY2hkcl9sZW47CiAJdW5zaWduZWQgY2hhciAqYnVmOwpAQCAtNDk5LDggJiM0Mzs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl1NjQgbiA9IDA7CiAJdTMyIHI7CiAKLQlpZGV2ID0gX19pbjZfZGV2X2dldChza2ItJmd0O2Rldik7Ci0KIAlhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LSZndDtpcHY2LmRldmNvbmZfYWxsLSZndDtycGxfc2VnX2VuYWJsZWQpLAogCQkJICAgICBSRUFEX09OQ0UoaWRldi0mZ3Q7Y25mLnJwbF9zZWdfZW5hYmxlZCkpOwogCWlmICghYWNjZXB0X3JwbF9zZWcpIHsKQEAgLTY4OSwxMCAmIzQzOzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc3dpdGNoIChoZHItJmd0O3R5cGUpIHsKIAljYXNlIElQVjZfU1JDUlRfVFlQRV80OgogCQkvKiBzZWdtZW50IHJvdXRpbmcgKi8KLQkJcmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7CiAJY2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzoKIAkJLyogcnBsIHNlZ21lbnQgcm91dGluZyAqLwotCQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IpOwomIzQzOwkJaWYgKCFpZGV2KQomIzQzOwkJCWdvdG8gZGlzYWJsZWQ7CiYjNDM7CQlyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTgzNyw2ICYjNDM7ODMxLDEwIEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsCiAJCQkgICgmYW1wO2hkci0mZ3Q7dHlwZSkgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CiAJcmV0dXJuIC0xOwomIzQzOwomIzQzO2Rpc2FibGVkOgomIzQzOwlrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7CiYjNDM7CXJldHVybiAtMTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDE0OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODkKCQkJCQkJCW91dHB1dDogMTY3CgkJCQkJCQl0aG91Z2h0czogNzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVB2NiBTZWdtZW50IFJvdXRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBuZXQvaXB2Ni9leHRoZHJzLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YC4gVGhlIHByaW1hcnkgY2hhbmdlIGlzIHRoZSBwYXNzaW5nIG9mIGBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2YCBhcyBhbiBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuIEl0JiMzOTtzIGEgY2xlYW4gdXAgb2Ygc29ydHMsIHJlbW92aW5nIHRoZSBpbnRlcm5hbCBmZXRjaCBvZiBgaWRldmAgd2l0aCBgX19pbjZfZGV2X2dldChza2ItJmd0O2RldilgLgoKVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoZSBjb25kaXRpb25hbCBjaGVjayBmb3IgYCFpZGV2YCB3aXRoaW4gYGlwdjZfcnRoZHJfcmN2YC4gSWYgYGlkZXZgIGlzIE5VTEwsIHRoZSBjb2RlIGp1bXBzIHRvIGBkaXNhYmxlZGAsIGFuZCB0aGUgYHNrYmAgaXMgZHJvcHBlZCB3aXRoIGBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVEYC4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgY29yZSBmaXguCgpOb3csIGxvb2tpbmcgYXQgdGhlIHJvb3QgY2F1c2UsIEkgc2VlIHRoZSB2dWxuZXJhYmlsaXR5IGxpZXMgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgLiBQcmV2aW91c2x5LCBgaWRldmAgd2FzIHJldHJpZXZlZCB1c2luZyBgX19pbjZfZGV2X2dldChza2ItJmd0O2RldilgICpidXQqIG5vdCB2YWxpZGF0ZWQgYmVmb3JlIHVzZToKYGBgYwoJaWRldiA9IF9faW42X2Rldl9nZXQoc2tiLSZndDtkZXYpOwoKCWFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtJmd0O2lwdjYuZGV2Y29uZl9hbGwtJmd0O3JwbF9zZWdfZW5hYmxlZCksCgkJCSAgICAgUkVBRF9PTkNFKGlkZXYtJmd0O2NuZi5ycGxfc2VnX2VuYWJsZWQpKTsKYGBgClRoaXMgaXMgYSB0ZXh0Ym9vayBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIElmIGBfX2luNl9kZXZfZ2V0YCByZXR1cm5lZCBOVUxMLCBkZXJlZmVyZW5jaW5nIGBpZGV2LSZndDtjbmYucnBsX3NlZ19lbmFibGVkYCB3b3VsZCBjcmFzaCB0aGUga2VybmVsLiBUaGUgcGF0Y2ggbmVhdGx5IGFkZHJlc3NlcyB0aGlzIGJ5IHBlcmZvcm1pbmcgdGhlIGNoZWNrIGhpZ2hlciB1cCB0aGUgY2FsbCBzdGFjayB3aXRoaW4gYGlwdjZfcnRoZHJfcmN2YC4gVGhlIHVwZGF0ZWQgY29kZSBwcm9wYWdhdGVzIHRoZSBgaWRldmAgcG9pbnRlciBmcm9tIGBpcHY2X3J0aGRyX3JjdmAuIFRoaXMgYWxsb3dzIGZvciBhIGNsZWFuIGNoZWNrIGFuZCBhdm9pZHMgdGhlIHBvdGVudGlhbCBjcmFzaC4KCk5vdywgbXkga2V5IHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZ3Jlc3Npb25zLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBZnRlciBhIHF1aWNrIHJldmlldywgSSBkb24mIzM5O3Qgc2VlIGFueSBldmlkZW5jZSBvZiB0aGF0LiBJdCYjMzk7cyBzdHJpY3RseSBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBmaXguIEtBU0FOIHdvdWxkIGhhdmUgbGlrZWx5IGNhdWdodCB0aGlzLCBvciBhdCB0aGUgdmVyeSBsZWFzdCwgYSBzdGFuZGFyZCBrZXJuZWwgb29wcyB3b3VsZCBoYXZlIHJlc3VsdGVkLiBUaGVyZSYjMzk7cyBubyBjb21wbGV4IGFsbG9jYXRpb24sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBvYnZpb3VzIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuIFRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAxNDozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjM0LjAxOTA1NDM4NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzExNjcyMzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB2Nl9ydGhkcl9yY3ZcIixcbiAgICBcImlwdjZfc3JoX3JjdlwiLFxuICAgIFwiaXB2Nl9ycGxfc3JoX3JjdlwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnIGluIGBpcHY2X3JwbF9zcmhfcmN2YCB3aGVyZSBgaWRldmAgd2FzIGZldGNoZWQgYnV0IG5vdCBjaGVja2VkIGZvciBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgYGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWRgLiBUaGUgZml4IGNoZWNrcyBgaWRldmAgaW4gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgIGFuZCBwYXNzZXMgaXQgYXMgYW4gYXJndW1lbnQsIGRyb3BwaW5nIHRoZSBwYWNrZXQgaWYgYGlkZXZgIGlzIE5VTEwuIFRoaXMgaXMgYSBzdGFuZGFyZCBtZW1vcnkgc2FmZXR5IGlzc3VlIChOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UpIHRoYXQgaXMgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBvb3BzIG9yIEtBU0FOLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbnMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZW4gYGlkZXZgIGlzIE5VTEwgYnkgbW92aW5nIHRoZSBgaWRldmAgY2hlY2sgdG8gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZyBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgYnkgc2VuZGluZyBjcmFmdGVkIElQdjYgcGFja2V0cyB3aXRoIFNlZ21lbnQgUm91dGluZyBvciBSUEwgU2VnbWVudCBSb3V0aW5nIGhlYWRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjMzOjM0LjAxOTA2MDY1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNDU1ODM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlNmNlYTU2OTA3YWE0M2E3NGRjZTNkZTZhZWI0ZTE4ZGZkNWUxMWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MzM6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXFxuaW5kZXggOWM2NzdlYjFkMWE2MS4uNTE5NDFhZDY1NmEzNiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcXG5AQCAtMzY4LDIzICszNjgsMTYgQEAgc3RhdGljIHZvaWQgc2VnNl91cGRhdGVfY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHQgICAoX19iZTMyICopYWRkcik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuK3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gXFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XFxuLVxcdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XFxuIFxcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcXG4gXFx0aW50IGFjY2VwdF9zZWc2O1xcbiBcXG4gXFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIFxcbi1cXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXFx1MDAzZWRldik7XFxuLVxcdGlmICghaWRldikge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIC0xO1xcbi1cXHR9XFxuLVxcbiBcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbiBcXHRcXHRcXHQgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XFxuIFxcbkBAIC00ODUsMTIgKzQ3OCwxMSBAQCBzdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRyZXR1cm4gLTE7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbitzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXB2Nl9ycGxfc3JfaGRyICpoZHIsICpvaGRyLCAqY2hkcjtcXG4gXFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4tXFx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcXG4gXFx0c3RydWN0IGlwdjZoZHIgKm9sZGhkcjtcXG4gXFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xcbiBcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuQEAgLTQ5OSw4ICs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0dTY0IG4gPSAwO1xcbiBcXHR1MzIgcjtcXG4gXFxuLVxcdGlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi1cXHUwMDNlZGV2KTtcXG4tXFxuIFxcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXFxuIFxcdFxcdFxcdCAgICAgUkVBRF9PTkNFKGlkZXYtXFx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcXG4gXFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xcbkBAIC02ODksMTAgKzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN3aXRjaCAoaGRyLVxcdTAwM2V0eXBlKSB7XFxuIFxcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzQ6XFxuIFxcdFxcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xcbi1cXHRcXHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XFxuK1xcdFxcdGlmICghaWRldilcXG4rXFx0XFx0XFx0Z290byBkaXNhYmxlZDtcXG4rXFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbiBcXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxcbiBcXHRcXHQvKiBycGwgc2VnbWVudCByb3V0aW5nICovXFxuLVxcdFxcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYik7XFxuK1xcdFxcdGlmICghaWRldilcXG4rXFx0XFx0XFx0Z290byBkaXNhYmxlZDtcXG4rXFx0XFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG5AQCAtODM3LDYgKzgzMSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCxcXG4gXFx0XFx0XFx0ICAoXFx1MDAyNmhkci1cXHUwMDNldHlwZSkgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7XFxuIFxcdHJldHVybiAtMTtcXG4rXFxuK2Rpc2FibGVkOlxcbitcXHRrZnJlZV9za2JfcmVhc29uKHNrYiwgU0tCX0RST1BfUkVBU09OX0lQVjZESVNBQkxFRCk7XFxuK1xcdHJldHVybiAtMTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzUuNDQ0Mzk2Nzg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0Njg4MjUxOTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHY2X3J0aGRyX3JjdlwiLFxuICAgIFwiaXB2Nl9zcmhfcmN2XCIsXG4gICAgXCJpcHY2X3JwbF9zcmhfcmN2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBpcHY2X3JwbF9zcmhfcmN2YCB3aGVuIGBpZGV2YCBpcyBOVUxMIGJ5IG1vdmluZyB0aGUgYGlkZXZgIGNoZWNrIHRvIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIHByb2Nlc3NpbmcgcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIGJ5IHNlbmRpbmcgY3JhZnRlZCBJUHY2IHBhY2tldHMgd2l0aCBTZWdtZW50IFJvdXRpbmcgb3IgUlBMIFNlZ21lbnQgUm91dGluZyBoZWFkZXJzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZTZjZWE1NjkwN2FhNDNhNzRkY2UzZGU2YWViNGUxOGRmZDVlMTFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTcgMTQ6MzM6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbmluZGV4IDljNjc3ZWIxZDFhNjEuLjUxOTQxYWQ2NTZhMzYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmNcbisrKyBiL25ldC9pcHY2L2V4dGhkcnMuY1xuQEAgLTM2OCwyMyArMzY4LDE2IEBAIHN0YXRpYyB2b2lkIHNlZzZfdXBkYXRlX2NzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHQgICAoX19iZTMyICopYWRkcik7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcbiB7XG4gXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuIFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XG4tXHRzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2O1xuIFx0c3RydWN0IGluNl9hZGRyICphZGRyO1xuIFx0aW50IGFjY2VwdF9zZWc2O1xuIFxuIFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gXG4tXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbi1cdGlmICghaWRldikge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIC0xO1xuLVx0fVxuLVxuIFx0YWNjZXB0X3NlZzYgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXNlZzZfZW5hYmxlZCksXG4gXHRcdFx0ICBSRUFEX09OQ0UoaWRldi1cdTAwM2VjbmYuc2VnNl9lbmFibGVkKSk7XG4gXG5AQCAtNDg1LDEyICs0NzgsMTEgQEAgc3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiAtMTtcbiB9XG4gXG4tc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4rc3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XG4gXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cdTAwM2VkZXYpO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XG4gXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XG4gXHR1bnNpZ25lZCBjaGFyICpidWY7XG5AQCAtNDk5LDggKzQ5MSw2IEBAIHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0dTY0IG4gPSAwO1xuIFx0dTMyIHI7XG4gXG4tXHRpZGV2ID0gX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KTtcbi1cbiBcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VycGxfc2VnX2VuYWJsZWQpLFxuIFx0XHRcdCAgICAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZCkpO1xuIFx0aWYgKCFhY2NlcHRfcnBsX3NlZykge1xuQEAgLTY4OSwxMCArNjc5LDE0IEBAIHN0YXRpYyBpbnQgaXB2Nl9ydGhkcl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN3aXRjaCAoaGRyLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgSVBWNl9TUkNSVF9UWVBFXzQ6XG4gXHRcdC8qIHNlZ21lbnQgcm91dGluZyAqL1xuLVx0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYik7XG4rXHRcdGlmICghaWRldilcbitcdFx0XHRnb3RvIGRpc2FibGVkO1xuK1x0XHRyZXR1cm4gaXB2Nl9zcmhfcmN2KHNrYiwgaWRldik7XG4gXHRjYXNlIElQVjZfU1JDUlRfVFlQRV8zOlxuIFx0XHQvKiBycGwgc2VnbWVudCByb3V0aW5nICovXG4tXHRcdHJldHVybiBpcHY2X3JwbF9zcmhfcmN2KHNrYik7XG4rXHRcdGlmICghaWRldilcbitcdFx0XHRnb3RvIGRpc2FibGVkO1xuK1x0XHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IsIGlkZXYpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtODM3LDYgKzgzMSwxMCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXG4gXHRcdFx0ICAoXHUwMDI2aGRyLVx1MDAzZXR5cGUpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpO1xuIFx0cmV0dXJuIC0xO1xuK1xuK2Rpc2FibGVkOlxuK1x0a2ZyZWVfc2tiX3JlYXNvbihza2IsIFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRUQpO1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzM6MzUuNDQ0NDEwOTI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgxNDEzOTc1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgSVB2NiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5ldC9pcHY2L2V4dGhkcnMuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCBpdCBtb2RpZmllcyBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIHRvIGFjY2VwdCBhIGBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2YCBhcmd1bWVudCBpbnN0ZWFkIG9mIGZpZ3VyaW5nIGl0IG91dCB0aGVtc2VsdmVzIHZpYSBgX19pbjZfZGV2X2dldChza2ItXHUwMDNlZGV2KWAuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCByZWZhY3RvcmluZyBhaW1lZCBhdCBpbXByb3Zpbmcgc2FmZXR5LiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgYGlwdjZfcnRoZHJfcmN2YCBub3cgY2hlY2tzIGlmIGBpZGV2YCBpcyBOVUxMICpiZWZvcmUqIGNhbGxpbmcgdGhvc2UgZnVuY3Rpb25zLiBJZiBpdCBpcywgdGhlIGNvZGUganVtcHMgdG8gYSBgZGlzYWJsZWRgIGxhYmVsIGFuZCBkcm9wcyB0aGUgYHNrYmAgd2l0aCB0aGUgYFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRURgLlxuXG5UaGlzIHNjcmVhbXMgXCJwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBtaXRpZ2F0aW9uXCIgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgU2VnbWVudCBSb3V0aW5nIChTUkgpIGFuZCBSUEwgU2VnbWVudCBSb3V0aW5nLiBUaGlzIGNsZWFybHkgcHJldmVudHMgYSBwb3NzaWJsZSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugb3Igc29tZSBraW5kIG9mIGxvZ2ljYWwgZXJyb3Igd2hlbiBgaWRldmAgaXMgdW5leHBlY3RlZGx5IE5VTEwuIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBjaGVjayBmb3IgY29ybmVyIGNhc2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIG1pc3NlZCBkdXJpbmcgZGV2ZWxvcG1lbnQuXG5cbk5vdywgbGV0J3MgZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gcmVwcm9kdWNlIHRoaXMgc2NlbmFyaW8uIFNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBgbmV0L2lwdjYvZXh0aGRycy5jYCwgSVB2NiBpcyBvYnZpb3VzbHkgZXNzZW50aWFsLiBTZWdtZW50IFJvdXRpbmcgaXMgdGhlIGtleSBoZXJlLCBzbyBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbnMuIGBDT05GSUdfSVBWNl9TRUc2X0hNQUNgLCBgQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyIHByb2JhYmx5IGNvbnRyb2xzIHRoaXMuIEknbGwgbmVlZCB0byBkaWcgaW50byBgbmV0L2lwdjYvS2NvbmZpZ2Agb3IgYG5ldC9pcHY2L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9yIEkgY2FuIGp1c3QgZ3JlcCBmb3IgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBpbiB0aGUgcmVsZXZhbnQgZmlsZXMgb3IgSSBjYW4ganVzdCBnbyBzdHJhaWdodCB0byBgbmV0L2lwdjYvZXh0aGRycy5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGhpbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNTg1ODEwNzg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODUxNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6MTMuNjMxNjc4NjczWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM5MzMwOTYyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqU2VnbWVudCBSb3V0aW5nIENvbmZpZ3VyYXRpb24gQ2hlY2sqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBCZWZvcmUgSSBzdGFydCB0ZWFyaW5nIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBJIG5lZWQgdG8gdmVyaWZ5IGEgY291cGxlIG9mIGtleSB0aGluZ3MgcmVsYXRlZCB0byBTZWdtZW50IFJvdXRpbmcuIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljLCBwcmUtZXhpc3RpbmcgY29uZmlndXJhdGlvbiBibG9ja3Mgb3IgZmxhZ3MgdGhhdCBkaXJlY3RseSBwZXJ0YWluIHRvIFNlZ21lbnQgUm91dGluZydzIGdsb2JhbCBlbmFibGVtZW50IG9yIG9wZXJhdGlvbmFsIHBhcmFtZXRlcnMuIEknbSB0aGlua2luZyBhYm91dCB0aGluZ3MgbGlrZTpcblxuKiAgICoqR2xvYmFsIFNSIGVuYWJsZW1lbnQ6KiogSXMgU2VnbWVudCBSb3V0aW5nIGV2ZW4gZ2xvYmFsbHkgZW5hYmxlZCBvbiB0aGlzIGRldmljZSBvciBwbGF0Zm9ybT8gSSBuZWVkIHRvIHF1aWNrbHkgY29uZmlybSB0aGlzIGJlZm9yZSBwcm9jZWVkaW5nLiBBIHNpbXBsZSBgc2hvd2AgY29tbWFuZCBvciBjb25maWcgY2hlY2sgc2hvdWxkIHN1cmZhY2UgdGhpcy5cbiogICAqKlNSLU1QTFMgdnMuIFNSdjY6KiogVGhlIHN5c3RlbSBtaWdodCBiZSBzZXQgdXAgZm9yIGVpdGhlciBTUi1NUExTIG9yIFNSdjYsIG9yIGV2ZW4gYm90aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBmbGF2b3Igb2YgU2VnbWVudCBSb3V0aW5nIGlzIGluIHBsYXkuIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IGltcGFjdCBob3cgSSBpbnRlcnByZXQgdGhlIGV4aXN0aW5nIGNvbmZpZyBhbmQgd2hhdCBJIG5lZWQgdG8gYWRkLiBJJ2xsIGNoZWNrIGZvciBrZXl3b3JkcyBsaWtlIFwic2VnbWVudC1yb3V0aW5nXCIsIFwibXBsc1wiLCBcImlwdjZcIiwgb3IgcmVsYXRlZCB0ZXJtcyBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBvciBWUkYgY29udGV4dHMuXG4qICAgKipFeGlzdGluZyBQb2xpY2llcy9QYXRoczoqKiBXZXJlIHRoZXJlIHNvbWUgcHJlLWV4aXN0aW5nIHNlZ21lbnQtcm91dGluZyBwb2xpY2llcyBhbHJlYWR5IGRlZmluZWQsIG9yIGFueSBzb3VyY2Utcm91dGVkIHBhdGhzIGluIHRoZSBjb25maWd1cmF0aW9uPyBBcmUgdGhlcmUgYW55IFNSIHBvbGljaWVzL3BhdGhzIGNvbmZpZ3VyZWQsIGV2ZW4gaWYgdGhleSdyZSBjdXJyZW50bHkgaW5hY3RpdmUgb3IgaW4gYSBcImRvd25cIiBzdGF0ZT8gSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIGFueSBleGlzdGluZyBjb25zdHJhaW50cyBvciBpbnRlcmFjdGlvbnMuXG4qICAgKipDb250cm9sIFBsYW5lIEludGVyYWN0aW9uczoqKiBMZXQgbWUgYWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyByZWxhdGVkIHRvIGNvbnRyb2wgcGxhbmUgaW50ZXJhY3Rpb24uIElzIGFuIElHUCBsaWtlIE9TUEYgb3IgSVMtSVMgY29uZmlndXJlZD8gTWF5YmUgQkdQLUxTIGlzIGluIHBsYXk/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgcGxhbmUgYXJjaGl0ZWN0dXJlIGlzIGNydWNpYWwgZm9yIHN1Y2Nlc3NmdWwgaW50ZWdyYXRpb24uXG4qICAgKipMYWJlbCBTcGFjZS9TSUQgQWxsb2NhdGlvbjoqKiBJZiBTUi1NUExTIGlzIHByZXNlbnQsIEknbGwgbmVlZCB0byBjaGVjayB0aGUgbGFiZWwgc3BhY2UgYW5kIFNJRCBhbGxvY2F0aW9uIHNjaGVtZSAoaWYgdGhlIHBsYXRmb3JtIGlzIGZsZXhpYmxlIGVub3VnaCB0byBzdXBwb3J0IGNvbmZpZ3VyYXRpb24pLlxuKiAgICoqUHJlZml4IFNJRHMgYW5kIE5vZGUgU0lEczoqKiBBcmUgYW55IHByZWZpeCBvciBub2RlIFNJRHMgY29uZmlndXJlZCBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBvciBwZXIgaW50ZXJmYWNlPyBBbnkgcHJlLWNvbmZpZ3VyZWQgU0lEcyBjYW4gaW5mbHVlbmNlIG15IG5leHQgc3RlcHMuXG5cbkJhc2ljYWxseSwgSSBuZWVkIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBTZWdtZW50IFJvdXRpbmcgb24gdGhpcyBib3ggKmJlZm9yZSogSSBldmVuIHN0YXJ0IHRoaW5raW5nIGFib3V0IG1ha2luZyBjaGFuZ2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIGZvciByaXNrLWZyZWUgaW50ZWdyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDoyNy41NjQ3NzY3NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjExMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VnNl9lbmFibGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jPTE4MT1zdGF0aWMgc3RydWN0IGlwdjZfZGV2Y29uZiBpcHY2X2RldmNvbmYgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjI4LVxcdC5rZWVwX2FkZHJfb25fZG93blxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjIyOTpcXHQuc2VnNl9lbmFibGVkXFx0XFx0PSAwLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMjMwLSNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9MjQ2PXN0YXRpYyBzdHJ1Y3QgaXB2Nl9kZXZjb25mIGlwdjZfZGV2Y29uZl9kZmx0IF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5My1cXHQua2VlcF9hZGRyX29uX2Rvd25cXHQ9IDAsXFxubmV0L2lwdjYvYWRkcmNvbmYuYzoyOTQ6XFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTI5NS0jaWZkZWYgQ09ORklHX0lQVjZfU0VHNl9ITUFDXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTU2NjI9c3RhdGljIHZvaWQgaXB2Nl9zdG9yZV9kZXZjb25mKGNvbnN0IHN0cnVjdCBpcHY2X2RldmNvbmYgKmNuZixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTczNS1cXHRhcnJheVtERVZDT05GX0tFRVBfQUREUl9PTl9ET1dOXSA9IFJFQURfT05DRShjbmYtXFx1MDAzZWtlZXBfYWRkcl9vbl9kb3duKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjU3MzY6XFx0YXJyYXlbREVWQ09ORl9TRUc2X0VOQUJMRURdID0gUkVBRF9PTkNFKGNuZi1cXHUwMDNlc2VnNl9lbmFibGVkKTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTU3MzctI2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz02ODYzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIGFkZHJjb25mX3N5c2N0bFtdID0ge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy03MjMzLVxcdHtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzQ6XFx0XFx0LnByb2NuYW1lXFx0PSBcXFwic2VnNl9lbmFibGVkXFxcIixcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjcyMzU6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZpcHY2X2RldmNvbmYuc2VnNl9lbmFibGVkLFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNzIzNi1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz0zNzE9c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODAtXFxubmV0L2lwdjYvZXh0aGRycy5jOjM4MTpcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbm5ldC9pcHY2L2V4dGhkcnMuYzozODI6XFx0XFx0XFx0ICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy0zODMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjI3LjYwOTE0Mjg2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTE1NTcwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyB0aGF0IGxpa2VseSBpbnZvbHZlcyBJUHY2LCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgd2Ugc3RhbmQgd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIGJhc2ljcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfSVBWNmAuIFRoYXQncyB0aGUgYmFzZWxpbmUsIHRoZSBmdW5kYW1lbnRhbCBJUHY2IHN1cHBvcnQuIElmIHRoYXQncyBkaXNhYmxlZCwgd2UncmUgbm90IGdvaW5nIGFueXdoZXJlLiBBc3N1bWluZyB0aGF0J3MgZW5hYmxlZCwgdGhlbiBsZXQncyBnbyBhIGxheWVyIGRlZXBlci4gSSBoYXZlIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc2VnbWVudGVkIElQdjYgc3VwcG9ydC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIGFueXRoaW5nIGxpa2UgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIG9yIGFueSBzaW1pbGFyIG9wdGlvbnMgYXJlIGVuYWJsZWQuIFRoZXNlIGFyZSBrZXkgZm9yIG1vcmUgYWR2YW5jZWQgSVB2NiBmZWF0dXJlcy4gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYmVjYXVzZS4uLiB3ZWxsLCBJIGhhdmUgdG8gZmlndXJlIG91dCBpZiB0aGVyZSdzIGFueSBJUHY2IFNlZ21lbnQgUm91dGluZyB3aXRoIExpZ2h0d2VpZ2h0IFR1bm5lbCBzdXBwb3J0IGVuYWJsZWQuIEknbGwga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBzZWFyY2ggdGhyb3VnaCB0aGUgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDozMS41NjA3MDIyMzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTg4MTAzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlLTUtXFxubmV0L2lwdjYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfSVBWNikgKz0gaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNy1cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTE1PWlwdjYtJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGxfbmV0X2lwdjYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjE2OmlwdjYtJChDT05GSUdfSVBWNl9NUk9VVEUpICs9IGlwNm1yLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0xNy1cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTIwPWlwdjYtJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIub1xcbm5ldC9pcHY2L01ha2VmaWxlOjIxOmlwdjYtJChDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYjZfcnVsZXMub1xcbm5ldC9pcHY2L01ha2VmaWxlLTIyLWlwdjYtJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT0yND1pcHY2LSQoQ09ORklHX05FVExBQkVMKSArPSBjYWxpcHNvLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyNTppcHY2LSQoQ09ORklHX0lQVjZfU0VHNl9MV1RVTk5FTCkgKz0gc2VnNl9pcHR1bm5lbC5vIHNlZzZfbG9jYWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjI2OmlwdjYtJChDT05GSUdfSVBWNl9TRUc2X0hNQUMpICs9IHNlZzZfaG1hYy5vXFxubmV0L2lwdjYvTWFrZWZpbGU6Mjc6aXB2Ni0kKENPTkZJR19JUFY2X1JQTF9MV1RVTk5FTCkgKz0gcnBsX2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZToyODppcHY2LSQoQ09ORklHX0lQVjZfSU9BTTZfTFdUVU5ORUwpICs9IGlvYW02X2lwdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS0yOS1cXG4tLVxcbm5ldC9pcHY2L01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19JTkVUNl9UVU5ORUwpICs9IHR1bm5lbDYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjM2Om9iai0kKENPTkZJR19JUFY2X01JUDYpICs9IG1pcDYub1xcbm5ldC9pcHY2L01ha2VmaWxlOjM3Om9iai0kKENPTkZJR19JUFY2X0lMQSkgKz0gaWxhL1xcbm5ldC9pcHY2L01ha2VmaWxlLTM4LW9iai0kKENPTkZJR19ORVRGSUxURVIpXFx0Kz0gbmV0ZmlsdGVyL1xcbm5ldC9pcHY2L01ha2VmaWxlLTM5LVxcbm5ldC9pcHY2L01ha2VmaWxlOjQwOm9iai0kKENPTkZJR19JUFY2X1ZUSSkgKz0gaXA2X3Z0aS5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDE6b2JqLSQoQ09ORklHX0lQVjZfU0lUKSArPSBzaXQub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQyOm9iai0kKENPTkZJR19JUFY2X1RVTk5FTCkgKz0gaXA2X3R1bm5lbC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDM6b2JqLSQoQ09ORklHX0lQVjZfR1JFKSArPSBpcDZfZ3JlLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZTo0NDpvYmotJChDT05GSUdfSVBWNl9GT1UpICs9IGZvdTYub1xcbm5ldC9pcHY2L01ha2VmaWxlLTQ1LVxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGU9NDc9b2JqLSQoQ09ORklHX0lORVQpICs9IG91dHB1dF9jb3JlLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZS00OS1cXG5uZXQvaXB2Ni9NYWtlZmlsZTo1MDpvYmotJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGluZXQ2X2hhc2h0YWJsZXMub1xcbm5ldC9pcHY2L01ha2VmaWxlLTUxLVxcbm5ldC9pcHY2L01ha2VmaWxlOjUyOmlmbmVxICgkKENPTkZJR19JUFY2KSwpXFxubmV0L2lwdjYvTWFrZWZpbGUtNTMtb2JqLSQoQ09ORklHX05FVF9VRFBfVFVOTkVMKSArPSBpcDZfdWRwX3R1bm5lbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjMyLjkyNjU5MDk2M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1NzI0NjU2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipBbmFseXppbmcgSVB2NiBFeHRlbnNpb24gSGVhZGVyIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGlzIGZpbGUgaXMgZGVmaW5pdGVseSBsaW5rZWQgaW50byBgaXB2Ni5vYCwgd2hpY2ggaXMgcHJldHR5IGZ1bmRhbWVudGFsIOKAkyBpdCdzIGFsbCBwYXJ0IG9mIGBDT05GSUdfSVBWNmAsIHNvIHByZXR0eSBjb3JlIGZ1bmN0aW9uYWxpdHkuIEkgc2VlIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgYXJlIGRlZmluZWQgaW4gdGhpcyBmaWxlLiBJdCdzIHRpbWUgdG8gY2hlY2sgaG93IGNvbmRpdGlvbmFsIHRoZXkgYXJlLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGAjaWZkZWZgcyBvciBzaW1pbGFyIGNvbnN0cnVjdHMsIHRoYXQgbWlnaHQgbGltaXQgd2hlbiB0aG9zZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGZpbmFsIGltYWdlLiBBcmUgdGhleSBhbHdheXMgaW5jbHVkZWQsIG9yIGFyZSB0aGV5IG9ubHkgYnVpbHQgaW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3Igd2l0aCBwYXJ0aWN1bGFyIG9wdGlvbnMgZW5hYmxlZD8gVW5kZXJzdGFuZGluZyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdGl2ZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIElQdjYgaW1wbGVtZW50YXRpb24uIFRoaXMgaW1wYWN0cyBzZWN1cml0eSwgZWZmaWNpZW5jeSwgYW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdW51c3VhbCBvciBjb21wbGV4IElQdjYgcGFja2V0cywgc28gaXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNjMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNDo0MS40OTkwNTg0NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcwOTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwdjZfc3JoX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jPTM0Mj1zdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcwLVxcbm5ldC9pcHY2L2V4dGhkcnMuYzozNzE6c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG5uZXQvaXB2Ni9leHRoZHJzLmMtMzcyLXtcXG4tLVxcbm5ldC9pcHY2L2V4dGhkcnMuYz02NDU9c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jLTY4My1cXHRcXHRcXHRnb3RvIGRpc2FibGVkO1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2ODQ6XFx0XFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xcbm5ldC9pcHY2L2V4dGhkcnMuYy02ODUtXFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDEuNTUxMjM0NTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTAwMTQ5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBzcGVha2luZyBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIElQdjYgU1JIIFJlY2VpdmVyIENvZGUgUGF0aHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb2RlIGRlYWxpbmcgd2l0aCBJUHY2IFNvdXJjZSBSb3V0aW5nIEhlYWRlciAoU1JIKSByZWNlcHRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCdzIElQdjYgZXh0ZW5zaW9uIGhlYWRlciBoYW5kbGluZy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBgaXB2Nl9zcmhfcmN2YCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGJsb2NrcyBhcm91bmQgdGhhdCBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIHVzYWdlIGluIGBuZXQvaXB2Ni9leHRoZHJzLmNgLiBUaGVzZSBkaXJlY3RpdmVzIGNvdWxkIGRyYXN0aWNhbGx5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb3IgZXZlbiBpbmNsdXNpb24gb2YgdGhlIGNvZGUgZGVwZW5kaW5nIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBrZXJuZWwgZmVhdHVyZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hpY2ggc3lzdGVtIGJ1aWxkcyBvciBjb25maWd1cmF0aW9ucyBtaWdodCBoYXZlIHRoaXMgZnVuY3Rpb25hbGl0eSBlbmFibGVkIG9yIGRpc2FibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODY0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDQuODYxMjUxNDc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDgzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9leHRoZHJzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM2MDpcXHRcXG4gMzYxOlxcdFxcdC8qIHVwZGF0ZSBza2IgY3N1bSB3aXRoIGRpZmYgcmVzdWx0aW5nIGZyb20gc2VnX2xlZnQgZGVjcmVtZW50ICovXFxuIDM2MjpcXHRcXG4gMzYzOlxcdFxcdHVwZGF0ZV9jc3VtX2RpZmY0KHNrYiwgZnJvbSwgdG8pO1xcbiAzNjQ6XFx0XFxuIDM2NTpcXHRcXHQvKiBjb21wdXRlIGNzdW0gZGlmZiBiZXR3ZWVuIGN1cnJlbnQgYW5kIG5leHQgc2VnbWVudCBhbmQgdXBkYXRlICovXFxuIDM2NjpcXHRcXG4gMzY3OlxcdFxcdHVwZGF0ZV9jc3VtX2RpZmYxNihza2IsIChfX2JlMzIgKikoXFx1MDAyNmlwdjZfaGRyKHNrYiktXFx1MDAzZWRhZGRyKSxcXG4gMzY4OlxcdFxcdFxcdFxcdCAgIChfX2JlMzIgKilhZGRyKTtcXG4gMzY5OlxcdH1cXG4gMzcwOlxcdFxcbiAzNzE6XFx0c3RhdGljIGludCBpcHY2X3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldilcXG4gMzcyOlxcdHtcXG4gMzczOlxcdFxcdHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTtcXG4gMzc0OlxcdFxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLVxcdTAwM2VkZXYpO1xcbiAzNzU6XFx0XFx0c3RydWN0IGlwdjZfc3JfaGRyICpoZHI7XFxuIDM3NjpcXHRcXHRzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7XFxuIDM3NzpcXHRcXHRpbnQgYWNjZXB0X3NlZzY7XFxuIDM3ODpcXHRcXG4gMzc5OlxcdFxcdGhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRhY2NlcHRfc2VnNiA9IG1pbihSRUFEX09OQ0UobmV0LVxcdTAwM2VpcHY2LmRldmNvbmZfYWxsLVxcdTAwM2VzZWc2X2VuYWJsZWQpLFxcbiAzODI6XFx0XFx0XFx0XFx0ICBSRUFEX09OQ0UoaWRldi1cXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRpZiAoIWFjY2VwdF9zZWc2KSB7XFxuIDM4NTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gMzg2OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gMzg3OlxcdFxcdH1cXG4gMzg4OlxcdFxcbiAzODk6XFx0I2lmZGVmIENPTkZJR19JUFY2X1NFRzZfSE1BQ1xcbiAzOTA6XFx0XFx0aWYgKCFzZWc2X2htYWNfdmFsaWRhdGVfc2tiKHNrYikpIHtcXG4gMzkxOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIC0xO1xcbiAzOTM6XFx0XFx0fVxcbiAzOTQ6XFx0I2VuZGlmXFxuIDM5NTpcXHRcXG4gMzk2OlxcdGxvb3BlZF9iYWNrOlxcbiAzOTc6XFx0XFx0aWYgKGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCA9PSAwKSB7XFxuIDM5ODpcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNiB8fCBoZHItXFx1MDAzZW5leHRoZHIgPT0gTkVYVEhEUl9JUFY0KSB7XFxuIDM5OTpcXHRcXHRcXHRcXHRpbnQgb2Zmc2V0ID0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksXFxuIDQwMjpcXHRcXHRcXHRcXHRcXHRcXHQgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpO1xcbiA0MDM6XFx0XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xcbiA0MDQ6XFx0XFx0XFx0XFx0c2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCk7XFxuIDQwNjpcXHRcXG4gNDA3OlxcdFxcdFxcdFxcdHNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpO1xcbiA0MDg6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gNDA5OlxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbiA9IDA7XFxuIDQxMDpcXHRcXHRcXHRcXHRpZiAoaGRyLVxcdTAwM2VuZXh0aGRyID09IE5FWFRIRFJfSVBWNClcXG4gNDExOlxcdFxcdFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuIDQxMjpcXHRcXHRcXHRcXHRfX3NrYl90dW5uZWxfcngoc2tiLCBza2ItXFx1MDAzZWRldiwgbmV0KTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDE2OlxcdFxcdFxcdH1cXG4gNDE3OlxcdFxcbiA0MTg6XFx0XFx0XFx0b3B0LVxcdTAwM2VzcmNydCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcXG4gNDE5OlxcdFxcdFxcdG9wdC1cXHUwMDNlbGFzdG9wdCA9IG9wdC1cXHUwMDNlc3JjcnQ7XFxuIDQyMDpcXHRcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgKz0gKGhkci1cXHUwMDNlaGRybGVuICsgMSkgXFx1MDAzY1xcdTAwM2MgMztcXG4gNDIxOlxcdFxcdFxcdG9wdC1cXHUwMDNlbmhvZmYgPSAoXFx1MDAyNmhkci1cXHUwMDNlbmV4dGhkcikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0XFx0cmV0dXJuIDE7XFxuIDQyNDpcXHRcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgXFx1MDAzZT0gKGhkci1cXHUwMDNlaGRybGVuIFxcdTAwM2VcXHUwMDNlIDEpKSB7XFxuIDQyNzpcXHRcXHRcXHRfX0lQNl9JTkNfU1RBVFMobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7XFxuIDQyODpcXHRcXHRcXHRpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsXFxuIDQyOTpcXHRcXHRcXHRcXHRcXHQgICgoXFx1MDAyNmhkci1cXHUwMDNlc2VnbWVudHNfbGVmdCkgLVxcbiA0MzA6XFx0XFx0XFx0XFx0XFx0ICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpKTtcXG4gNDMxOlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDMyOlxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKHNrYl9jbG9uZWQoc2tiKSkge1xcbiA0MzU6XFx0XFx0XFx0aWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSkge1xcbiA0MzY6XFx0XFx0XFx0XFx0X19JUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRcXHRJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7XFxuIDQzODpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0aGRyID0gKHN0cnVjdCBpcHY2X3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDQ0MzpcXHRcXHR9XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdGhkci1cXHUwMDNlc2VnbWVudHNfbGVmdC0tO1xcbiA0NDY6XFx0XFx0YWRkciA9IGhkci1cXHUwMDNlc2VnbWVudHMgKyBoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQ7XFxuIDQ0NzpcXHRcXG4gNDQ4OlxcdFxcdHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIDQ0OTpcXHRcXG4gNDUwOlxcdFxcdGlmIChza2ItXFx1MDAzZWlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSlcXG4gNDUxOlxcdFxcdFxcdHNlZzZfdXBkYXRlX2NzdW0oc2tiKTtcXG4gNDUyOlxcdFxcbiA0NTM6XFx0XFx0aXB2Nl9oZHIoc2tiKS1cXHUwMDNlZGFkZHIgPSAqYWRkcjtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0aXA2X3JvdXRlX2lucHV0KHNrYik7XFxuIDQ1NjpcXHRcXG4gNDU3OlxcdFxcdGlmIChza2JfZHN0KHNrYiktXFx1MDAzZWVycm9yKSB7XFxuIDQ1ODpcXHRcXHRcXHRkc3RfaW5wdXQoc2tiKTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAtMTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDQuODYxMzc3Mzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjY4ODYwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVB2NiBTUkggUmVjZWl2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpcHY2X3NyaF9yY3ZgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzICpub3QqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYW55IHNwZWNpZmljIFNFRzYgTFdUVU5ORUwgY29uZmlndXJhdGlvbiBmbGFncywgd2hpY2ggaXMgYSBiaXQgdW51c3VhbC4gSXQncyBjb21waWxlZCBhcyBsb25nIGFzIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZCwgd2hpY2ggaXMgcHJldHR5IG11Y2ggdGhlIGJhc2VsaW5lIGZvciBhbnkgSVB2NiBpbXBsZW1lbnRhdGlvbi5cblxuQnV0IGhlcmUncyB0aGUgY2F0Y2g6IGl0ICpkb2VzKiBjaGVjayB0aGUgYHNlZzZfZW5hYmxlZGAgc3lzY3RsIHZhcmlhYmxlLiBUaGF0IGZlZWxzIGEgYml0IG9mZi4gSSdtIHdvbmRlcmluZyB3aHksIGdpdmVuIGl0J3MgY2hlY2tpbmcgYHNlZzZfZW5hYmxlZGAuIFdhaXQsIGlzIGBzZWc2X2VuYWJsZWRgIGF2YWlsYWJsZSB1bmNvbmRpdGlvbmFsbHkgYXMgd2VsbD8gVGhhdCB3b3VsZCBjaGFuZ2UgdGhpbmdzIGRyYW1hdGljYWxseS4gSSdtIGdldHRpbmcgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBzb21ldGhpbmcgaXNuJ3QgcXVpdGUgcmlnaHQuXG5cbkFscmlnaHQsIGxldCdzIGhlYWQgb3ZlciB0byBgbmV0L2lwdjYvYWRkcmNvbmYuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHNlZzZfZW5hYmxlZGAgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgdGhlIFNFRzYgTFdUVU5ORUwgY29uZmlndXJhdGlvbi4gVGhhdCdzIHRoZSBtaXNzaW5nIHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDguNjg4MjY3MDc3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2Ni9hZGRyY29uZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXHQuYWNjZXB0X2RhZFxcdFxcdD0gMCxcXG4gMjIxOlxcdFxcdC5zdXBwcmVzc19mcmFnX25kaXNjXFx0PSAxLFxcbiAyMjI6XFx0XFx0LmFjY2VwdF9yYV9tdHVcXHRcXHQ9IDEsXFxuIDIyMzpcXHRcXHQuc3RhYmxlX3NlY3JldFxcdFxcdD0ge1xcbiAyMjQ6XFx0XFx0XFx0LmluaXRpYWxpemVkID0gZmFsc2UsXFxuIDIyNTpcXHRcXHR9LFxcbiAyMjY6XFx0XFx0LnVzZV9vaWZfYWRkcnNfb25seVxcdD0gMCxcXG4gMjI3OlxcdFxcdC5pZ25vcmVfcm91dGVzX3dpdGhfbGlua2Rvd24gPSAwLFxcbiAyMjg6XFx0XFx0LmtlZXBfYWRkcl9vbl9kb3duXFx0PSAwLFxcbiAyMjk6XFx0XFx0LnNlZzZfZW5hYmxlZFxcdFxcdD0gMCxcXG4gMjMwOlxcdCNpZmRlZiBDT05GSUdfSVBWNl9TRUc2X0hNQUNcXG4gMjMxOlxcdFxcdC5zZWc2X3JlcXVpcmVfaG1hY1xcdD0gMCxcXG4gMjMyOlxcdCNlbmRpZlxcbiAyMzM6XFx0XFx0LmVuaGFuY2VkX2RhZCAgICAgICAgICAgPSAxLFxcbiAyMzQ6XFx0XFx0LmFkZHJfZ2VuX21vZGVcXHRcXHQ9IElONl9BRERSX0dFTl9NT0RFX0VVSTY0LFxcbiAyMzU6XFx0XFx0LmRpc2FibGVfcG9saWN5XFx0XFx0PSAwLFxcbiAyMzY6XFx0XFx0LnJwbF9zZWdfZW5hYmxlZFxcdD0gMCxcXG4gMjM3OlxcdFxcdC5pb2FtNl9lbmFibGVkXFx0XFx0PSAwLFxcbiAyMzg6XFx0XFx0LmlvYW02X2lkICAgICAgICAgICAgICAgPSBJT0FNNl9ERUZBVUxUX0lGX0lELFxcbiAyMzk6XFx0XFx0LmlvYW02X2lkX3dpZGVcXHRcXHQ9IElPQU02X0RFRkFVTFRfSUZfSURfV0lERSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NDguNjg4NTQ2MDk3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTgwNjc2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJ20gc2VlaW5nLCBgc2VnNl9lbmFibGVkYCBhbmQgYHJwbF9zZWdfZW5hYmxlZGAgYXJlICp1bmNvbmRpdGlvbmFsbHkqIGJha2VkIGludG8gYGlwdjZfZGV2Y29uZmAuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBoYXZpbmcgYENPTkZJR19JUFY2YCBkZWZpbmVkIGlzIHRoZSBvbmx5ICphYnNvbHV0ZSogcmVxdWlyZW1lbnQgaGVyZS4gRXhjZWxsZW50LlxuXG5Ob3csIG15IG1pbmQgc2hpZnRzIHRvIGEgbW9yZSBjb21wcmVoZW5zaXZlIGFwcHJvYWNoLiBBcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgY29uc2lkZXIgZW5hYmxpbmcgZm9yIGJyb2FkZXIgZnVuY3Rpb25hbGl0eT8gV2VsbCwgd2hpbGUgYENPTkZJR19JUFY2YCBzZWVtcyB0byBiZSB0aGUgbGluY2hwaW4sIGFuZCB0aGUgcHJpbWFyeSBmb2N1cywgSSBzaG91bGQgYWxzbyB0aGluayBhYm91dCBhZGRpbmcgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgLCBgQ09ORklHX0lQVjZfU0VHNl9ITUFDYCwgYW5kIGBDT05GSUdfSVBWNl9SUExfTFdUVU5ORUxgLiBUaGVzZSBtaWdodCBwcm92aWRlIHNvbWUgbW9yZSBpbiBkZXB0aCBmdW5jdGlvbmFsaXR5LCBidXQgdGhlIGNvcmUgZnVuY3Rpb25hbGl0aWVzIG9mIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgbGl2ZSBpbiBgbmV0L2lwdjYvZXh0aGRycy5jYCwgYW5kIEkga25vdyB0aGF0IGZpbGUgaXMgY29tcGlsZWQgYXMgbG9uZyBhcyBgQ09ORklHX0lQVjZgIGlzIHNldC5cblxuTGV0J3MgZGlnIGRlZXBlciBpbnRvIGBpcHY2X3JwbF9zcmhfcmN2YC4gSSB0aGluayBJJ2xsIGJlIGFibGUgdG8gZmlndXJlIHRoaW5ncyBvdXQgZnJvbSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM0OjU1LjE0NjYxNTkxMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3MDpcXHRcXHRcXHRpcHY2X2hkcihza2IpLVxcdTAwM2Vob3BfbGltaXQtLTtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcXG4gNDczOlxcdFxcdFxcdGdvdG8gbG9vcGVkX2JhY2s7XFxuIDQ3NDpcXHRcXHR9XFxuIDQ3NTpcXHRcXG4gNDc2OlxcdFxcdGRzdF9pbnB1dChza2IpO1xcbiA0Nzc6XFx0XFxuIDQ3ODpcXHRcXHRyZXR1cm4gLTE7XFxuIDQ3OTpcXHR9XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdHN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxcbiA0ODI6XFx0e1xcbiA0ODM6XFx0XFx0c3RydWN0IGlwdjZfcnBsX3NyX2hkciAqaGRyLCAqb2hkciwgKmNoZHI7XFxuIDQ4NDpcXHRcXHRzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCA9IElQNkNCKHNrYik7XFxuIDQ4NTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi1cXHUwMDNlZGV2KTtcXG4gNDg2OlxcdFxcdHN0cnVjdCBpcHY2aGRyICpvbGRoZHI7XFxuIDQ4NzpcXHRcXHR1bnNpZ25lZCBpbnQgY2hkcl9sZW47XFxuIDQ4ODpcXHRcXHR1bnNpZ25lZCBjaGFyICpidWY7XFxuIDQ4OTpcXHRcXHRpbnQgYWNjZXB0X3JwbF9zZWc7XFxuIDQ5MDpcXHRcXHRpbnQgaSwgZXJyO1xcbiA0OTE6XFx0XFx0dTY0IG4gPSAwO1xcbiA0OTI6XFx0XFx0dTMyIHI7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdGFjY2VwdF9ycGxfc2VnID0gbWluKFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXFx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXFxuIDQ5NTpcXHRcXHRcXHRcXHQgICAgIFJFQURfT05DRShpZGV2LVxcdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkKSk7XFxuIDQ5NjpcXHRcXHRpZiAoIWFjY2VwdF9ycGxfc2VnKSB7XFxuIDQ5NzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDk4OlxcdFxcdFxcdHJldHVybiAtMTtcXG4gNDk5OlxcdFxcdH1cXG4gNTAwOlxcdFxcbiA1MDE6XFx0bG9vcGVkX2JhY2s6XFxuIDUwMjpcXHRcXHRoZHIgPSAoc3RydWN0IGlwdjZfcnBsX3NyX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuIDUwMzpcXHRcXG4gNTA0OlxcdFxcdGlmIChoZHItXFx1MDAzZXNlZ21lbnRzX2xlZnQgPT0gMCkge1xcbiA1MDU6XFx0XFx0XFx0aWYgKGhkci1cXHUwMDNlbmV4dGhkciA9PSBORVhUSERSX0lQVjYpIHtcXG4gNTA2OlxcdFxcdFxcdFxcdGludCBvZmZzZXQgPSAoaGRyLVxcdTAwM2VoZHJsZW4gKyAxKSBcXHUwMDNjXFx1MDAzYyAzO1xcbiA1MDc6XFx0XFxuIDUwODpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSxcXG4gNTA5OlxcdFxcdFxcdFxcdFxcdFxcdCAgIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7XFxuIDUxMDpcXHRcXHRcXHRcXHRza2JfcHVsbChza2IsIG9mZnNldCk7XFxuIDUxMTpcXHRcXHRcXHRcXHRza2JfcG9zdHB1bGxfcmNzdW0oc2tiLCBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpLFxcbiA1MTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgb2Zmc2V0KTtcXG4gNTEzOlxcdFxcbiA1MTQ6XFx0XFx0XFx0XFx0c2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7XFxuIDUxNTpcXHRcXHRcXHRcXHRza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xcbiA1MTY6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VlbmNhcHN1bGF0aW9uID0gMDtcXG4gNTE3OlxcdFxcbiA1MTg6XFx0XFx0XFx0XFx0X19za2JfdHVubmVsX3J4KHNrYiwgc2tiLVxcdTAwM2VkZXYsIG5ldCk7XFxuIDUxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzQ6NTUuMTQ2NzM2NzUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NjI0NDE2ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIElQdjYgUm91dGluZyBIZWFkZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBpcHY2X3NyaF9yY3ZgIGFuZCBgaXB2Nl9ycGxfc3JoX3JjdmAgZnVuY3Rpb25zLiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZCwgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSB2ZXJ5IGxpa2VseSBzY2VuYXJpby4gVGhlIGNvcmUgaXNzdWUgaXMgdGhhdCBgaWRldmAgbWlnaHQgYmUgTlVMTCBpbiB0aGVzZSBmdW5jdGlvbnMsIGFuZCB0aGUgcGF0Y2ggZml4ZXMgdGhlIHBvdGVudGlhbCBjcmFzaC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHN0cmFpZ2h0Zm9yd2FyZCBidWdmaXguXG5cbk5vdywgbGV0J3Mgem9vbSBpbiBvbiB0aGUgcmVsZXZhbnQgc3ltYm9scy4gVGhlIGtleSBwbGF5ZXJzIGhlcmUgYXJlIGBpcHY2X3NyaF9yY3ZgLCBgaXB2Nl9ycGxfc3JoX3JjdmAsIGFuZCwgc2luY2UgdGhlc2UgZGVhbCB3aXRoIHJvdXRpbmcgaGVhZGVycywgYGlwdjZfcnRoZHJfcmN2YC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdyBoZXJlLiBBIHF1aWNrIHRob3VnaHQ6IEkgc2hvdWxkIGNvbmZpcm0gd2hldGhlciBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIGFyZSBpbmxpbmVkLiBHaXZlbiB0aGVpciBsaWtlbHkgc2l6ZSwgSSBkb3VidCBpdC4gQnV0IEkgc2hvdWxkIGNoZWNrLCBqdXN0IHRvIGJlIHN1cmUuIEl0J3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGF0aCB0byB0aGlzIHZ1bG5lcmFiaWxpdHkuIE9rYXksIEknbGwgaW5jbHVkZSBgaXB2Nl9ydGhkcl9yY3ZgLCBhcyBpdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgcm91dGluZyBoZWFkZXJzLlxuXG5OZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSBpZiBgaXB2Nl9ydGhkcl9yY3ZgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBLbm93aW5nIGlmIGl0J3Mgc3RhdGljIHdpbGwgaW1wYWN0IGhvdyBJIHNob3VsZCB0aGluayBhYm91dCB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc3MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjAzLjEwOTE4MTU4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg2MzkxMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB2Nl9ydGhkcl9yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvZXh0aGRycy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2V4dGhkcnMuYz00ODE9c3RhdGljIGludCBpcHY2X3JwbF9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXFxuLS1cXG5uZXQvaXB2Ni9leHRoZHJzLmMtNjQ0LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo2NDU6c3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9pcHY2L2V4dGhkcnMuYy02NDYte1xcbi0tXFxubmV0L2lwdjYvZXh0aGRycy5jPTg0MD1zdGF0aWMgY29uc3Qgc3RydWN0IGluZXQ2X3Byb3RvY29sIHJ0aGRyX3Byb3RvY29sID0ge1xcbm5ldC9pcHY2L2V4dGhkcnMuYzo4NDE6XFx0LmhhbmRsZXJcXHQ9XFx0aXB2Nl9ydGhkcl9yY3YsXFxubmV0L2lwdjYvZXh0aGRycy5jLTg0Mi1cXHQuZmxhZ3NcXHRcXHQ9XFx0SU5FVDZfUFJPVE9fTk9QT0xJQ1ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjAzLjE1Nzg1NzE1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg5ODQxMTY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBJUHY2IFJvdXRpbmcgSGVhZGVyIFJlY2VwdGlvbiBhbmQgQnVnIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogaXQuIGBpcHY2X3J0aGRyX3JjdmAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIGJ1bW1lciBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYnV0IGl0ICppcyogcmVnaXN0ZXJlZCBhcyBhIHByb3RvY29sIGhhbmRsZXIsIG1ha2luZyBpdCB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gIFNpbmNlIHRoZSBpbnN0cnVjdGlvbnMgZmF2b3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMsIGJ1dCB0aGVyZSBhcmVuJ3QgYW55IGhlcmUsIEknbGwgZ28gd2l0aCBgaXB2Nl9ydGhkcl9yY3ZgIGFzIG15IGZvY3VzIHN5bWJvbC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucy4gTG9va2luZyBhdCBpdCwgYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCBhcmUgYWxzbyBzdGF0aWMuICBTbywgIGBpcHY2X3J0aGRyX3JjdmAgcmVhbGx5IGlzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IGRlcGVuZGVuY2llcy4gIEkndmUgZ290IHRvIGNvbnNpZGVyIGNvbmZpZ3VyYXRpb25zLiBUaGUgY29kZSBpbiBgZXh0aGRycy5jYCAqcHJpbWFyaWx5KiBoaW5nZXMgb24gYENPTkZJR19JUFY2YC4gSSBkb24ndCBzZWUgYW55IGV4cGxpY2l0IGRlcGVuZGVuY2llcyBvbiAgYENPTkZJR19JUFY2X1NFRzZfTFdUVU5ORUxgIG9yICBgQ09ORklHX0lQVjZfUlBMX0xXVFVOTkVMYCAqaW4gdGhpcyBzcGVjaWZpYyBjb2RlKi4gVGhvc2UgY29uZmlndXJhdGlvbnMgYXJlIGxpa2VseSBmb3Igc2VnbWVudCByb3V0aW5nICp0dW5uZWxpbmcqLCBub3QgbmVjZXNzYXJpbHkganVzdCByZWNlaXZpbmcgcGFja2V0cyB3aXRoIHRob3NlIGhlYWRlcnMuICBJIHNlZSB0aGF0IHJlY2VpdmluZyBTUkggcGFja2V0cyBvbmx5IHJlbGllcyBvbiBgQ09ORklHX0lQVjZgLlxuXG5Ib3dldmVyLCB0aGUgY29kZSAqZG9lcyogdXNlIHN5c2N0bHMuICBJIGNhbiBzZWUgdGhhdCBgc2VnNl9lbmFibGVkYCBhbmQgYHJwbF9zZWdfZW5hYmxlZGAgYXJlIGltcG9ydGFudC4gIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGhhdmUgdG8gYmUgc2V0IHRvIDEgaW4gb3JkZXIgZm9yIHRoZSBjb2RlIHRvIGV2ZW4gcmVhY2ggdGhlIGNvcmUgbG9naWMgaW4gYGlwdjZfc3JoX3JjdmAgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YCwgYW5kIFN5emthbGxlciBjYW4gaGFuZGxlIHNldHRpbmcgdGhvc2UsIHNvIGl0J3Mgbm90IGEgbWFqb3IgaXNzdWUuXG5cbkxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgSSBjYW4gc2VlIHdoYXQncyBiZWluZyBmaXhlZC4gIEl0J3MgdGhlIGBpZGV2YCBwb2ludGVyLCB3aGljaCBzdGFuZHMgZm9yIGBpbmV0Nl9kZXZgIGFuZCByZXByZXNlbnRzIHRoZSBJUHY2IGludGVyZmFjZS4gIFRoZSBwYXRjaCBtb3ZlcyB0aGUgY2hlY2sgdG8gc2VlIGlmIHRoYXQgYGlkZXZgIGlzIE5VTEwgZnJvbSBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgIHVwIGludG8gYGlwdjZfcnRoZHJfcmN2YC4gVGhpcyBpcyBhIGNydWNpYWwgZml4IGJlY2F1c2UgdGhlIGNvZGUgd2FzIGRlcmVmZXJlbmNpbmcgIGBpZGV2YCB3aXRob3V0IGNoZWNraW5nIGlmIGl0IHdhcyBhIHZhbGlkIHBvaW50ZXIgZmlyc3QsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoaXMgaXMgYSBsZWdpdGltYXRlIGJ1ZyBmaXguIE5vdywgaWYgdGhlIGludGVyZmFjZSBkb2Vzbid0IGhhdmUgSVB2NiBjb25maWd1cmVkLCB0aGUgcGFja2V0IGdldHMgZHJvcHBlZCBlYXJseS4gIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4IHRvIGEgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0eS5cblxuVGhpcyBpcyBhIGJ1ZyBmaXggaW4gYSByZWFjaGFibGUgY29kZSBwYXRoLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZz10cnVlYC5cblxuU28sIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgaXB2Nl9ydGhkcl9yY3ZgLCBgaXB2Nl9zcmhfcmN2YCwgYW5kIGBpcHY2X3JwbF9zcmhfcmN2YC4gVGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gaXMgYElQVjZgLiAgSSdsbCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgaGlkZGVuIGNvbmZpZ3MgdG8gd29ycnkgYWJvdXQsIGJ1dCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGF0IGBDT05GSUdfSVBWNmAgaXMgc3VmZmljaWVudC4gIEFuZCB3aXRoIHRoYXQsIEknbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1OTUsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNTozMC4wNTYyNzE1NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM3NDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfcnRoZHJfcmN2XCIsXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnBsX3NyaF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZW4gYGlkZXZgIGlzIE5VTEwgYnkgbW92aW5nIHRoZSBgaWRldmAgY2hlY2sgdG8gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZyBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgYnkgc2VuZGluZyBjcmFmdGVkIElQdjYgcGFja2V0cyB3aXRoIFNlZ21lbnQgUm91dGluZyBvciBSUEwgU2VnbWVudCBSb3V0aW5nIGhlYWRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdjZfcnRoZHJfcmN2XCIsXG4gICAgXCJpcHY2X3NyaF9yY3ZcIixcbiAgICBcImlwdjZfcnBsX3NyaF9yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZW4gYGlkZXZgIGlzIE5VTEwgYnkgbW92aW5nIHRoZSBgaWRldmAgY2hlY2sgdG8gdGhlIGNhbGxlciBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMgcHJvY2Vzc2luZyBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgYnkgc2VuZGluZyBjcmFmdGVkIElQdjYgcGFja2V0cyB3aXRoIFNlZ21lbnQgUm91dGluZyBvciBSUEwgU2VnbWVudCBSb3V0aW5nIGhlYWRlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjMwLjEzMjY1MTkwOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMDMxMTYwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QxNDozNTozMC4xMzMwOTAxMTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEwMDI2NzMxNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlcmUgYGlkZXZgIHdhcyBmZXRjaGVkIGJ1dCBub3QgY2hlY2tlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGBpZGV2LVxcdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWU2Y2VhNTY5MDdhYTQzYTc0ZGNlM2RlNmFlYjRlMThkZmQ1ZTExYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDE3IDE0OjMzOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRycy5jIGIvbmV0L2lwdjYvZXh0aGRycy5jXG5pbmRleCA5YzY3N2ViMWQxYTYxLi41MTk0MWFkNjU2YTM2IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jXG4rKysgYi9uZXQvaXB2Ni9leHRoZHJzLmNcbkBAIC0zNjgsMjMgKzM2OCwxNiBAQCBzdGF0aWMgdm9pZCBzZWc2X3VwZGF0ZV9jc3VtKHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ICAgKF9fYmUzMiAqKWFkZHIpO1xuIH1cbiBcbi1zdGF0aWMgaW50IGlwdjZfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3N0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpXG4ge1xuIFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbiBcdHN0cnVjdCBpcHY2X3NyX2hkciAqaGRyO1xuLVx0c3RydWN0IGluZXQ2X2RldiAqaWRldjtcbiBcdHN0cnVjdCBpbjZfYWRkciAqYWRkcjtcbiBcdGludCBhY2NlcHRfc2VnNjtcbiBcbiBcdGhkciA9IChzdHJ1Y3QgaXB2Nl9zcl9oZHIgKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXHRpZiAoIWlkZXYpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiAtMTtcbi1cdH1cbi1cbiBcdGFjY2VwdF9zZWc2ID0gbWluKFJFQURfT05DRShuZXQtXHUwMDNlaXB2Ni5kZXZjb25mX2FsbC1cdTAwM2VzZWc2X2VuYWJsZWQpLFxuIFx0XHRcdCAgUkVBRF9PTkNFKGlkZXYtXHUwMDNlY25mLnNlZzZfZW5hYmxlZCkpO1xuIFxuQEAgLTQ4NSwxMiArNDc4LDExIEBAIHN0YXRpYyBpbnQgaXB2Nl9zcmhfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gLTE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3N0YXRpYyBpbnQgaXB2Nl9ycGxfc3JoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KVxuIHtcbiBcdHN0cnVjdCBpcHY2X3JwbF9zcl9oZHIgKmhkciwgKm9oZHIsICpjaGRyO1xuIFx0c3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQgPSBJUDZDQihza2IpO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItXHUwMDNlZGV2KTtcbi1cdHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7XG4gXHRzdHJ1Y3QgaXB2NmhkciAqb2xkaGRyO1xuIFx0dW5zaWduZWQgaW50IGNoZHJfbGVuO1xuIFx0dW5zaWduZWQgY2hhciAqYnVmO1xuQEAgLTQ5OSw4ICs0OTEsNiBAQCBzdGF0aWMgaW50IGlwdjZfcnBsX3NyaF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHU2NCBuID0gMDtcbiBcdHUzMiByO1xuIFxuLVx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG4tXG4gXHRhY2NlcHRfcnBsX3NlZyA9IG1pbihSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjYuZGV2Y29uZl9hbGwtXHUwMDNlcnBsX3NlZ19lbmFibGVkKSxcbiBcdFx0XHQgICAgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcbiBcdGlmICghYWNjZXB0X3JwbF9zZWcpIHtcbkBAIC02ODksMTAgKzY3OSwxNCBAQCBzdGF0aWMgaW50IGlwdjZfcnRoZHJfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzd2l0Y2ggKGhkci1cdTAwM2V0eXBlKSB7XG4gXHRjYXNlIElQVjZfU1JDUlRfVFlQRV80OlxuIFx0XHQvKiBzZWdtZW50IHJvdXRpbmcgKi9cbi1cdFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IpO1xuK1x0XHRpZiAoIWlkZXYpXG4rXHRcdFx0Z290byBkaXNhYmxlZDtcbitcdFx0cmV0dXJuIGlwdjZfc3JoX3Jjdihza2IsIGlkZXYpO1xuIFx0Y2FzZSBJUFY2X1NSQ1JUX1RZUEVfMzpcbiBcdFx0LyogcnBsIHNlZ21lbnQgcm91dGluZyAqL1xuLVx0XHRyZXR1cm4gaXB2Nl9ycGxfc3JoX3Jjdihza2IpO1xuK1x0XHRpZiAoIWlkZXYpXG4rXHRcdFx0Z290byBkaXNhYmxlZDtcbitcdFx0cmV0dXJuIGlwdjZfcnBsX3NyaF9yY3Yoc2tiLCBpZGV2KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTgzNyw2ICs4MzEsMTAgQEAgc3RhdGljIGludCBpcHY2X3J0aGRyX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELFxuIFx0XHRcdCAgKFx1MDAyNmhkci1cdTAwM2V0eXBlKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTtcbiBcdHJldHVybiAtMTtcbitcbitkaXNhYmxlZDpcbitcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fSVBWNkRJU0FCTEVEKTtcbitcdHJldHVybiAtMTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbmV0Nl9wcm90b2NvbCBydGhkcl9wcm90b2NvbCA9IHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDE0OjM1OjMwLjEzMzA5MDk4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAwMjY0OTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgU2VnbWVudCBSb3V0aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYG5ldC9pcHY2L2V4dGhkcnMuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaXB2Nl9zcmhfcmN2YCBhbmQgYGlwdjZfcnBsX3NyaF9yY3ZgLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHBhc3Npbmcgb2YgYHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXZgIGFzIGFuIGFyZ3VtZW50IHRvIHRoZXNlIGZ1bmN0aW9ucy4gSXQncyBhIGNsZWFuIHVwIG9mIHNvcnRzLCByZW1vdmluZyB0aGUgaW50ZXJuYWwgZmV0Y2ggb2YgYGlkZXZgIHdpdGggYF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldilgLlxuXG5UaGUgY3J1Y2lhbCBwYXJ0IGhlcmUgaXMgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGZvciBgIWlkZXZgIHdpdGhpbiBgaXB2Nl9ydGhkcl9yY3ZgLiBJZiBgaWRldmAgaXMgTlVMTCwgdGhlIGNvZGUganVtcHMgdG8gYGRpc2FibGVkYCwgYW5kIHRoZSBgc2tiYCBpcyBkcm9wcGVkIHdpdGggYFNLQl9EUk9QX1JFQVNPTl9JUFY2RElTQUJMRURgLiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBjb3JlIGZpeC5cblxuTm93LCBsb29raW5nIGF0IHRoZSByb290IGNhdXNlLCBJIHNlZSB0aGUgdnVsbmVyYWJpbGl0eSBsaWVzIGluIGBpcHY2X3JwbF9zcmhfcmN2YC4gUHJldmlvdXNseSwgYGlkZXZgIHdhcyByZXRyaWV2ZWQgdXNpbmcgYF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldilgICpidXQqIG5vdCB2YWxpZGF0ZWQgYmVmb3JlIHVzZTpcbmBgYGNcblx0aWRldiA9IF9faW42X2Rldl9nZXQoc2tiLVx1MDAzZWRldik7XG5cblx0YWNjZXB0X3JwbF9zZWcgPSBtaW4oUkVBRF9PTkNFKG5ldC1cdTAwM2VpcHY2LmRldmNvbmZfYWxsLVx1MDAzZXJwbF9zZWdfZW5hYmxlZCksXG5cdFx0XHQgICAgIFJFQURfT05DRShpZGV2LVx1MDAzZWNuZi5ycGxfc2VnX2VuYWJsZWQpKTtcbmBgYFxuVGhpcyBpcyBhIHRleHRib29rIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS4gSWYgYF9faW42X2Rldl9nZXRgIHJldHVybmVkIE5VTEwsIGRlcmVmZXJlbmNpbmcgYGlkZXYtXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZGAgd291bGQgY3Jhc2ggdGhlIGtlcm5lbC4gVGhlIHBhdGNoIG5lYXRseSBhZGRyZXNzZXMgdGhpcyBieSBwZXJmb3JtaW5nIHRoZSBjaGVjayBoaWdoZXIgdXAgdGhlIGNhbGwgc3RhY2sgd2l0aGluIGBpcHY2X3J0aGRyX3JjdmAuIFRoZSB1cGRhdGVkIGNvZGUgcHJvcGFnYXRlcyB0aGUgYGlkZXZgIHBvaW50ZXIgZnJvbSBgaXB2Nl9ydGhkcl9yY3ZgLiBUaGlzIGFsbG93cyBmb3IgYSBjbGVhbiBjaGVjayBhbmQgYXZvaWRzIHRoZSBwb3RlbnRpYWwgY3Jhc2guXG5cbk5vdywgbXkga2V5IHF1ZXN0aW9uIGlzIGFsd2F5cyBhYm91dCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIHJlZ3Jlc3Npb25zLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBuZXcgcmlza3MsIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBZnRlciBhIHF1aWNrIHJldmlldywgSSBkb24ndCBzZWUgYW55IGV2aWRlbmNlIG9mIHRoYXQuIEl0J3Mgc3RyaWN0bHkgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgZml4LiBLQVNBTiB3b3VsZCBoYXZlIGxpa2VseSBjYXVnaHQgdGhpcywgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc3RhbmRhcmQga2VybmVsIG9vcHMgd291bGQgaGF2ZSByZXN1bHRlZC4gVGhlcmUncyBubyBjb21wbGV4IGFsbG9jYXRpb24sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBvYnZpb3VzIGluZm9ybWF0aW9uIGxlYWtzIGhlcmUuIFRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODksIk91dHB1dFRva2VucyI6MTY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMTQ6MzU6NDEuMTM1NzQ0MDE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcgaW4gYGlwdjZfcnBsX3NyaF9yY3ZgIHdoZXJlIGBpZGV2YCB3YXMgZmV0Y2hlZCBidXQgbm90IGNoZWNrZWQgZm9yIE5VTEwgYmVmb3JlIGFjY2Vzc2luZyBgaWRldi1cXHUwMDNlY25mLnJwbF9zZWdfZW5hYmxlZGAuIFRoZSBmaXggY2hlY2tzIGBpZGV2YCBpbiB0aGUgY2FsbGVyIGBpcHY2X3J0aGRyX3JjdmAgYW5kIHBhc3NlcyBpdCBhcyBhbiBhcmd1bWVudCwgZHJvcHBpbmcgdGhlIHBhY2tldCBpZiBgaWRldmAgaXMgTlVMTC4gVGhpcyBpcyBhIHN0YW5kYXJkIG1lbW9yeSBzYWZldHkgaXNzdWUgKE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSkgdGhhdCBpcyBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG9vcHMgb3IgS0FTQU4uIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1ZyBpbiBgaXB2Nl9ycGxfc3JoX3JjdmAgd2hlcmUgYGlkZXZgIHdhcyBmZXRjaGVkIGJ1dCBub3QgY2hlY2tlZCBmb3IgTlVMTCBiZWZvcmUgYWNjZXNzaW5nIGBpZGV2LVxcdTAwM2VjbmYucnBsX3NlZ19lbmFibGVkYC4gVGhlIGZpeCBjaGVja3MgYGlkZXZgIGluIHRoZSBjYWxsZXIgYGlwdjZfcnRoZHJfcmN2YCBhbmQgcGFzc2VzIGl0IGFzIGFuIGFyZ3VtZW50LCBkcm9wcGluZyB0aGUgcGFja2V0IGlmIGBpZGV2YCBpcyBOVUxMLiBUaGlzIGlzIGEgc3RhbmRhcmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSAoTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlKSB0aGF0IGlzIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgb29wcyBvciBLQVNBTi4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowwx6bf[1] Phase: Succeeded StartedAt: 2026-08-17 14:36:04 +0000 UTC FinishedAt: 2026-08-17 14:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 14:36:04 +0000 UTC FinishedAt: 2026-08-17 14:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2] Phase: Succeeded StartedAt: 2026-08-17 14:36:04 +0000 UTC FinishedAt: 2026-08-17 18:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 14:36:04 +0000 UTC FinishedAt: 2026-08-17 18:21:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 14:36:04 +0000 UTC FinishedAt: 2026-08-17 14:36:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 14:36:04 +0000 UTC FinishedAt: 2026-08-17 14:36:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowwx6bf/series-workflowwx6bf-convert-artifact-1305307777/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 14:36:14 +0000 UTC FinishedAt: 2026-08-17 14:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 14:36:14 +0000 UTC FinishedAt: 2026-08-17 14:57:04 +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:*26580ec7-215f-433c-b353-ef94c06ae342,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-workflowwx6bf/series-workflowwx6bf-convert-artifact-1305307777/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": "7b77a6d5-ba9c-4714-8e38-b1440150fd5a", "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-workflowwx6bf/series-workflowwx6bf-build-action-3290744751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 14:36:14 +0000 UTC FinishedAt: 2026-08-17 14:56:43 +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:*26580ec7-215f-433c-b353-ef94c06ae342,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-workflowwx6bf/series-workflowwx6bf-convert-artifact-1305307777/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": "7b77a6d5-ba9c-4714-8e38-b1440150fd5a", "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-workflowwx6bf/series-workflowwx6bf-build-action-3290744751/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 14:57:04 +0000 UTC FinishedAt: 2026-08-17 14:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 14:57:04 +0000 UTC FinishedAt: 2026-08-17 14:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 14:57:04 +0000 UTC FinishedAt: 2026-08-17 14:57:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 14:57:04 +0000 UTC FinishedAt: 2026-08-17 14:57:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowwx6bf/series-workflowwx6bf-convert-artifact-4231454036/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 14:57:14 +0000 UTC FinishedAt: 2026-08-17 14:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 14:57:14 +0000 UTC FinishedAt: 2026-08-17 14:59:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7b77a6d5-ba9c-4714-8e38-b1440150fd5a,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-workflowwx6bf/series-workflowwx6bf-build-action-3290744751/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-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 14:59:34 +0000 UTC FinishedAt: 2026-08-17 14:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 14:59:34 +0000 UTC FinishedAt: 2026-08-17 14:59:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 14:59:34 +0000 UTC FinishedAt: 2026-08-17 15:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 14:59:34 +0000 UTC FinishedAt: 2026-08-17 15:16:16 +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:*26580ec7-215f-433c-b353-ef94c06ae342,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-workflowwx6bf/series-workflowwx6bf-convert-artifact-4231454036/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": "777a6085-7498-46f9-99e0-4d92a99f8548", "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-workflowwx6bf/series-workflowwx6bf-build-action-3855569184/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 14:59:34 +0000 UTC FinishedAt: 2026-08-17 15:16:06 +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:*26580ec7-215f-433c-b353-ef94c06ae342,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-workflowwx6bf/series-workflowwx6bf-convert-artifact-4231454036/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": "777a6085-7498-46f9-99e0-4d92a99f8548", "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-workflowwx6bf/series-workflowwx6bf-build-action-3855569184/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 15:16:16 +0000 UTC FinishedAt: 2026-08-17 15:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 15:16:16 +0000 UTC FinishedAt: 2026-08-17 15:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 15:16:16 +0000 UTC FinishedAt: 2026-08-17 15:18:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 15:16:16 +0000 UTC FinishedAt: 2026-08-17 15:18:06 +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:*777a6085-7498-46f9-99e0-4d92a99f8548,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-workflowwx6bf/series-workflowwx6bf-build-action-3855569184/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-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 18:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 18:21:01 +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":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_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:*7b77a6d5-ba9c-4714-8e38-b1440150fd5a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*777a6085-7498-46f9-99e0-4d92a99f8548,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-workflowwx6bf/series-workflowwx6bf-build-action-3290744751/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-workflowwx6bf/series-workflowwx6bf-build-action-3855569184/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 15:18:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 15:18:22 +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":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_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-workflowwx6bf/series-workflowwx6bf-convert-artifact-2917400701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 15:18:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 15:18:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 15:18:16 +0000 UTC FinishedAt: 2026-08-17 15:18:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 15:18:26 +0000 UTC FinishedAt: 2026-08-17 18:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwx6bf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipv6_rthdr_rcv","ipv6_srh_rcv","ipv6_rpl_srh_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"50f6d3a5-67ad-41b1-be31-d2b800b089f8","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 15:18:26 +0000 UTC FinishedAt: 2026-08-17 18:20:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7b77a6d5-ba9c-4714-8e38-b1440150fd5a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*777a6085-7498-46f9-99e0-4d92a99f8548,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-workflowwx6bf/series-workflowwx6bf-build-action-3290744751/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-workflowwx6bf/series-workflowwx6bf-build-action-3855569184/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-workflowwx6bf/series-workflowwx6bf-convert-artifact-2917400701/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,}