Name: series-workflowhqq96 Phase: Failed StartedAt: 2026-08-06 02:21:00 +0000 UTC FinishedAt: 2026-08-06 03:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqq96[0] Phase: Succeeded StartedAt: 2026-08-06 02:21:00 +0000 UTC FinishedAt: 2026-08-06 03:01:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqq96[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 02:21:00 +0000 UTC FinishedAt: 2026-08-06 03:01:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRHluYW1pYyBQQU1UIGluIHRoZSBURFggaG9zdCAoS1ZNKSBjb2RlLiBURFggaG9zdCBzdXBwb3J0IHJlcXVpcmVzIHNwZWNpZmljIGJhcmUtbWV0YWwgSW50ZWwgaGFyZHdhcmUgd2l0aCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBlbmFibGVkIGFuZCB0aGUgVERYIG1vZHVsZSBsb2FkZWQuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjAwZWZjNDkxMzE4ODFmMTZhNWIxNTgwYWRmM2Y3Yzc5NDI2MzE0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDM6MDA6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTc1MTIsNiAmIzQzOzc1MTIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcbiBcdHRkZng9XHRcdFtIVyxEUk1dXG4gXG4mIzQzO1x0dGR4X2RwYW10PVxuJiM0MztcdFx0XHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcbiYjNDM7XHRcdFx0dG8gc2F2ZSBtZW1vcnksIHdoZW4gc3VwcG9ydGVkLlxuJiM0MztcbiYjNDM7XHRcdFx0VmFsaWQgcGFyYW1ldGVyczogXCYjMzQ7b25cJiMzNDssIFwmIzM0O29mZlwmIzM0O1xuJiM0MztcdFx0XHREZWZhdWx0OiBcJiMzNDtvZmZcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XHRcdEZvciBkZXRhaWxzIHNlZTpcbiYjNDM7XHRcdFx0RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG4mIzQzO1xuIFx0dGVzdF9zdXNwZW5kPVx0W1NVU1BFTkRdXG4gXHRcdFx0Rm9ybWF0OiB7IFwmIzM0O21lbVwmIzM0OyB8IFwmIzM0O3N0YW5kYnlcJiMzNDsgfCBcJiMzNDtmcmVlemVcJiMzNDsgfVssTl1cbiBcdFx0XHRTcGVjaWZ5IFwmIzM0O21lbVwmIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciBcJiMzNDtzdGFuZGJ5XCYjMzQ7IChmb3JcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbmluZGV4IDMzMDM0OTlhZDRjNmYuLmExYzIzMDkyMzA1ODAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuQEAgLTIwMCw2ICYjNDM7MjAwLDM0IEBAIHJlZmxlY3RzIHRoZSBUQ0Igb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIFREWCBtb2R1bGUgYW5kIHRoZXJlZm9yZVxuIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURFxuIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuXG4gXG4mIzQzO0R5bmFtaWMgUEFNVFxuJiM0MzstLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXG4mIzQzO3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcbiYjNDM7dG8gdGhlIFREWCBtb2R1bGUgZm9yIGl0cyBleGNsdXNpdmUgdXNlLiBGb3Igbm9ybWFsIFBBTVQsIHRoaXMgaXMgaW5zdGFsbGVkXG4mIzQzO3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXG4mIzQzO1xuJiM0MztEeW5hbWljIFBBTVQgaXMgYSBURFggbW9kdWxlIGZlYXR1cmUgdGhhdCBhbGxvd3MgVk1NIHRvIGFsbG9jYXRlIHBhcnQgb2YgdGhlXG4mIzQzO1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcbiYjNDM7KDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxuJiM0Mztpbml0aWFsaXphdGlvbi4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgVERYIHVzZXMgd2hpbGUgVERzIGFyZVxuJiM0Mztub3QgaW4gdXNlLlxuJiM0MztcbiYjNDM7V2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbiYjNDM7XG4mIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byBcJiMzNDtvblwmIzM0Oy4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4mIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuJiM0MztpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4mIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuJiM0MztEeW5hbWljIFBBTVQuXG4mIzQzO1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzLi41ODg1NjNkZmU4OGQ1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk4LDYgJiM0Mzs5OCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApXG4gS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE5MjIsNiAmIzQzOzE5MjIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xuIFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcbiBcbiYjNDM7XHRpbnQgKCp0b3B1cF9leHRlcm5hbF9jYWNoZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpO1xuIFxuIFx0Ym9vbCAoKmhhc193YmludmRfZXhpdCkodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uNzkxMDkwMWE3YmEyMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuJiM0MzsjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiAmIzQzOzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuJiM0MztcbiYjNDM7LyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xuJiM0MztzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xuJiM0MztcdGludCBjbnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbiYjNDM7XHRjYWNoZS1cdTAwM2VjbnQgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4mIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xuJiM0MztcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuJiM0MzsvKiBOdW1iZXIgb2YgUEFNVCBwYWdlcyB0byBiZSBwcm92aWRlZCB0byBURFggbW9kdWxlIHBlciAyTUIgcmVnaW9uIG9mIFBBICovXG4mIzQzOyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDJcbiYjNDM7XG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xuIFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XG4gXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqL1xuJiM0MztcdHU4ICBwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4gfTtcbiBcbiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCA2NmU2OWQyYTQxYjNjLi4yYTYyOGI4MzA0NDA5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTYxNCw2ICYjNDM7NjE0LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuIFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gXHRcdGlmIChyKVxuIFx0XHRcdHJldHVybiByO1xuJiM0MztcbiYjNDM7XHRcdHIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfc2hhZG93X3BhZ2VfY2FjaGUsXG4gXHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDU0NWIwM2Q5ZDEwYjguLjA5NTczMTEyNTQwZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSlcbiBcdGlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdF9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcbiBcbi1cdF9fZnJlZV9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIH1cbiBcbkBAIC02ODEsNiAmIzQzOzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0dGR4X2luaXRfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1xuIFx0ZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUpO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlZ3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX3dha2V1cF9saXN0KTtcbkBAIC04NjYsNiAmIzQzOzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXHUwMDI2dGR4LVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcbiBcdGlmICh2Y3B1LVx1MDAzZWNwdSAhPSAtMSkge1xuIFx0XHRLVk1fQlVHX09OKHRkeC1cdTAwM2VzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LVx1MDAzZWt2bSk7XG4gXHRcdHRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7XG5AQCAtMTYyMSw2ICYjNDM7MTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXG4mIzQzO1x0ICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtaW5fbnJfc3B0cyAmIzQzOz0gLTEgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdCAgICBrdm1fcGZuX3QgcGZuKVxuIHtcbkBAIC0xNjc5LDE2ICYjNDM7MTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdFx0ICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XG4gXHRpZiAoIXNlcHRfcHQpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0ZXJyID0gdGRoX21lbV9zZXB0X2FkZChcdTAwMjZ0b19rdm1fdGR4KGt2bSktXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsXG4gXHRcdFx0ICAgICAgIFx1MDAyNmVudHJ5LCBcdTAwMjZsZXZlbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG5AQCAtMTcwMSw4ICYjNDM7MTcyOCwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcbiBcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcbiBcdC8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi9cbiBcdGlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKVxuQEAgLTE3MTAsNiAmIzQzOzE3NDIsMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qXG4gXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuIFx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbkBAIC0xNzIyLDEwICYjNDM7MTc1OCwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxuIFx0ICogSWYgdGhlIFREIGlzbiYjMzk7dCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0aWYgKGxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0dGR4X3BhbXRfcHV0KHBmbik7XG4gXG4tXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xODIyLDYgJiM0MzsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuJiM0MztcdHRkeF9wYW10X3B1dChwZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE4NjUsNiAmIzQzOzE5MDcsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSxcbiAgKi9cbiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4ge1xuJiM0MztcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEtWTSBkb2VzbiYjMzk7dCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZVxuIFx0ICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlXG5AQCAtMTg3OCwxNSAmIzQzOzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4mIzQzO1x0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0Lypcbi1cdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XG4tXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xuLVx0ICogcmVhZGVycy5cbiYjNDM7XHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnRcbiYjNDM7XHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxuJiM0MztcdCAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuXG4gXHQgKi9cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU5LDcgJiM0MzsyNTAzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFxuIFx0cmV0ID0gLUVOT01FTTtcbiBcbi1cdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCF0ZHJfcGFnZSlcbiBcdFx0Z290byBmcmVlX2hraWQ7XG4gXG5AQCAtMjQ3Miw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTkwLDEwICYjNDM7MjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiB0ZWFyZG93bjpcbiBcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAmIzM5O2kmIzM5OyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKHRkY3NfcGFnZXNbaV0pIHtcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdFx0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbi1cdFx0fVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoIWt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcylcbiBcdFx0a2ZyZWUodGRjc19wYWdlcyk7XG5AQCAtMjYwOCwxNiAmIzQzOzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFx0ZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7XG4gXG4gZnJlZV90ZGNzOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuIFx0a2ZyZWUodGRjc19wYWdlcyk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkY3NfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGRyOlxuLVx0aWYgKHRkcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTUxLDcgJiM0MzsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBlcnI7XG4gXG4tXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXBhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBwYWdlO1xuQEAgLTI5NzEsNyAmIzQzOzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTMsNyAmIzQzOzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRcdFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXG4gXHRcdFx0ICovXG4gXHRcdFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiYjNDM7XHRcdFx0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHRcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gLUVJTztcbkBAIC0zMDIxLDE2ICYjNDM7MzA2MCwxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXG4gZnJlZV90ZGN4OlxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXG4tXHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiBcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0fVxuIFx0a2ZyZWUodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMpO1xuIFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGR2cHI6XG4tXHRpZiAodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDkzLDYgJiM0MzszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcbiBcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG4mIzQzO1xuIFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuaW5kZXggYWM4MzIzYTY4YjE2My4uZmQzNjhlM2VlMDYwYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbkBAIC03Miw2ICYjNDM7NzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHgge1xuIFxuIFx0dTY0IG1hcF9ncGFfbmV4dDtcbiBcdHU2NCBtYXBfZ3BhX2VuZDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHRkeF9wYW10X2NhY2hlIHBhbXRfY2FjaGU7XG4gfTtcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbmluZGV4IDQyZGY4ZWE0NjRjNDcuLmRlYzQ1NzA5ZTQ1NGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuQEAgLTMwLDYgJiM0MzszMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21zci1pbmRleC5oXHUwMDNlXG5AQCAtNDYsNiAmIzQzOzQ3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfbW9kdWxlX3N0YXRlIHtcbiBcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRib29sIHN5c2luaXRfZG9uZTtcbkBAIC02Myw2ICYjNDM7NjYsMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XG4gXG4gc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXJcbiYjNDM7ICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcbiYjNDM7ICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XG4mIzQzOyAqIGluaXRpYWxpemF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcbiYjNDM7XG4gLyogQWxsIFREWC11c2FibGUgbWVtb3J5IHJlZ2lvbnMuICBQcm90ZWN0ZWQgYnkgbWVtX2hvdHBsdWdfbG9jay4gKi9cbiBzdGF0aWMgTElTVF9IRUFEKHRkeF9tZW1saXN0KTtcbiBcbkBAIC0yNTIsNiAmIzQzOzI2Myw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XG4gXHQub3BzID0gXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIFBBTVQgcmVmZXJlbmNlIGNvdW50ZXJzIGZvciBhbGwgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19pbml0IGludCBpbml0X3BhbXRfcmVmY291bnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xuJiM0MztcdGlmICghcGFtdF9yZWZjb3VudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR2ZnJlZShwYW10X3JlZmNvdW50cyk7XG4mIzQzO1x0cGFtdF9yZWZjb3VudHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHQvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcGZuIFx1MDAzZVx1MDAzZSAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBBZGQgYSBtZW1vcnkgcmVnaW9uIGFzIGEgVERYIG1lbW9yeSBibG9jay4gIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmVcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24mIzM5O3RcbkBAIC01MTAsMzUgJiM0Mzs1NTcsMzcgQEAgc3RhdGljIF9faW5pdCBpbnQgZmlsbF9vdXRfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4mIzQzO1x0aW50IGJpdHNfcGVyX2VudHJ5O1xuJiM0MztcbiYjNDM7XHRiaXRzX3Blcl9lbnRyeSA9IHRkeF9zeXNpbmZvLnRkbXIucGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xuJiM0MztcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDYWxjdWxhdGUgUEFNVCBzaXplIGdpdmVuIGEgVERNUiBhbmQgYSBwYWdlIHNpemUuICBUaGUgcmV0dXJuZWRcbiAgKiBQQU1UIHNpemUgaXMgYWx3YXlzIGFsaWduZWQgdXAgdG8gNEsgcGFnZSBib3VuZGFyeS5cbiAgKi9cbi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeixcbi1cdFx0XHRcdFx0ICAgICB1MTYgcGFtdF9lbnRyeV9zaXplKVxuJiM0MztzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbiYjNDM7XHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcbiYjNDM7XHRjb25zdCB1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4mIzQzO1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcbiYjNDM7XHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxuJiM0MztcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzFnX2VudHJ5X3NpemUsXG4mIzQzO1x0fTtcbiBcbi1cdHN3aXRjaCAocGdzeikge1xuLVx0Y2FzZSBURFhfUFNfNEs6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFREWF9QU18yTTpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQTURfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMUc6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUFVEX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4mIzQzO1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSB0ZHhfcGdfc2l6ZV9zaGlmdFtwZ3N6XTtcbiYjNDM7XHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplW3Bnc3pdO1xuIFxuLVx0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZTtcbiBcdC8qIFREWCByZXF1aXJlcyBQQU1UIHNpemUgbXVzdCBiZSA0SyBhbGlnbmVkICovXG4tXHRwYW10X3N6ID0gQUxJR04ocGFtdF9zeiwgUEFHRV9TSVpFKTtcbi1cbi1cdHJldHVybiBwYW10X3N6O1xuJiM0MztcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuIH1cbiBcbiAvKlxuQEAgLTU3NiwxNSAmIzQzOzYyNSwxMSBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX2dldF9uaWQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc1xuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXG4gICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4tXHRcdFx0XHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X2Jhc2VbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgcGFtdF9zaXplW1REWF9QU19OUl07XG4tXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9iYXNlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlICpwYW10O1xuLVx0aW50IHBnc3osIG5pZDtcbiYjNDM7XHRpbnQgbmlkO1xuIFxuIFx0bmlkID0gdGRtcl9nZXRfbmlkKHRkbXIsIHRtYl9saXN0KTtcbiBcbkBAIC01OTIsMTMgJiM0Mzs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcbiBcdCAqIGFuZCB0aGUgdG90YWwgUEFNVCBzaXplLlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHtcbi1cdFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxuLVx0XHRcdFx0XHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xuLVx0XHR0ZG1yX3BhbXRfc2l6ZSAmIzQzOz0gcGFtdF9zaXplW3Bnc3pdO1xuJiM0MztcdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMUcpO1xuJiM0MztcdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcbiYjNDM7XHRcdC8qIFdpdGggRHluYW1pYyBQQU1ULCBQQU1UXzRLIGlzIHJlcGxhY2VkIHdpdGggYSBiaXRtYXAgKi9cbiYjNDM7XHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfNEspO1xuIFx0fVxuIFxuJiM0MztcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cdTAwM2VwYW10XzRrX3NpemUgJiM0MzsgdGRtci1cdTAwM2VwYW10XzJtX3NpemUgJiM0MzsgdGRtci1cdTAwM2VwYW10XzFnX3NpemU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbG9jYXRlIG9uZSBjaHVuayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciBhbGxcbiBcdCAqIFBBTVRzLiAgVGhpcyBoZWxwcyBtaW5pbWl6ZSB0aGUgUEFNVCYjMzk7cyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcbkBAIC02MDYsMjUgJiM0Mzs2NTYsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICovXG4gXHRwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxuIFx0XHRcdG5pZCwgXHUwMDI2bm9kZV9vbmxpbmVfbWFwKTtcbi1cdGlmICghcGFtdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHQvKlxuLVx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXG4tXHQgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS5cbiYjNDM7XHQgKiB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSBpcyBzdGlsbCB6ZXJvIHNvIHRoZSBlcnJvclxuJiM0MztcdCAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC5cbiBcdCAqL1xuLVx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykge1xuLVx0XHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcbi1cdFx0dGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTtcbi1cdH1cbiYjNDM7XHRpZiAoIXBhbXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107XG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzJNXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMUddO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzFHXTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXHUwMDNlcGFtdF80a19iYXNlICYjNDM7IHRkbXItXHUwMDNlcGFtdF80a19zaXplO1xuJiM0MztcdHRkbXItXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgJiM0MzsgdGRtci1cdTAwM2VwYW10XzJtX3NpemU7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjU1LDEwICYjNDM7Njk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHR0ZG1yX2dldF9wYW10KHRkbXIsIFx1MDAyNnBhbXRfYmFzZSwgXHUwMDI2cGFtdF9zaXplKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJiMzOTt0IGJlZW4gYWxsb2NhdGVkIGZvciB0aGlzIFRETVIgKi9cbi1cdGlmICghcGFtdF9zaXplKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKVxuJiM0MztcdGlmICghcGFtdF9iYXNlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwYW10X2Z1bmMocGFtdF9iYXNlLCBwYW10X3NpemUpO1xuQEAgLTY4NCwxNCAmIzQzOzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbiBcbiAvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIFBBTVRzIGZvciBhbGwgVERNUnMgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0XHR1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuIHtcbiBcdGludCBpLCByZXQgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGRtcl9saXN0LVx1MDAzZW5yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXG4tXHRcdFx0XHRwYW10X2VudHJ5X3NpemUpO1xuJiM0MztcdFx0cmV0ID0gdGRtcl9zZXRfdXBfcGFtdCh0ZG1yX2VudHJ5KHRkbXJfbGlzdCwgaSksIHRtYl9saXN0KTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbkBAIC05NjgsMTggJiM0MzsxMDA1LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdFx0XHRcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbi1cdHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMm1fZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QsIHBhbXRfZW50cnlfc2l6ZSk7XG4mIzQzO1x0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05OTgsNiAmIzQzOzEwMzAsOCBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVRcdEJJVCgxNilcbiYjNDM7XG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgICAgdTY0IGdsb2JhbF9rZXlpZClcbiB7XG5AQCAtMTAyNiw2ICYjNDM7MTA2MCwxMiBAQCBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdGFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTtcbiBcdGFyZ3MucmR4ID0gdGRtcl9saXN0LVx1MDAzZW5yX2NvbnN1bWVkX3RkbXJzO1xuIFx0YXJncy5yOCA9IGdsb2JhbF9rZXlpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O0VuYWJsZSBEeW5hbWljIFBBTVRcXG5cJiMzNDspO1xuJiM0MztcdFx0YXJncy5yOCB8PSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCBcdTAwMjZhcmdzKTtcbiBcbiBcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xuQEAgLTExNjcsMTAgJiM0MzsxMjA3LDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuIFx0ICovXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcbi1cdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7XHRyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXRfdGR4bWVtO1xuIFxuJiM0MztcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wYW10X3JlZmNvdW50cztcbiYjNDM7XG4gXHQvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqL1xuIFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QsIFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xuIFx0aWYgKHJldClcbkBAIC0xMjIwLDYgJiM0MzsxMjY0LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHRmcmVlX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0KTtcbiBlcnJfZnJlZV90ZHhtZW06XG4gXHRmcmVlX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7ZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM6XG4mIzQzO1x0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwMyw2ICYjNDM7MjA0OSwyODggQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XG4gXG4mIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHRkeF9lbmFibGVfZHBhbXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpO1xuJiM0MztcdGlmIChwYWdlKSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4mIzQzO1x0XHRjYWNoZS1cdTAwM2VjbnQtLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdGlmIChjYWNoZSlcbiYjNDM7XHRcdHJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdGludCBpLCBqO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwYW10X3BhZ2VzW2ldID0gYWxsb2NfZHBhbXRfcGFnZShjYWNoZSk7XG4mIzQzO1x0XHRpZiAoIXBhbXRfcGFnZXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xuJiM0MztcdFx0ICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2ldKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxuJiM0MzsgKiBhIGdpdmVuIDRLQiBwYWdlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbiYjNDM7e1xuJiM0MztcdC8qIEFyZyB2YWx1ZSB3aWxsIHNwZWNpZnkgYSAyTUIgcmVnaW9uIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBNRF9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGhwYV8ybWIgfCBURFhfUFNfMk07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFkZCBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4mIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4mIzQzO1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4mIzQzO1x0XHQucmR4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMF0pLFxuJiM0MztcdFx0LnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZWFtY2FsbChUREhfUEhZTUVNX1BBTVRfQURELCBcdTAwMjZhcmdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cbiYjNDM7c3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbiYjNDM7XHR9O1xuJiM0MztcdHU2NCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcdTAwMjZhcmdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBQQU1UIHBhZ2VzIG91dCBvZiB0aGUgc3RydWN0IHBlciB0aGUgVERYIEFCSSAqL1xuJiM0MztcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuJiM0MztcdHBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBhbXRfbG9jayk7XG4mIzQzO1xuJiM0MzsvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4mIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4mIzQzO1x0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XG4mIzQzO1x0dTY0IHRkeF9zdGF0dXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBwYW10IHBhZ2UgaXMgYWxyZWFkeSBhZGRlZCAoaS5lLiByZWZjb3VudCBcdTAwM2U9IDEpLFxuJiM0MztcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGFtdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cbiYjNDM7XHQgKiBhdG9taWNhbGx5IGhhbmRsZSB0aGUgMS1cdTAwM2UwIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm9cbiYjNDM7XHQgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC1cdTAwM2UxLiBSZWNoZWNrIHVuZGVyIHRoZVxuJiM0MztcdCAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLVx1MDAzZTFcbiYjNDM7XHQgKiB0cmFuc2l0aW9uIGFmdGVyIGJvdGggc2F3IGF0b21pY19pbmNfbm90X3plcm8oKSBmYWlsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJlZmNvdW50IGlzIHplcm8sIGFuZCB0aGlzIGxvY2tlZCBwYXRoIGlzIHRoZVxuJiM0MztcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cdTAwM2UxLlxuJiM0MztcdCAqL1xuJiM0MztcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGFtdF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9mcmVlOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpO1xuJiM0MztcbiYjNDM7LyogRHJvcCBQQU1UIHJlZmNvdW50IGZvciB0aGUgZ2l2ZW4gcGZuIGFuZCBmcmVlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4mIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307XG4mIzQzO1x0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XG4mIzQzO1x0dTY0IHRkeF9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgcmVmZXJlbmNlIG9uIHRoZSBwYW10IHBhZ2UsIGRvbiYjMzk7dFxuJiM0MztcdCAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2socGFtdF9yZWZjb3VudCwgXHUwMDI2cGFtdF9sb2NrKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXG4mIzQzO1x0ICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhc1xuJiM0MztcdCAqIHRoZXJlIGlzIG5vIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBidXQgZG8geWVsbCBsb3VkbHkgYXNcbiYjNDM7XHQgKiBmYWlsdXJlIGluZGljYXRlcyBhIGtlcm5lbCBidWcsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQsIGFuZFxuJiM0MztcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLFxuJiM0MztcdFx0ICogYnV0IHRoZSBQQU1UIGVudHJ5IHN0aWxsIGV4aXN0cyBzaW5jZSBSRU1PVkUgZmFpbGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGFtdF9sb2NrKTtcbiYjNDM7XHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKHBhZ2UgPSB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKSkpXG4mIzQzO1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7XG4mIzQzO1xuJiM0MztpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGNhY2hlLVx1MDAzZWNudCBcdTAwM2MgbnBhZ2VzKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlbHJ1LCBcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuJiM0MztcdFx0Y2FjaGUtXHUwMDNlY250JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfdG9wdXBfcGFtdF9jYWNoZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm4gYSBwYWdlIHRoYXQgY2FuIGJlIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgXCYjMzQ7Y29udHJvbFwmIzM0O1xuJiM0MzsgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcbiYjNDM7ICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBQQU1UIHRyYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxuJiM0MzsgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwYWdlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuJiM0MztcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19zZXR1cChcJiMzNDt0ZHhfZHBhbXQ9XCYjMzQ7LCB0ZHhfZHBhbXRfc2V0dXApO1xuJiM0MztcbiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNDgsNiAmIzQzOzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4mIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVx0XHQ1OVxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXHRcdFx0NjlcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5pbmRleCBlNDljMzAwZjIzZDQzLi45M2IxZjI2MjUyYzYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuJiM0MzsgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuICAqXG4gICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb25cbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXG5AQCAtMzMsNiAmIzQzOzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IER5bmFtaWMgUEFNVCwgc29cbiYjNDM7XHQgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCYjMzk7cyBub3Qgc3VwcG9ydGVkLiBEb24mIzM5O3QgdHJ5XG4mIzQzO1x0ICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVRcbiYjNDM7XHQgKiBidXQgZG9uJiMzOTt0IGV4cG9zZSB0aGUgbWV0YWRhdGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoc3lzaW5mbykpXG4mIzQzO1x0XHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZG1yKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDBlZmM0OTEzMTg4MWYxNmE1YjE1ODBhZGYzZjdjNzk0MjYzMTQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwMzowMDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTc1MTIsNiAmIzQzOzc1MTIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAogCXRkZng9CQlbSFcsRFJNXQogCiYjNDM7CXRkeF9kcGFtdD0KJiM0MzsJCQlbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVQKJiM0MzsJCQl0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuCiYjNDM7CiYjNDM7CQkJVmFsaWQgcGFyYW1ldGVyczogJiMzNDtvbiYjMzQ7LCAmIzM0O29mZiYjMzQ7CiYjNDM7CQkJRGVmYXVsdDogJiMzNDtvZmYmIzM0OwomIzQzOwomIzQzOwkJCUZvciBkZXRhaWxzIHNlZToKJiM0MzsJCQlEb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsKIAl0ZXN0X3N1c3BlbmQ9CVtTVVNQRU5EXQogCQkJRm9ybWF0OiB7ICYjMzQ7bWVtJiMzNDsgfCAmIzM0O3N0YW5kYnkmIzM0OyB8ICYjMzQ7ZnJlZXplJiMzNDsgfVssTl0KIAkJCVNwZWNpZnkgJiMzNDttZW0mIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciAmIzM0O3N0YW5kYnkmIzM0OyAoZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKaW5kZXggMzMwMzQ5OWFkNGM2Zi4uYTFjMjMwOTIzMDU4MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdApAQCAtMjAwLDYgJiM0MzsyMDAsMzQgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlCiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVEQKIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuCiAKJiM0MztEeW5hbWljIFBBTVQKJiM0MzstLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZW1vcnkgdGhhdCB0aGUgVERYIG1vZHVsZSBuZWVkcwomIzQzO3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWQKJiM0Mzt0byB0aGUgVERYIG1vZHVsZSBmb3IgaXRzIGV4Y2x1c2l2ZSB1c2UuIEZvciBub3JtYWwgUEFNVCwgdGhpcyBpcyBpbnN0YWxsZWQKJiM0Mzt3aGVuIHRoZSBURFggbW9kdWxlIGlzIGZpcnN0IGxvYWRlZCBhbmQgY29tZXMgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0gbWVtb3J5LgomIzQzOwomIzQzO0R5bmFtaWMgUEFNVCBpcyBhIFREWCBtb2R1bGUgZmVhdHVyZSB0aGF0IGFsbG93cyBWTU0gdG8gYWxsb2NhdGUgcGFydCBvZiB0aGUKJiM0MztQQU1UIGFzIG5lZWRlZCAodGhlIHBhcnRzIGZvciB0cmFja2luZyA0S0Igc2l6ZSBwYWdlcykuIFRoZSBvdGhlciBwYWdlIHNpemVzCiYjNDM7KDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZQomIzQzO2luaXRpYWxpemF0aW9uLiBUaGlzIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBURFggdXNlcyB3aGlsZSBURHMgYXJlCiYjNDM7bm90IGluIHVzZS4KJiM0MzsKJiM0MztXaGVuIER5bmFtaWMgUEFNVCBpcyBpbiB1c2UsIGRtZXNnIHNob3dzIGl0IGxpa2U6OgomIzQzOwomIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVAomIzQzOyAgWy4uXSB2aXJ0L3RkeDogMTAwOTIgS0IgYWxsb2NhdGVkIGZvciBQQU1UCiYjNDM7ICBbLi5dIHZpcnQvdGR4OiBURFgtTW9kdWxlIGluaXRpYWxpemVkCiYjNDM7CiYjNDM7RHluYW1pYyBQQU1UIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHN1cHBvcnRlZCBhbmQgdGhlIGBgdGR4X2RwYW10PWBgIGtlcm5lbAomIzQzO3BhcmFtZXRlciBpcyBzZXQgdG8gJiMzNDtvbiYjMzQ7LiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGUKJiM0MztpbnRlcm5hbCBkZXRhaWxzIHByZXZlbnQgRHluYW1pYyBQQU1UIGZyb20gd29ya2luZyBvbiBhbGwga2V5aWQgcGFydGl0aW9uaW5nCiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpbgomIzQzO2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG8KJiM0MztkZWZhdWx0IG9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY29uc3VsdCB0aGUgSW50ZWwgVERYIGRvY3VtZW50YXRpb24gYWJvdXQKJiM0MztEeW5hbWljIFBBTVQuCiYjNDM7CiBURFggSW50ZXJhY3Rpb24gdG8gT3RoZXIgS2VybmVsIENvbXBvbmVudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAppbmRleCA4M2RjNTA4NjEzOGIzLi41ODg1NjNkZmU4OGQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKQEAgLTk4LDYgJiM0Mzs5OCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApCiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZCkKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSkKIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKQogS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpCiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KQogS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX211bHRpcGxpZXIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE5MjIsNiAmIzQzOzE5MjIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCS8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi8KIAl2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwogCiYjNDM7CWludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7CiAKIAlib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAppbmRleCA4OWU5N2Q1NzYxZDg5Li43OTEwOTAxYTdiYTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaApAQCAtMzYsNiAmIzQzOzM2LDcgQEAKIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovCiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORwlCSVRfVUxMKDEpCiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRAlCSVRfVUxMKDE4KQomIzQzOyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQJQklUX1VMTCgzNikKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKQEAgLTExOCwxMiAmIzQzOzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZgogCXJldHVybiBzeXNpbmZvLSZndDtmZWF0dXJlcy50ZHhfZmVhdHVyZXMwICZhbXA7IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORzsKIH0KIAomIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKTsKJiM0MzsKJiM0MzsvKiBTaW1wbGUgc3RydWN0dXJlIGZvciBwcmUtYWxsb2NhdGluZyBEeW5hbWljIFBBTVQgcGFnZXMgb3V0c2lkZSBvZiBzcGlubG9ja3MuICovCiYjNDM7c3RydWN0IHRkeF9wYW10X2NhY2hlIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7CiYjNDM7CWludCBjbnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjYWNoZS0mZ3Q7cGFnZV9saXN0KTsKJiM0MzsJY2FjaGUtJmd0O2NudCA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTsKJiM0MztpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpOwomIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7CiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbik7CiYjNDM7CiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpOwogdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpOwogdm9pZCB0ZHhfZ3Vlc3Rfa2V5aWRfZnJlZSh1bnNpZ25lZCBpbnQga2V5aWQpOwogCiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKJiM0MzsvKiBOdW1iZXIgb2YgUEFNVCBwYWdlcyB0byBiZSBwcm92aWRlZCB0byBURFggbW9kdWxlIHBlciAyTUIgcmVnaW9uIG9mIFBBICovCiYjNDM7I2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMgomIzQzOwomIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpOwomIzQzO3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKJiM0MzsKIHN0cnVjdCB0ZHhfdGQgewogCS8qIFREIHJvb3Qgc3RydWN0dXJlOiAqLwogCXN0cnVjdCBwYWdlICp0ZHJfcGFnZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaAppbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgewogCXUxNiBwYW10XzRrX2VudHJ5X3NpemU7CiAJdTE2IHBhbXRfMm1fZW50cnlfc2l6ZTsKIAl1MTYgcGFtdF8xZ19lbnRyeV9zaXplOwomIzQzOwomIzQzOwkvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqLwomIzQzOwl1OCAgcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzOwogfTsKIAogc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDY2ZTY5ZDJhNDFiM2MuLjJhNjI4YjgzMDQ0MDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNjE0LDYgJiM0Mzs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpCiAJCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKJiM0MzsKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiAJfQogCXIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZSgmYW1wO3ZjcHUtJmd0O2FyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLAogCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IDU0NWIwM2Q5ZDEwYjguLjA5NTczMTEyNTQwZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSkKIAlpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKQogCQlyZXR1cm47CiAKLQlfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2UoY3RybF9wYWdlKTsKIH0KIAogc3RydWN0IHRkeF9mbHVzaF92cF9hcmcgewpAQCAtNTg5LDcgJiM0Mzs1ODksNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV90ZF9jb250cm9sX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSkKIAogCXRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMoa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpOwogCi0JX19mcmVlX3BhZ2Uoa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UpOwogCWt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlID0gTlVMTDsKIH0KIApAQCAtNjgxLDYgJiM0Mzs2ODEsOCBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIWlycWNoaXBfc3BsaXQodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJdGR4X2luaXRfcGFtdF9jYWNoZSgmYW1wO3RkeC0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CiAJZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKCZhbXA7dmNwdS0mZ3Q7YXJjaC5ndWVzdF9mcHUpOwogCXZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7Z3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dGR4LSZndDt2dC5waV93YWtldXBfbGlzdCk7CkBAIC04NjYsNiAmIzQzOzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAJaW50IGk7CiAKJiM0MzsJdGR4X2ZyZWVfcGFtdF9jYWNoZSgmYW1wO3RkeC0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CiAJaWYgKHZjcHUtJmd0O2NwdSAhPSAtMSkgewogCQlLVk1fQlVHX09OKHRkeC0mZ3Q7c3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS0mZ3Q7a3ZtKTsKIAkJdGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTsKQEAgLTE2MjEsNiAmIzQzOzE2MjUsMTcgQEAgdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiAJdGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhCiYjNDM7CSAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuCiYjNDM7CSAqLwomIzQzOwltaW5fbnJfc3B0cyAmIzQzOz0gLTEgJiM0MzsgMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKCZhbXA7dG9fdGR4KHZjcHUpLSZndDtwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLAogCQkJICAgIGt2bV9wZm5fdCBwZm4pCiB7CkBAIC0xNjc5LDE2ICYjNDM7MTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiAJCQkJICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7CiAJZ3BhX3QgZ3BhID0gZ2ZuX3RvX2dwYShnZm4pOwogCXU2NCBlcnIsIGVudHJ5LCBsZXZlbF9zdGF0ZTsKIAlzdHJ1Y3QgcGFnZSAqc2VwdF9wdDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAogCXNlcHRfcHQgPSB0ZHhfc3B0ZV90b19zZXB0X3B0KGt2bSwgZ2ZuLCBuZXdfc3B0ZSwgbGV2ZWwpOwogCWlmICghc2VwdF9wdCkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJcmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCAmYW1wO3RvX3RkeCh2Y3B1KS0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CWlmIChLVk1fQlVHX09OKHJldCwga3ZtKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJZXJyID0gdGRoX21lbV9zZXB0X2FkZCgmYW1wO3RvX2t2bV90ZHgoa3ZtKS0mZ3Q7dGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsCiAJCQkgICAgICAgJmFtcDtlbnRyeSwgJmFtcDtsZXZlbF9zdGF0ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQl0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4oc2VwdF9wdCkpOwomIzQzOwogCWlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNzAxLDggJiM0MzsxNzI4LDEzIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCwKIAkJCQkgIHU2NCBuZXdfc3B0ZSkKIHsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKIAlzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTsKIAlrdm1fcGZuX3QgcGZuID0gc3B0ZV90b19wZm4obmV3X3NwdGUpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSkKJiM0MzsJCXJldHVybiAtRUlPOwogCiAJLyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqLwogCWlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKQpAQCAtMTcxMCw2ICYjNDM7MTc0MiwxMCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZQogCiAJV0FSTl9PTl9PTkNFKChuZXdfc3B0ZSAmYW1wOyBWTVhfRVBUX1JXWF9NQVNLKSAhPSBWTVhfRVBUX1JXWF9NQVNLKTsKIAomIzQzOwlyZXQgPSB0ZHhfcGFtdF9nZXQocGZuLCAmYW1wO3RvX3RkeCh2Y3B1KS0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CWlmIChLVk1fQlVHX09OKHJldCwga3ZtKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJLyoKIAkgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKQogCSAqIGJlZm9yZSBrdm1fdGR4LSZndDtzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdApAQCAtMTcyMiwxMCAmIzQzOzE3NTgsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmUKIAkgKiBJZiB0aGUgVEQgaXNuJiMzOTt0IGZpbmFsaXplZC9ydW5uYWJsZSwgdGhlbiB1c2Vyc3BhY2UgaXMgaW5pdGlhbGl6aW5nCiAJICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC4KIAkgKi8KLQlpZiAodW5saWtlbHkoa3ZtX3RkeC0mZ3Q7c3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKQotCQlyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CWlmIChsaWtlbHkoa3ZtX3RkeC0mZ3Q7c3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKQomIzQzOwkJcmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJdGR4X3BhbXRfcHV0KHBmbik7CiAKLQlyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xODIyLDYgJiM0MzsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCQlyZXR1cm4gLUVJTzsKIAogCXRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpOwomIzQzOwl0ZHhfcGFtdF9wdXQocGZuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg2NSw2ICYjNDM7MTkwNyw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLAogICovCiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CiYjNDM7CXN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLSZndDtleHRlcm5hbF9zcHQpOwomIzQzOwogCS8qCiAJICogS1ZNIGRvZXNuJiMzOTt0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlCiAJICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlCkBAIC0xODc4LDE1ICYjNDM7MTkyMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiAJICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS4KIAkgKi8KIAlpZiAoS1ZNX0JVR19PTihpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgoa3ZtKSksIGt2bSkgfHwKLQkgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtJmd0O2V4dGVybmFsX3NwdCkpKQomIzQzOwkgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSkKIAkJZ290byBvdXQ7CiAKIAkvKgotCSAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5Ci0JICogYWZ0ZXIgVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKLQkgKiByZWFkZXJzLgomIzQzOwkgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnQKJiM0MzsJICogZnJlZWluZyBwYWdlcyBmcm9tIFJDVSBjYWxsYmFja3MsIGFuZCBtb3JlIGltcG9ydGFudGx5IGJlY2F1c2UKJiM0MzsJICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy4KIAkgKi8KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtJmd0O2V4dGVybmFsX3NwdCk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTsKIG91dDoKIAlzcC0mZ3Q7ZXh0ZXJuYWxfc3B0ID0gTlVMTDsKIH0KQEAgLTI0NTksNyAmIzQzOzI1MDMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiAKIAlyZXQgPSAtRU5PTUVNOwogCi0JdGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CXRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCWlmICghdGRyX3BhZ2UpCiAJCWdvdG8gZnJlZV9oa2lkOwogCkBAIC0yNDcyLDcgJiM0MzsyNTE2LDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogCQlnb3RvIGZyZWVfdGRyOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CQl0ZGNzX3BhZ2VzW2ldID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCQlpZiAoIXRkY3NfcGFnZXNbaV0pCiAJCQlnb3RvIGZyZWVfdGRjczsKIAl9CkBAIC0yNTkwLDEwICYjNDM7MjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIHRlYXJkb3duOgogCS8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAmIzM5O2kmIzM5OyAqLwogCWZvciAoOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRkY3NfcGFnZXNbaV0pIHsKLQkJCV9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pOwotCQkJdGRjc19wYWdlc1tpXSA9IE5VTEw7Ci0JCX0KJiM0MzsJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKJiM0MzsJCXRkY3NfcGFnZXNbaV0gPSBOVUxMOwogCX0KIAlpZiAoIWt2bV90ZHgtJmd0O3RkLnRkY3NfcGFnZXMpCiAJCWtmcmVlKHRkY3NfcGFnZXMpOwpAQCAtMjYwOCwxNiAmIzQzOzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogCWZyZWVfY3B1bWFza192YXIocGFja2FnZXMpOwogCiBmcmVlX3RkY3M6Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmICh0ZGNzX3BhZ2VzW2ldKQotCQkJX19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7Ci0JfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7CiAJa2ZyZWUodGRjc19wYWdlcyk7CiAJa3ZtX3RkeC0mZ3Q7dGQudGRjc19wYWdlcyA9IE5VTEw7CiAKIGZyZWVfdGRyOgotCWlmICh0ZHJfcGFnZSkKLQkJX19mcmVlX3BhZ2UodGRyX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRyX3BhZ2UpOwogCWt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlID0gTlVMTDsKIAogZnJlZV9oa2lkOgpAQCAtMjk1MSw3ICYjNDM7Mjk5MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAlpbnQgcmV0LCBpOwogCXU2NCBlcnI7CiAKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdGR4LSZndDt2cC50ZHZwcl9wYWdlID0gcGFnZTsKQEAgLTI5NzEsNyAmIzQzOzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CQlwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCQlpZiAoIXBhZ2UpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZyZWVfdGRjeDsKQEAgLTI5OTMsNyAmIzQzOzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAJCQkgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS4KIAkJCSAqLwogCQkJZm9yICg7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQkJCV9fZnJlZV9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiYjNDM7CQkJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwogCQkJCXRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7CiAJCQl9CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTMwMjEsMTYgJiM0MzszMDYwLDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAogZnJlZV90ZGN4OgogCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlpZiAodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKQotCQkJX19mcmVlX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKJiM0MzsJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwogCQl0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMOwogCX0KIAlrZnJlZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXMpOwogCXRkeC0mZ3Q7dnAudGRjeF9wYWdlcyA9IE5VTEw7CiAKIGZyZWVfdGR2cHI6Ci0JaWYgKHRkeC0mZ3Q7dnAudGR2cHJfcGFnZSkKLQkJX19mcmVlX3BhZ2UodGR4LSZndDt2cC50ZHZwcl9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC0mZ3Q7dnAudGR2cHJfcGFnZSk7CiAJdGR4LSZndDt2cC50ZHZwcl9wYWdlID0gTlVMTDsKIAl0ZHgtJmd0O3ZwLnRkdnByX3BhID0gMDsKIApAQCAtMzQ5Myw2ICYjNDM7MzUzMCwxMCBAQCBpbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCiAJdnRfeDg2X29wcy5zZXRfZXh0ZXJuYWxfc3B0ZSA9IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGU7CiAJdnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7CiYjNDM7CiYjNDM7CWlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSkKJiM0MzsJCXZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTsKJiM0MzsKIAl2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmgKaW5kZXggYWM4MzIzYTY4YjE2My4uZmQzNjhlM2VlMDYwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHggewogCiAJdTY0IG1hcF9ncGFfbmV4dDsKIAl1NjQgbWFwX2dwYV9lbmQ7CiYjNDM7CiYjNDM7CXN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlOwogfTsKIAogdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMKaW5kZXggNDJkZjhlYTQ2NGM0Ny4uZGVjNDU3MDllNDU0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY29yZV9vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NwZWNpYWxfaW5zbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vbXNyLWluZGV4LmgmZ3Q7CkBAIC00Niw2ICYjNDM7NDcsOCBAQAogI2luY2x1ZGUgJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogCiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7CiAJYm9vbCBpbml0aWFsaXplZDsKIAlib29sIHN5c2luaXRfZG9uZTsKQEAgLTYzLDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGR4X2xwX2luaXRpYWxpemVkKTsKIAogc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0OwogCiYjNDM7LyoKJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXIKJiM0MzsgKiBmb3IgZXZlcnkgMk1CIHJhbmdlLiBUaGUgY291bnRlciBpbmRpY2F0ZXMgaG93IG1hbnkgdXNlcnMgdGhlcmUgYXJlIGZvcgomIzQzOyAqIHRoZSBQQU1UIG1lbW9yeSBvZiB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBQQU1UIHJlZmNvdW50cyBhdAomIzQzOyAqIGluaXRpYWxpemF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqLwogc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7CiAKQEAgLTI1Miw2ICYjNDM7MjYzLDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHsKIAkub3BzID0gJmFtcDt0ZHhfc3lzY29yZV9vcHMsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKgomIzQzOyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19pbml0IGludCBpbml0X3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7CiYjNDM7CWlmICghcGFtdF9yZWZjb3VudHMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZmcmVlKHBhbXRfcmVmY291bnRzKTsKJiM0MzsJcGFtdF9yZWZjb3VudHMgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwkvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiAmZ3Q7Jmd0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3BhbXRfcmVmY291bnRzW2luZGV4XTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlCiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24mIzM5O3QKQEAgLTUxMCwzNSAmIzQzOzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWludCBiaXRzX3Blcl9lbnRyeTsKJiM0MzsKJiM0MzsJYml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKJiM0MzsJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZAogICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuCiAgKi8KLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LAotCQkJCQkgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpCiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opCiB7CiAJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9OwomIzQzOwljb25zdCB1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7CiYjNDM7CQl0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSwKJiM0MzsJCXRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLAomIzQzOwkJdGR4X3N5c2luZm8udGRtci5wYW10XzFnX2VudHJ5X3NpemUsCiYjNDM7CX07CiAKLQlzd2l0Y2ggKHBnc3opIHsKLQljYXNlIFREWF9QU180SzoKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCQlicmVhazsKLQljYXNlIFREWF9QU18yTToKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQTURfU0hJRlQ7Ci0JCWJyZWFrOwotCWNhc2UgVERYX1BTXzFHOgotCQlucl9wYW10X2VudHJpZXMgPSB0ZG1yLSZndDtzaXplICZndDsmZ3Q7IFBVRF9TSElGVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gMDsKLQl9CiYjNDM7CW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07CiYjNDM7CXBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07CiAKLQlwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplOwogCS8qIFREWCByZXF1aXJlcyBQQU1UIHNpemUgbXVzdCBiZSA0SyBhbGlnbmVkICovCi0JcGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7Ci0KLQlyZXR1cm4gcGFtdF9zejsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiB9CiAKIC8qCkBAIC01NzYsMTUgJiM0Mzs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXMKICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuCiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKLQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKLQkJCQkgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KQogewotCXVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07Ci0JdW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTsKLQl1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9iYXNlOwogCXVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7CiAJc3RydWN0IHBhZ2UgKnBhbXQ7Ci0JaW50IHBnc3osIG5pZDsKJiM0MzsJaW50IG5pZDsKIAogCW5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7CiAKQEAgLTU5MiwxMyAmIzQzOzYzNywxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemUKIAkgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS4KIAkgKi8KLQl0ZG1yX3BhbXRfc2l6ZSA9IDA7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X3NpemVbcGdzel0gPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIHBnc3osCi0JCQkJCXBhbXRfZW50cnlfc2l6ZVtwZ3N6XSk7Ci0JCXRkbXJfcGFtdF9zaXplICYjNDM7PSBwYW10X3NpemVbcGdzel07CiYjNDM7CXRkbXItJmd0O3BhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pOwomIzQzOwomIzQzOwlpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkgewomIzQzOwkJLyogV2l0aCBEeW5hbWljIFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqLwomIzQzOwkJdGRtci0mZ3Q7cGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0ZG1yLSZndDtwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7CiAJfQogCiYjNDM7CXRkbXJfcGFtdF9zaXplID0gdGRtci0mZ3Q7cGFtdF80a19zaXplICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZSAmIzQzOyB0ZG1yLSZndDtwYW10XzFnX3NpemU7CiYjNDM7CiAJLyoKIAkgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsCiAJICogUEFNVHMuICBUaGlzIGhlbHBzIG1pbmltaXplIHRoZSBQQU1UJiMzOTtzIHVzZSBvZiByZXNlcnZlZCBhcmVhcwpAQCAtNjA2LDI1ICYjNDM7NjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKIAkgKi8KIAlwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsCiAJCQluaWQsICZhbXA7bm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAoIXBhbXQpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJLyoKLQkgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGUKLQkgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS4KJiM0MzsJICogdGRtci0mZ3Q7cGFtdF80a19iYXNlIGlzIHN0aWxsIHplcm8gc28gdGhlIGVycm9yCiYjNDM7CSAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC4KIAkgKi8KLQl0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTsKLQkJdGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTsKLQl9CiYjNDM7CWlmICghcGFtdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JdGRtci0mZ3Q7cGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107Ci0JdGRtci0mZ3Q7cGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107CiYjNDM7CXRkbXItJmd0O3BhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gdGRtci0mZ3Q7cGFtdF80a19iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfNGtfc2l6ZTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gdGRtci0mZ3Q7cGFtdF8ybV9iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU1LDEwICYjNDM7Njk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJdGRtcl9nZXRfcGFtdCh0ZG1yLCAmYW1wO3BhbXRfYmFzZSwgJmFtcDtwYW10X3NpemUpOwogCiAJLyogRG8gbm90aGluZyBpZiBQQU1UIGhhc24mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqLwotCWlmICghcGFtdF9zaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKQomIzQzOwlpZiAoIXBhbXRfYmFzZSkKIAkJcmV0dXJuOwogCiAJcGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTsKQEAgLTY4NCwxNCAmIzQzOzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCkKIAogLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCi0JCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LAotCQkJCQl1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZG1yX2xpc3QtJmd0O25yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsCi0JCQkJcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJCXJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC05NjgsMTggJiM0MzsxMDA1LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAkJCQkgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCQkJCSAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7Ci0JdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewotCQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfNGtfZW50cnlfc2l6ZSwKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUsCi0JCXN5c2luZm9fdGRtci0mZ3Q7cGFtdF8xZ19lbnRyeV9zaXplLAotCX07CiAJaW50IHJldDsKIAogCXJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJcmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5OCw2ICYjNDM7MTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQJQklUKDE2KQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCiAJCQkJICAgIHU2NCBnbG9iYWxfa2V5aWQpCiB7CkBAIC0xMDI2LDYgJiM0MzsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCWFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTsKIAlhcmdzLnJkeCA9IHRkbXJfbGlzdC0mZ3Q7bnJfY29uc3VtZWRfdGRtcnM7CiAJYXJncy5yOCA9IGdsb2JhbF9rZXlpZDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXG4mIzM0Oyk7CiYjNDM7CQlhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCAmYW1wO2FyZ3MpOwogCiAJLyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovCkBAIC0xMTY3LDEwICYjNDM7MTIwNywxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAkgKi8KIAlnZXRfb25saW5lX21lbXMoKTsKIAotCXJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzOwlyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0X3RkeG1lbTsKIAomIzQzOwlyZXQgPSBidWlsZF90ZHhfbWVtbGlzdCgmYW1wO3RkeF9tZW1saXN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAJLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi8KIAlyZXQgPSBhbGxvY190ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0LCAmYW1wO3RkeF9zeXNpbmZvLnRkbXIpOwogCWlmIChyZXQpCkBAIC0xMjIwLDYgJiM0MzsxMjY0LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpCiAJZnJlZV90ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0KTsKIGVycl9mcmVlX3RkeG1lbToKIAlmcmVlX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzO2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOgomIzQzOwlmcmVlX3BhbXRfcmVmY291bnRzKCk7CiAJZ290byBvdXRfcHV0X3RkeG1lbTsKIH0KIApAQCAtMjAwMyw2ICYjNDM7MjA0OSwyODggQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbikKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQpOwogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzaW5mby0mZ3Q7ZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCAmYW1wOyBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0ZHhfZW5hYmxlX2RwYW10OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO2NhY2hlLSZndDtwYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpOwomIzQzOwlpZiAocGFnZSkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtwYWdlLSZndDtscnUpOwomIzQzOwkJY2FjaGUtJmd0O2NudC0tOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWlmIChjYWNoZSkKJiM0MzsJCXJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWludCBpLCBqOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpOwomIzQzOwkJaWYgKCFwYW10X3BhZ2VzW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkvKgomIzQzOwkJICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzCiYjNDM7CQkgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLgomIzQzOwkJICovCiYjNDM7CQl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpOwomIzQzOwomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYWxjdWxhdGUgdGhlIGFyZyBuZWVkZWQgZm9yIG9wZXJhdGluZyBvbiB0aGUgRFBBTVQgYmFja2luZyBmb3IKJiM0MzsgKiBhIGdpdmVuIDRLQiBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwkvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULCBQTURfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqLwomIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7CiYjNDM7CQkucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksCiYjNDM7CQkucmR4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMF0pLAomIzQzOwkJLnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgJmFtcDthcmdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwl9OwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgJmFtcDthcmdzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi8KJiM0MzsJcGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7CiYjNDM7CXBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqLwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovCiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXTsKJiM0MzsJYXRvbWljX3QgKnBhbXRfcmVmY291bnQ7CiYjNDM7CXU2NCB0ZHhfc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHBhbXQgcGFnZSBpcyBhbHJlYWR5IGFkZGVkIChpLmUuIHJlZmNvdW50ICZndDs9IDEpLAomIzQzOwkgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvCiYjNDM7CSAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLSZndDswIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm8KJiM0MzsJICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtJmd0OzEuIFJlY2hlY2sgdW5kZXIgdGhlCiYjNDM7CSAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLSZndDsxCiYjNDM7CSAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSkKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCXJldCA9IC1FSU87CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGUKJiM0MzsJICogb25seSB3YXkgdG8gaW5jcmVhc2UgaXQgZnJvbSAwLSZndDsxLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpOwomIzQzOwomIzQzOy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqLwomIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307CiYjNDM7CWF0b21pY190ICpwYW10X3JlZmNvdW50OwomIzQzOwl1NjQgdGR4X3N0YXR1czsKJiM0MzsKJiM0MzsJaWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJiMzOTt0CiYjNDM7CSAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmICghYXRvbWljX2RlY19hbmRfbG9jayhwYW10X3JlZmNvdW50LCAmYW1wO3BhbXRfbG9jaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW4KJiM0MzsJICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhcwomIzQzOwkgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzCiYjNDM7CSAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kCiYjNDM7CSAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsCiYjNDM7CQkgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CXJldHVybjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO3BhbXRfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpOwomIzQzOwomIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSkKJiM0MzsJCV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7CiYjNDM7CiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQomIzQzO3sKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsKJiM0MzsKJiM0MzsJd2hpbGUgKGNhY2hlLSZndDtjbnQgJmx0OyBucGFnZXMpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwomIzQzOwkJaWYgKCFwYWdlKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJbGlzdF9hZGQoJmFtcDtwYWdlLSZndDtscnUsICZhbXA7Y2FjaGUtJmd0O3BhZ2VfbGlzdCk7CiYjNDM7CQljYWNoZS0mZ3Q7Y250JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSAmIzM0O2NvbnRyb2wmIzM0OwomIzQzOyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWAomIzQzOyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkgewomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sCiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguCiYjNDM7ICovCiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7CiYjNDM7CV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCAmYW1wO3RkeF9lbmFibGVfZHBhbXQpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO19fc2V0dXAoJiMzNDt0ZHhfZHBhbXQ9JiMzNDssIHRkeF9kcGFtdF9zZXR1cCk7CiYjNDM7CiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKQogewogCXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCmluZGV4IGJkZmQwZTFlMzM3YWMuLmE4ODZjNTRkZWNhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmgKQEAgLTQ4LDYgJiM0Mzs0OCw4IEBACiAjZGVmaW5lIFRESF9TWVNfQ09ORklHCQkJNDUKICNkZWZpbmUgVERIX1NZU19TSFVURE9XTgkJNTIKICNkZWZpbmUgVERIX1NZU19VUERBVEUJCQk1MwomIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERAkJNTgKJiM0MzsjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkUJCTU5CiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRQkJCTY5CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYwppbmRleCBlNDljMzAwZjIzZDQzLi45M2IxZjI2MjUyYzYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLgomIzQzOyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuCiAgKgogICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb24KICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS4KQEAgLTMzLDYgJiM0MzszMywxOCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZgogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwl1NjQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsICZhbXA7dmFsKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cyA9IHZhbDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiAJcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwogCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoJmFtcDtzeXNpbmZvLSZndDt0ZF9jb25mKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IER5bmFtaWMgUEFNVCwgc28KJiM0MzsJICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQmIzM5O3Mgbm90IHN1cHBvcnRlZC4gRG9uJiMzOTt0IHRyeQomIzQzOwkgKiB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlIER5bmFtaWMgUEFNVAomIzQzOwkgKiBidXQgZG9uJiMzOTt0IGV4cG9zZSB0aGUgbWV0YWRhdGEuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoc3lzaW5mbykpCiYjNDM7CQlyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoJmFtcDtzeXNpbmZvLSZndDt0ZG1yKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEeW5hbWljIFBBTVQgVERYIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFkZGluZyAmIzM0O0R5bmFtaWMgUEFNVCYjMzQ7IHN1cHBvcnQgd2l0aGluIHRoZSBURFggbW9kdWxlIGZvciB4ODYuIEl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBmaWxlcyBpbiB0aGUgS1ZNIGFuZCBURFggaW5mcmFzdHJ1Y3R1cmU6IGB0ZHguY2AgZmlsZXMsIHRoZSBNTVUsIGV0Yy4gVGhpcyBpcyBhY3RpdmF0ZWQgd2l0aCB0aGUgYHRkeF9kcGFtdD1vbmAga2VybmVsIHBhcmFtZXRlciwgYW5kIGl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYWxsIHRoYXQgZ29vZCBzdHVmZiwgcGx1cyBpdCB1dGlsaXplcyBgVERIX1BIWU1FTV9QQU1UX0FERGAgYW5kIGBUREhfUEhZTUVNX1BBTVRfUkVNT1ZFYCBTRUFNQ0FMTHMuCgpUaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gSW1tZWRpYXRlbHksIHRoZSBURFggcmVxdWlyZW1lbnQgcG9wcyB0byBtaW5kIC0gc3BlY2lmaWMgSW50ZWwgVERYIGhhcmR3YXJlLiBJdCYjMzk7cyBhIHZpcnR1YWxpemF0aW9uIGZlYXR1cmUsIGJ1dCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gdGhlICpob3N0KiBzaWRlLCB0aGUgS1ZNIHN1cHBvcnQsIG5vdCB0aGUgZ3Vlc3QgaXRzZWxmLCBhdCBsZWFzdCB0aGF0JiMzOTtzIG15IHVuZGVyc3RhbmRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSByZWFsbHkgdGVzdCB0aGlzIGluIFFFTVU/JiMzNDsuCgpXYWl0LCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzOiBJc24mIzM5O3QgVERYIGd1ZXN0IHN1cHBvcnQgc2VwYXJhdGUgZnJvbSB0aGlzIEtWTSBob3N0LXNpZGUgd29yaz8gSSBuZWVkIHRvIGJlIHByZWNpc2UsIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIFREWCBob3N0LXNpZGUgS1ZNIGZ1bmN0aW9uYWxpdHkuIE5vdyBJJiMzOTttIHF1ZXN0aW9uaW5nIHdoZXRoZXIgVERYIGhvc3Qgc3VwcG9ydCBpbiBLVk0gaXMgZXZlbiBmdWxseSB1cHN0cmVhbWVkLCBvciBpZiBpdCBpcyB0ZXN0YWJsZSB3aXRoIHN0YW5kYXJkIFFFTVUuCgpSZWFsaXN0aWNhbGx5LCBURFggaG9zdCBzdXBwb3J0ICp0eXBpY2FsbHkqIGRlbWFuZHMgYmFyZSBtZXRhbCB3aXRoIFREWC1jYXBhYmxlIGhhcmR3YXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGV2ZW4gaWYgaXQgY291bGQgYmUgbmVzdGVkICh3aGljaCBpdCBjYW4mIzM5O3QgcmlnaHQgbm93KSwgaXMgYSBuby1nby4gVGhlIHByb21wdCBpdHNlbGYgaXMgdmVyeSBleHBsaWNpdCBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRS9RRU1VIHdoZW4gZW11bGF0aW5nIGhhcmR3YXJlLCBpdCYjMzk7cyByZWZlcnJpbmcgdG8gdGhlIFREWCBob3N0IGNvZGUuCgpTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBhIGZ1enplciBsaWtlIHN5emthbGxlciByZWFjaCB0aGlzIFREWCBob3N0IGNvZGUgaW4gc29tZXRoaW5nIGxpa2UgR0NFIG9yIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGxpa2VseSBhIGZpcm0gbm8uIFRoaXMgVERYIGhvc3QgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgSW50ZWwgQ1BVIHdpdGggVERYIHN1cHBvcnQuIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgaGFyZHdhcmUsIGFuZCBzdGFuZGFyZCBHQ0UgVk1zIGRvbiYjMzk7dCB0eXBpY2FsbHkgcHJvdmlkZSBpdCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBpcyB1bmxpa2VseSB0byBiZSBhdmFpbGFibGUgZm9yIGdlbmVyYWwgdXNlLiBRRU1VIGNhbiBiZSBhIFZNTSB0aGF0ICpydW5zKiBURFggZ3Vlc3RzLCB1c2luZyBLVk0sIGJ1dCB0aGUgS1ZNIHBhcnQgKHRoZSBob3N0IGtlcm5lbCkgc3RpbGwgbmVlZHMgdG8gYmUgb24gVERYLWNhcGFibGUgaGFyZHdhcmUsIGFuZCBpZiBJIHRyeSB0byBydW4gYSBrZXJuZWwgaW4gUUVNVSwgS1ZNIHdpbGwgY2hlY2sgZm9yIHRoZSBURFggaGFyZHdhcmUuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbC4KCkkgc2hvdWxkIHZlcmlmeSB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGluaXRfdGR4X21vZHVsZWAgaW4gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AgYW5kIHNlYXJjaCBmb3IgdGhlIGtleSBpZGVudGlmaWVycyBsaWtlIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhbmQgYGluaXRfdGR4X21vZHVsZWAgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X3RkeF9tb2R1bGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTExNjY9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZG1ycyhzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4NC1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMTg1OnN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTExODYte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMjcyPXN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzAyOlx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMy1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc5OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgYHRkeF9lbmFibGVgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZW4gZG9lcyBgdGR4X2VuYWJsZWAgYWN0dWFsbHkgZ2V0IGNhbGxlZD8gSXMgaXQgYmFrZWQgaW50byB0aGUgZWFybHkgYm9vdCBzZXF1ZW5jZSwgb3IgaXMgaXQgZXhjbHVzaXZlbHkgdHJpZ2dlcmVkIGJ5IHRoZSBLVk0gbG9hZGluZyBwcm9jZXNzPyBVbmRlcnN0YW5kaW5nIHRoaXMgaGFzIHNvbWUgbWFqb3IgaW1wbGljYXRpb25zIGZvciBob3cgd2UgYXJjaGl0ZWN0IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXMgd2VsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVuIHRoaXMga2V5IGZ1bmN0aW9uIGhpdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2VuYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDktXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTA6c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTEtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTExODU9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzEtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTI3MjpzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI3My17XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTQtfVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMTU6c3Vic3lzX2luaXRjYWxsKHRkeF9lbmFibGUpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTYtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIwNTI9Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIwNTQtXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoyMDU1Olx0ICAgICAgIHRkeF9lbmFibGVfZHBhbXQ7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjA1Ni19XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIzMjc9c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzI4LXtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoyMzI5Olx0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIzMzAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTk1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGB0ZHhfZW5hYmxlYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgdGR4X2VuYWJsZWAgaXMgZ2V0dGluZyBob29rZWQgdXAgYXMgYSBgc3Vic3lzX2luaXRjYWxsYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IG1lYW5zIHRoaXMgaXMgYSBsb3ctbGV2ZWwsIGVhcmx5LXN0YWdlIGNvbXBvbmVudCwgbGlrZWx5IGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBzeXN0ZW0sIHByZXN1bWluZyB0aGlzIGlzIGEgVERYLWF3YXJlIGtlcm5lbC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyBoYXJkd2FyZS1sZXZlbCBURFggZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFscyB0byBzZWUgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIENQVSwgbWVtb3J5IGNvbnRyb2xsZXJzLCBhbmQgYW55IHJlbGV2YW50IHBsYXRmb3JtLXNwZWNpZmljIHJlZ2lzdGVycyBvciBBQ1BJIHRhYmxlcy4gSXMgaXQgYXR0ZW1wdGluZyB0byBkaXNjb3ZlciBhbmQgdmFsaWRhdGUgVERYIHN1cHBvcnQsIHByb2JpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVxdWlyZWQgaGFyZHdhcmUgZmVhdHVyZXMgbGlrZSB0aGUgVERYIE1vZHVsZSAoVERYLU0pPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBDUFUgZmxhZ3Mgb3IgTVNScz8gUGVyaGFwcyBpdCYjMzk7cyBjcmVhdGluZyBvciByZWdpc3RlcmluZyBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCBmb3IgVERYIG9wZXJhdGlvbiBsYXRlciBvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVERYLXJlbGF0ZWQgZmlybXdhcmUgY29tcG9uZW50cywgdGhlIEludGVsIFRYVCBvciB0aGUgQU1EIFNFVi9TRVYtU05QLCBhc3N1bWluZyB0aGF0IGlzIGluIGVmZmVjdC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW5zaWRlIGB0ZHhfZW5hYmxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3MDpcdH1cbjEyNzE6XHRcbjEyNzI6XHRzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG4xMjczOlx0e1xuMTI3NDpcdFx0ZW51bSBjcHVocF9zdGF0ZSBzdGF0ZTtcbjEyNzU6XHRcdGludCByZXQ7XG4xMjc2Olx0XG4xMjc3Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG4xMjc4Olx0XHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4xMjc5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTI4MDpcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1hTQVZFKSkge1xuMTI4MzpcdFx0XHRwcl9lcnIoXCYjMzQ7WFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4xMjg0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI4NTpcdFx0fVxuMTI4NjpcdFxuMTI4NzpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01PVkRJUjY0QikpIHtcbjEyODg6XHRcdFx0cHJfZXJyKFwmIzM0O01PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjEyODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjkwOlx0XHR9XG4xMjkxOlx0XG4xMjkyOlx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xuMTI5MzpcdFx0XHRwcl9lcnIoXCYjMzQ7U2VsZi1zbm9vcCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjEyOTQ6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMjk1Olx0XHR9XG4xMjk2Olx0XG4xMjk3Olx0XHRzdGF0ZSA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFwmIzM0O3ZpcnQvdGR4Om9ubGluZVwmIzM0OyxcbjEyOTg6XHRcdFx0XHRcdCAgdGR4X29ubGluZV9jcHUsIHRkeF9vZmZsaW5lX2NwdSk7XG4xMjk5Olx0XHRpZiAoc3RhdGUgXHUwMDNjIDApXG4xMzAwOlx0XHRcdHJldHVybiBzdGF0ZTtcbjEzMDE6XHRcbjEzMDI6XHRcdHJldCA9IGluaXRfdGR4X21vZHVsZSgpO1xuMTMwMzpcdFx0aWYgKHJldCkge1xuMTMwNDpcdFx0XHRwcl9lcnIoXCYjMzQ7VERYLU1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbjEzMDU6XHRcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHN0YXRlKTtcbjEzMDY6XHRcdFx0cmV0dXJuIHJldDtcbjEzMDc6XHRcdH1cbjEzMDg6XHRcbjEzMDk6XHRcdHJlZ2lzdGVyX3N5c2NvcmUoXHUwMDI2dGR4X3N5c2NvcmUpO1xuMTMxMDpcdFxuMTMxMTpcdFx0dGR4X21vZHVsZV9zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4xMzEyOlx0XHRwcl9pbmZvKFwmIzM0O1REWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuMTMxMzpcdFx0cmV0dXJuIDA7XG4xMzE0Olx0fVxuMTMxNTpcdHN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcbjEzMTY6XHRcbjEzMTc6XHRpbnQgdGR4X21vZHVsZV9zaHV0ZG93bih2b2lkKVxuMTMxODpcdHtcbjEzMTk6XHRcdHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiBoYW5kb2ZmID0ge307XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2ODcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFREWCBIb3N0IENvZGUgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGB0ZHhfZW5hYmxlYCBjaGVja3MgZm9yIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYW5kIHJldHVybnMgYC1FTk9ERVZgIGlmIGl0JiMzOTtzIG5vdCBlbmFibGVkLiBOYXR1cmFsbHksIG15IGZpcnN0IHRob3VnaHQgaXM6IGlzIHRoaXMgcGxhdGZvcm0gZmVhdHVyZSBlbXVsYXRlZCBieSBRRU1VL0tWTT8gTm8sIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgVERYIGhvc3QgcGxhdGZvcm0uIEl0IHJlcXVpcmVzIGFjdHVhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFREWCBlbmFibGVkIGluIHRoZSBCSU9TLCBhbmQgdGhlIFNFQU0gbW9kdWxlIGxvYWRlZCwgYW5kIHNvIG9uLgoKTm93IEkmIzM5O20gdGhpbmtpbmcsIGNhbiBzeXprYWxsZXIgZXZlbiBydW4gb24gVERYIGhhcmR3YXJlPyBUaGUgcHJvbXB0IGlzIGhpbnRpbmcgYXQ6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIFREWCBob3N0IGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgdGhlcmUgaXMgbm8gU0VBTSBtb2R1bGUgZW11bGF0aW9uLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gZXhpc3RzIGZvciB0aGUgVERYIGhvc3QuIEkgYW0gZmFpcmx5IGNvbmZpZGVudCBpbiBteSBrbm93bGVkZ2UgaGVyZSwgYnV0IGEgcXVpY2sgY29uZmlybWF0aW9uIGlzIHdhcnJhbnRlZC4KCk5vLCBpdCYjMzk7cyBub3QgZW11bGF0ZWQuIFREWCBpcyBhIGhhcmR3YXJlIGZlYXR1cmUsIGFuZCBgU0VBTUNBTExzYCBhcmUgaGFuZGxlZCBieSB0aGUgVERYIG1vZHVsZSwgd2hpY2ggaXMgYSBzZWN1cmUgZW5jbGF2ZS4gUUVNVSBkb2VzIG5vdCBlbXVsYXRlIHRoZSBURFggbW9kdWxlIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgdXBzdHJlYW0gdmVyc2lvbi4gU28sIHRoaXMgY29uZmlybXMgdGhhdCBURFggaG9zdCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClRoaXMgYnJpbmdzIG1lIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggc3RhdGVzIHRvICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBURFggaG9zdCBjb2RlIGZpdHMgdGhhdCBkZXNjcmlwdGlvbiBwZXJmZWN0bHkuCgpCdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJcyB0aGVyZSAqYW55KiBwYXJ0IG9mIHRoaXMgcGF0Y2ggdGhhdCAqaXMqIHJlYWNoYWJsZSB3aXRob3V0IFREWCBoYXJkd2FyZT8gTGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBPa2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGUgY2hhbmdlIGlzIGFkZGluZyBhIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0IGxvb2tzIGxpa2UgYW4gb3B0aW9uYWwgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrdm1feDg2X2NhbGxgLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBrdm1feDg2X2NhbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMDYzPWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNjQtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwNjU6I2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTMwCgkJCQkJCQlvdXRwdXQ6IDEwMgoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggSG9zdCBDb2RlIFVucmVhY2hhYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgaXMgZGVmaW5lZCB1c2luZyBgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwYC4gVGhhdCBtZWFucyBpZiB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5IChsaWtlIFZNWCBvciBTVk0pIGRvZXNuJiMzOTt0IGltcGxlbWVudCBpdCwgaXQgc2ltcGx5IHJldHVybnMgemVyby4gQ3J1Y2lhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXNzaWduZWQgYSBub24temVybyB2YWx1ZSB3aXRoaW4gYHRkeF9oYXJkd2FyZV9zZXR1cGAuIEFuZCBgdGR4X2hhcmR3YXJlX3NldHVwYCBpcywgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50LCAqb25seSogY2FsbGVkIGlmIFREWCBzdXBwb3J0IGlzIGRldGVjdGVkLgoKU28sIGluIHRoZSBhYnNlbmNlIG9mIGEgVERYLWVuYWJsZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHRoZSBub3JtIGZvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cHMsIGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgd2lsbCAqYWx3YXlzKiByZXR1cm4gemVyby4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoLCBhcyBJJiMzOTt2ZSBzZWVuLCBpcyBjb25maW5lZCB0byBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgYW5kIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLiBDb25zZXF1ZW50bHksIHRoaXMgVERYLXNwZWNpZmljIGNvZGUgc2ltcGx5IHdvbiYjMzk7dCBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBJdCYjMzk7cyB0b3RhbGx5IHVucmVhY2hhYmxlIGZvciBTeXprYWxsZXIuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGVzY2FwZSByb3V0ZXMuIFRoZSBgdGR4X2RwYW10X3NldHVwYCBmdW5jdGlvbiBpcyBhbiBgX19zZXR1cGAgZnVuY3Rpb24sIHdoaWNoIHNpbXBseSBmbGlwcyBhIGJvb2xlYW4sIGl0JiMzOTtzIG5vdCByZWxldmFudC4gYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGlzIGV4cG9ydGVkLCBidXQgaXMgb25seSB1c2VkIHdpdGhpbiB0aGUgS1ZNIFREWCBpbmZyYXN0cnVjdHVyZS4gU2ltaWxhcmx5LCBmdW5jdGlvbnMgbGlrZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGV0Yy4sIGFyZSBleHBvcnRlZCwgYnV0IHRoZXkmIzM5O3JlIGFsbCBmaXJtbHkgd2l0aGluIHRoZSBLVk0gVERYIGRvbWFpbi4gQW5kIHRoYXQgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBjYWxsIHRvIGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgaXMgYSBzdGF0aWMgY2FsbCB0aGF0IGVmZmVjdGl2ZWx5IGJlY29tZXMgYSBuby1vcCB0aGF0JiMzOTtzIGRlc2lnbmVkIHRvIHJldHVybiAwLgoKVGhlcmVmb3JlLCB3aXRob3V0IFREWCBoYXJkd2FyZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQuCgpTbywgdGhlIHJlYXNvbmluZyBJJiMzOTtsbCBmb3JtdWxhdGUgaXMgdGhpczogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgc3VwcG9ydCB3aXRoaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIEZ1bmN0aW9uYWxpdHkgZGVwZW5kZW50IG9uIHRoaXMgc3VwcG9ydCByZXF1aXJlcyBzcGVjaWZpYyBiYXJlLW1ldGFsIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZW5hYmxlZCBhbmQgdGhlIFREWCBtb2R1bGUgbG9hZGVkLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIER5bmFtaWMgUEFNVCBpbiB0aGUgVERYIGhvc3QgKEtWTSkgY29kZS4gVERYIGhvc3Qgc3VwcG9ydCByZXF1aXJlcyBzcGVjaWZpYyBiYXJlLW1ldGFsIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZW5hYmxlZCBhbmQgdGhlIFREWCBtb2R1bGUgbG9hZGVkLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzowMTowMC43OTY0NzYzNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzY3MjY5NzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjAwLjc5NjQ4MTE4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMjAxNTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwMGVmYzQ5MTMxODgxZjE2YTViMTU4MGFkZjNmN2M3OTQyNjMxNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwMzowMDo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXG4gXFx0dGRmeD1cXHRcXHRbSFcsRFJNXVxcbiBcXG4rXFx0dGR4X2RwYW10PVxcbitcXHRcXHRcXHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcXG4rXFx0XFx0XFx0dG8gc2F2ZSBtZW1vcnksIHdoZW4gc3VwcG9ydGVkLlxcbitcXG4rXFx0XFx0XFx0VmFsaWQgcGFyYW1ldGVyczogXFxcIm9uXFxcIiwgXFxcIm9mZlxcXCJcXG4rXFx0XFx0XFx0RGVmYXVsdDogXFxcIm9mZlxcXCJcXG4rXFxuK1xcdFxcdFxcdEZvciBkZXRhaWxzIHNlZTpcXG4rXFx0XFx0XFx0RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuK1xcbiBcXHR0ZXN0X3N1c3BlbmQ9XFx0W1NVU1BFTkRdXFxuIFxcdFxcdFxcdEZvcm1hdDogeyBcXFwibWVtXFxcIiB8IFxcXCJzdGFuZGJ5XFxcIiB8IFxcXCJmcmVlemVcXFwiIH1bLE5dXFxuIFxcdFxcdFxcdFNwZWNpZnkgXFxcIm1lbVxcXCIgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXFxcInN0YW5kYnlcXFwiIChmb3JcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuaW5kZXggMzMwMzQ5OWFkNGM2Zi4uYTFjMjMwOTIzMDU4MCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcXG5AQCAtMjAwLDYgKzIwMCwzNCBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmVcXG4gY2hhbmdlcyBhZnRlciBhbiB1cGRhdGUuIEJ5IGNvbnRyYXN0LCBURUVfVENCX1NWTiByZWZsZWN0cyB0aGUgVENCIGF0IFREXFxuIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuXFxuIFxcbitEeW5hbWljIFBBTVRcXG4rLS0tLS0tLS0tLS0tXFxuK1xcbitQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZW1vcnkgdGhhdCB0aGUgVERYIG1vZHVsZSBuZWVkc1xcbit0byBrZWVwIGRhdGEgYWJvdXQgZWFjaCBwYWdlICh0aGluayBsaWtlIHN0cnVjdCBwYWdlKS4gSXQgbmVlZHMgdG8gYmUgaGFuZGVkXFxuK3RvIHRoZSBURFggbW9kdWxlIGZvciBpdHMgZXhjbHVzaXZlIHVzZS4gRm9yIG5vcm1hbCBQQU1ULCB0aGlzIGlzIGluc3RhbGxlZFxcbit3aGVuIHRoZSBURFggbW9kdWxlIGlzIGZpcnN0IGxvYWRlZCBhbmQgY29tZXMgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0gbWVtb3J5LlxcbitcXG4rRHluYW1pYyBQQU1UIGlzIGEgVERYIG1vZHVsZSBmZWF0dXJlIHRoYXQgYWxsb3dzIFZNTSB0byBhbGxvY2F0ZSBwYXJ0IG9mIHRoZVxcbitQQU1UIGFzIG5lZWRlZCAodGhlIHBhcnRzIGZvciB0cmFja2luZyA0S0Igc2l6ZSBwYWdlcykuIFRoZSBvdGhlciBwYWdlIHNpemVzXFxuKygxR0IgYW5kIDJNQikgYXJlIHN0aWxsIGFsbG9jYXRlZCBzdGF0aWNhbGx5IGF0IHRoZSB0aW1lIG9mIFREWCBtb2R1bGVcXG4raW5pdGlhbGl6YXRpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCB1c2VzIHdoaWxlIFREcyBhcmVcXG4rbm90IGluIHVzZS5cXG4rXFxuK1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6XFxuK1xcbisgIFsuLl0gdmlydC90ZHg6IEVuYWJsZSBEeW5hbWljIFBBTVRcXG4rICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVRcXG4rICBbLi5dIHZpcnQvdGR4OiBURFgtTW9kdWxlIGluaXRpYWxpemVkXFxuK1xcbitEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsXFxuK3BhcmFtZXRlciBpcyBzZXQgdG8gXFxcIm9uXFxcIi4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXFxuK2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcXG4rY29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxcbitpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXFxuK2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxcbitEeW5hbWljIFBBTVQuXFxuK1xcbiBURFggSW50ZXJhY3Rpb24gdG8gT3RoZXIgS2VybmVsIENvbXBvbmVudHNcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbmluZGV4IDgzZGM1MDg2MTM4YjMuLjU4ODU2M2RmZTg4ZDUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5AQCAtOTgsNiArOTgsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKVxcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGZyZWVfZXh0ZXJuYWxfc3B0KVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpXFxuIEtWTV9YODZfT1AoaGFzX3diaW52ZF9leGl0KVxcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxcbiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcilcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdC8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi9cXG4gXFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcXG4gXFxuK1xcdGludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7XFxuIFxcbiBcXHRib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li43OTEwOTAxYTdiYTIxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtMzYsNiArMzYsNyBAQFxcbiAvKiBCaXQgZGVmaW5pdGlvbnMgb2YgVERYX0ZFQVRVUkVTMCBtZXRhZGF0YSBmaWVsZCAqL1xcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1xcdEJJVF9VTEwoMSlcXG4gI2RlZmluZSBURFhfRkVBVFVSRVMwX05PX1JCUF9NT0RcXHRCSVRfVUxMKDE4KVxcbisjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXFx0QklUX1VMTCgzNilcXG4gXFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xcbiBcXG5AQCAtMTE4LDEyICsxMTksMzcgQEAgc3RhdGljIGlubGluZSBib29sIHRkeF9zdXBwb3J0c19ydW50aW1lX3VwZGF0ZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZcXG4gXFx0cmV0dXJuIHN5c2luZm8tXFx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXFx1MDAyNiBURFhfRkVBVFVSRVMwX1REX1BSRVNFUlZJTkc7XFxuIH1cXG4gXFxuK2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKTtcXG4rXFxuKy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIER5bmFtaWMgUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi9cXG4rc3RydWN0IHRkeF9wYW10X2NhY2hlIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XFxuK1xcdGludCBjbnQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0KTtcXG4rXFx0Y2FjaGUtXFx1MDAzZWNudCA9IDA7XFxuK31cXG4rXFxuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcXG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcXG4rdm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbik7XFxuK1xcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xcbiB1MzIgdGR4X2dldF9ucl9ndWVzdF9rZXlpZHModm9pZCk7XFxuIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTtcXG4gXFxuIHZvaWQgdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG4gXFxuKy8qIE51bWJlciBvZiBQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cXG4rI2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMlxcbitcXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7XFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4rXFxuIHN0cnVjdCB0ZHhfdGQge1xcbiBcXHQvKiBURCByb290IHN0cnVjdHVyZTogKi9cXG4gXFx0c3RydWN0IHBhZ2UgKnRkcl9wYWdlO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG5pbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbkBAIC0yMSw2ICsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XFxuIFxcdHUxNiBwYW10XzRrX2VudHJ5X3NpemU7XFxuIFxcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XFxuIFxcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XFxuK1xcbitcXHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqL1xcbitcXHR1OCAgcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xcbiB9O1xcbiBcXG4gc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCA2NmU2OWQyYTQxYjNjLi4yYTYyOGI4MzA0NDA5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTYxNCw2ICs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbitcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggNTQ1YjAzZDlkMTBiOC4uMDk1NzMxMTI1NDBlOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpXFxuIFxcdGlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdF9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShjdHJsX3BhZ2UpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgdGR4X2ZsdXNoX3ZwX2FyZyB7XFxuQEAgLTU4OSw3ICs1ODksNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV90ZF9jb250cm9sX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFxuIFxcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMoa3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xcbiBcXG4tXFx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UpO1xcbiBcXHRrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XFxuIH1cXG4gXFxuQEAgLTY4MSw2ICs2ODEsOCBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0dGR4X2luaXRfcGFtdF9jYWNoZShcXHUwMDI2dGR4LVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFxuIFxcdGZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9mcHUpO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLmFwaWMtXFx1MDAzZWd1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRkeC1cXHUwMDNldnQucGlfd2FrZXVwX2xpc3QpO1xcbkBAIC04NjYsNiArODY4LDggQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0dGR4X2ZyZWVfcGFtdF9jYWNoZShcXHUwMDI2dGR4LVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFxuIFxcdGlmICh2Y3B1LVxcdTAwM2VjcHUgIT0gLTEpIHtcXG4gXFx0XFx0S1ZNX0JVR19PTih0ZHgtXFx1MDAzZXN0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtXFx1MDAzZWt2bSk7XFxuIFxcdFxcdHRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7XFxuQEAgLTE2MjEsNiArMTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXFxuK1xcdCAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuXFxuK1xcdCAqL1xcbitcXHRtaW5fbnJfc3B0cyArPSAtMSArIDE7XFxuK1xcbitcXHRyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoXFx1MDAyNnRvX3RkeCh2Y3B1KS1cXHUwMDNlcGFtdF9jYWNoZSwgbWluX25yX3NwdHMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuIFxcdFxcdFxcdCAgICBrdm1fcGZuX3QgcGZuKVxcbiB7XFxuQEAgLTE2NzksMTYgKzE2OTQsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIFxcdFxcdFxcdFxcdCAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XFxuIFxcdGdwYV90IGdwYSA9IGdmbl90b19ncGEoZ2ZuKTtcXG4gXFx0dTY0IGVyciwgZW50cnksIGxldmVsX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdHNlcHRfcHQgPSB0ZHhfc3B0ZV90b19zZXB0X3B0KGt2bSwgZ2ZuLCBuZXdfc3B0ZSwgbGV2ZWwpO1xcbiBcXHRpZiAoIXNlcHRfcHQpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4rXFx0cmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCBcXHUwMDI2dG9fdGR4KHZjcHUpLVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0ZXJyID0gdGRoX21lbV9zZXB0X2FkZChcXHUwMDI2dG9fa3ZtX3RkeChrdm0pLVxcdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCxcXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZlbnRyeSwgXFx1MDAyNmxldmVsX3N0YXRlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcXG4rXFxuIFxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG5AQCAtMTcwMSw4ICsxNzI4LDEzIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbiBcXHRcXHRcXHRcXHQgIHU2NCBuZXdfc3B0ZSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcXG4gXFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdC8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi9cXG4gXFx0aWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpXFxuQEAgLTE3MTAsNiArMTc0MiwxMCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKChuZXdfc3B0ZSBcXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xcbiBcXG4rXFx0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXFx1MDAyNnRvX3RkeCh2Y3B1KS1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXFxuIFxcdCAqIGJlZm9yZSBrdm1fdGR4LVxcdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxcbkBAIC0xNzIyLDEwICsxNzU4LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXFxuIFxcdCAqIElmIHRoZSBURCBpc24ndCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xcbiBcXHQgKiB0aGUgVk0gaW1hZ2UgdmlhIEtWTV9URFhfSU5JVF9NRU1fUkVHSU9OOyBBREQgdGhlIHBhZ2UgdG8gdGhlIFRELlxcbiBcXHQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXFx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSlcXG4tXFx0XFx0cmV0dXJuIHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXHRpZiAobGlrZWx5KGt2bV90ZHgtXFx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcXG4rXFx0XFx0cmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHR0ZHhfcGFtdF9wdXQocGZuKTtcXG4gXFxuLVxcdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTgyMiw2ICsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xcbitcXHR0ZHhfcGFtdF9wdXQocGZuKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTE4NjUsNiArMTkwNyw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLFxcbiAgKi9cXG4gc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbiB7XFxuK1xcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVxcdTAwM2VleHRlcm5hbF9zcHQpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogS1ZNIGRvZXNuJ3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGVcXG4gXFx0ICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlXFxuQEAgLTE4NzgsMTUgKzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbiBcXHQgKiB0aGUgcGFnZSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlIGVuY3J5cHRlZCBwYWdlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XFxuLVxcdCAgICB0ZHhfcmVjbGFpbV9wYWdlKHZpcnRfdG9fcGFnZShzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXFxuK1xcdCAgICB0ZHhfcmVjbGFpbV9wYWdlKHNlcHRfcHQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XFxuLVxcdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXFxuLVxcdCAqIHJlYWRlcnMuXFxuK1xcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24ndCBzdXBwb3J0XFxuK1xcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXFxuK1xcdCAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuXFxuIFxcdCAqL1xcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtXFx1MDAzZWV4dGVybmFsX3NwdCk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcXG4gb3V0OlxcbiBcXHRzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0ID0gTlVMTDtcXG4gfVxcbkBAIC0yNDU5LDcgKzI1MDMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIFxcbiBcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXG4tXFx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdHRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRpZiAoIXRkcl9wYWdlKVxcbiBcXHRcXHRnb3RvIGZyZWVfaGtpZDtcXG4gXFxuQEAgLTI0NzIsNyArMjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gXFx0XFx0Z290byBmcmVlX3RkcjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0dGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0XFx0dGRjc19wYWdlc1tpXSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0XFx0aWYgKCF0ZGNzX3BhZ2VzW2ldKVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfdGRjcztcXG4gXFx0fVxcbkBAIC0yNTkwLDEwICsyNjM0LDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiB0ZWFyZG93bjpcXG4gXFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICdpJyAqL1xcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRpZiAodGRjc19wYWdlc1tpXSkge1xcbi1cXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4tXFx0XFx0XFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XFxuLVxcdFxcdH1cXG4rXFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbitcXHRcXHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRpZiAoIWt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfcGFnZXMpXFxuIFxcdFxcdGtmcmVlKHRkY3NfcGFnZXMpO1xcbkBAIC0yNjA4LDE2ICsyNjUwLDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gXFx0ZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7XFxuIFxcbiBmcmVlX3RkY3M6XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHRkY3NfcGFnZXNbaV0pXFxuLVxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspXFxuK1xcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4gXFx0a2ZyZWUodGRjc19wYWdlcyk7XFxuIFxcdGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfcGFnZXMgPSBOVUxMO1xcbiBcXG4gZnJlZV90ZHI6XFxuLVxcdGlmICh0ZHJfcGFnZSlcXG4tXFx0XFx0X19mcmVlX3BhZ2UodGRyX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRyX3BhZ2UpO1xcbiBcXHRrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XFxuIFxcbiBmcmVlX2hraWQ6XFxuQEAgLTI5NTEsNyArMjk5MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFx0aW50IHJldCwgaTtcXG4gXFx0dTY0IGVycjtcXG4gXFxuLVxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdGlmICghcGFnZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSA9IHBhZ2U7XFxuQEAgLTI5NzEsNyArMzAxMCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRcXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRcXHRpZiAoIXBhZ2UpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBmcmVlX3RkY3g7XFxuQEAgLTI5OTMsNyArMzAzMiw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFx0XFx0XFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbitcXHRcXHRcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4gXFx0XFx0XFx0XFx0dGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5AQCAtMzAyMSwxNiArMzA2MCwxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcbiBmcmVlX3RkY3g6XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4rXFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuIFxcdFxcdHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0a2ZyZWUodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzKTtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzID0gTlVMTDtcXG4gXFxuIGZyZWVfdGR2cHI6XFxuLVxcdGlmICh0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UpXFxuLVxcdFxcdF9fZnJlZV9wYWdlKHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UpO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkdnByX3BhID0gMDtcXG4gXFxuQEAgLTM0OTMsNiArMzUzMCwxMCBAQCBpbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiBcXG4gXFx0dnRfeDg2X29wcy5zZXRfZXh0ZXJuYWxfc3B0ZSA9IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGU7XFxuIFxcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xcbitcXG4rXFx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKVxcbitcXHRcXHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XFxuK1xcbiBcXHR2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxcbmluZGV4IGFjODMyM2E2OGIxNjMuLmZkMzY4ZTNlZTA2MGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG5AQCAtNzIsNiArNzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHgge1xcbiBcXG4gXFx0dTY0IG1hcF9ncGFfbmV4dDtcXG4gXFx0dTY0IG1hcF9ncGFfZW5kO1xcbitcXG4rXFx0c3RydWN0IHRkeF9wYW10X2NhY2hlIHBhbXRfY2FjaGU7XFxuIH07XFxuIFxcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuaW5kZXggNDJkZjhlYTQ2NGM0Ny4uZGVjNDU3MDllNDU0YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG5AQCAtMzAsNiArMzAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lkci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbXNyLWluZGV4LmhcXHUwMDNlXFxuQEAgLTQ2LDYgKzQ3LDggQEBcXG4gI2luY2x1ZGUgXFxcInNlYW1jYWxsX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZHguaFxcXCJcXG4gXFxuK3N0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xcbitcXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xcbiBcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRib29sIHN5c2luaXRfZG9uZTtcXG5AQCAtNjMsNiArNjYsMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IHRkbXJfaW5mb19saXN0IHRkeF90ZG1yX2xpc3Q7XFxuIFxcbisvKlxcbisgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXJcXG4rICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XFxuKyAqIGluaXRpYWxpemF0aW9uLlxcbisgKi9cXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcXG4rXFxuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXFxuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xcbiBcXG5AQCAtMjUyLDYgKzI2Myw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XFxuIFxcdC5vcHMgPSBcXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuKyAqXFxuKyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyBfX2luaXQgaW50IGluaXRfcGFtdF9yZWZjb3VudHModm9pZClcXG4re1xcbitcXHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7XFxuK1xcbitcXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XFxuK1xcdGlmICghcGFtdF9yZWZjb3VudHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZmcmVlKHBhbXRfcmVmY291bnRzKTtcXG4rXFx0cGFtdF9yZWZjb3VudHMgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XFxuK31cXG4rXFxuIC8qXFxuICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZVxcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24ndFxcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRpbnQgYml0c19wZXJfZW50cnk7XFxuK1xcbitcXHRiaXRzX3Blcl9lbnRyeSA9IHRkeF9zeXNpbmZvLnRkbXIucGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xcbitcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xcbitcXG4rXFx0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XFxuK31cXG4rXFxuIC8qXFxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxcbiAgKiBQQU1UIHNpemUgaXMgYWx3YXlzIGFsaWduZWQgdXAgdG8gNEsgcGFnZSBib3VuZGFyeS5cXG4gICovXFxuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcXG4rXFx0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbitcXHRcXHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcXG4rXFx0XFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXFxuK1xcdFxcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxcbitcXHR9O1xcbiBcXG4tXFx0c3dpdGNoIChwZ3N6KSB7XFxuLVxcdGNhc2UgVERYX1BTXzRLOlxcbi1cXHRcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18yTTpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQTURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18xRzpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQVURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuK1xcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07XFxuK1xcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XFxuIFxcbi1cXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xcbiBcXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xcbi1cXHRwYW10X3N6ID0gQUxJR04ocGFtdF9zeiwgUEFHRV9TSVpFKTtcXG4tXFxuLVxcdHJldHVybiBwYW10X3N6O1xcbitcXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTc2LDE1ICs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXNcXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cXG4gICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X2Jhc2VbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfc2l6ZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhbXQ7XFxuLVxcdGludCBwZ3N6LCBuaWQ7XFxuK1xcdGludCBuaWQ7XFxuIFxcbiBcXHRuaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpO1xcbiBcXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxcbiBcXHQgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHRkbXJfcGFtdF9zaXplID0gMDtcXG4tXFx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFxcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcXG4tXFx0XFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xcbi1cXHRcXHR0ZG1yX3BhbXRfc2l6ZSArPSBwYW10X3NpemVbcGdzel07XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xcbitcXG4rXFx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkge1xcbitcXHRcXHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXFxuK1xcdFxcdHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XFxuIFxcdH1cXG4gXFxuK1xcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplICsgdGRtci1cXHUwMDNlcGFtdF8xZ19zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgb25lIGNodW5rIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZm9yIGFsbFxcbiBcXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcXG5AQCAtNjA2LDI1ICs2NTYsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKi9cXG4gXFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRuaWQsIFxcdTAwMjZub2RlX29ubGluZV9tYXApO1xcbi1cXHRpZiAoIXBhbXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXFxuLVxcdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxcbitcXHQgKiB0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcXG4rXFx0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxcbiBcXHQgKi9cXG4tXFx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xcbi1cXHRcXHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcXG4tXFx0XFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbi1cXHR9XFxuK1xcdGlmICghcGFtdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzRLXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMk1dO1xcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzJtX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzJNXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMUddO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXFx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cXHUwMDNlcGFtdF8ybV9iYXNlICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjU1LDEwICs2OTcsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcl9kb19wYW10X2Z1bmMoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcXHUwMDI2cGFtdF9iYXNlLCBcXHUwMDI2cGFtdF9zaXplKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xcbi1cXHRpZiAoIXBhbXRfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcXG4rXFx0aWYgKCFwYW10X2Jhc2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XFxuQEAgLTY4NCwxNCArNzIzLDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yc19mcmVlX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbiBcXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJzX3NldF91cF9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxcbiB7XFxuIFxcdGludCBpLCByZXQgPSAwO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xcbi1cXHRcXHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdHBhbXRfZW50cnlfc2l6ZSk7XFxuK1xcdFxcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4tXFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplLFxcbi1cXHR9O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTtcXG4rXFx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtOTk4LDYgKzEwMzAsOCBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXFx0QklUKDE2KVxcbitcXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxcbiB7XFxuQEAgLTEwMjYsNiArMTA2MCwxMiBAQCBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xcbiBcXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XFxuIFxcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XFxuK1xcbitcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKSB7XFxuK1xcdFxcdHByX2luZm8oXFxcIkVuYWJsZSBEeW5hbWljIFBBTVRcXFxcblxcXCIpO1xcbitcXHRcXHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFxcdTAwMjZhcmdzKTtcXG4gXFxuIFxcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xcbkBAIC0xMTY3LDEwICsxMjA3LDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuIFxcbi1cXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuIFxcbitcXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3BhbXRfcmVmY291bnRzO1xcbitcXG4gXFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cXG4gXFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFxcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcXHUwMDI2dGR4X3N5c2luZm8udGRtcik7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEyMjAsNiArMTI2NCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHRmcmVlX3RkbXJfbGlzdChcXHUwMDI2dGR4X3RkbXJfbGlzdCk7XFxuIGVycl9mcmVlX3RkeG1lbTpcXG4gXFx0ZnJlZV90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitlcnJfZnJlZV9wYW10X3JlZmNvdW50czpcXG4rXFx0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xcbiBcXHRnb3RvIG91dF9wdXRfdGR4bWVtO1xcbiB9XFxuIFxcbkBAIC0yMDAzLDYgKzIwNDksMjg4IEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XFxuIFxcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4re1xcbitcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXG4rXFx0cGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XFxuK1xcdGlmIChwYWdlKSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUpO1xcbitcXHRcXHRjYWNoZS1cXHUwMDNlY250LS07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRpZiAoY2FjaGUpXFxuK1xcdFxcdHJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTtcXG4rXFxuK1xcdHJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpKyspIHtcXG4rXFx0XFx0cGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpO1xcbitcXHRcXHRpZiAoIXBhbXRfcGFnZXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKylcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xcbitcXHRcXHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxcbisgKiBhIGdpdmVuIDRLQiBwYWdlLlxcbisgKi9cXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcXG4re1xcbitcXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULCBQTURfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gaHBhXzJtYiB8IFREWF9QU18yTTtcXG4rfVxcbitcXG4rLyogQWRkIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfYWRkKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0XFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcXG4rXFx0XFx0LnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFxcdTAwMjZhcmdzKTtcXG4rfVxcbitcXG4rLyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0fTtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBDb3B5IFBBTVQgcGFnZXMgb3V0IG9mIHRoZSBzdHJ1Y3QgcGVyIHRoZSBURFggQUJJICovXFxuK1xcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xcbitcXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIFBBTVQgbWVtb3J5ICovXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcXG4rXFxuKy8qIEJ1bXAgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XFxuK1xcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xcbitcXHR1NjQgdGR4X3N0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXFx1MDAzZT0gMSksXFxuK1xcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8ocGFtdF9yZWZjb3VudCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYWxsb2NfcGFtdF9hcnJheShwYW10X3BhZ2VzLCBjYWNoZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cXG4rXFx0ICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtXFx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xcbitcXHQgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC1cXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcXG4rXFx0ICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtXFx1MDAzZTFcXG4rXFx0ICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC5cXG4rXFx0ICovXFxuK1xcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXFxuK1xcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cXHUwMDNlMS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcXG4rXFxuKy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcXG4rXFx0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJ3RcXG4rXFx0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKHBhbXRfcmVmY291bnQsIFxcdTAwMjZwYW10X2xvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXFxuK1xcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xcbitcXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXFxuK1xcdCAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kXFxuK1xcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLFxcbitcXHRcXHQgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XFxuK1xcdHJldHVybjtcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7XFxuK1xcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xcbitcXG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbit7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcXG4rXFxuK1xcdHdoaWxlIChjYWNoZS1cXHUwMDNlY250IFxcdTAwM2MgbnBhZ2VzKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUsIFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0KTtcXG4rXFx0XFx0Y2FjaGUtXFx1MDAzZWNudCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpO1xcbitcXG4rLypcXG4rICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIFxcXCJjb250cm9sXFxcIlxcbisgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcXG4rICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBQQU1UIHRyYWNraW5nLlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcXG4rXFxuKy8qXFxuKyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cXG4rICovXFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4rXFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XFxuK31cXG4rXFxuK19fc2V0dXAoXFxcInRkeF9kcGFtdD1cXFwiLCB0ZHhfZHBhbXRfc2V0dXApO1xcbitcXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG5AQCAtNDgsNiArNDgsOCBAQFxcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXFx0XFx0XFx0NDVcXG4gI2RlZmluZSBUREhfU1lTX1NIVVRET1dOXFx0XFx0NTJcXG4gI2RlZmluZSBUREhfU1lTX1VQREFURVxcdFxcdFxcdDUzXFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERFxcdFxcdDU4XFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVxcdFxcdDU5XFxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXFx0XFx0XFx0NjlcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uOTNiMWYyNjI1MmM2MyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xcbkBAIC0xLDYgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKlxcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbisgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbiAgKlxcbiAgKiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uXFxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cXG5AQCAtMzMsNiArMzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCB2YWw7XFxuK1xcbitcXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuQEAgLTEyOSw1ICsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbiBcXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZF9jdHJsKTtcXG4gXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IER5bmFtaWMgUEFNVCwgc29cXG4rXFx0ICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQncyBub3Qgc3VwcG9ydGVkLiBEb24ndCB0cnlcXG4rXFx0ICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVRcXG4rXFx0ICogYnV0IGRvbid0IGV4cG9zZSB0aGUgbWV0YWRhdGEuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKVxcbitcXHRcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkbXIpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzowMTowMi4wOTkyMTg2NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjM2OTk1MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwMGVmYzQ5MTMxODgxZjE2YTViMTU4MGFkZjNmN2M3OTQyNjMxNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDAzOjAwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFxuIFx0dGRmeD1cdFx0W0hXLERSTV1cbiBcbitcdHRkeF9kcGFtdD1cbitcdFx0XHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcbitcdFx0XHR0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuXG4rXG4rXHRcdFx0VmFsaWQgcGFyYW1ldGVyczogXCJvblwiLCBcIm9mZlwiXG4rXHRcdFx0RGVmYXVsdDogXCJvZmZcIlxuK1xuK1x0XHRcdEZvciBkZXRhaWxzIHNlZTpcbitcdFx0XHREb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbitcbiBcdHRlc3Rfc3VzcGVuZD1cdFtTVVNQRU5EXVxuIFx0XHRcdEZvcm1hdDogeyBcIm1lbVwiIHwgXCJzdGFuZGJ5XCIgfCBcImZyZWV6ZVwiIH1bLE5dXG4gXHRcdFx0U3BlY2lmeSBcIm1lbVwiIChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFwic3RhbmRieVwiIChmb3JcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbmluZGV4IDMzMDM0OTlhZDRjNmYuLmExYzIzMDkyMzA1ODAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuQEAgLTIwMCw2ICsyMDAsMzQgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlXG4gY2hhbmdlcyBhZnRlciBhbiB1cGRhdGUuIEJ5IGNvbnRyYXN0LCBURUVfVENCX1NWTiByZWZsZWN0cyB0aGUgVENCIGF0IFREXG4gbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC5cbiBcbitEeW5hbWljIFBBTVRcbistLS0tLS0tLS0tLS1cbitcbitQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZW1vcnkgdGhhdCB0aGUgVERYIG1vZHVsZSBuZWVkc1xuK3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcbit0byB0aGUgVERYIG1vZHVsZSBmb3IgaXRzIGV4Y2x1c2l2ZSB1c2UuIEZvciBub3JtYWwgUEFNVCwgdGhpcyBpcyBpbnN0YWxsZWRcbit3aGVuIHRoZSBURFggbW9kdWxlIGlzIGZpcnN0IGxvYWRlZCBhbmQgY29tZXMgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0gbWVtb3J5LlxuK1xuK0R5bmFtaWMgUEFNVCBpcyBhIFREWCBtb2R1bGUgZmVhdHVyZSB0aGF0IGFsbG93cyBWTU0gdG8gYWxsb2NhdGUgcGFydCBvZiB0aGVcbitQQU1UIGFzIG5lZWRlZCAodGhlIHBhcnRzIGZvciB0cmFja2luZyA0S0Igc2l6ZSBwYWdlcykuIFRoZSBvdGhlciBwYWdlIHNpemVzXG4rKDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxuK2luaXRpYWxpemF0aW9uLiBUaGlzIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBURFggdXNlcyB3aGlsZSBURHMgYXJlXG4rbm90IGluIHVzZS5cbitcbitXaGVuIER5bmFtaWMgUEFNVCBpcyBpbiB1c2UsIGRtZXNnIHNob3dzIGl0IGxpa2U6OlxuK1xuKyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuKyAgWy4uXSB2aXJ0L3RkeDogMTAwOTIgS0IgYWxsb2NhdGVkIGZvciBQQU1UXG4rICBbLi5dIHZpcnQvdGR4OiBURFgtTW9kdWxlIGluaXRpYWxpemVkXG4rXG4rRHluYW1pYyBQQU1UIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHN1cHBvcnRlZCBhbmQgdGhlIGBgdGR4X2RwYW10PWBgIGtlcm5lbFxuK3BhcmFtZXRlciBpcyBzZXQgdG8gXCJvblwiLiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGVcbitpbnRlcm5hbCBkZXRhaWxzIHByZXZlbnQgRHluYW1pYyBQQU1UIGZyb20gd29ya2luZyBvbiBhbGwga2V5aWQgcGFydGl0aW9uaW5nXG4rY29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuK2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG9cbitkZWZhdWx0IG9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY29uc3VsdCB0aGUgSW50ZWwgVERYIGRvY3VtZW50YXRpb24gYWJvdXRcbitEeW5hbWljIFBBTVQuXG4rXG4gVERYIEludGVyYWN0aW9uIHRvIE90aGVyIEtlcm5lbCBDb21wb25lbnRzXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbmluZGV4IDgzZGM1MDg2MTM4YjMuLjU4ODU2M2RmZTg4ZDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtOTgsNiArOTgsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKVxuIEtWTV9YODZfT1AobG9hZF9tbXVfcGdkKVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSlcbiBLVk1fWDg2X09QX09QVElPTkFMKGZyZWVfZXh0ZXJuYWxfc3B0KVxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQvKiBVcGRhdGUgZXh0ZXJuYWwgcGFnZSB0YWJsZXMgZm9yIHBhZ2UgdGFibGUgYWJvdXQgdG8gYmUgZnJlZWQuICovXG4gXHR2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xuIFxuK1x0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcbiBcbiBcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODkuLjc5MTA5MDFhN2JhMjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbkBAIC0zNiw2ICszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuKyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRcdEJJVF9VTEwoMzYpXG4gXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXG4gXG5AQCAtMTE4LDEyICsxMTksMzcgQEAgc3RhdGljIGlubGluZSBib29sIHRkeF9zdXBwb3J0c19ydW50aW1lX3VwZGF0ZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZcbiBcdHJldHVybiBzeXNpbmZvLVx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXHUwMDI2IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORztcbiB9XG4gXG4rYm9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuK1xuKy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIER5bmFtaWMgUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi9cbitzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XG4rXHRpbnQgY250O1xuK307XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuK1x0Y2FjaGUtXHUwMDNlY250ID0gMDtcbit9XG4rXG4rdm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTtcbitcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuKy8qIE51bWJlciBvZiBQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cbisjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyXG4rXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7XG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuK1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbkBAIC0yMSw2ICsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XG4gXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xuIFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XG4rXG4rXHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqL1xuK1x0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiB9O1xuIFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDY2ZTY5ZDJhNDFiM2MuLjJhNjI4YjgzMDQ0MDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjE0LDYgKzYxNCwxMCBAQCBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXliZV9pbmRpcmVjdClcbiBcdFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfc2hhZG93X3BhZ2VfY2FjaGUsXG4gXHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDU0NWIwM2Q5ZDEwYjguLjA5NTczMTEyNTQwZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKVxuIFx0aWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19mcmVlX3BhZ2UoY3RybF9wYWdlKTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShjdHJsX3BhZ2UpO1xuIH1cbiBcbiBzdHJ1Y3QgdGR4X2ZsdXNoX3ZwX2FyZyB7XG5AQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcbiBcbi1cdF9fZnJlZV9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XG4gfVxuIFxuQEAgLTY4MSw2ICs2ODEsOCBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghaXJxY2hpcF9zcGxpdCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0dGR4X2luaXRfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4rXG4gXHRmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0ZHgtXHUwMDNldnQucGlfd2FrZXVwX2xpc3QpO1xuQEAgLTg2Niw2ICs4NjgsOCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHRpbnQgaTtcbiBcbitcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXHUwMDI2dGR4LVx1MDAzZXBhbXRfY2FjaGUpO1xuK1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ICE9IC0xKSB7XG4gXHRcdEtWTV9CVUdfT04odGR4LVx1MDAzZXN0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtXHUwMDNla3ZtKTtcbiBcdFx0dGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTtcbkBAIC0xNjIxLDYgKzE2MjUsMTcgQEAgdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbiB9XG4gXG4rc3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbit7XG4rXHQvKlxuK1x0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXG4rXHQgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLlxuK1x0ICovXG4rXHRtaW5fbnJfc3B0cyArPSAtMSArIDE7XG4rXG4rXHRyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTtcbit9XG4rXG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdCAgICBrdm1fcGZuX3QgcGZuKVxuIHtcbkBAIC0xNjc5LDE2ICsxNjk0LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRcdFx0XHQgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xuIFx0Z3BhX3QgZ3BhID0gZ2ZuX3RvX2dwYShnZm4pO1xuIFx0dTY0IGVyciwgZW50cnksIGxldmVsX3N0YXRlO1xuIFx0c3RydWN0IHBhZ2UgKnNlcHRfcHQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4rXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XG4gXHRpZiAoIXNlcHRfcHQpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuK1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCBcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSk7XG4rXHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRlcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKFx1MDAyNnRvX2t2bV90ZHgoa3ZtKS1cdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCxcbiBcdFx0XHQgICAgICAgXHUwMDI2ZW50cnksIFx1MDAyNmxldmVsX3N0YXRlKTtcbitcdGlmIChlcnIpXG4rXHRcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XG4rXG4gXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbkBAIC0xNzAxLDggKzE3MjgsMTMgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbiBcdFx0XHRcdCAgdTY0IG5ld19zcHRlKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcbiBcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4rXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0LyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqL1xuIFx0aWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpXG5AQCAtMTcxMCw2ICsxNzQyLDEwIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXG4gXG4gXHRXQVJOX09OX09OQ0UoKG5ld19zcHRlIFx1MDAyNiBWTVhfRVBUX1JXWF9NQVNLKSAhPSBWTVhfRVBUX1JXWF9NQVNLKTtcbiBcbitcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbitcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdC8qXG4gXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuIFx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbkBAIC0xNzIyLDEwICsxNzU4LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXG4gXHQgKiBJZiB0aGUgVEQgaXNuJ3QgZmluYWxpemVkL3J1bm5hYmxlLCB0aGVuIHVzZXJzcGFjZSBpcyBpbml0aWFsaXppbmdcbiBcdCAqIHRoZSBWTSBpbWFnZSB2aWEgS1ZNX1REWF9JTklUX01FTV9SRUdJT047IEFERCB0aGUgcGFnZSB0byB0aGUgVEQuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSlcbi1cdFx0cmV0dXJuIHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuK1x0aWYgKGxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcbitcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRlbHNlXG4rXHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuK1xuK1x0aWYgKHJldClcbitcdFx0dGR4X3BhbXRfcHV0KHBmbik7XG4gXG4tXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTE4MjIsNiArMTg2Myw3IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfcmVtb3ZlX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIoUEZOX1BIWVMocGZuKSwgUEFHRV9TSVpFKTtcbitcdHRkeF9wYW10X3B1dChwZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE4NjUsNiArMTkwNyw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLFxuICAqL1xuIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbiB7XG4rXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdCA9IHZpcnRfdG9fcGFnZShzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuK1xuIFx0LypcbiBcdCAqIEtWTSBkb2Vzbid0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlXG4gXHQgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmVcbkBAIC0xODc4LDE1ICsxOTIyLDE1IEBAIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbiBcdCAqIHRoZSBwYWdlIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGUgZW5jcnlwdGVkIHBhZ2UuXG4gXHQgKi9cbiBcdGlmIChLVk1fQlVHX09OKGlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeChrdm0pKSwga3ZtKSB8fFxuLVx0ICAgIHRkeF9yZWNsYWltX3BhZ2UodmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCkpKVxuK1x0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0Lypcbi1cdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XG4tXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xuLVx0ICogcmVhZGVycy5cbitcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24ndCBzdXBwb3J0XG4rXHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxuK1x0ICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy5cbiBcdCAqL1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc2VwdF9wdCk7XG4gb3V0OlxuIFx0c3AtXHUwMDNlZXh0ZXJuYWxfc3B0ID0gTlVMTDtcbiB9XG5AQCAtMjQ1OSw3ICsyNTAzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFxuIFx0cmV0ID0gLUVOT01FTTtcbiBcbi1cdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0dGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXRkcl9wYWdlKVxuIFx0XHRnb3RvIGZyZWVfaGtpZDtcbiBcbkBAIC0yNDcyLDcgKzI1MTYsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXHRcdGdvdG8gZnJlZV90ZHI7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xuLVx0XHR0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0XHR0ZGNzX3BhZ2VzW2ldID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXRkY3NfcGFnZXNbaV0pXG4gXHRcdFx0Z290byBmcmVlX3RkY3M7XG4gXHR9XG5AQCAtMjU5MCwxMCArMjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiB0ZWFyZG93bjpcbiBcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAnaScgKi9cbiBcdGZvciAoOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSkge1xuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0XHRcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xuLVx0XHR9XG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbitcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoIWt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcylcbiBcdFx0a2ZyZWUodGRjc19wYWdlcyk7XG5AQCAtMjYwOCwxNiArMjY1MCwxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXHRmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTtcbiBcbiBmcmVlX3RkY3M6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKVxuK1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4gXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHI6XG4tXHRpZiAodGRyX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkcl9wYWdlKTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHJfcGFnZSk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcbiBcbiBmcmVlX2hraWQ6XG5AQCAtMjk1MSw3ICsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBlcnI7XG4gXG4tXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSA9IHBhZ2U7XG5AQCAtMjk3MSw3ICszMDEwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdFx0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdFx0aWYgKCFwYWdlKSB7XG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGZyZWVfdGRjeDtcbkBAIC0yOTkzLDcgKzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRcdFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXG4gXHRcdFx0ICovXG4gXHRcdFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XG4tXHRcdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4rXHRcdFx0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHRcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gLUVJTztcbkBAIC0zMDIxLDE2ICszMDYwLDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcbiBmcmVlX3RkY3g6XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRpZiAodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXG4tXHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuK1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRrZnJlZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyk7XG4gXHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHZwcjpcbi1cdGlmICh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKTtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlID0gTlVMTDtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYSA9IDA7XG4gXG5AQCAtMzQ5Myw2ICszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcbiBcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKVxuK1x0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG4rXG4gXHR2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG5pbmRleCBhYzgzMjNhNjhiMTYzLi5mZDM2OGUzZWUwNjBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuQEAgLTcyLDYgKzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHtcbiBcbiBcdHU2NCBtYXBfZ3BhX25leHQ7XG4gXHR1NjQgbWFwX2dwYV9lbmQ7XG4rXG4rXHRzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTtcbiB9O1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggNDJkZjhlYTQ2NGM0Ny4uZGVjNDU3MDllNDU0YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21zci1pbmRleC5oXHUwMDNlXG5AQCAtNDYsNiArNDcsOCBAQFxuICNpbmNsdWRlIFwic2VhbWNhbGxfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xuIFx0Ym9vbCBpbml0aWFsaXplZDtcbiBcdGJvb2wgc3lzaW5pdF9kb25lO1xuQEAgLTYzLDYgKzY2LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbisvKlxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIER5bmFtaWMgUEFNVCwgdGhlIGtlcm5lbCBtYWludGFpbnMgYSByZWZlcmVuY2UgY291bnRlclxuKyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XG4rICogaW5pdGlhbGl6YXRpb24uXG4rICovXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcbitcbiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqL1xuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xuIFxuQEAgLTI1Miw2ICsyNjMsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuKy8qXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rICpcbisgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIF9faW5pdCBpbnQgaW5pdF9wYW10X3JlZmNvdW50cyh2b2lkKVxuK3tcbitcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKnBhbXRfcmVmY291bnRzKTtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xuK1x0aWYgKCFwYW10X3JlZmNvdW50cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfcGFtdF9yZWZjb3VudHModm9pZClcbit7XG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2ZnJlZShwYW10X3JlZmNvdW50cyk7XG4rXHRwYW10X3JlZmNvdW50cyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfcGFtdF9yZWZjb3VudCh1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHQvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi9cbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXHUwMDNlXHUwMDNlIChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTtcbitcbitcdHJldHVybiBcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XG4rfVxuK1xuIC8qXG4gICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJ3RcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbitcdGludCBiaXRzX3Blcl9lbnRyeTtcbitcbitcdGJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4rXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuK31cbitcbiAvKlxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxuICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LlxuICAqL1xuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxuLVx0XHRcdFx0XHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXG4rc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4rXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcbitcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbitcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXG4rXHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxuK1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcbitcdH07XG4gXG4tXHRzd2l0Y2ggKHBnc3opIHtcbi1cdGNhc2UgVERYX1BTXzRLOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMk06XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUE1EX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzFHOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBVRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuK1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSB0ZHhfcGdfc2l6ZV9zaGlmdFtwZ3N6XTtcbitcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XG4gXG4tXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xuIFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cbi1cdHBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpO1xuLVxuLVx0cmV0dXJuIHBhbXRfc3o7XG4rXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiB9XG4gXG4gLypcbkBAIC01NzYsMTUgKzYyNSwxMSBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX2dldF9uaWQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc1xuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXG4gICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4tXHRcdFx0XHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplO1xuIFx0c3RydWN0IHBhZ2UgKnBhbXQ7XG4tXHRpbnQgcGdzeiwgbmlkO1xuK1x0aW50IG5pZDtcbiBcbiBcdG5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7XG4gXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcbiBcdCAqIGFuZCB0aGUgdG90YWwgUEFNVCBzaXplLlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeisrKSB7XG4tXHRcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcbi1cdFx0XHRcdFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcbi1cdFx0dGRtcl9wYW10X3NpemUgKz0gcGFtdF9zaXplW3Bnc3pdO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XG4rXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcbitcbitcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuK1x0XHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4rXHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7XG4rXHR9IGVsc2Uge1xuK1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbitcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cdTAwM2VwYW10XzRrX3NpemUgKyB0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSArIHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuK1xuIFx0LypcbiBcdCAqIEFsbG9jYXRlIG9uZSBjaHVuayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciBhbGxcbiBcdCAqIFBBTVRzLiAgVGhpcyBoZWxwcyBtaW5pbWl6ZSB0aGUgUEFNVCdzIHVzZSBvZiByZXNlcnZlZCBhcmVhc1xuQEAgLTYwNiwyNSArNjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4rXHQgKiB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSBpcyBzdGlsbCB6ZXJvIHNvIHRoZSBlcnJvclxuK1x0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuLVx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xuLVx0XHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcbi1cdFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xuLVx0fVxuK1x0aWYgKCFwYW10KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107XG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzJNXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMUddO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzFHXTtcbitcdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFnZV90b19waHlzKHBhbXQpO1xuK1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXHUwMDNlcGFtdF80a19zaXplO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfMm1fYmFzZSArIHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCArNjk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHR0ZG1yX2dldF9wYW10KHRkbXIsIFx1MDAyNnBhbXRfYmFzZSwgXHUwMDI2cGFtdF9zaXplKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xuLVx0aWYgKCFwYW10X3NpemUpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmIChXQVJOX09OX09OQ0UoIXBhbXRfYmFzZSkpXG4rXHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgKzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbiBcbiAvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIFBBTVRzIGZvciBhbGwgVERNUnMgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0XHR1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuIFx0aW50IGksIHJldCA9IDA7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xuLVx0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXG4tXHRcdFx0XHRwYW10X2VudHJ5X3NpemUpO1xuK1x0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0fVxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4tXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXG4tXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xuK1x0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05OTgsNiArMTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXHRCSVQoMTYpXG4rXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgICAgdTY0IGdsb2JhbF9rZXlpZClcbiB7XG5AQCAtMTAyNiw2ICsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xuIFx0YXJncy5yZHggPSB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XG4gXHRhcmdzLnI4ID0gZ2xvYmFsX2tleWlkO1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4rXHRcdHByX2luZm8oXCJFbmFibGUgRHluYW1pYyBQQU1UXFxuXCIpO1xuK1x0XHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcbitcdH1cbitcbiBcdHJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCBcdTAwMjZhcmdzKTtcbiBcbiBcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xuQEAgLTExNjcsMTAgKzEyMDcsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHQgKi9cbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFxuLVx0cmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK1x0cmV0ID0gaW5pdF9wYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbitcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7XG4rXG4gXHQvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqL1xuIFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QsIFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xuIFx0aWYgKHJldClcbkBAIC0xMjIwLDYgKzEyNjQsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdGZyZWVfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QpO1xuIGVycl9mcmVlX3RkeG1lbTpcbiBcdGZyZWVfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOlxuK1x0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwMyw2ICsyMDQ5LDI4OCBAQCB1NjQgdGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKHU2NCBoa2lkLCBrdm1fcGZuX3QgcGZuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTtcbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBhZ2U7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdGlmIChjYWNoZSlcbitcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuK1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbit9XG4rXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRpbnQgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XG4rXHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbitcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBSZXNldCBwYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgY2FzZXNcbitcdFx0ICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS5cbitcdFx0ICovXG4rXHRcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1tpXSksIFBBR0VfU0laRSk7XG4rXG4rXHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxuKyAqIGEgZ2l2ZW4gNEtCIHBhZ2UuXG4rICovXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbit7XG4rXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xuK1x0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBNRF9TSVpFKTtcbitcbitcdHJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNO1xuK31cbitcbisvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4rXHRcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXG4rXHRcdC5yOCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzFdKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXHUwMDI2YXJncyk7XG4rfVxuK1xuKy8qIFJlbW92ZSBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4rXHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbitcdH07XG4rXHR1NjQgcmV0O1xuK1xuK1x0cmV0ID0gc2VhbWNhbGxfcmV0KFRESF9QSFlNRU1fUEFNVF9SRU1PVkUsIFx1MDAyNmFyZ3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi9cbitcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuK1x0cGFtdF9wYWdlc1sxXSA9IHBoeXNfdG9fcGFnZShhcmdzLnI4KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcbitcbisvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4rXHRhdG9taWNfdCAqcGFtdF9yZWZjb3VudDtcbitcdHU2NCB0ZHhfc3RhdHVzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXHUwMDNlPSAxKSxcbitcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGFtdF9sb2NrKTtcbitcbitcdC8qXG4rXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cbitcdCAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLVx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xuK1x0ICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcbitcdCAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLVx1MDAzZTFcbitcdCAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbitcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcbitcdFx0cmV0ID0gLUVJTztcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXG4rXHQgKiBvbmx5IHdheSB0byBpbmNyZWFzZSBpdCBmcm9tIDAtXHUwMDNlMS5cbitcdCAqL1xuK1x0YXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZnJlZTpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbitcbisvKiBEcm9wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcbitcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuK1x0dTY0IHRkeF9zdGF0dXM7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgcGFtdCBwYWdlLCBkb24ndFxuK1x0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2socGFtdF9yZWZjb3VudCwgXHUwMDI2cGFtdF9sb2NrKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbitcbitcdC8qXG4rXHQgKiBEb24ndCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW5cbitcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xuK1x0ICogdGhlcmUgaXMgbm8gcmlzayBvZiBkYXRhIGNvcnJ1cHRpb24sIGJ1dCBkbyB5ZWxsIGxvdWRseSBhc1xuK1x0ICogZmFpbHVyZSBpbmRpY2F0ZXMgYSBrZXJuZWwgYnVnLCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkLCBhbmRcbitcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsXG4rXHRcdCAqIGJ1dCB0aGUgUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cbitcdFx0ICovXG4rXHRcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXHRyZXR1cm47XG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpO1xuK1xuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuK1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcbitcbitcdHdoaWxlIChjYWNoZS1cdTAwM2VjbnQgXHUwMDNjIG5wYWdlcykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcbitcdFx0aWYgKCFwYWdlKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbitcdFx0Y2FjaGUtXHUwMDNlY250Kys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTtcbitcbisvKlxuKyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBcImNvbnRyb2xcIlxuKyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxuKyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy5cbisgKi9cbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghcGFnZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGFnZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpO1xuK1xuKy8qXG4rICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sXG4rICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguXG4rICovXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuK1x0X19mcmVlX3BhZ2UocGFnZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xuK31cbitcbitfX3NldHVwKFwidGR4X2RwYW10PVwiLCB0ZHhfZHBhbXRfc2V0dXApO1xuK1xuIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5pbmRleCBiZGZkMGUxZTMzN2FjLi5hODg2YzU0ZGVjYWFkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbkBAIC00OCw2ICs0OCw4IEBAXG4gI2RlZmluZSBUREhfU1lTX0NPTkZJR1x0XHRcdDQ1XG4gI2RlZmluZSBUREhfU1lTX1NIVVRET1dOXHRcdDUyXG4gI2RlZmluZSBUREhfU1lTX1VQREFURVx0XHRcdDUzXG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfUkVNT1ZFXHRcdDU5XG4gI2RlZmluZSBUREhfU1lTX0RJU0FCTEVcdFx0XHQ2OVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbmluZGV4IGU0OWMzMDBmMjNkNDMuLjkzYjFmMjYyNTJjNjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5AQCAtMSw2ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qXG4tICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cbisgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuICAqXG4gICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbkBAIC0zMyw2ICszMywxOCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZlxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuK3tcbitcdGludCByZXQ7XG4rXHR1NjQgdmFsO1xuK1xuK1x0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMDAwMDAwMDEzLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4ge1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTI5LDUgKzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGtlcm5lbCBzdXBwb3J0cyB1c2luZyBURFggd2l0aG91dCBEeW5hbWljIFBBTVQsIHNvXG4rXHQgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQuIERvbid0IHRyeVxuK1x0ICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVRcbitcdCAqIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxuK1x0ICovXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcbitcdFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjAyLjA5OTIxOTkwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NDYzNTkxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRHluYW1pYyBQQU1UIFREWCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYWRkaW5nIFwiRHluYW1pYyBQQU1UXCIgc3VwcG9ydCB3aXRoaW4gdGhlIFREWCBtb2R1bGUgZm9yIHg4Ni4gSXQncyB0b3VjaGluZyBzZXZlcmFsIGNvcmUgZmlsZXMgaW4gdGhlIEtWTSBhbmQgVERYIGluZnJhc3RydWN0dXJlOiBgdGR4LmNgIGZpbGVzLCB0aGUgTU1VLCBldGMuIFRoaXMgaXMgYWN0aXZhdGVkIHdpdGggdGhlIGB0ZHhfZHBhbXQ9b25gIGtlcm5lbCBwYXJhbWV0ZXIsIGFuZCBpdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGFsbCB0aGF0IGdvb2Qgc3R1ZmYsIHBsdXMgaXQgdXRpbGl6ZXMgYFRESF9QSFlNRU1fUEFNVF9BRERgIGFuZCBgVERIX1BIWU1FTV9QQU1UX1JFTU9WRWAgU0VBTUNBTExzLlxuXG5UaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gSW1tZWRpYXRlbHksIHRoZSBURFggcmVxdWlyZW1lbnQgcG9wcyB0byBtaW5kIC0gc3BlY2lmaWMgSW50ZWwgVERYIGhhcmR3YXJlLiBJdCdzIGEgdmlydHVhbGl6YXRpb24gZmVhdHVyZSwgYnV0IHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiB0aGUgKmhvc3QqIHNpZGUsIHRoZSBLVk0gc3VwcG9ydCwgbm90IHRoZSBndWVzdCBpdHNlbGYsIGF0IGxlYXN0IHRoYXQncyBteSB1bmRlcnN0YW5kaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gd2UgcmVhbGx5IHRlc3QgdGhpcyBpbiBRRU1VP1wiLlxuXG5XYWl0LCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzOiBJc24ndCBURFggZ3Vlc3Qgc3VwcG9ydCBzZXBhcmF0ZSBmcm9tIHRoaXMgS1ZNIGhvc3Qtc2lkZSB3b3JrPyBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgVERYIGhvc3Qtc2lkZSBLVk0gZnVuY3Rpb25hbGl0eS4gTm93IEknbSBxdWVzdGlvbmluZyB3aGV0aGVyIFREWCBob3N0IHN1cHBvcnQgaW4gS1ZNIGlzIGV2ZW4gZnVsbHkgdXBzdHJlYW1lZCwgb3IgaWYgaXQgaXMgdGVzdGFibGUgd2l0aCBzdGFuZGFyZCBRRU1VLlxuXG5SZWFsaXN0aWNhbGx5LCBURFggaG9zdCBzdXBwb3J0ICp0eXBpY2FsbHkqIGRlbWFuZHMgYmFyZSBtZXRhbCB3aXRoIFREWC1jYXBhYmxlIGhhcmR3YXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGV2ZW4gaWYgaXQgY291bGQgYmUgbmVzdGVkICh3aGljaCBpdCBjYW4ndCByaWdodCBub3cpLCBpcyBhIG5vLWdvLiBUaGUgcHJvbXB0IGl0c2VsZiBpcyB2ZXJ5IGV4cGxpY2l0IGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFL1FFTVUgd2hlbiBlbXVsYXRpbmcgaGFyZHdhcmUsIGl0J3MgcmVmZXJyaW5nIHRvIHRoZSBURFggaG9zdCBjb2RlLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBhIGZ1enplciBsaWtlIHN5emthbGxlciByZWFjaCB0aGlzIFREWCBob3N0IGNvZGUgaW4gc29tZXRoaW5nIGxpa2UgR0NFIG9yIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGxpa2VseSBhIGZpcm0gbm8uIFRoaXMgVERYIGhvc3QgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgSW50ZWwgQ1BVIHdpdGggVERYIHN1cHBvcnQuIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBkb2Vzbid0IGVtdWxhdGUgdGhhdCBoYXJkd2FyZSwgYW5kIHN0YW5kYXJkIEdDRSBWTXMgZG9uJ3QgdHlwaWNhbGx5IHByb3ZpZGUgaXQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgYXZhaWxhYmxlIGZvciBnZW5lcmFsIHVzZS4gUUVNVSBjYW4gYmUgYSBWTU0gdGhhdCAqcnVucyogVERYIGd1ZXN0cywgdXNpbmcgS1ZNLCBidXQgdGhlIEtWTSBwYXJ0ICh0aGUgaG9zdCBrZXJuZWwpIHN0aWxsIG5lZWRzIHRvIGJlIG9uIFREWC1jYXBhYmxlIGhhcmR3YXJlLCBhbmQgaWYgSSB0cnkgdG8gcnVuIGEga2VybmVsIGluIFFFTVUsIEtWTSB3aWxsIGNoZWNrIGZvciB0aGUgVERYIGhhcmR3YXJlLiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbC5cblxuSSBzaG91bGQgdmVyaWZ5IHRoYXQsIEknbSBnb2luZyB0byBsb29rIGF0IGBpbml0X3RkeF9tb2R1bGVgIGluIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGFuZCBzZWFyY2ggZm9yIHRoZSBrZXkgaWRlbnRpZmllcnMgbGlrZSBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgYW5kIGBpbml0X3RkeF9tb2R1bGVgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MTAuODQ1NTgxOTgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDg2MjA0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF90ZHhfbW9kdWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMTY2PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcnMoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTE4NTpzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4Ni17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTI3Mj1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTMwMjpcXHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMy1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjEyLjY5NDIwODYyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzcyMzQ0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQWN0aXZhdGlvbiBvZiBgdGR4X2VuYWJsZWAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVuIGRvZXMgYHRkeF9lbmFibGVgIGFjdHVhbGx5IGdldCBjYWxsZWQ/IElzIGl0IGJha2VkIGludG8gdGhlIGVhcmx5IGJvb3Qgc2VxdWVuY2UsIG9yIGlzIGl0IGV4Y2x1c2l2ZWx5IHRyaWdnZXJlZCBieSB0aGUgS1ZNIGxvYWRpbmcgcHJvY2Vzcz8gVW5kZXJzdGFuZGluZyB0aGlzIGhhcyBzb21lIG1ham9yIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGFyY2hpdGVjdCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgd2UgbmVlZCB0byBjb25zaWRlci4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlbiB0aGlzIGtleSBmdW5jdGlvbiBoaXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjE1LjYzMTQ0NTc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUzNjkwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2VuYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDktXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjUwOnN0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MS1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMTg1PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzEtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEyNzI6c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMjczLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzE0LX1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTMxNTpzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTYtXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjA1Mj1ib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMDU0LVxcdHJldHVybiBzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFxcdTAwMjYgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjA1NTpcXHQgICAgICAgdGR4X2VuYWJsZV9kcGFtdDtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjA1Ni19XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjMyNz1zdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzI4LXtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjMyOTpcXHRyZXR1cm4ga3N0cnRvYm9vbChzdHIsIFxcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MTcuMjY2ODI0MjM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4ODg2MTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGB0ZHhfZW5hYmxlYCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGB0ZHhfZW5hYmxlYCBpcyBnZXR0aW5nIGhvb2tlZCB1cCBhcyBhIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbWVhbnMgdGhpcyBpcyBhIGxvdy1sZXZlbCwgZWFybHktc3RhZ2UgY29tcG9uZW50LCBsaWtlbHkgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIHN5c3RlbSwgcHJlc3VtaW5nIHRoaXMgaXMgYSBURFgtYXdhcmUga2VybmVsLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIGhhcmR3YXJlLWxldmVsIFREWCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3Qgcm9sZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEknbGwgbmVlZCB0byBkaXNzZWN0IHRoZSBmdW5jdGlvbidzIGludGVybmFscyB0byBzZWUgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQ1BVLCBtZW1vcnkgY29udHJvbGxlcnMsIGFuZCBhbnkgcmVsZXZhbnQgcGxhdGZvcm0tc3BlY2lmaWMgcmVnaXN0ZXJzIG9yIEFDUEkgdGFibGVzLiBJcyBpdCBhdHRlbXB0aW5nIHRvIGRpc2NvdmVyIGFuZCB2YWxpZGF0ZSBURFggc3VwcG9ydCwgcHJvYmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSByZXF1aXJlZCBoYXJkd2FyZSBmZWF0dXJlcyBsaWtlIHRoZSBURFggTW9kdWxlIChURFgtTSk/IElzIGl0IGVuYWJsaW5nIHNwZWNpZmljIENQVSBmbGFncyBvciBNU1JzPyBQZXJoYXBzIGl0J3MgY3JlYXRpbmcgb3IgcmVnaXN0ZXJpbmcgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yIFREWCBvcGVyYXRpb24gbGF0ZXIgb24uIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVERYLXJlbGF0ZWQgZmlybXdhcmUgY29tcG9uZW50cywgdGhlIEludGVsIFRYVCBvciB0aGUgQU1EIFNFVi9TRVYtU05QLCBhc3N1bWluZyB0aGF0IGlzIGluIGVmZmVjdC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluc2lkZSBgdGR4X2VuYWJsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MjIuNDU1Njg3OTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjcwOlxcdH1cXG4xMjcxOlxcdFxcbjEyNzI6XFx0c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbjEyNzM6XFx0e1xcbjEyNzQ6XFx0XFx0ZW51bSBjcHVocF9zdGF0ZSBzdGF0ZTtcXG4xMjc1OlxcdFxcdGludCByZXQ7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcXG4xMjc4OlxcdFxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbjEyNzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTI4MDpcXHRcXHR9XFxuMTI4MTpcXHRcXG4xMjgyOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9YU0FWRSkpIHtcXG4xMjgzOlxcdFxcdFxcdHByX2VycihcXFwiWFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMTI4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjg1OlxcdFxcdH1cXG4xMjg2OlxcdFxcbjEyODc6XFx0XFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01PVkRJUjY0QikpIHtcXG4xMjg4OlxcdFxcdFxcdHByX2VycihcXFwiTU9WRElSNjRCIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjEyODk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI5MDpcXHRcXHR9XFxuMTI5MTpcXHRcXG4xMjkyOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUxGU05PT1ApKSB7XFxuMTI5MzpcXHRcXHRcXHRwcl9lcnIoXFxcIlNlbGYtc25vb3AgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMTI5NDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMjk1OlxcdFxcdH1cXG4xMjk2OlxcdFxcbjEyOTc6XFx0XFx0c3RhdGUgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcXFwidmlydC90ZHg6b25saW5lXFxcIixcXG4xMjk4OlxcdFxcdFxcdFxcdFxcdCAgdGR4X29ubGluZV9jcHUsIHRkeF9vZmZsaW5lX2NwdSk7XFxuMTI5OTpcXHRcXHRpZiAoc3RhdGUgXFx1MDAzYyAwKVxcbjEzMDA6XFx0XFx0XFx0cmV0dXJuIHN0YXRlO1xcbjEzMDE6XFx0XFxuMTMwMjpcXHRcXHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcXG4xMzAzOlxcdFxcdGlmIChyZXQpIHtcXG4xMzA0OlxcdFxcdFxcdHByX2VycihcXFwiVERYLU1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4xMzA1OlxcdFxcdFxcdGNwdWhwX3JlbW92ZV9zdGF0ZShzdGF0ZSk7XFxuMTMwNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMDc6XFx0XFx0fVxcbjEzMDg6XFx0XFxuMTMwOTpcXHRcXHRyZWdpc3Rlcl9zeXNjb3JlKFxcdTAwMjZ0ZHhfc3lzY29yZSk7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdHRkeF9tb2R1bGVfc3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbjEzMTI6XFx0XFx0cHJfaW5mbyhcXFwiVERYLU1vZHVsZSBpbml0aWFsaXplZFxcXFxuXFxcIik7XFxuMTMxMzpcXHRcXHRyZXR1cm4gMDtcXG4xMzE0OlxcdH1cXG4xMzE1OlxcdHN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcXG4xMzE2OlxcdFxcbjEzMTc6XFx0aW50IHRkeF9tb2R1bGVfc2h1dGRvd24odm9pZClcXG4xMzE4OlxcdHtcXG4xMzE5OlxcdFxcdHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiBoYW5kb2ZmID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjIyLjQ1NTg1NTY4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDc0NTczMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFREWCBIb3N0IENvZGUgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYHRkeF9lbmFibGVgIGNoZWNrcyBmb3IgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBhbmQgcmV0dXJucyBgLUVOT0RFVmAgaWYgaXQncyBub3QgZW5hYmxlZC4gTmF0dXJhbGx5LCBteSBmaXJzdCB0aG91Z2h0IGlzOiBpcyB0aGlzIHBsYXRmb3JtIGZlYXR1cmUgZW11bGF0ZWQgYnkgUUVNVS9LVk0/IE5vLCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgVERYIGhvc3QgcGxhdGZvcm0uIEl0IHJlcXVpcmVzIGFjdHVhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFREWCBlbmFibGVkIGluIHRoZSBCSU9TLCBhbmQgdGhlIFNFQU0gbW9kdWxlIGxvYWRlZCwgYW5kIHNvIG9uLlxuXG5Ob3cgSSdtIHRoaW5raW5nLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcnVuIG9uIFREWCBoYXJkd2FyZT8gVGhlIHByb21wdCBpcyBoaW50aW5nIGF0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTaW5jZSBURFggaG9zdCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgUUVNVSwgYW5kIHRoZXJlIGlzIG5vIFNFQU0gbW9kdWxlIGVtdWxhdGlvbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGV4aXN0cyBmb3IgdGhlIFREWCBob3N0LiBJIGFtIGZhaXJseSBjb25maWRlbnQgaW4gbXkga25vd2xlZGdlIGhlcmUsIGJ1dCBhIHF1aWNrIGNvbmZpcm1hdGlvbiBpcyB3YXJyYW50ZWQuXG5cbk5vLCBpdCdzIG5vdCBlbXVsYXRlZC4gVERYIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgYW5kIGBTRUFNQ0FMTHNgIGFyZSBoYW5kbGVkIGJ5IHRoZSBURFggbW9kdWxlLCB3aGljaCBpcyBhIHNlY3VyZSBlbmNsYXZlLiBRRU1VIGRvZXMgbm90IGVtdWxhdGUgdGhlIFREWCBtb2R1bGUgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgb3IgYXQgbGVhc3Qgbm90IGluIHRoZSBzdGFuZGFyZCB1cHN0cmVhbSB2ZXJzaW9uLiBTbywgdGhpcyBjb25maXJtcyB0aGF0IFREWCBob3N0IGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5UaGlzIGJyaW5ncyBtZSBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIHN0YXRlcyB0byBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVERYIGhvc3QgY29kZSBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJcyB0aGVyZSAqYW55KiBwYXJ0IG9mIHRoaXMgcGF0Y2ggdGhhdCAqaXMqIHJlYWNoYWJsZSB3aXRob3V0IFREWCBoYXJkd2FyZT8gTGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBPa2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGUgY2hhbmdlIGlzIGFkZGluZyBhIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0IGxvb2tzIGxpa2UgYW4gb3B0aW9uYWwgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrdm1feDg2X2NhbGxgLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2ODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzowMToyOS41NjMzMTU3ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODg5ODc1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBrdm1feDg2X2NhbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMDYzPWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yMDY0LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjA2NTojZGVmaW5lIGt2bV94ODZfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2XyMjZnVuYylcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjMxLjA1MjMxMjQxM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDE2ODMzMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBIb3N0IENvZGUgVW5yZWFjaGFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGRlZmluZWQgdXNpbmcgYEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMGAuIFRoYXQgbWVhbnMgaWYgdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSAobGlrZSBWTVggb3IgU1ZNKSBkb2Vzbid0IGltcGxlbWVudCBpdCwgaXQgc2ltcGx5IHJldHVybnMgemVyby4gQ3J1Y2lhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXNzaWduZWQgYSBub24temVybyB2YWx1ZSB3aXRoaW4gYHRkeF9oYXJkd2FyZV9zZXR1cGAuIEFuZCBgdGR4X2hhcmR3YXJlX3NldHVwYCBpcywgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50LCAqb25seSogY2FsbGVkIGlmIFREWCBzdXBwb3J0IGlzIGRldGVjdGVkLlxuXG5TbywgaW4gdGhlIGFic2VuY2Ugb2YgYSBURFgtZW5hYmxlZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdGhlIG5vcm0gZm9yIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcywgYHRvcHVwX2V4dGVybmFsX2NhY2hlYCB3aWxsICphbHdheXMqIHJldHVybiB6ZXJvLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2gsIGFzIEkndmUgc2VlbiwgaXMgY29uZmluZWQgdG8gYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgIGFuZCBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYC4gQ29uc2VxdWVudGx5LCB0aGlzIFREWC1zcGVjaWZpYyBjb2RlIHNpbXBseSB3b24ndCBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBJdCdzIHRvdGFsbHkgdW5yZWFjaGFibGUgZm9yIFN5emthbGxlci5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGVzY2FwZSByb3V0ZXMuIFRoZSBgdGR4X2RwYW10X3NldHVwYCBmdW5jdGlvbiBpcyBhbiBgX19zZXR1cGAgZnVuY3Rpb24sIHdoaWNoIHNpbXBseSBmbGlwcyBhIGJvb2xlYW4sIGl0J3Mgbm90IHJlbGV2YW50LiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgZXhwb3J0ZWQsIGJ1dCBpcyBvbmx5IHVzZWQgd2l0aGluIHRoZSBLVk0gVERYIGluZnJhc3RydWN0dXJlLiBTaW1pbGFybHksIGZ1bmN0aW9ucyBsaWtlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgZXRjLiwgYXJlIGV4cG9ydGVkLCBidXQgdGhleSdyZSBhbGwgZmlybWx5IHdpdGhpbiB0aGUgS1ZNIFREWCBkb21haW4uIEFuZCB0aGF0IGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlc2AgY2FsbCB0byBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGEgc3RhdGljIGNhbGwgdGhhdCBlZmZlY3RpdmVseSBiZWNvbWVzIGEgbm8tb3AgdGhhdCdzIGRlc2lnbmVkIHRvIHJldHVybiAwLlxuXG5UaGVyZWZvcmUsIHdpdGhvdXQgVERYIGhhcmR3YXJlLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZC5cblxuU28sIHRoZSByZWFzb25pbmcgSSdsbCBmb3JtdWxhdGUgaXMgdGhpczogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgc3VwcG9ydCB3aXRoaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIEZ1bmN0aW9uYWxpdHkgZGVwZW5kZW50IG9uIHRoaXMgc3VwcG9ydCByZXF1aXJlcyBzcGVjaWZpYyBiYXJlLW1ldGFsIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZW5hYmxlZCBhbmQgdGhlIFREWCBtb2R1bGUgbG9hZGVkLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkzMCwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MzguNDY5MTQ4MDMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRHluYW1pYyBQQU1UIGluIHRoZSBURFggaG9zdCAoS1ZNKSBjb2RlLiBURFggaG9zdCBzdXBwb3J0IHJlcXVpcmVzIHNwZWNpZmljIGJhcmUtbWV0YWwgSW50ZWwgaGFyZHdhcmUgd2l0aCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBlbmFibGVkIGFuZCB0aGUgVERYIG1vZHVsZSBsb2FkZWQuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhqq96[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 02:21:00 +0000 UTC FinishedAt: 2026-08-06 03:01:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRHluYW1pYyBQQU1UIGluIHRoZSBURFggaG9zdCAoS1ZNKSBjb2RlLiBURFggaG9zdCBzdXBwb3J0IHJlcXVpcmVzIHNwZWNpZmljIGJhcmUtbWV0YWwgSW50ZWwgaGFyZHdhcmUgd2l0aCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBlbmFibGVkIGFuZCB0aGUgVERYIG1vZHVsZSBsb2FkZWQuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjAwZWZjNDkxMzE4ODFmMTZhNWIxNTgwYWRmM2Y3Yzc5NDI2MzE0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDM6MDA6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTc1MTIsNiAmIzQzOzc1MTIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcbiBcdHRkZng9XHRcdFtIVyxEUk1dXG4gXG4mIzQzO1x0dGR4X2RwYW10PVxuJiM0MztcdFx0XHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcbiYjNDM7XHRcdFx0dG8gc2F2ZSBtZW1vcnksIHdoZW4gc3VwcG9ydGVkLlxuJiM0MztcbiYjNDM7XHRcdFx0VmFsaWQgcGFyYW1ldGVyczogXCYjMzQ7b25cJiMzNDssIFwmIzM0O29mZlwmIzM0O1xuJiM0MztcdFx0XHREZWZhdWx0OiBcJiMzNDtvZmZcJiMzNDtcbiYjNDM7XG4mIzQzO1x0XHRcdEZvciBkZXRhaWxzIHNlZTpcbiYjNDM7XHRcdFx0RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XG4mIzQzO1xuIFx0dGVzdF9zdXNwZW5kPVx0W1NVU1BFTkRdXG4gXHRcdFx0Rm9ybWF0OiB7IFwmIzM0O21lbVwmIzM0OyB8IFwmIzM0O3N0YW5kYnlcJiMzNDsgfCBcJiMzNDtmcmVlemVcJiMzNDsgfVssTl1cbiBcdFx0XHRTcGVjaWZ5IFwmIzM0O21lbVwmIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciBcJiMzNDtzdGFuZGJ5XCYjMzQ7IChmb3JcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbmluZGV4IDMzMDM0OTlhZDRjNmYuLmExYzIzMDkyMzA1ODAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuQEAgLTIwMCw2ICYjNDM7MjAwLDM0IEBAIHJlZmxlY3RzIHRoZSBUQ0Igb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIFREWCBtb2R1bGUgYW5kIHRoZXJlZm9yZVxuIGNoYW5nZXMgYWZ0ZXIgYW4gdXBkYXRlLiBCeSBjb250cmFzdCwgVEVFX1RDQl9TVk4gcmVmbGVjdHMgdGhlIFRDQiBhdCBURFxuIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuXG4gXG4mIzQzO0R5bmFtaWMgUEFNVFxuJiM0MzstLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO1BoeXNpY2FsIEFkZHJlc3MgTWV0YWRhdGEgVGFibGUgKFBBTVQpIGlzIG1lbW9yeSB0aGF0IHRoZSBURFggbW9kdWxlIG5lZWRzXG4mIzQzO3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcbiYjNDM7dG8gdGhlIFREWCBtb2R1bGUgZm9yIGl0cyBleGNsdXNpdmUgdXNlLiBGb3Igbm9ybWFsIFBBTVQsIHRoaXMgaXMgaW5zdGFsbGVkXG4mIzQzO3doZW4gdGhlIFREWCBtb2R1bGUgaXMgZmlyc3QgbG9hZGVkIGFuZCBjb21lcyB0byBhYm91dCAwLjQlIG9mIHN5c3RlbSBtZW1vcnkuXG4mIzQzO1xuJiM0MztEeW5hbWljIFBBTVQgaXMgYSBURFggbW9kdWxlIGZlYXR1cmUgdGhhdCBhbGxvd3MgVk1NIHRvIGFsbG9jYXRlIHBhcnQgb2YgdGhlXG4mIzQzO1BBTVQgYXMgbmVlZGVkICh0aGUgcGFydHMgZm9yIHRyYWNraW5nIDRLQiBzaXplIHBhZ2VzKS4gVGhlIG90aGVyIHBhZ2Ugc2l6ZXNcbiYjNDM7KDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxuJiM0Mztpbml0aWFsaXphdGlvbi4gVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgVERYIHVzZXMgd2hpbGUgVERzIGFyZVxuJiM0Mztub3QgaW4gdXNlLlxuJiM0MztcbiYjNDM7V2hlbiBEeW5hbWljIFBBTVQgaXMgaW4gdXNlLCBkbWVzZyBzaG93cyBpdCBsaWtlOjpcbiYjNDM7XG4mIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IDEwMDkyIEtCIGFsbG9jYXRlZCBmb3IgUEFNVFxuJiM0MzsgIFsuLl0gdmlydC90ZHg6IFREWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcbiYjNDM7XG4mIzQzO0R5bmFtaWMgUEFNVCBpcyBvbmx5IGVuYWJsZWQgd2hlbiBzdXBwb3J0ZWQgYW5kIHRoZSBgYHRkeF9kcGFtdD1gYCBrZXJuZWxcbiYjNDM7cGFyYW1ldGVyIGlzIHNldCB0byBcJiMzNDtvblwmIzM0Oy4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXG4mIzQzO2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcbiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuJiM0MztpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXG4mIzQzO2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxuJiM0MztEeW5hbWljIFBBTVQuXG4mIzQzO1xuIFREWCBJbnRlcmFjdGlvbiB0byBPdGhlciBLZXJuZWwgQ29tcG9uZW50c1xuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5pbmRleCA4M2RjNTA4NjEzOGIzLi41ODg1NjNkZmU4OGQ1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuQEAgLTk4LDYgJiM0Mzs5OCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApXG4gS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKVxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE5MjIsNiAmIzQzOzE5MjIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0LyogVXBkYXRlIGV4dGVybmFsIHBhZ2UgdGFibGVzIGZvciBwYWdlIHRhYmxlIGFib3V0IHRvIGJlIGZyZWVkLiAqL1xuIFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcbiBcbiYjNDM7XHRpbnQgKCp0b3B1cF9leHRlcm5hbF9jYWNoZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpO1xuIFxuIFx0Ym9vbCAoKmhhc193YmludmRfZXhpdCkodm9pZCk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuaW5kZXggODllOTdkNTc2MWQ4OS4uNzkxMDkwMWE3YmEyMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuQEAgLTM2LDYgJiM0MzszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuJiM0MzsjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXHRCSVRfVUxMKDM2KVxuIFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xuIFxuQEAgLTExOCwxMiAmIzQzOzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZlxuIFx0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9URF9QUkVTRVJWSU5HO1xuIH1cbiBcbiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuJiM0MztcbiYjNDM7LyogU2ltcGxlIHN0cnVjdHVyZSBmb3IgcHJlLWFsbG9jYXRpbmcgRHluYW1pYyBQQU1UIHBhZ2VzIG91dHNpZGUgb2Ygc3BpbmxvY2tzLiAqL1xuJiM0MztzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgcGFnZV9saXN0O1xuJiM0MztcdGludCBjbnQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuJiM0Mzt7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbiYjNDM7XHRjYWNoZS1cdTAwM2VjbnQgPSAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4mIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7XG4mIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pO1xuJiM0MztcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuJiM0MzsvKiBOdW1iZXIgb2YgUEFNVCBwYWdlcyB0byBiZSBwcm92aWRlZCB0byBURFggbW9kdWxlIHBlciAyTUIgcmVnaW9uIG9mIFBBICovXG4mIzQzOyNkZWZpbmUgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UIDJcbiYjNDM7XG4mIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIge1xuIFx0dTE2IHBhbXRfNGtfZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XG4gXHR1MTYgcGFtdF8xZ19lbnRyeV9zaXplO1xuJiM0MztcbiYjNDM7XHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqL1xuJiM0MztcdHU4ICBwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4gfTtcbiBcbiBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkX2N0cmwge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5pbmRleCA2NmU2OWQyYTQxYjNjLi4yYTYyOGI4MzA0NDA5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuY1xuQEAgLTYxNCw2ICYjNDM7NjE0LDEwIEBAIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIG1heWJlX2luZGlyZWN0KVxuIFx0XHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4gXHRcdGlmIChyKVxuIFx0XHRcdHJldHVybiByO1xuJiM0MztcbiYjNDM7XHRcdHIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfc2hhZG93X3BhZ2VfY2FjaGUsXG4gXHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDU0NWIwM2Q5ZDEwYjguLjA5NTczMTEyNTQwZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSlcbiBcdGlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdF9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGN0cmxfcGFnZSk7XG4gfVxuIFxuIHN0cnVjdCB0ZHhfZmx1c2hfdnBfYXJnIHtcbkBAIC01ODksNyAmIzQzOzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcbiBcbi1cdF9fZnJlZV9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIH1cbiBcbkBAIC02ODEsNiAmIzQzOzY4MSw4IEBAIGludCB0ZHhfdmNwdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXHUwMDNla3ZtKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0dGR4X2luaXRfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4mIzQzO1xuIFx0ZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5ndWVzdF9mcHUpO1xuIFx0dmNwdS1cdTAwM2VhcmNoLmFwaWMtXHUwMDNlZ3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dGR4LVx1MDAzZXZ0LnBpX3dha2V1cF9saXN0KTtcbkBAIC04NjYsNiAmIzQzOzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRzdHJ1Y3QgdmNwdV90ZHggKnRkeCA9IHRvX3RkeCh2Y3B1KTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXHUwMDI2dGR4LVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcbiBcdGlmICh2Y3B1LVx1MDAzZWNwdSAhPSAtMSkge1xuIFx0XHRLVk1fQlVHX09OKHRkeC1cdTAwM2VzdGF0ZSA9PSBWQ1BVX1REX1NUQVRFX0lOSVRJQUxJWkVELCB2Y3B1LVx1MDAzZWt2bSk7XG4gXHRcdHRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7XG5AQCAtMTYyMSw2ICYjNDM7MTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcbiBcdHRkX3ZtY3Nfd3JpdGU2NCh0b190ZHgodmNwdSksIFNIQVJFRF9FUFRfUE9JTlRFUiwgcm9vdF9ocGEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXG4mIzQzO1x0ICogcG9zc2libGUgNEtCIHByaXZhdGUgbWFwcGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtaW5fbnJfc3B0cyAmIzQzOz0gLTEgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdCAgICBrdm1fcGZuX3QgcGZuKVxuIHtcbkBAIC0xNjc5LDE2ICYjNDM7MTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRcdFx0ICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRncGFfdCBncGEgPSBnZm5fdG9fZ3BhKGdmbik7XG4gXHR1NjQgZXJyLCBlbnRyeSwgbGV2ZWxfc3RhdGU7XG4gXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XG4gXHRpZiAoIXNlcHRfcHQpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwYWdlX3RvX3BmbihzZXB0X3B0KSwgXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUpO1xuJiM0MztcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuIFx0ZXJyID0gdGRoX21lbV9zZXB0X2FkZChcdTAwMjZ0b19rdm1fdGR4KGt2bSktXHUwMDNldGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsXG4gXHRcdFx0ICAgICAgIFx1MDAyNmVudHJ5LCBcdTAwMjZsZXZlbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XG4mIzQzO1xuIFx0aWYgKHVubGlrZWx5KHRkeF9vcGVyYW5kX2J1c3koZXJyKSkpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG5AQCAtMTcwMSw4ICYjNDM7MTcyOCwxMyBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdFx0ICB1NjQgbmV3X3NwdGUpXG4ge1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcbiBcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTztcbiBcbiBcdC8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi9cbiBcdGlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKVxuQEAgLTE3MTAsNiAmIzQzOzE3NDIsMTAgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVcbiBcbiBcdFdBUk5fT05fT05DRSgobmV3X3NwdGUgXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xuIFxuJiM0MztcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbiYjNDM7XHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdC8qXG4gXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuIFx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbkBAIC0xNzIyLDEwICYjNDM7MTc1OCwxNSBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxuIFx0ICogSWYgdGhlIFREIGlzbiYjMzk7dCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xuIFx0ICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC5cbiBcdCAqL1xuLVx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXHUwMDNlc3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKVxuLVx0XHRyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0aWYgKGxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hdWcoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0dGR4X3BhbXRfcHV0KHBmbik7XG4gXG4tXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLypcbkBAIC0xODIyLDYgJiM0MzsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xuJiM0MztcdHRkeF9wYW10X3B1dChwZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE4NjUsNiAmIzQzOzE5MDcsOCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIHU2NCBvbGRfc3B0ZSxcbiAgKi9cbiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApXG4ge1xuJiM0MztcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEtWTSBkb2VzbiYjMzk7dCAoeWV0KSB6YXAgcGFnZSB0YWJsZSBwYWdlcyBpbiBtaXJyb3IgcGFnZSB0YWJsZSB3aGlsZVxuIFx0ICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlXG5AQCAtMTg3OCwxNSAmIzQzOzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxuIFx0ICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS5cbiBcdCAqL1xuIFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XG4tXHQgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXG4mIzQzO1x0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0Lypcbi1cdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XG4tXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xuLVx0ICogcmVhZGVycy5cbiYjNDM7XHQgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnRcbiYjNDM7XHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxuJiM0MztcdCAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuXG4gXHQgKi9cbi1cdGZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuJiM0MztcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcbiBvdXQ6XG4gXHRzcC1cdTAwM2VleHRlcm5hbF9zcHQgPSBOVUxMO1xuIH1cbkBAIC0yNDU5LDcgJiM0MzsyNTAzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFxuIFx0cmV0ID0gLUVOT01FTTtcbiBcbi1cdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0aWYgKCF0ZHJfcGFnZSlcbiBcdFx0Z290byBmcmVlX2hraWQ7XG4gXG5AQCAtMjQ3Miw3ICYjNDM7MjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiBcdFx0Z290byBmcmVlX3RkcjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRcdHRkY3NfcGFnZXNbaV0gPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRcdGlmICghdGRjc19wYWdlc1tpXSlcbiBcdFx0XHRnb3RvIGZyZWVfdGRjcztcbiBcdH1cbkBAIC0yNTkwLDEwICYjNDM7MjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiB0ZWFyZG93bjpcbiBcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAmIzM5O2kmIzM5OyAqL1xuIFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKHRkY3NfcGFnZXNbaV0pIHtcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdFx0XHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcbi1cdFx0fVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoIWt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcylcbiBcdFx0a2ZyZWUodGRjc19wYWdlcyk7XG5AQCAtMjYwOCwxNiAmIzQzOzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFx0ZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7XG4gXG4gZnJlZV90ZGNzOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuIFx0a2ZyZWUodGRjc19wYWdlcyk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkY3NfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGRyOlxuLVx0aWYgKHRkcl9wYWdlKVxuLVx0XHRfX2ZyZWVfcGFnZSh0ZHJfcGFnZSk7XG4mIzQzO1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkcl9wYWdlKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UgPSBOVUxMO1xuIFxuIGZyZWVfaGtpZDpcbkBAIC0yOTUxLDcgJiM0MzsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBlcnI7XG4gXG4tXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXBhZ2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBwYWdlO1xuQEAgLTI5NzEsNyAmIzQzOzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHR9XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0XHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXBhZ2UpIHtcbiBcdFx0XHRyZXQgPSAtRU5PTUVNO1xuIFx0XHRcdGdvdG8gZnJlZV90ZGN4O1xuQEAgLTI5OTMsNyAmIzQzOzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRcdFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXG4gXHRcdFx0ICovXG4gXHRcdFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0XHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiYjNDM7XHRcdFx0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHRcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gLUVJTztcbkBAIC0zMDIxLDE2ICYjNDM7MzA2MCwxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXG4gZnJlZV90ZGN4OlxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXG4tXHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuJiM0MztcdFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcbiBcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0fVxuIFx0a2ZyZWUodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMpO1xuIFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXMgPSBOVUxMO1xuIFxuIGZyZWVfdGR2cHI6XG4tXHRpZiAodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKTtcbiYjNDM7XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xuIFx0dGR4LVx1MDAzZXZwLnRkdnByX3BhID0gMDtcbiBcbkBAIC0zNDkzLDYgJiM0MzszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcbiBcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCh0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG4mIzQzO1xuIFx0dnRfeDg2X29wcy5wcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0ID0gdGR4X3Byb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQ7XG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuaW5kZXggYWM4MzIzYTY4YjE2My4uZmQzNjhlM2VlMDYwYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcbkBAIC03Miw2ICYjNDM7NzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHgge1xuIFxuIFx0dTY0IG1hcF9ncGFfbmV4dDtcbiBcdHU2NCBtYXBfZ3BhX2VuZDtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHRkeF9wYW10X2NhY2hlIHBhbXRfY2FjaGU7XG4gfTtcbiBcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbmluZGV4IDQyZGY4ZWE0NjRjNDcuLmRlYzQ1NzA5ZTQ1NGEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuQEAgLTMwLDYgJiM0MzszMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lkci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21zci1pbmRleC5oXHUwMDNlXG5AQCAtNDYsNiAmIzQzOzQ3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7dGR4LmhcJiMzNDtcbiBcbiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuIHN0cnVjdCB0ZHhfbW9kdWxlX3N0YXRlIHtcbiBcdGJvb2wgaW5pdGlhbGl6ZWQ7XG4gXHRib29sIHN5c2luaXRfZG9uZTtcbkBAIC02Myw2ICYjNDM7NjYsMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XG4gXG4gc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXJcbiYjNDM7ICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcbiYjNDM7ICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XG4mIzQzOyAqIGluaXRpYWxpemF0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcbiYjNDM7XG4gLyogQWxsIFREWC11c2FibGUgbWVtb3J5IHJlZ2lvbnMuICBQcm90ZWN0ZWQgYnkgbWVtX2hvdHBsdWdfbG9jay4gKi9cbiBzdGF0aWMgTElTVF9IRUFEKHRkeF9tZW1saXN0KTtcbiBcbkBAIC0yNTIsNiAmIzQzOzI2Myw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XG4gXHQub3BzID0gXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxuIH07XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIFBBTVQgcmVmZXJlbmNlIGNvdW50ZXJzIGZvciBhbGwgcGh5c2ljYWwgbWVtb3J5LlxuJiM0MzsgKlxuJiM0MzsgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgX19pbml0IGludCBpbml0X3BhbXRfcmVmY291bnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xuJiM0MztcdGlmICghcGFtdF9yZWZjb3VudHMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR2ZnJlZShwYW10X3JlZmNvdW50cyk7XG4mIzQzO1x0cGFtdF9yZWZjb3VudHMgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXG4mIzQzO3tcbiYjNDM7XHQvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi9cbiYjNDM7XHR1bnNpZ25lZCBsb25nIGluZGV4ID0gcGZuIFx1MDAzZVx1MDAzZSAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBBZGQgYSBtZW1vcnkgcmVnaW9uIGFzIGEgVERYIG1lbW9yeSBibG9jay4gIFRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmVcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24mIzM5O3RcbkBAIC01MTAsMzUgJiM0Mzs1NTcsMzcgQEAgc3RhdGljIF9faW5pdCBpbnQgZmlsbF9vdXRfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4mIzQzO1x0aW50IGJpdHNfcGVyX2VudHJ5O1xuJiM0MztcbiYjNDM7XHRiaXRzX3Blcl9lbnRyeSA9IHRkeF9zeXNpbmZvLnRkbXIucGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xuJiM0MztcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDYWxjdWxhdGUgUEFNVCBzaXplIGdpdmVuIGEgVERNUiBhbmQgYSBwYWdlIHNpemUuICBUaGUgcmV0dXJuZWRcbiAgKiBQQU1UIHNpemUgaXMgYWx3YXlzIGFsaWduZWQgdXAgdG8gNEsgcGFnZSBib3VuZGFyeS5cbiAgKi9cbi1zdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeixcbi1cdFx0XHRcdFx0ICAgICB1MTYgcGFtdF9lbnRyeV9zaXplKVxuJiM0MztzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLCBpbnQgcGdzeilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbiYjNDM7XHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcbiYjNDM7XHRjb25zdCB1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4mIzQzO1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcbiYjNDM7XHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxuJiM0MztcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzFnX2VudHJ5X3NpemUsXG4mIzQzO1x0fTtcbiBcbi1cdHN3aXRjaCAocGdzeikge1xuLVx0Y2FzZSBURFhfUFNfNEs6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIFREWF9QU18yTTpcbi1cdFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSBQTURfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMUc6XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUFVEX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdFdBUk5fT05fT05DRSgxKTtcbi1cdFx0cmV0dXJuIDA7XG4tXHR9XG4mIzQzO1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSB0ZHhfcGdfc2l6ZV9zaGlmdFtwZ3N6XTtcbiYjNDM7XHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplW3Bnc3pdO1xuIFxuLVx0cGFtdF9zeiA9IG5yX3BhbXRfZW50cmllcyAqIHBhbXRfZW50cnlfc2l6ZTtcbiBcdC8qIFREWCByZXF1aXJlcyBQQU1UIHNpemUgbXVzdCBiZSA0SyBhbGlnbmVkICovXG4tXHRwYW10X3N6ID0gQUxJR04ocGFtdF9zeiwgUEFHRV9TSVpFKTtcbi1cbi1cdHJldHVybiBwYW10X3N6O1xuJiM0MztcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuIH1cbiBcbiAvKlxuQEAgLTU3NiwxNSAmIzQzOzYyNSwxMSBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX2dldF9uaWQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc1xuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXG4gICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4tXHRcdFx0XHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X2Jhc2VbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgcGFtdF9zaXplW1REWF9QU19OUl07XG4tXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9iYXNlO1xuIFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfc2l6ZTtcbiBcdHN0cnVjdCBwYWdlICpwYW10O1xuLVx0aW50IHBnc3osIG5pZDtcbiYjNDM7XHRpbnQgbmlkO1xuIFxuIFx0bmlkID0gdGRtcl9nZXRfbmlkKHRkbXIsIHRtYl9saXN0KTtcbiBcbkBAIC01OTIsMTMgJiM0Mzs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcbiBcdCAqIGFuZCB0aGUgdG90YWwgUEFNVCBzaXplLlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeiYjNDM7JiM0MzspIHtcbi1cdFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxuLVx0XHRcdFx0XHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xuLVx0XHR0ZG1yX3BhbXRfc2l6ZSAmIzQzOz0gcGFtdF9zaXplW3Bnc3pdO1xuJiM0MztcdHRkbXItXHUwMDNlcGFtdF8xZ19zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMUcpO1xuJiM0MztcdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpIHtcbiYjNDM7XHRcdC8qIFdpdGggRHluYW1pYyBQQU1ULCBQQU1UXzRLIGlzIHJlcGxhY2VkIHdpdGggYSBiaXRtYXAgKi9cbiYjNDM7XHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfNEspO1xuIFx0fVxuIFxuJiM0MztcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cdTAwM2VwYW10XzRrX3NpemUgJiM0MzsgdGRtci1cdTAwM2VwYW10XzJtX3NpemUgJiM0MzsgdGRtci1cdTAwM2VwYW10XzFnX3NpemU7XG4mIzQzO1xuIFx0LypcbiBcdCAqIEFsbG9jYXRlIG9uZSBjaHVuayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciBhbGxcbiBcdCAqIFBBTVRzLiAgVGhpcyBoZWxwcyBtaW5pbWl6ZSB0aGUgUEFNVCYjMzk7cyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcbkBAIC02MDYsMjUgJiM0Mzs2NTYsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICovXG4gXHRwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxuIFx0XHRcdG5pZCwgXHUwMDI2bm9kZV9vbmxpbmVfbWFwKTtcbi1cdGlmICghcGFtdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHQvKlxuLVx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXG4tXHQgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS5cbiYjNDM7XHQgKiB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSBpcyBzdGlsbCB6ZXJvIHNvIHRoZSBlcnJvclxuJiM0MztcdCAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC5cbiBcdCAqL1xuLVx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbi1cdGZvciAocGdzeiA9IFREWF9QU180SzsgcGdzeiBcdTAwM2MgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykge1xuLVx0XHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcbi1cdFx0dGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTtcbi1cdH1cbiYjNDM7XHRpZiAoIXBhbXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107XG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzJNXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMUddO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzFHXTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTtcbiYjNDM7XHR0ZG1yLVx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXHUwMDNlcGFtdF80a19iYXNlICYjNDM7IHRkbXItXHUwMDNlcGFtdF80a19zaXplO1xuJiM0MztcdHRkbXItXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgJiM0MzsgdGRtci1cdTAwM2VwYW10XzJtX3NpemU7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjU1LDEwICYjNDM7Njk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHR0ZG1yX2dldF9wYW10KHRkbXIsIFx1MDAyNnBhbXRfYmFzZSwgXHUwMDI2cGFtdF9zaXplKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJiMzOTt0IGJlZW4gYWxsb2NhdGVkIGZvciB0aGlzIFRETVIgKi9cbi1cdGlmICghcGFtdF9zaXplKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKVxuJiM0MztcdGlmICghcGFtdF9iYXNlKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwYW10X2Z1bmMocGFtdF9iYXNlLCBwYW10X3NpemUpO1xuQEAgLTY4NCwxNCAmIzQzOzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbiBcbiAvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIFBBTVRzIGZvciBhbGwgVERNUnMgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0XHR1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxuIHtcbiBcdGludCBpLCByZXQgPSAwO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdGRtcl9saXN0LVx1MDAzZW5yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXG4tXHRcdFx0XHRwYW10X2VudHJ5X3NpemUpO1xuJiM0MztcdFx0cmV0ID0gdGRtcl9zZXRfdXBfcGFtdCh0ZG1yX2VudHJ5KHRkbXJfbGlzdCwgaSksIHRtYl9saXN0KTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIGVycjtcbiBcdH1cbkBAIC05NjgsMTggJiM0MzsxMDA1LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdFx0XHRcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuIHtcbi1cdHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMm1fZW50cnlfc2l6ZSxcbi1cdFx0c3lzaW5mb190ZG1yLVx1MDAzZXBhbXRfMWdfZW50cnlfc2l6ZSxcbi1cdH07XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QsIHBhbXRfZW50cnlfc2l6ZSk7XG4mIzQzO1x0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05OTgsNiAmIzQzOzEwMzAsOCBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVRcdEJJVCgxNilcbiYjNDM7XG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgICAgdTY0IGdsb2JhbF9rZXlpZClcbiB7XG5AQCAtMTAyNiw2ICYjNDM7MTA2MCwxMiBAQCBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcbiBcdGFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTtcbiBcdGFyZ3MucmR4ID0gdGRtcl9saXN0LVx1MDAzZW5yX2NvbnN1bWVkX3RkbXJzO1xuIFx0YXJncy5yOCA9IGdsb2JhbF9rZXlpZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4mIzQzO1x0XHRwcl9pbmZvKFwmIzM0O0VuYWJsZSBEeW5hbWljIFBBTVRcXG5cJiMzNDspO1xuJiM0MztcdFx0YXJncy5yOCB8PSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCBcdTAwMjZhcmdzKTtcbiBcbiBcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xuQEAgLTExNjcsMTAgJiM0MzsxMjA3LDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuIFx0ICovXG4gXHRnZXRfb25saW5lX21lbXMoKTtcbiBcbi1cdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7XHRyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIG91dF9wdXRfdGR4bWVtO1xuIFxuJiM0MztcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wYW10X3JlZmNvdW50cztcbiYjNDM7XG4gXHQvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqL1xuIFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QsIFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xuIFx0aWYgKHJldClcbkBAIC0xMjIwLDYgJiM0MzsxMjY0LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHRmcmVlX3RkbXJfbGlzdChcdTAwMjZ0ZHhfdGRtcl9saXN0KTtcbiBlcnJfZnJlZV90ZHhtZW06XG4gXHRmcmVlX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbiYjNDM7ZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM6XG4mIzQzO1x0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwMyw2ICYjNDM7MjA0OSwyODggQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbilcbiB9XG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XG4gXG4mIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2luZm8tXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcdTAwMjYgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHRkeF9lbmFibGVfZHBhbXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiYjNDM7XG4mIzQzO1x0cGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpO1xuJiM0MztcdGlmIChwYWdlKSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4mIzQzO1x0XHRjYWNoZS1cdTAwM2VjbnQtLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdGlmIChjYWNoZSlcbiYjNDM7XHRcdHJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdGludCBpLCBqO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRwYW10X3BhZ2VzW2ldID0gYWxsb2NfZHBhbXRfcGFnZShjYWNoZSk7XG4mIzQzO1x0XHRpZiAoIXBhbXRfcGFnZXNbaV0pXG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaiYjNDM7JiM0MzspXG4mIzQzO1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FTk9NRU07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGZyZWVfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xuJiM0MztcdFx0ICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2ldKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxuJiM0MzsgKiBhIGdpdmVuIDRLQiBwYWdlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbiYjNDM7e1xuJiM0MztcdC8qIEFyZyB2YWx1ZSB3aWxsIHNwZWNpZnkgYSAyTUIgcmVnaW9uIG9mIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuICovXG4mIzQzO1x0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBNRF9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGhwYV8ybWIgfCBURFhfUFNfMk07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEFkZCBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4mIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4mIzQzO1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4mIzQzO1x0XHQucmR4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMF0pLFxuJiM0MztcdFx0LnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZWFtY2FsbChUREhfUEhZTUVNX1BBTVRfQURELCBcdTAwMjZhcmdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cbiYjNDM7c3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHtcbiYjNDM7XHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbiYjNDM7XHR9O1xuJiM0MztcdHU2NCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcdTAwMjZhcmdzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBQQU1UIHBhZ2VzIG91dCBvZiB0aGUgc3RydWN0IHBlciB0aGUgVERYIEFCSSAqL1xuJiM0MztcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuJiM0MztcdHBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqL1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBhbXRfbG9jayk7XG4mIzQzO1xuJiM0MzsvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4mIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4mIzQzO1x0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XG4mIzQzO1x0dTY0IHRkeF9zdGF0dXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBwYW10IHBhZ2UgaXMgYWxyZWFkeSBhZGRlZCAoaS5lLiByZWZjb3VudCBcdTAwM2U9IDEpLFxuJiM0MztcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGFtdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cbiYjNDM7XHQgKiBhdG9taWNhbGx5IGhhbmRsZSB0aGUgMS1cdTAwM2UwIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm9cbiYjNDM7XHQgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC1cdTAwM2UxLiBSZWNoZWNrIHVuZGVyIHRoZVxuJiM0MztcdCAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLVx1MDAzZTFcbiYjNDM7XHQgKiB0cmFuc2l0aW9uIGFmdGVyIGJvdGggc2F3IGF0b21pY19pbmNfbm90X3plcm8oKSBmYWlsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlPO1xuJiM0MztcdFx0Z290byBvdXRfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHJlZmNvdW50IGlzIHplcm8sIGFuZCB0aGlzIGxvY2tlZCBwYXRoIGlzIHRoZVxuJiM0MztcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cdTAwM2UxLlxuJiM0MztcdCAqL1xuJiM0MztcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGFtdF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9mcmVlOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO1x0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpO1xuJiM0MztcbiYjNDM7LyogRHJvcCBQQU1UIHJlZmNvdW50IGZvciB0aGUgZ2l2ZW4gcGZuIGFuZCBmcmVlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4mIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307XG4mIzQzO1x0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XG4mIzQzO1x0dTY0IHRkeF9zdGF0dXM7XG4mIzQzO1xuJiM0MztcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDEgcmVmZXJlbmNlIG9uIHRoZSBwYW10IHBhZ2UsIGRvbiYjMzk7dFxuJiM0MztcdCAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2socGFtdF9yZWZjb3VudCwgXHUwMDI2cGFtdF9sb2NrKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXG4mIzQzO1x0ICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhc1xuJiM0MztcdCAqIHRoZXJlIGlzIG5vIHJpc2sgb2YgZGF0YSBjb3JydXB0aW9uLCBidXQgZG8geWVsbCBsb3VkbHkgYXNcbiYjNDM7XHQgKiBmYWlsdXJlIGluZGljYXRlcyBhIGtlcm5lbCBidWcsIG1lbW9yeSBpcyBiZWluZyBsZWFrZWQsIGFuZFxuJiM0MztcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLFxuJiM0MztcdFx0ICogYnV0IHRoZSBQQU1UIGVudHJ5IHN0aWxsIGV4aXN0cyBzaW5jZSBSRU1PVkUgZmFpbGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xuJiM0MztcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGFtdF9sb2NrKTtcbiYjNDM7XHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7XG4mIzQzO1xuJiM0Mzt2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoKHBhZ2UgPSB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKSkpXG4mIzQzO1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7XG4mIzQzO1xuJiM0MztpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpXG4mIzQzO3tcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGNhY2hlLVx1MDAzZWNudCBcdTAwM2MgbnBhZ2VzKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlbHJ1LCBcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuJiM0MztcdFx0Y2FjaGUtXHUwMDNlY250JiM0MzsmIzQzOztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfdG9wdXBfcGFtdF9jYWNoZSk7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm4gYSBwYWdlIHRoYXQgY2FuIGJlIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgXCYjMzQ7Y29udHJvbFwmIzM0O1xuJiM0MzsgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcbiYjNDM7ICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBQQU1UIHRyYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlO1xuJiM0MztcbiYjNDM7XHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuJiM0MztcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBwYWdlO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxuJiM0MzsgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwYWdlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuJiM0MztcdF9fZnJlZV9wYWdlKHBhZ2UpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXHUwMDI2dGR4X2VuYWJsZV9kcGFtdCkgPT0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19zZXR1cChcJiMzNDt0ZHhfZHBhbXQ9XCYjMzQ7LCB0ZHhfZHBhbXRfc2V0dXApO1xuJiM0MztcbiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9O1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaCBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5AQCAtNDgsNiAmIzQzOzQ4LDggQEBcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXHRcdFx0NDVcbiAjZGVmaW5lIFRESF9TWVNfU0hVVERPV05cdFx0NTJcbiAjZGVmaW5lIFRESF9TWVNfVVBEQVRFXHRcdFx0NTNcbiYjNDM7I2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4mIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVx0XHQ1OVxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXHRcdFx0NjlcbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5pbmRleCBlNDljMzAwZjIzZDQzLi45M2IxZjI2MjUyYzYzIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLypcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuJiM0MzsgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuICAqXG4gICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb25cbiAgKiBvZiBTRUFNQ0FMTCB3cmFwcGVyIHByaW1pdGl2ZSB3aGljaCByZWFkcyBnbG9iYWwgbWV0YWRhdGEuXG5AQCAtMzMsNiAmIzQzOzMzLDE4IEBAIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fZmVhdHVyZXMoc3RydWN0IHRkeF9zeXNfaW5mb19mZWF0dXJlcyAqc3lzaW5mXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7c3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1NjQgdmFsO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKCFyZXQpXG4mIzQzO1x0XHRzeXNpbmZvX3RkbXItXHUwMDNlcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzID0gdmFsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBfX2luaXQgaW50IGdldF90ZHhfc3lzX2luZm9fdGRtcihzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IER5bmFtaWMgUEFNVCwgc29cbiYjNDM7XHQgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCYjMzk7cyBub3Qgc3VwcG9ydGVkLiBEb24mIzM5O3QgdHJ5XG4mIzQzO1x0ICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVRcbiYjNDM7XHQgKiBidXQgZG9uJiMzOTt0IGV4cG9zZSB0aGUgbWV0YWRhdGEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoc3lzaW5mbykpXG4mIzQzO1x0XHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoXHUwMDI2c3lzaW5mby1cdTAwM2V0ZG1yKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmMDBlZmM0OTEzMTg4MWYxNmE1YjE1ODBhZGYzZjdjNzk0MjYzMTQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwMzowMDo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTc1MTIsNiAmIzQzOzc1MTIsMTYgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAogCXRkZng9CQlbSFcsRFJNXQogCiYjNDM7CXRkeF9kcGFtdD0KJiM0MzsJCQlbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVQKJiM0MzsJCQl0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuCiYjNDM7CiYjNDM7CQkJVmFsaWQgcGFyYW1ldGVyczogJiMzNDtvbiYjMzQ7LCAmIzM0O29mZiYjMzQ7CiYjNDM7CQkJRGVmYXVsdDogJiMzNDtvZmYmIzM0OwomIzQzOwomIzQzOwkJCUZvciBkZXRhaWxzIHNlZToKJiM0MzsJCQlEb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKJiM0MzsKIAl0ZXN0X3N1c3BlbmQ9CVtTVVNQRU5EXQogCQkJRm9ybWF0OiB7ICYjMzQ7bWVtJiMzNDsgfCAmIzM0O3N0YW5kYnkmIzM0OyB8ICYjMzQ7ZnJlZXplJiMzNDsgfVssTl0KIAkJCVNwZWNpZnkgJiMzNDttZW0mIzM0OyAoZm9yIFN1c3BlbmQtdG8tUkFNKSBvciAmIzM0O3N0YW5kYnkmIzM0OyAoZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QKaW5kZXggMzMwMzQ5OWFkNGM2Zi4uYTFjMjMwOTIzMDU4MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdApAQCAtMjAwLDYgJiM0MzsyMDAsMzQgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlCiBjaGFuZ2VzIGFmdGVyIGFuIHVwZGF0ZS4gQnkgY29udHJhc3QsIFRFRV9UQ0JfU1ZOIHJlZmxlY3RzIHRoZSBUQ0IgYXQgVEQKIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuCiAKJiM0MztEeW5hbWljIFBBTVQKJiM0MzstLS0tLS0tLS0tLS0KJiM0MzsKJiM0MztQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZW1vcnkgdGhhdCB0aGUgVERYIG1vZHVsZSBuZWVkcwomIzQzO3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWQKJiM0Mzt0byB0aGUgVERYIG1vZHVsZSBmb3IgaXRzIGV4Y2x1c2l2ZSB1c2UuIEZvciBub3JtYWwgUEFNVCwgdGhpcyBpcyBpbnN0YWxsZWQKJiM0Mzt3aGVuIHRoZSBURFggbW9kdWxlIGlzIGZpcnN0IGxvYWRlZCBhbmQgY29tZXMgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0gbWVtb3J5LgomIzQzOwomIzQzO0R5bmFtaWMgUEFNVCBpcyBhIFREWCBtb2R1bGUgZmVhdHVyZSB0aGF0IGFsbG93cyBWTU0gdG8gYWxsb2NhdGUgcGFydCBvZiB0aGUKJiM0MztQQU1UIGFzIG5lZWRlZCAodGhlIHBhcnRzIGZvciB0cmFja2luZyA0S0Igc2l6ZSBwYWdlcykuIFRoZSBvdGhlciBwYWdlIHNpemVzCiYjNDM7KDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZQomIzQzO2luaXRpYWxpemF0aW9uLiBUaGlzIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBURFggdXNlcyB3aGlsZSBURHMgYXJlCiYjNDM7bm90IGluIHVzZS4KJiM0MzsKJiM0MztXaGVuIER5bmFtaWMgUEFNVCBpcyBpbiB1c2UsIGRtZXNnIHNob3dzIGl0IGxpa2U6OgomIzQzOwomIzQzOyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVAomIzQzOyAgWy4uXSB2aXJ0L3RkeDogMTAwOTIgS0IgYWxsb2NhdGVkIGZvciBQQU1UCiYjNDM7ICBbLi5dIHZpcnQvdGR4OiBURFgtTW9kdWxlIGluaXRpYWxpemVkCiYjNDM7CiYjNDM7RHluYW1pYyBQQU1UIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHN1cHBvcnRlZCBhbmQgdGhlIGBgdGR4X2RwYW10PWBgIGtlcm5lbAomIzQzO3BhcmFtZXRlciBpcyBzZXQgdG8gJiMzNDtvbiYjMzQ7LiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGUKJiM0MztpbnRlcm5hbCBkZXRhaWxzIHByZXZlbnQgRHluYW1pYyBQQU1UIGZyb20gd29ya2luZyBvbiBhbGwga2V5aWQgcGFydGl0aW9uaW5nCiYjNDM7Y29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpbgomIzQzO2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG8KJiM0MztkZWZhdWx0IG9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY29uc3VsdCB0aGUgSW50ZWwgVERYIGRvY3VtZW50YXRpb24gYWJvdXQKJiM0MztEeW5hbWljIFBBTVQuCiYjNDM7CiBURFggSW50ZXJhY3Rpb24gdG8gT3RoZXIgS2VybmVsIENvbXBvbmVudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAppbmRleCA4M2RjNTA4NjEzOGIzLi41ODg1NjNkZmU4OGQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKQEAgLTk4LDYgJiM0Mzs5OCw3IEBAIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0ZHBfaGFzX3NtZXApCiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZCkKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSkKIEtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRvcHVwX2V4dGVybmFsX2NhY2hlKQogS1ZNX1g4Nl9PUChoYXNfd2JpbnZkX2V4aXQpCiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KQogS1ZNX1g4Nl9PUChnZXRfbDJfdHNjX211bHRpcGxpZXIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE5MjIsNiAmIzQzOzE5MjIsNyBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgewogCS8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi8KIAl2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApOwogCiYjNDM7CWludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7CiAKIAlib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAppbmRleCA4OWU5N2Q1NzYxZDg5Li43OTEwOTAxYTdiYTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaApAQCAtMzYsNiAmIzQzOzM2LDcgQEAKIC8qIEJpdCBkZWZpbml0aW9ucyBvZiBURFhfRkVBVFVSRVMwIG1ldGFkYXRhIGZpZWxkICovCiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORwlCSVRfVUxMKDEpCiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfTk9fUkJQX01PRAlCSVRfVUxMKDE4KQomIzQzOyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQJQklUX1VMTCgzNikKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKQEAgLTExOCwxMiAmIzQzOzExOSwzNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdGR4X3N1cHBvcnRzX3J1bnRpbWVfdXBkYXRlKGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZgogCXJldHVybiBzeXNpbmZvLSZndDtmZWF0dXJlcy50ZHhfZmVhdHVyZXMwICZhbXA7IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORzsKIH0KIAomIzQzO2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKTsKJiM0MzsKJiM0MzsvKiBTaW1wbGUgc3RydWN0dXJlIGZvciBwcmUtYWxsb2NhdGluZyBEeW5hbWljIFBBTVQgcGFnZXMgb3V0c2lkZSBvZiBzcGlubG9ja3MuICovCiYjNDM7c3RydWN0IHRkeF9wYW10X2NhY2hlIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7CiYjNDM7CWludCBjbnQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtjYWNoZS0mZ3Q7cGFnZV9saXN0KTsKJiM0MzsJY2FjaGUtJmd0O2NudCA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTsKJiM0MztpbnQgdGR4X3RvcHVwX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSwgdW5zaWduZWQgbG9uZyBucGFnZXMpOwomIzQzO2ludCB0ZHhfcGFtdF9nZXQoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSk7CiYjNDM7dm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbik7CiYjNDM7CiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpOwogdTMyIHRkeF9nZXRfbnJfZ3Vlc3Rfa2V5aWRzKHZvaWQpOwogdm9pZCB0ZHhfZ3Vlc3Rfa2V5aWRfZnJlZSh1bnNpZ25lZCBpbnQga2V5aWQpOwogCiB2b2lkIHRkeF9xdWlya19yZXNldF9wYWRkcih1bnNpZ25lZCBsb25nIGJhc2UsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKJiM0MzsvKiBOdW1iZXIgb2YgUEFNVCBwYWdlcyB0byBiZSBwcm92aWRlZCB0byBURFggbW9kdWxlIHBlciAyTUIgcmVnaW9uIG9mIFBBICovCiYjNDM7I2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMgomIzQzOwomIzQzO3N0cnVjdCBwYWdlICp0ZHhfYWxsb2NfY29udHJvbF9wYWdlKHZvaWQpOwomIzQzO3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKJiM0MzsKIHN0cnVjdCB0ZHhfdGQgewogCS8qIFREIHJvb3Qgc3RydWN0dXJlOiAqLwogCXN0cnVjdCBwYWdlICp0ZHJfcGFnZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaAppbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oCkBAIC0yMSw2ICYjNDM7MjEsOSBAQCBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgewogCXUxNiBwYW10XzRrX2VudHJ5X3NpemU7CiAJdTE2IHBhbXRfMm1fZW50cnlfc2l6ZTsKIAl1MTYgcGFtdF8xZ19lbnRyeV9zaXplOwomIzQzOwomIzQzOwkvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqLwomIzQzOwl1OCAgcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzOwogfTsKIAogc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jCmluZGV4IDY2ZTY5ZDJhNDFiM2MuLjJhNjI4YjgzMDQ0MDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL21tdS9tbXUuYwpAQCAtNjE0LDYgJiM0Mzs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpCiAJCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKJiM0MzsKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwodG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHZjcHUsIFBUNjRfUk9PVF9NQVhfTEVWRUwpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJcmV0dXJuIHI7CiAJfQogCXIgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZSgmYW1wO3ZjcHUtJmd0O2FyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLAogCQkJCSAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jCmluZGV4IDU0NWIwM2Q5ZDEwYjguLjA5NTczMTEyNTQwZTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3ZteC90ZHguYwpAQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKmN0cmxfcGFnZSkKIAlpZiAodGR4X3JlY2xhaW1fcGFnZShjdHJsX3BhZ2UpKQogCQlyZXR1cm47CiAKLQlfX2ZyZWVfcGFnZShjdHJsX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2UoY3RybF9wYWdlKTsKIH0KIAogc3RydWN0IHRkeF9mbHVzaF92cF9hcmcgewpAQCAtNTg5LDcgJiM0Mzs1ODksNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV90ZF9jb250cm9sX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSkKIAogCXRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMoa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpOwogCi0JX19mcmVlX3BhZ2Uoa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC0mZ3Q7dGQudGRyX3BhZ2UpOwogCWt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlID0gTlVMTDsKIH0KIApAQCAtNjgxLDYgJiM0Mzs2ODEsOCBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAlpZiAoIWlycWNoaXBfc3BsaXQodmNwdS0mZ3Q7a3ZtKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJdGR4X2luaXRfcGFtdF9jYWNoZSgmYW1wO3RkeC0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CiAJZnBzdGF0ZV9zZXRfY29uZmlkZW50aWFsKCZhbXA7dmNwdS0mZ3Q7YXJjaC5ndWVzdF9mcHUpOwogCXZjcHUtJmd0O2FyY2guYXBpYy0mZ3Q7Z3Vlc3RfYXBpY19wcm90ZWN0ZWQgPSB0cnVlOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dGR4LSZndDt2dC5waV93YWtldXBfbGlzdCk7CkBAIC04NjYsNiAmIzQzOzg2OCw4IEBAIHZvaWQgdGR4X3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJc3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7CiAJaW50IGk7CiAKJiM0MzsJdGR4X2ZyZWVfcGFtdF9jYWNoZSgmYW1wO3RkeC0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CiAJaWYgKHZjcHUtJmd0O2NwdSAhPSAtMSkgewogCQlLVk1fQlVHX09OKHRkeC0mZ3Q7c3RhdGUgPT0gVkNQVV9URF9TVEFURV9JTklUSUFMSVpFRCwgdmNwdS0mZ3Q7a3ZtKTsKIAkJdGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTsKQEAgLTE2MjEsNiAmIzQzOzE2MjUsMTcgQEAgdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpCiAJdGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHRkeF90b3B1cF9leHRlcm5hbF9wYW10X2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhCiYjNDM7CSAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuCiYjNDM7CSAqLwomIzQzOwltaW5fbnJfc3B0cyAmIzQzOz0gLTEgJiM0MzsgMTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRkeF90b3B1cF9wYW10X2NhY2hlKCZhbXA7dG9fdGR4KHZjcHUpLSZndDtwYW10X2NhY2hlLCBtaW5fbnJfc3B0cyk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLAogCQkJICAgIGt2bV9wZm5fdCBwZm4pCiB7CkBAIC0xNjc5LDE2ICYjNDM7MTY5NCwyOCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKnRkeF9zcHRlX3RvX3NlcHRfcHQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sCiAJCQkJICAgICBlbnVtIHBnX2xldmVsIGxldmVsLCB1NjQgbmV3X3NwdGUpCiB7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7CiAJZ3BhX3QgZ3BhID0gZ2ZuX3RvX2dwYShnZm4pOwogCXU2NCBlcnIsIGVudHJ5LCBsZXZlbF9zdGF0ZTsKIAlzdHJ1Y3QgcGFnZSAqc2VwdF9wdDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpCiYjNDM7CQlyZXR1cm4gLUVJTzsKIAogCXNlcHRfcHQgPSB0ZHhfc3B0ZV90b19zZXB0X3B0KGt2bSwgZ2ZuLCBuZXdfc3B0ZSwgbGV2ZWwpOwogCWlmICghc2VwdF9wdCkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJcmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCAmYW1wO3RvX3RkeCh2Y3B1KS0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CWlmIChLVk1fQlVHX09OKHJldCwga3ZtKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJZXJyID0gdGRoX21lbV9zZXB0X2FkZCgmYW1wO3RvX2t2bV90ZHgoa3ZtKS0mZ3Q7dGQsIGdwYSwgbGV2ZWwsIHNlcHRfcHQsCiAJCQkgICAgICAgJmFtcDtlbnRyeSwgJmFtcDtsZXZlbF9zdGF0ZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQl0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4oc2VwdF9wdCkpOwomIzQzOwogCWlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0xNzAxLDggJiM0MzsxNzI4LDEzIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwKIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCwKIAkJCQkgIHU2NCBuZXdfc3B0ZSkKIHsKJiM0MzsJc3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0ga3ZtX2dldF9ydW5uaW5nX3ZjcHUoKTsKIAlzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTsKIAlrdm1fcGZuX3QgcGZuID0gc3B0ZV90b19wZm4obmV3X3NwdGUpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoS1ZNX0JVR19PTighdmNwdSwga3ZtKSkKJiM0MzsJCXJldHVybiAtRUlPOwogCiAJLyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqLwogCWlmIChLVk1fQlVHX09OKGxldmVsICE9IFBHX0xFVkVMXzRLLCBrdm0pKQpAQCAtMTcxMCw2ICYjNDM7MTc0MiwxMCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZQogCiAJV0FSTl9PTl9PTkNFKChuZXdfc3B0ZSAmYW1wOyBWTVhfRVBUX1JXWF9NQVNLKSAhPSBWTVhfRVBUX1JXWF9NQVNLKTsKIAomIzQzOwlyZXQgPSB0ZHhfcGFtdF9nZXQocGZuLCAmYW1wO3RvX3RkeCh2Y3B1KS0mZ3Q7cGFtdF9jYWNoZSk7CiYjNDM7CWlmIChLVk1fQlVHX09OKHJldCwga3ZtKSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiAJLyoKIAkgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKQogCSAqIGJlZm9yZSBrdm1fdGR4LSZndDtzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdApAQCAtMTcyMiwxMCAmIzQzOzE3NTgsMTUgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmUKIAkgKiBJZiB0aGUgVEQgaXNuJiMzOTt0IGZpbmFsaXplZC9ydW5uYWJsZSwgdGhlbiB1c2Vyc3BhY2UgaXMgaW5pdGlhbGl6aW5nCiAJICogdGhlIFZNIGltYWdlIHZpYSBLVk1fVERYX0lOSVRfTUVNX1JFR0lPTjsgQUREIHRoZSBwYWdlIHRvIHRoZSBURC4KIAkgKi8KLQlpZiAodW5saWtlbHkoa3ZtX3RkeC0mZ3Q7c3RhdGUgIT0gVERfU1RBVEVfUlVOTkFCTEUpKQotCQlyZXR1cm4gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CWlmIChsaWtlbHkoa3ZtX3RkeC0mZ3Q7c3RhdGUgPT0gVERfU1RBVEVfUlVOTkFCTEUpKQomIzQzOwkJcmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pOwomIzQzOwomIzQzOwlpZiAocmV0KQomIzQzOwkJdGR4X3BhbXRfcHV0KHBmbik7CiAKLQlyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xODIyLDYgJiM0MzsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCQlyZXR1cm4gLUVJTzsKIAogCXRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpOwomIzQzOwl0ZHhfcGFtdF9wdXQocGZuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTg2NSw2ICYjNDM7MTkwNyw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLAogICovCiBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiB7CiYjNDM7CXN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLSZndDtleHRlcm5hbF9zcHQpOwomIzQzOwogCS8qCiAJICogS1ZNIGRvZXNuJiMzOTt0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlCiAJICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlCkBAIC0xODc4LDE1ICYjNDM7MTkyMiwxNSBAQCBzdGF0aWMgdm9pZCB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApCiAJICogdGhlIHBhZ2UgdG8gcHJldmVudCB0aGUga2VybmVsIGZyb20gYWNjZXNzaW5nIHRoZSBlbmNyeXB0ZWQgcGFnZS4KIAkgKi8KIAlpZiAoS1ZNX0JVR19PTihpc19oa2lkX2Fzc2lnbmVkKHRvX2t2bV90ZHgoa3ZtKSksIGt2bSkgfHwKLQkgICAgdGR4X3JlY2xhaW1fcGFnZSh2aXJ0X3RvX3BhZ2Uoc3AtJmd0O2V4dGVybmFsX3NwdCkpKQomIzQzOwkgICAgdGR4X3JlY2xhaW1fcGFnZShzZXB0X3B0KSkKIAkJZ290byBvdXQ7CiAKIAkvKgotCSAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5Ci0JICogYWZ0ZXIgVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcKLQkgKiByZWFkZXJzLgomIzQzOwkgKiBJbW1lZGlhdGVseSBmcmVlIHRoZSBTLUVQVCBwYWdlIGFzIHRoZSBURFggc3Vic3lzdGVtIGRvZXNuJiMzOTt0IHN1cHBvcnQKJiM0MzsJICogZnJlZWluZyBwYWdlcyBmcm9tIFJDVSBjYWxsYmFja3MsIGFuZCBtb3JlIGltcG9ydGFudGx5IGJlY2F1c2UKJiM0MzsJICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy4KIAkgKi8KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtJmd0O2V4dGVybmFsX3NwdCk7CiYjNDM7CXRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTsKIG91dDoKIAlzcC0mZ3Q7ZXh0ZXJuYWxfc3B0ID0gTlVMTDsKIH0KQEAgLTI0NTksNyAmIzQzOzI1MDMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsCiAKIAlyZXQgPSAtRU5PTUVNOwogCi0JdGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CXRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCWlmICghdGRyX3BhZ2UpCiAJCWdvdG8gZnJlZV9oa2lkOwogCkBAIC0yNDcyLDcgJiM0MzsyNTE2LDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogCQlnb3RvIGZyZWVfdGRyOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXRkY3NfcGFnZXNbaV0gPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CQl0ZGNzX3BhZ2VzW2ldID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCQlpZiAoIXRkY3NfcGFnZXNbaV0pCiAJCQlnb3RvIGZyZWVfdGRjczsKIAl9CkBAIC0yNTkwLDEwICYjNDM7MjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcywKIHRlYXJkb3duOgogCS8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAmIzM5O2kmIzM5OyAqLwogCWZvciAoOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRkY3NfcGFnZXNbaV0pIHsKLQkJCV9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pOwotCQkJdGRjc19wYWdlc1tpXSA9IE5VTEw7Ci0JCX0KJiM0MzsJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTsKJiM0MzsJCXRkY3NfcGFnZXNbaV0gPSBOVUxMOwogCX0KIAlpZiAoIWt2bV90ZHgtJmd0O3RkLnRkY3NfcGFnZXMpCiAJCWtmcmVlKHRkY3NfcGFnZXMpOwpAQCAtMjYwOCwxNiAmIzQzOzI2NTAsMTMgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLAogCWZyZWVfY3B1bWFza192YXIocGFja2FnZXMpOwogCiBmcmVlX3RkY3M6Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3NfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmICh0ZGNzX3BhZ2VzW2ldKQotCQkJX19mcmVlX3BhZ2UodGRjc19wYWdlc1tpXSk7Ci0JfQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsga3ZtX3RkeC0mZ3Q7dGQudGRjc19ucl9wYWdlczsgaSYjNDM7JiM0MzspCiYjNDM7CQl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7CiAJa2ZyZWUodGRjc19wYWdlcyk7CiAJa3ZtX3RkeC0mZ3Q7dGQudGRjc19wYWdlcyA9IE5VTEw7CiAKIGZyZWVfdGRyOgotCWlmICh0ZHJfcGFnZSkKLQkJX19mcmVlX3BhZ2UodGRyX3BhZ2UpOwomIzQzOwl0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRyX3BhZ2UpOwogCWt2bV90ZHgtJmd0O3RkLnRkcl9wYWdlID0gTlVMTDsKIAogZnJlZV9oa2lkOgpAQCAtMjk1MSw3ICYjNDM7Mjk5MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAlpbnQgcmV0LCBpOwogCXU2NCBlcnI7CiAKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwlwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCWlmICghcGFnZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdGR4LSZndDt2cC50ZHZwcl9wYWdlID0gcGFnZTsKQEAgLTI5NzEsNyAmIzQzOzMwMTAsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAJfQogCiAJZm9yIChpID0gMDsgaSAmbHQ7IGt2bV90ZHgtJmd0O3RkLnRkY3hfbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CQlwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpOwogCQlpZiAoIXBhZ2UpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGZyZWVfdGRjeDsKQEAgLTI5OTMsNyAmIzQzOzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpCiAJCQkgKiBtZXRob2QsIGJ1dCB0aGUgcmVzdCBhcmUgZnJlZWQgaGVyZS4KIAkJCSAqLwogCQkJZm9yICg7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQkJCV9fZnJlZV9wYWdlKHRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSk7CiYjNDM7CQkJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwogCQkJCXRkeC0mZ3Q7dnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7CiAJCQl9CiAJCQlyZXR1cm4gLUVJTzsKQEAgLTMwMjEsMTYgJiM0MzszMDYwLDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeCkKIAogZnJlZV90ZGN4OgogCWZvciAoaSA9IDA7IGkgJmx0OyBrdm1fdGR4LSZndDt0ZC50ZGN4X25yX3BhZ2VzOyBpJiM0MzsmIzQzOykgewotCQlpZiAodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKQotCQkJX19mcmVlX3BhZ2UodGR4LSZndDt2cC50ZGN4X3BhZ2VzW2ldKTsKJiM0MzsJCXRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0pOwogCQl0ZHgtJmd0O3ZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMOwogCX0KIAlrZnJlZSh0ZHgtJmd0O3ZwLnRkY3hfcGFnZXMpOwogCXRkeC0mZ3Q7dnAudGRjeF9wYWdlcyA9IE5VTEw7CiAKIGZyZWVfdGR2cHI6Ci0JaWYgKHRkeC0mZ3Q7dnAudGR2cHJfcGFnZSkKLQkJX19mcmVlX3BhZ2UodGR4LSZndDt2cC50ZHZwcl9wYWdlKTsKJiM0MzsJdGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC0mZ3Q7dnAudGR2cHJfcGFnZSk7CiAJdGR4LSZndDt2cC50ZHZwcl9wYWdlID0gTlVMTDsKIAl0ZHgtJmd0O3ZwLnRkdnByX3BhID0gMDsKIApAQCAtMzQ5Myw2ICYjNDM7MzUzMCwxMCBAQCBpbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCiAJdnRfeDg2X29wcy5zZXRfZXh0ZXJuYWxfc3B0ZSA9IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGU7CiAJdnRfeDg2X29wcy5mcmVlX2V4dGVybmFsX3NwdCA9IHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQ7CiYjNDM7CiYjNDM7CWlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHRkeF9zeXNpbmZvKSkKJiM0MzsJCXZ0X3g4Nl9vcHMudG9wdXBfZXh0ZXJuYWxfY2FjaGUgPSB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZTsKJiM0MzsKIAl2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaCBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmgKaW5kZXggYWM4MzIzYTY4YjE2My4uZmQzNjhlM2VlMDYwYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHggewogCiAJdTY0IG1hcF9ncGFfbmV4dDsKIAl1NjQgbWFwX2dwYV9lbmQ7CiYjNDM7CiYjNDM7CXN0cnVjdCB0ZHhfcGFtdF9jYWNoZSBwYW10X2NhY2hlOwogfTsKIAogdm9pZCB0ZGhfdnBfcmRfZmFpbGVkKHN0cnVjdCB2Y3B1X3RkeCAqdGR4LCBjaGFyICp1Y2xhc3MsIHUzMiBmaWVsZCwgdTY0IGVycik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMKaW5kZXggNDJkZjhlYTQ2NGM0Ny4uZGVjNDU3MDllNDU0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3lzY29yZV9vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZHIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdm1hbGxvYy5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NwZWNpYWxfaW5zbnMuaCZndDsKICNpbmNsdWRlICZsdDthc20vbXNyLWluZGV4LmgmZ3Q7CkBAIC00Niw2ICYjNDM7NDcsOCBAQAogI2luY2x1ZGUgJiMzNDtzZWFtY2FsbF9pbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dGR4LmgmIzM0OwogCiYjNDM7c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7CiYjNDM7CiBzdHJ1Y3QgdGR4X21vZHVsZV9zdGF0ZSB7CiAJYm9vbCBpbml0aWFsaXplZDsKIAlib29sIHN5c2luaXRfZG9uZTsKQEAgLTYzLDYgJiM0Mzs2NiwxNCBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGR4X2xwX2luaXRpYWxpemVkKTsKIAogc3RhdGljIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCB0ZHhfdGRtcl9saXN0OwogCiYjNDM7LyoKJiM0MzsgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXIKJiM0MzsgKiBmb3IgZXZlcnkgMk1CIHJhbmdlLiBUaGUgY291bnRlciBpbmRpY2F0ZXMgaG93IG1hbnkgdXNlcnMgdGhlcmUgYXJlIGZvcgomIzQzOyAqIHRoZSBQQU1UIG1lbW9yeSBvZiB0aGUgMk1CIHJhbmdlLiBUaGUga2VybmVsIGFsbG9jYXRlcyBQQU1UIHJlZmNvdW50cyBhdAomIzQzOyAqIGluaXRpYWxpemF0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyBhdG9taWNfdCAqcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqLwogc3RhdGljIExJU1RfSEVBRCh0ZHhfbWVtbGlzdCk7CiAKQEAgLTI1Miw2ICYjNDM7MjYzLDQyIEBAIHN0YXRpYyBzdHJ1Y3Qgc3lzY29yZSB0ZHhfc3lzY29yZSA9IHsKIAkub3BzID0gJmFtcDt0ZHhfc3lzY29yZV9vcHMsCiB9OwogCiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBQQU1UIHJlZmVyZW5jZSBjb3VudGVycyBmb3IgYWxsIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKgomIzQzOyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgX19pbml0IGludCBpbml0X3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7CiYjNDM7CiYjNDM7CWlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7CiYjNDM7CWlmICghcGFtdF9yZWZjb3VudHMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXZmcmVlKHBhbXRfcmVmY291bnRzKTsKJiM0MzsJcGFtdF9yZWZjb3VudHMgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pCiYjNDM7ewomIzQzOwkvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi8KJiM0MzsJdW5zaWduZWQgbG9uZyBpbmRleCA9IHBmbiAmZ3Q7Jmd0OyAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wO3BhbXRfcmVmY291bnRzW2luZGV4XTsKJiM0Mzt9CiYjNDM7CiAvKgogICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlCiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24mIzM5O3QKQEAgLTUxMCwzNSAmIzQzOzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWludCBiaXRzX3Blcl9lbnRyeTsKJiM0MzsKJiM0MzsJYml0c19wZXJfZW50cnkgPSB0ZHhfc3lzaW5mby50ZG1yLnBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0czsKJiM0MzsJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTsKJiM0MzsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiYjNDM7fQomIzQzOwogLyoKICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZAogICogUEFNVCBzaXplIGlzIGFsd2F5cyBhbGlnbmVkIHVwIHRvIDRLIHBhZ2UgYm91bmRhcnkuCiAgKi8KLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LAotCQkJCQkgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpCiYjNDM7c3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opCiB7CiAJdW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7CiYjNDM7CWNvbnN0IGludCB0ZHhfcGdfc2l6ZV9zaGlmdFtURFhfUFNfTlJdID0geyBQQUdFX1NISUZULCBQTURfU0hJRlQsIFBVRF9TSElGVCB9OwomIzQzOwljb25zdCB1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7CiYjNDM7CQl0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSwKJiM0MzsJCXRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLAomIzQzOwkJdGR4X3N5c2luZm8udGRtci5wYW10XzFnX2VudHJ5X3NpemUsCiYjNDM7CX07CiAKLQlzd2l0Y2ggKHBnc3opIHsKLQljYXNlIFREWF9QU180SzoKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwotCQlicmVhazsKLQljYXNlIFREWF9QU18yTToKLQkJbnJfcGFtdF9lbnRyaWVzID0gdGRtci0mZ3Q7c2l6ZSAmZ3Q7Jmd0OyBQTURfU0hJRlQ7Ci0JCWJyZWFrOwotCWNhc2UgVERYX1BTXzFHOgotCQlucl9wYW10X2VudHJpZXMgPSB0ZG1yLSZndDtzaXplICZndDsmZ3Q7IFBVRF9TSElGVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJV0FSTl9PTl9PTkNFKDEpOwotCQlyZXR1cm4gMDsKLQl9CiYjNDM7CW5yX3BhbXRfZW50cmllcyA9IHRkbXItJmd0O3NpemUgJmd0OyZndDsgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07CiYjNDM7CXBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07CiAKLQlwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplOwogCS8qIFREWCByZXF1aXJlcyBQQU1UIHNpemUgbXVzdCBiZSA0SyBhbGlnbmVkICovCi0JcGFtdF9zeiA9IEFMSUdOKHBhbXRfc3osIFBBR0VfU0laRSk7Ci0KLQlyZXR1cm4gcGFtdF9zejsKJiM0MzsJcmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7CiB9CiAKIC8qCkBAIC01NzYsMTUgJiM0Mzs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXMKICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuCiAgKi8KIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKLQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKLQkJCQkgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KQogewotCXVuc2lnbmVkIGxvbmcgcGFtdF9iYXNlW1REWF9QU19OUl07Ci0JdW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTsKLQl1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9iYXNlOwogCXVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X3NpemU7CiAJc3RydWN0IHBhZ2UgKnBhbXQ7Ci0JaW50IHBnc3osIG5pZDsKJiM0MzsJaW50IG5pZDsKIAogCW5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7CiAKQEAgLTU5MiwxMyAmIzQzOzYzNywxOCBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX3NldF91cF9wYW10KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemUKIAkgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS4KIAkgKi8KLQl0ZG1yX3BhbXRfc2l6ZSA9IDA7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X3NpemVbcGdzel0gPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIHBnc3osCi0JCQkJCXBhbXRfZW50cnlfc2l6ZVtwZ3N6XSk7Ci0JCXRkbXJfcGFtdF9zaXplICYjNDM7PSBwYW10X3NpemVbcGdzel07CiYjNDM7CXRkbXItJmd0O3BhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pOwomIzQzOwomIzQzOwlpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkgewomIzQzOwkJLyogV2l0aCBEeW5hbWljIFBBTVQsIFBBTVRfNEsgaXMgcmVwbGFjZWQgd2l0aCBhIGJpdG1hcCAqLwomIzQzOwkJdGRtci0mZ3Q7cGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl0ZG1yLSZndDtwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7CiAJfQogCiYjNDM7CXRkbXJfcGFtdF9zaXplID0gdGRtci0mZ3Q7cGFtdF80a19zaXplICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZSAmIzQzOyB0ZG1yLSZndDtwYW10XzFnX3NpemU7CiYjNDM7CiAJLyoKIAkgKiBBbGxvY2F0ZSBvbmUgY2h1bmsgb2YgcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSBmb3IgYWxsCiAJICogUEFNVHMuICBUaGlzIGhlbHBzIG1pbmltaXplIHRoZSBQQU1UJiMzOTtzIHVzZSBvZiByZXNlcnZlZCBhcmVhcwpAQCAtNjA2LDI1ICYjNDM7NjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwKIAkgKi8KIAlwYW10ID0gYWxsb2NfY29udGlnX3BhZ2VzKHRkbXJfcGFtdF9zaXplICZndDsmZ3Q7IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwsCiAJCQluaWQsICZhbXA7bm9kZV9vbmxpbmVfbWFwKTsKLQlpZiAoIXBhbXQpCi0JCXJldHVybiAtRU5PTUVNOwogCiAJLyoKLQkgKiBCcmVhayB0aGUgY29udGlndW91cyBhbGxvY2F0aW9uIGJhY2sgdXAgaW50byB0aGUKLQkgKiBpbmRpdmlkdWFsIFBBTVRzIGZvciBlYWNoIHBhZ2Ugc2l6ZS4KJiM0MzsJICogdGRtci0mZ3Q7cGFtdF80a19iYXNlIGlzIHN0aWxsIHplcm8gc28gdGhlIGVycm9yCiYjNDM7CSAqIHBhdGggb2YgdGhlIGNhbGxlciB3aWxsIHNraXAgZnJlZWluZyB0aGUgUEFNVC4KIAkgKi8KLQl0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpICZsdDsmbHQ7IFBBR0VfU0hJRlQ7Ci0JZm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6ICZsdDsgVERYX1BTX05SOyBwZ3N6JiM0MzsmIzQzOykgewotCQlwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTsKLQkJdGRtcl9wYW10X2Jhc2UgJiM0Mzs9IHBhbXRfc2l6ZVtwZ3N6XTsKLQl9CiYjNDM7CWlmICghcGFtdCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwogCi0JdGRtci0mZ3Q7cGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107Ci0JdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gcGFtdF9iYXNlW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07Ci0JdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107Ci0JdGRtci0mZ3Q7cGFtdF8xZ19zaXplID0gcGFtdF9zaXplW1REWF9QU18xR107CiYjNDM7CXRkbXItJmd0O3BhbXRfNGtfYmFzZSA9IHBhZ2VfdG9fcGh5cyhwYW10KTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8ybV9iYXNlID0gdGRtci0mZ3Q7cGFtdF80a19iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfNGtfc2l6ZTsKJiM0MzsJdGRtci0mZ3Q7cGFtdF8xZ19iYXNlID0gdGRtci0mZ3Q7cGFtdF8ybV9iYXNlICYjNDM7IHRkbXItJmd0O3BhbXRfMm1fc2l6ZTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU1LDEwICYjNDM7Njk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsCiAJdGRtcl9nZXRfcGFtdCh0ZG1yLCAmYW1wO3BhbXRfYmFzZSwgJmFtcDtwYW10X3NpemUpOwogCiAJLyogRG8gbm90aGluZyBpZiBQQU1UIGhhc24mIzM5O3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqLwotCWlmICghcGFtdF9zaXplKQotCQlyZXR1cm47Ci0KLQlpZiAoV0FSTl9PTl9PTkNFKCFwYW10X2Jhc2UpKQomIzQzOwlpZiAoIXBhbXRfYmFzZSkKIAkJcmV0dXJuOwogCiAJcGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTsKQEAgLTY4NCwxNCAmIzQzOzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCkKIAogLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovCiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCi0JCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LAotCQkJCQl1MTYgcGFtdF9lbnRyeV9zaXplW10pCiYjNDM7CQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyB0ZG1yX2xpc3QtJmd0O25yX2NvbnN1bWVkX3RkbXJzOyBpJiM0MzsmIzQzOykgewotCQlyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsCi0JCQkJcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJCXJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC05NjgsMTggJiM0MzsxMDA1LDEzIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAkJCQkgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCQkJCSAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7Ci0JdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0gewotCQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfNGtfZW50cnlfc2l6ZSwKLQkJc3lzaW5mb190ZG1yLSZndDtwYW10XzJtX2VudHJ5X3NpemUsCi0JCXN5c2luZm9fdGRtci0mZ3Q7cGFtdF8xZ19lbnRyeV9zaXplLAotCX07CiAJaW50IHJldDsKIAogCXJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTsKJiM0MzsJcmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5OCw2ICYjNDM7MTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBURFhfU1lTX0NPTkZJR19EWU5BTUlDX1BBTVQJQklUKDE2KQomIzQzOwogc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsCiAJCQkJICAgIHU2NCBnbG9iYWxfa2V5aWQpCiB7CkBAIC0xMDI2LDYgJiM0MzsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LAogCWFyZ3MucmN4ID0gX19wYSh0ZG1yX3BhX2FycmF5KTsKIAlhcmdzLnJkeCA9IHRkbXJfbGlzdC0mZ3Q7bnJfY29uc3VtZWRfdGRtcnM7CiAJYXJncy5yOCA9IGdsb2JhbF9rZXlpZDsKJiM0MzsKJiM0MzsJaWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpIHsKJiM0MzsJCXByX2luZm8oJiMzNDtFbmFibGUgRHluYW1pYyBQQU1UXG4mIzM0Oyk7CiYjNDM7CQlhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDsKJiM0MzsJfQomIzQzOwogCXJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCAmYW1wO2FyZ3MpOwogCiAJLyogRnJlZSB0aGUgYXJyYXkgYXMgaXQgaXMgbm90IHJlcXVpcmVkIGFueW1vcmUuICovCkBAIC0xMTY3LDEwICYjNDM7MTIwNywxNCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZCkKIAkgKi8KIAlnZXRfb25saW5lX21lbXMoKTsKIAotCXJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzOwlyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfcHV0X3RkeG1lbTsKIAomIzQzOwlyZXQgPSBidWlsZF90ZHhfbWVtbGlzdCgmYW1wO3RkeF9tZW1saXN0KTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7CiYjNDM7CiAJLyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi8KIAlyZXQgPSBhbGxvY190ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0LCAmYW1wO3RkeF9zeXNpbmZvLnRkbXIpOwogCWlmIChyZXQpCkBAIC0xMjIwLDYgJiM0MzsxMjY0LDggQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpCiAJZnJlZV90ZG1yX2xpc3QoJmFtcDt0ZHhfdGRtcl9saXN0KTsKIGVycl9mcmVlX3RkeG1lbToKIAlmcmVlX3RkeF9tZW1saXN0KCZhbXA7dGR4X21lbWxpc3QpOwomIzQzO2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOgomIzQzOwlmcmVlX3BhbXRfcmVmY291bnRzKCk7CiAJZ290byBvdXRfcHV0X3RkeG1lbTsKIH0KIApAQCAtMjAwMyw2ICYjNDM7MjA0OSwyODggQEAgdTY0IHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCh1NjQgaGtpZCwga3ZtX3Bmbl90IHBmbikKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQpOwogCiYjNDM7Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiYjNDM7ewomIzQzOwlyZXR1cm4gc3lzaW5mby0mZ3Q7ZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCAmYW1wOyBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICB0ZHhfZW5hYmxlX2RwYW10OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZTsKJiM0MzsKJiM0MzsJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO2NhY2hlLSZndDtwYWdlX2xpc3QsIHN0cnVjdCBwYWdlLCBscnUpOwomIzQzOwlpZiAocGFnZSkgewomIzQzOwkJbGlzdF9kZWwoJmFtcDtwYWdlLSZndDtscnUpOwomIzQzOwkJY2FjaGUtJmd0O2NudC0tOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBwYWdlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWlmIChjYWNoZSkKJiM0MzsJCXJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSkKJiM0Mzt7CiYjNDM7CWludCBpLCBqOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpOwomIzQzOwkJaWYgKCFwYW10X3BhZ2VzW2ldKQomIzQzOwkJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJZm9yIChqID0gMDsgaiAmbHQ7IGk7IGomIzQzOyYjNDM7KQomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRU5PTUVNOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkvKgomIzQzOwkJICogUmVzZXQgcGFnZXMgdW5jb25kaXRpb25hbGx5IHRvIGNvdmVyIGNhc2VzCiYjNDM7CQkgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLgomIzQzOwkJICovCiYjNDM7CQl0ZHhfcXVpcmtfcmVzZXRfcGFkZHIocGFnZV90b19waHlzKHBhbXRfcGFnZXNbaV0pLCBQQUdFX1NJWkUpOwomIzQzOwomIzQzOwkJX19mcmVlX3BhZ2UocGFtdF9wYWdlc1tpXSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDYWxjdWxhdGUgdGhlIGFyZyBuZWVkZWQgZm9yIG9wZXJhdGluZyBvbiB0aGUgRFBBTVQgYmFja2luZyBmb3IKJiM0MzsgKiBhIGdpdmVuIDRLQiBwYWdlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1NjQgcGFtdF8ybWJfYXJnKGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwkvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqLwomIzQzOwl1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiAmbHQ7Jmx0OyBQQUdFX1NISUZULCBQTURfU0laRSk7CiYjNDM7CiYjNDM7CXJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqLwomIzQzO3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7CiYjNDM7CQkucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksCiYjNDM7CQkucmR4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMF0pLAomIzQzOwkJLnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgJmFtcDthcmdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi8KJiM0MztzdGF0aWMgdTY0IHRkaF9waHltZW1fcGFtdF9yZW1vdmUoa3ZtX3Bmbl90IHBmbiwgc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0gewomIzQzOwkJLnJjeCA9IHBhbXRfMm1iX2FyZyhwZm4pLAomIzQzOwl9OwomIzQzOwl1NjQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzZWFtY2FsbF9yZXQoVERIX1BIWU1FTV9QQU1UX1JFTU9WRSwgJmFtcDthcmdzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi8KJiM0MzsJcGFtdF9wYWdlc1swXSA9IHBoeXNfdG9fcGFnZShhcmdzLnJkeCk7CiYjNDM7CXBhbXRfcGFnZXNbMV0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yOCk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqLwomIzQzO3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovCiYjNDM7aW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhbXRfcGFnZXNbVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UXTsKJiM0MzsJYXRvbWljX3QgKnBhbXRfcmVmY291bnQ7CiYjNDM7CXU2NCB0ZHhfc3RhdHVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoJmFtcDt0ZHhfc3lzaW5mbykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIHBhbXQgcGFnZSBpcyBhbHJlYWR5IGFkZGVkIChpLmUuIHJlZmNvdW50ICZndDs9IDEpLAomIzQzOwkgKiB0aGVuIGp1c3QgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldCA9IGFsbG9jX3BhbXRfYXJyYXkocGFtdF9wYWdlcywgY2FjaGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGFtdF9sb2NrKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVW5saWtlIHRkeF9wYW10X3B1dCgpIHdoaWNoIHVzZXMgYXRvbWljX2RlY19hbmRfbG9jaygpIHRvCiYjNDM7CSAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLSZndDswIHRyYW5zaXRpb24sIHRoZSBnZXQgc2lkZSBoYXMgbm8KJiM0MzsJICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtJmd0OzEuIFJlY2hlY2sgdW5kZXIgdGhlCiYjNDM7CSAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLSZndDsxCiYjNDM7CSAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuCiYjNDM7CSAqLwomIzQzOwlpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSkKJiM0MzsJCWdvdG8gb3V0X2ZyZWU7CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfYWRkKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHsKJiM0MzsJCXJldCA9IC1FSU87CiYjNDM7CQlnb3RvIG91dF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSByZWZjb3VudCBpcyB6ZXJvLCBhbmQgdGhpcyBsb2NrZWQgcGF0aCBpcyB0aGUKJiM0MzsJICogb25seSB3YXkgdG8gaW5jcmVhc2UgaXQgZnJvbSAwLSZndDsxLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfZnJlZToKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9nZXQpOwomIzQzOwomIzQzOy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqLwomIzQzO3ZvaWQgdGR4X3BhbXRfcHV0KGt2bV9wZm5fdCBwZm4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFtdF9wYWdlc1tURFhfRFBBTVRfRU5UUllfUEFHRV9DTlRdID0ge307CiYjNDM7CWF0b21pY190ICpwYW10X3JlZmNvdW50OwomIzQzOwl1NjQgdGR4X3N0YXR1czsKJiM0MzsKJiM0MzsJaWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KCZhbXA7dGR4X3N5c2luZm8pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJiMzOTt0CiYjNDM7CSAqIHJlbW92ZSBpdCB5ZXQuIEp1c3QgZGVjcmVtZW50IHRoZSByZWZjb3VudC4KJiM0MzsJICovCiYjNDM7CWlmICghYXRvbWljX2RlY19hbmRfbG9jayhwYW10X3JlZmNvdW50LCAmYW1wO3BhbXRfbG9jaykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9zdGF0dXMgPSB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKHBmbiwgcGFtdF9wYWdlcyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW4KJiM0MzsJICogdGRoX3BoeW1lbV9wYW10X3JlbW92ZSgpIGZhaWxzLiAgRG9uJiMzOTt0IHBhbmljL0JVR19PTigpLCBhcwomIzQzOwkgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzCiYjNDM7CSAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kCiYjNDM7CSAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLgomIzQzOwkgKi8KJiM0MzsJaWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsCiYjNDM7CQkgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7CiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwYW10X2xvY2spOwomIzQzOwlmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7CiYjNDM7CXJldHVybjsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwlzcGluX3VubG9jaygmYW1wO3BhbXRfbG9jayk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpOwomIzQzOwomIzQzO3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSkKJiM0MzsJCV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfcGFtdF9jYWNoZSk7CiYjNDM7CiYjNDM7aW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKQomIzQzO3sKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCgmYW1wO3RkeF9zeXNpbmZvKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsKJiM0MzsKJiM0MzsJd2hpbGUgKGNhY2hlLSZndDtjbnQgJmx0OyBucGFnZXMpIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpOwomIzQzOwomIzQzOwkJaWYgKCFwYWdlKQomIzQzOwkJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwkJbGlzdF9hZGQoJmFtcDtwYWdlLSZndDtscnUsICZhbXA7Y2FjaGUtJmd0O3BhZ2VfbGlzdCk7CiYjNDM7CQljYWNoZS0mZ3Q7Y250JiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSAmIzM0O2NvbnRyb2wmIzM0OwomIzQzOyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWAomIzQzOyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2U7CiYjNDM7CiYjNDM7CXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkgewomIzQzOwkJX19mcmVlX3BhZ2UocGFnZSk7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcGFnZTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpOwomIzQzOwomIzQzOy8qCiYjNDM7ICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sCiYjNDM7ICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguCiYjNDM7ICovCiYjNDM7dm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiYjNDM7ewomIzQzOwlpZiAoIXBhZ2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihwYWdlKSk7CiYjNDM7CV9fZnJlZV9wYWdlKHBhZ2UpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X2ZyZWVfY29udHJvbF9wYWdlKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKQomIzQzO3sKJiM0MzsJcmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCAmYW1wO3RkeF9lbmFibGVfZHBhbXQpID09IDA7CiYjNDM7fQomIzQzOwomIzQzO19fc2V0dXAoJiMzNDt0ZHhfZHBhbXQ9JiMzNDssIHRkeF9kcGFtdF9zZXR1cCk7CiYjNDM7CiB2b2lkIHRkeF9zeXNfZGlzYWJsZSh2b2lkKQogewogCXN0cnVjdCB0ZHhfbW9kdWxlX2FyZ3MgYXJncyA9IHt9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oCmluZGV4IGJkZmQwZTFlMzM3YWMuLmE4ODZjNTRkZWNhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmgKQEAgLTQ4LDYgJiM0Mzs0OCw4IEBACiAjZGVmaW5lIFRESF9TWVNfQ09ORklHCQkJNDUKICNkZWZpbmUgVERIX1NZU19TSFVURE9XTgkJNTIKICNkZWZpbmUgVERIX1NZU19VUERBVEUJCQk1MwomIzQzOyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERAkJNTgKJiM0MzsjZGVmaW5lIFRESF9QSFlNRU1fUEFNVF9SRU1PVkUJCTU5CiAjZGVmaW5lIFRESF9TWVNfRElTQUJMRQkJCTY5CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYwppbmRleCBlNDljMzAwZjIzZDQzLi45M2IxZjI2MjUyYzYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMKQEAgLTEsNiAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qCi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLgomIzQzOyAqIEZ1bmN0aW9ucyB0byByZWFkIFREWCBnbG9iYWwgbWV0YWRhdGEuCiAgKgogICogVGhpcyBmaWxlIGRvZXNuJiMzOTt0IGNvbXBpbGUgb24gaXRzIG93biBhcyBpdCBsYWNrcyBvZiBpbmNsdXNpb24KICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS4KQEAgLTMzLDYgJiM0MzszMywxOCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZgogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwl1NjQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsICZhbXA7dmFsKTsKJiM0MzsJaWYgKCFyZXQpCiYjNDM7CQlzeXNpbmZvX3RkbXItJmd0O3BhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cyA9IHZhbDsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMjksNSAmIzQzOzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pCiAJcmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY3RybCgmYW1wO3N5c2luZm8tJmd0O3RkX2N0cmwpOwogCXJldCA9IHJldCA/OiBnZXRfdGR4X3N5c19pbmZvX3RkX2NvbmYoJmFtcDtzeXNpbmZvLSZndDt0ZF9jb25mKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IER5bmFtaWMgUEFNVCwgc28KJiM0MzsJICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQmIzM5O3Mgbm90IHN1cHBvcnRlZC4gRG9uJiMzOTt0IHRyeQomIzQzOwkgKiB0byBzdXBwb3J0IGJ1Z2d5IFREWCBtb2R1bGVzIHRoYXQgYWR2ZXJ0aXNlIER5bmFtaWMgUEFNVAomIzQzOwkgKiBidXQgZG9uJiMzOTt0IGV4cG9zZSB0aGUgbWV0YWRhdGEuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJldCAmYW1wOyZhbXA7IHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoc3lzaW5mbykpCiYjNDM7CQlyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoJmFtcDtzeXNpbmZvLSZndDt0ZG1yKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzIyMwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEeW5hbWljIFBBTVQgVERYIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFkZGluZyAmIzM0O0R5bmFtaWMgUEFNVCYjMzQ7IHN1cHBvcnQgd2l0aGluIHRoZSBURFggbW9kdWxlIGZvciB4ODYuIEl0JiMzOTtzIHRvdWNoaW5nIHNldmVyYWwgY29yZSBmaWxlcyBpbiB0aGUgS1ZNIGFuZCBURFggaW5mcmFzdHJ1Y3R1cmU6IGB0ZHguY2AgZmlsZXMsIHRoZSBNTVUsIGV0Yy4gVGhpcyBpcyBhY3RpdmF0ZWQgd2l0aCB0aGUgYHRkeF9kcGFtdD1vbmAga2VybmVsIHBhcmFtZXRlciwgYW5kIGl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyBsaWtlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgYWxsIHRoYXQgZ29vZCBzdHVmZiwgcGx1cyBpdCB1dGlsaXplcyBgVERIX1BIWU1FTV9QQU1UX0FERGAgYW5kIGBUREhfUEhZTUVNX1BBTVRfUkVNT1ZFYCBTRUFNQ0FMTHMuCgpUaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gSW1tZWRpYXRlbHksIHRoZSBURFggcmVxdWlyZW1lbnQgcG9wcyB0byBtaW5kIC0gc3BlY2lmaWMgSW50ZWwgVERYIGhhcmR3YXJlLiBJdCYjMzk7cyBhIHZpcnR1YWxpemF0aW9uIGZlYXR1cmUsIGJ1dCB0aGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gdGhlICpob3N0KiBzaWRlLCB0aGUgS1ZNIHN1cHBvcnQsIG5vdCB0aGUgZ3Vlc3QgaXRzZWxmLCBhdCBsZWFzdCB0aGF0JiMzOTtzIG15IHVuZGVyc3RhbmRpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0NhbiB3ZSByZWFsbHkgdGVzdCB0aGlzIGluIFFFTVU/JiMzNDsuCgpXYWl0LCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzOiBJc24mIzM5O3QgVERYIGd1ZXN0IHN1cHBvcnQgc2VwYXJhdGUgZnJvbSB0aGlzIEtWTSBob3N0LXNpZGUgd29yaz8gSSBuZWVkIHRvIGJlIHByZWNpc2UsIHRoaXMgcGF0Y2ggaXMgdGFyZ2V0aW5nIFREWCBob3N0LXNpZGUgS1ZNIGZ1bmN0aW9uYWxpdHkuIE5vdyBJJiMzOTttIHF1ZXN0aW9uaW5nIHdoZXRoZXIgVERYIGhvc3Qgc3VwcG9ydCBpbiBLVk0gaXMgZXZlbiBmdWxseSB1cHN0cmVhbWVkLCBvciBpZiBpdCBpcyB0ZXN0YWJsZSB3aXRoIHN0YW5kYXJkIFFFTVUuCgpSZWFsaXN0aWNhbGx5LCBURFggaG9zdCBzdXBwb3J0ICp0eXBpY2FsbHkqIGRlbWFuZHMgYmFyZSBtZXRhbCB3aXRoIFREWC1jYXBhYmxlIGhhcmR3YXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGV2ZW4gaWYgaXQgY291bGQgYmUgbmVzdGVkICh3aGljaCBpdCBjYW4mIzM5O3QgcmlnaHQgbm93KSwgaXMgYSBuby1nby4gVGhlIHByb21wdCBpdHNlbGYgaXMgdmVyeSBleHBsaWNpdCBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRS9RRU1VIHdoZW4gZW11bGF0aW5nIGhhcmR3YXJlLCBpdCYjMzk7cyByZWZlcnJpbmcgdG8gdGhlIFREWCBob3N0IGNvZGUuCgpTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBhIGZ1enplciBsaWtlIHN5emthbGxlciByZWFjaCB0aGlzIFREWCBob3N0IGNvZGUgaW4gc29tZXRoaW5nIGxpa2UgR0NFIG9yIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGxpa2VseSBhIGZpcm0gbm8uIFRoaXMgVERYIGhvc3QgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgSW50ZWwgQ1BVIHdpdGggVERYIHN1cHBvcnQuIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoYXQgaGFyZHdhcmUsIGFuZCBzdGFuZGFyZCBHQ0UgVk1zIGRvbiYjMzk7dCB0eXBpY2FsbHkgcHJvdmlkZSBpdCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBpcyB1bmxpa2VseSB0byBiZSBhdmFpbGFibGUgZm9yIGdlbmVyYWwgdXNlLiBRRU1VIGNhbiBiZSBhIFZNTSB0aGF0ICpydW5zKiBURFggZ3Vlc3RzLCB1c2luZyBLVk0sIGJ1dCB0aGUgS1ZNIHBhcnQgKHRoZSBob3N0IGtlcm5lbCkgc3RpbGwgbmVlZHMgdG8gYmUgb24gVERYLWNhcGFibGUgaGFyZHdhcmUsIGFuZCBpZiBJIHRyeSB0byBydW4gYSBrZXJuZWwgaW4gUUVNVSwgS1ZNIHdpbGwgY2hlY2sgZm9yIHRoZSBURFggaGFyZHdhcmUuIElmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgcHJlc2VudCwgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbC4KCkkgc2hvdWxkIHZlcmlmeSB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGluaXRfdGR4X21vZHVsZWAgaW4gYGFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY2AgYW5kIHNlYXJjaCBmb3IgdGhlIGtleSBpZGVudGlmaWVycyBsaWtlIGB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10YCBhbmQgYGluaXRfdGR4X21vZHVsZWAgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X3RkeF9tb2R1bGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTExNjY9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZG1ycyhzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4NC1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMTg1OnN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTExODYte1xuLS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMjcyPXN0YXRpYyBfX2luaXQgaW50IHRkeF9lbmFibGUodm9pZClcbi0tXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMS1cbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoxMzAyOlx0cmV0ID0gaW5pdF90ZHhfbW9kdWxlKCk7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMy1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc5OQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgYHRkeF9lbmFibGVgKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IHdoZW4gZG9lcyBgdGR4X2VuYWJsZWAgYWN0dWFsbHkgZ2V0IGNhbGxlZD8gSXMgaXQgYmFrZWQgaW50byB0aGUgZWFybHkgYm9vdCBzZXF1ZW5jZSwgb3IgaXMgaXQgZXhjbHVzaXZlbHkgdHJpZ2dlcmVkIGJ5IHRoZSBLVk0gbG9hZGluZyBwcm9jZXNzPyBVbmRlcnN0YW5kaW5nIHRoaXMgaGFzIHNvbWUgbWFqb3IgaW1wbGljYXRpb25zIGZvciBob3cgd2UgYXJjaGl0ZWN0IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0sIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB3ZSBuZWVkIHRvIGNvbnNpZGVyLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIHNvbWUgaW1wbGljYXRpb25zIGZvciBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYXMgd2VsbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSB3aGVuIHRoaXMga2V5IGZ1bmN0aW9uIGhpdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGR4X2VuYWJsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDktXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6NTA6c3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNTEtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTExODU9c3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzEtXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTI3MjpzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTI3My17XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTQtfVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEzMTU6c3Vic3lzX2luaXRjYWxsKHRkeF9lbmFibGUpO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTYtXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIwNTI9Ym9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIwNTQtXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCBcdTAwMjZcdTAwMjZcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoyMDU1Olx0ICAgICAgIHRkeF9lbmFibGVfZHBhbXQ7XG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjA1Ni19XG4tLVxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jPTIzMjc9c3RhdGljIGludCBfX2luaXQgdGR4X2RwYW10X3NldHVwKGNoYXIgKnN0cilcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzI4LXtcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYzoyMzI5Olx0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTIzMzAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTk1CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGB0ZHhfZW5hYmxlYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBgdGR4X2VuYWJsZWAgaXMgZ2V0dGluZyBob29rZWQgdXAgYXMgYSBgc3Vic3lzX2luaXRjYWxsYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IG1lYW5zIHRoaXMgaXMgYSBsb3ctbGV2ZWwsIGVhcmx5LXN0YWdlIGNvbXBvbmVudCwgbGlrZWx5IGNydWNpYWwgZm9yIHNldHRpbmcgdXAgdGhlIFRydXN0ZWQgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgZW52aXJvbm1lbnQgd2l0aGluIHRoZSBzeXN0ZW0sIHByZXN1bWluZyB0aGlzIGlzIGEgVERYLWF3YXJlIGtlcm5lbC4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyBoYXJkd2FyZS1sZXZlbCBURFggZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHJvbGUgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFscyB0byBzZWUgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIENQVSwgbWVtb3J5IGNvbnRyb2xsZXJzLCBhbmQgYW55IHJlbGV2YW50IHBsYXRmb3JtLXNwZWNpZmljIHJlZ2lzdGVycyBvciBBQ1BJIHRhYmxlcy4gSXMgaXQgYXR0ZW1wdGluZyB0byBkaXNjb3ZlciBhbmQgdmFsaWRhdGUgVERYIHN1cHBvcnQsIHByb2JpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVxdWlyZWQgaGFyZHdhcmUgZmVhdHVyZXMgbGlrZSB0aGUgVERYIE1vZHVsZSAoVERYLU0pPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBDUFUgZmxhZ3Mgb3IgTVNScz8gUGVyaGFwcyBpdCYjMzk7cyBjcmVhdGluZyBvciByZWdpc3RlcmluZyBhbnkga2VybmVsIGRhdGEgc3RydWN0dXJlcyByZXF1aXJlZCBmb3IgVERYIG9wZXJhdGlvbiBsYXRlciBvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVERYLXJlbGF0ZWQgZmlybXdhcmUgY29tcG9uZW50cywgdGhlIEludGVsIFRYVCBvciB0aGUgQU1EIFNFVi9TRVYtU05QLCBhc3N1bWluZyB0aGF0IGlzIGluIGVmZmVjdC4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24gaW5zaWRlIGB0ZHhfZW5hYmxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3MDpcdH1cbjEyNzE6XHRcbjEyNzI6XHRzdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXG4xMjczOlx0e1xuMTI3NDpcdFx0ZW51bSBjcHVocF9zdGF0ZSBzdGF0ZTtcbjEyNzU6XHRcdGludCByZXQ7XG4xMjc2Olx0XG4xMjc3Olx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfVERYX0hPU1RfUExBVEZPUk0pKSB7XG4xMjc4Olx0XHRcdHByX2VycihcJiMzNDtURFggbm90IHN1cHBvcnRlZCBieSB0aGUgaG9zdCBwbGF0Zm9ybVxcblwmIzM0Oyk7XG4xMjc5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTI4MDpcdFx0fVxuMTI4MTpcdFxuMTI4MjpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1hTQVZFKSkge1xuMTI4MzpcdFx0XHRwcl9lcnIoXCYjMzQ7WFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcblwmIzM0Oyk7XG4xMjg0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI4NTpcdFx0fVxuMTI4NjpcdFxuMTI4NzpcdFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01PVkRJUjY0QikpIHtcbjEyODg6XHRcdFx0cHJfZXJyKFwmIzM0O01PVkRJUjY0QiBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjEyODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjkwOlx0XHR9XG4xMjkxOlx0XG4xMjkyOlx0XHRpZiAoIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VMRlNOT09QKSkge1xuMTI5MzpcdFx0XHRwcl9lcnIoXCYjMzQ7U2VsZi1zbm9vcCBpcyByZXF1aXJlZCBmb3IgVERYXFxuXCYjMzQ7KTtcbjEyOTQ6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMjk1Olx0XHR9XG4xMjk2Olx0XG4xMjk3Olx0XHRzdGF0ZSA9IGNwdWhwX3NldHVwX3N0YXRlKENQVUhQX0FQX09OTElORV9EWU4sIFwmIzM0O3ZpcnQvdGR4Om9ubGluZVwmIzM0OyxcbjEyOTg6XHRcdFx0XHRcdCAgdGR4X29ubGluZV9jcHUsIHRkeF9vZmZsaW5lX2NwdSk7XG4xMjk5Olx0XHRpZiAoc3RhdGUgXHUwMDNjIDApXG4xMzAwOlx0XHRcdHJldHVybiBzdGF0ZTtcbjEzMDE6XHRcbjEzMDI6XHRcdHJldCA9IGluaXRfdGR4X21vZHVsZSgpO1xuMTMwMzpcdFx0aWYgKHJldCkge1xuMTMwNDpcdFx0XHRwcl9lcnIoXCYjMzQ7VERYLU1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbjEzMDU6XHRcdFx0Y3B1aHBfcmVtb3ZlX3N0YXRlKHN0YXRlKTtcbjEzMDY6XHRcdFx0cmV0dXJuIHJldDtcbjEzMDc6XHRcdH1cbjEzMDg6XHRcbjEzMDk6XHRcdHJlZ2lzdGVyX3N5c2NvcmUoXHUwMDI2dGR4X3N5c2NvcmUpO1xuMTMxMDpcdFxuMTMxMTpcdFx0dGR4X21vZHVsZV9zdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7XG4xMzEyOlx0XHRwcl9pbmZvKFwmIzM0O1REWC1Nb2R1bGUgaW5pdGlhbGl6ZWRcXG5cJiMzNDspO1xuMTMxMzpcdFx0cmV0dXJuIDA7XG4xMzE0Olx0fVxuMTMxNTpcdHN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcbjEzMTY6XHRcbjEzMTc6XHRpbnQgdGR4X21vZHVsZV9zaHV0ZG93bih2b2lkKVxuMTMxODpcdHtcbjEzMTk6XHRcdHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiBoYW5kb2ZmID0ge307XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2ODcKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA1NzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFREWCBIb3N0IENvZGUgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGB0ZHhfZW5hYmxlYCBjaGVja3MgZm9yIGBYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STWAgYW5kIHJldHVybnMgYC1FTk9ERVZgIGlmIGl0JiMzOTtzIG5vdCBlbmFibGVkLiBOYXR1cmFsbHksIG15IGZpcnN0IHRob3VnaHQgaXM6IGlzIHRoaXMgcGxhdGZvcm0gZmVhdHVyZSBlbXVsYXRlZCBieSBRRU1VL0tWTT8gTm8sIHN0YW5kYXJkIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGUgVERYIGhvc3QgcGxhdGZvcm0uIEl0IHJlcXVpcmVzIGFjdHVhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFREWCBlbmFibGVkIGluIHRoZSBCSU9TLCBhbmQgdGhlIFNFQU0gbW9kdWxlIGxvYWRlZCwgYW5kIHNvIG9uLgoKTm93IEkmIzM5O20gdGhpbmtpbmcsIGNhbiBzeXprYWxsZXIgZXZlbiBydW4gb24gVERYIGhhcmR3YXJlPyBUaGUgcHJvbXB0IGlzIGhpbnRpbmcgYXQ6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIFREWCBob3N0IGNvZGUgaXMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBzdGFuZGFyZCBRRU1VLCBhbmQgdGhlcmUgaXMgbm8gU0VBTSBtb2R1bGUgZW11bGF0aW9uLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gZXhpc3RzIGZvciB0aGUgVERYIGhvc3QuIEkgYW0gZmFpcmx5IGNvbmZpZGVudCBpbiBteSBrbm93bGVkZ2UgaGVyZSwgYnV0IGEgcXVpY2sgY29uZmlybWF0aW9uIGlzIHdhcnJhbnRlZC4KCk5vLCBpdCYjMzk7cyBub3QgZW11bGF0ZWQuIFREWCBpcyBhIGhhcmR3YXJlIGZlYXR1cmUsIGFuZCBgU0VBTUNBTExzYCBhcmUgaGFuZGxlZCBieSB0aGUgVERYIG1vZHVsZSwgd2hpY2ggaXMgYSBzZWN1cmUgZW5jbGF2ZS4gUUVNVSBkb2VzIG5vdCBlbXVsYXRlIHRoZSBURFggbW9kdWxlIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIG9yIGF0IGxlYXN0IG5vdCBpbiB0aGUgc3RhbmRhcmQgdXBzdHJlYW0gdmVyc2lvbi4gU28sIHRoaXMgY29uZmlybXMgdGhhdCBURFggaG9zdCBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KClRoaXMgYnJpbmdzIG1lIGJhY2sgdG8gdGhlIHByb21wdCwgd2hpY2ggc3RhdGVzIHRvICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBURFggaG9zdCBjb2RlIGZpdHMgdGhhdCBkZXNjcmlwdGlvbiBwZXJmZWN0bHkuCgpCdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJcyB0aGVyZSAqYW55KiBwYXJ0IG9mIHRoaXMgcGF0Y2ggdGhhdCAqaXMqIHJlYWNoYWJsZSB3aXRob3V0IFREWCBoYXJkd2FyZT8gTGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBPa2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGUgY2hhbmdlIGlzIGFkZGluZyBhIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0IGxvb2tzIGxpa2UgYW4gb3B0aW9uYWwgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrdm1feDg2X2NhbGxgLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBrdm1feDg2X2NhbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMDYzPWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNjQtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwNjU6I2RlZmluZSBrdm1feDg2X2NhbGwoZnVuYykgc3RhdGljX2NhbGwoa3ZtX3g4Nl8jI2Z1bmMpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDAzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTMwCgkJCQkJCQlvdXRwdXQ6IDEwMgoJCQkJCQkJdGhvdWdodHM6IDUxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipURFggSG9zdCBDb2RlIFVucmVhY2hhYmlsaXR5IEFzc2Vzc21lbnQqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgaXMgZGVmaW5lZCB1c2luZyBgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwYC4gVGhhdCBtZWFucyBpZiB0aGUgdW5kZXJseWluZyB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2d5IChsaWtlIFZNWCBvciBTVk0pIGRvZXNuJiMzOTt0IGltcGxlbWVudCBpdCwgaXQgc2ltcGx5IHJldHVybnMgemVyby4gQ3J1Y2lhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXNzaWduZWQgYSBub24temVybyB2YWx1ZSB3aXRoaW4gYHRkeF9oYXJkd2FyZV9zZXR1cGAuIEFuZCBgdGR4X2hhcmR3YXJlX3NldHVwYCBpcywgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50LCAqb25seSogY2FsbGVkIGlmIFREWCBzdXBwb3J0IGlzIGRldGVjdGVkLgoKU28sIGluIHRoZSBhYnNlbmNlIG9mIGEgVERYLWVuYWJsZWQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHRoZSBub3JtIGZvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cHMsIGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgd2lsbCAqYWx3YXlzKiByZXR1cm4gemVyby4gVGhlIHJlc3Qgb2YgdGhlIHBhdGNoLCBhcyBJJiMzOTt2ZSBzZWVuLCBpcyBjb25maW5lZCB0byBgYXJjaC94ODYva3ZtL3ZteC90ZHguY2AgYW5kIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgLiBDb25zZXF1ZW50bHksIHRoaXMgVERYLXNwZWNpZmljIGNvZGUgc2ltcGx5IHdvbiYjMzk7dCBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBJdCYjMzk7cyB0b3RhbGx5IHVucmVhY2hhYmxlIGZvciBTeXprYWxsZXIuCgpOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGVzY2FwZSByb3V0ZXMuIFRoZSBgdGR4X2RwYW10X3NldHVwYCBmdW5jdGlvbiBpcyBhbiBgX19zZXR1cGAgZnVuY3Rpb24sIHdoaWNoIHNpbXBseSBmbGlwcyBhIGJvb2xlYW4sIGl0JiMzOTtzIG5vdCByZWxldmFudC4gYHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXRgIGlzIGV4cG9ydGVkLCBidXQgaXMgb25seSB1c2VkIHdpdGhpbiB0aGUgS1ZNIFREWCBpbmZyYXN0cnVjdHVyZS4gU2ltaWxhcmx5LCBmdW5jdGlvbnMgbGlrZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGV0Yy4sIGFyZSBleHBvcnRlZCwgYnV0IHRoZXkmIzM5O3JlIGFsbCBmaXJtbHkgd2l0aGluIHRoZSBLVk0gVERYIGRvbWFpbi4gQW5kIHRoYXQgYG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzYCBjYWxsIHRvIGB0b3B1cF9leHRlcm5hbF9jYWNoZWAgaXMgYSBzdGF0aWMgY2FsbCB0aGF0IGVmZmVjdGl2ZWx5IGJlY29tZXMgYSBuby1vcCB0aGF0JiMzOTtzIGRlc2lnbmVkIHRvIHJldHVybiAwLgoKVGhlcmVmb3JlLCB3aXRob3V0IFREWCBoYXJkd2FyZSwgdGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQuCgpTbywgdGhlIHJlYXNvbmluZyBJJiMzOTtsbCBmb3JtdWxhdGUgaXMgdGhpczogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgc3VwcG9ydCB3aXRoaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIEZ1bmN0aW9uYWxpdHkgZGVwZW5kZW50IG9uIHRoaXMgc3VwcG9ydCByZXF1aXJlcyBzcGVjaWZpYyBiYXJlLW1ldGFsIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZW5hYmxlZCBhbmQgdGhlIFREWCBtb2R1bGUgbG9hZGVkLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIER5bmFtaWMgUEFNVCBpbiB0aGUgVERYIGhvc3QgKEtWTSkgY29kZS4gVERYIGhvc3Qgc3VwcG9ydCByZXF1aXJlcyBzcGVjaWZpYyBiYXJlLW1ldGFsIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZW5hYmxlZCBhbmQgdGhlIFREWCBtb2R1bGUgbG9hZGVkLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzowMTowMC43OTY0NzYzNDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzY3MjY5NzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjAwLjc5NjQ4MTE4MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMjAxNTYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwMGVmYzQ5MTMxODgxZjE2YTViMTU4MGFkZjNmN2M3OTQyNjMxNDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwMzowMDo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXG4gXFx0dGRmeD1cXHRcXHRbSFcsRFJNXVxcbiBcXG4rXFx0dGR4X2RwYW10PVxcbitcXHRcXHRcXHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcXG4rXFx0XFx0XFx0dG8gc2F2ZSBtZW1vcnksIHdoZW4gc3VwcG9ydGVkLlxcbitcXG4rXFx0XFx0XFx0VmFsaWQgcGFyYW1ldGVyczogXFxcIm9uXFxcIiwgXFxcIm9mZlxcXCJcXG4rXFx0XFx0XFx0RGVmYXVsdDogXFxcIm9mZlxcXCJcXG4rXFxuK1xcdFxcdFxcdEZvciBkZXRhaWxzIHNlZTpcXG4rXFx0XFx0XFx0RG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuK1xcbiBcXHR0ZXN0X3N1c3BlbmQ9XFx0W1NVU1BFTkRdXFxuIFxcdFxcdFxcdEZvcm1hdDogeyBcXFwibWVtXFxcIiB8IFxcXCJzdGFuZGJ5XFxcIiB8IFxcXCJmcmVlemVcXFwiIH1bLE5dXFxuIFxcdFxcdFxcdFNwZWNpZnkgXFxcIm1lbVxcXCIgKGZvciBTdXNwZW5kLXRvLVJBTSkgb3IgXFxcInN0YW5kYnlcXFwiIChmb3JcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0IGIvRG9jdW1lbnRhdGlvbi9hcmNoL3g4Ni90ZHgucnN0XFxuaW5kZXggMzMwMzQ5OWFkNGM2Zi4uYTFjMjMwOTIzMDU4MCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcXG5AQCAtMjAwLDYgKzIwMCwzNCBAQCByZWZsZWN0cyB0aGUgVENCIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBURFggbW9kdWxlIGFuZCB0aGVyZWZvcmVcXG4gY2hhbmdlcyBhZnRlciBhbiB1cGRhdGUuIEJ5IGNvbnRyYXN0LCBURUVfVENCX1NWTiByZWZsZWN0cyB0aGUgVENCIGF0IFREXFxuIGxhdW5jaCB0aW1lIGFuZCBpcyBub3QgYWZmZWN0ZWQuXFxuIFxcbitEeW5hbWljIFBBTVRcXG4rLS0tLS0tLS0tLS0tXFxuK1xcbitQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZW1vcnkgdGhhdCB0aGUgVERYIG1vZHVsZSBuZWVkc1xcbit0byBrZWVwIGRhdGEgYWJvdXQgZWFjaCBwYWdlICh0aGluayBsaWtlIHN0cnVjdCBwYWdlKS4gSXQgbmVlZHMgdG8gYmUgaGFuZGVkXFxuK3RvIHRoZSBURFggbW9kdWxlIGZvciBpdHMgZXhjbHVzaXZlIHVzZS4gRm9yIG5vcm1hbCBQQU1ULCB0aGlzIGlzIGluc3RhbGxlZFxcbit3aGVuIHRoZSBURFggbW9kdWxlIGlzIGZpcnN0IGxvYWRlZCBhbmQgY29tZXMgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0gbWVtb3J5LlxcbitcXG4rRHluYW1pYyBQQU1UIGlzIGEgVERYIG1vZHVsZSBmZWF0dXJlIHRoYXQgYWxsb3dzIFZNTSB0byBhbGxvY2F0ZSBwYXJ0IG9mIHRoZVxcbitQQU1UIGFzIG5lZWRlZCAodGhlIHBhcnRzIGZvciB0cmFja2luZyA0S0Igc2l6ZSBwYWdlcykuIFRoZSBvdGhlciBwYWdlIHNpemVzXFxuKygxR0IgYW5kIDJNQikgYXJlIHN0aWxsIGFsbG9jYXRlZCBzdGF0aWNhbGx5IGF0IHRoZSB0aW1lIG9mIFREWCBtb2R1bGVcXG4raW5pdGlhbGl6YXRpb24uIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB0aGF0IFREWCB1c2VzIHdoaWxlIFREcyBhcmVcXG4rbm90IGluIHVzZS5cXG4rXFxuK1doZW4gRHluYW1pYyBQQU1UIGlzIGluIHVzZSwgZG1lc2cgc2hvd3MgaXQgbGlrZTo6XFxuK1xcbisgIFsuLl0gdmlydC90ZHg6IEVuYWJsZSBEeW5hbWljIFBBTVRcXG4rICBbLi5dIHZpcnQvdGR4OiAxMDA5MiBLQiBhbGxvY2F0ZWQgZm9yIFBBTVRcXG4rICBbLi5dIHZpcnQvdGR4OiBURFgtTW9kdWxlIGluaXRpYWxpemVkXFxuK1xcbitEeW5hbWljIFBBTVQgaXMgb25seSBlbmFibGVkIHdoZW4gc3VwcG9ydGVkIGFuZCB0aGUgYGB0ZHhfZHBhbXQ9YGAga2VybmVsXFxuK3BhcmFtZXRlciBpcyBzZXQgdG8gXFxcIm9uXFxcIi4gVGhlIGZlYXR1cmUgaXMgb2ZmIGJ5IGRlZmF1bHQgYmVjYXVzZSBURFggbW9kdWxlXFxuK2ludGVybmFsIGRldGFpbHMgcHJldmVudCBEeW5hbWljIFBBTVQgZnJvbSB3b3JraW5nIG9uIGFsbCBrZXlpZCBwYXJ0aXRpb25pbmdcXG4rY29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxcbitpdHMgZW51bWVyYXRpb24gb2YgRHluYW1pYyBQQU1UIHN1cHBvcnQsIGtlcm5lbCBzdXBwb3J0IGNhbiBiZSBjaGFuZ2VkIHRvXFxuK2RlZmF1bHQgb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjb25zdWx0IHRoZSBJbnRlbCBURFggZG9jdW1lbnRhdGlvbiBhYm91dFxcbitEeW5hbWljIFBBTVQuXFxuK1xcbiBURFggSW50ZXJhY3Rpb24gdG8gT3RoZXIgS2VybmVsIENvbXBvbmVudHNcXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbmluZGV4IDgzZGM1MDg2MTM4YjMuLjU4ODU2M2RmZTg4ZDUgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5AQCAtOTgsNiArOTgsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKVxcbiBLVk1fWDg2X09QKGxvYWRfbW11X3BnZClcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF9leHRlcm5hbF9zcHRlKVxcbiBLVk1fWDg2X09QX09QVElPTkFMKGZyZWVfZXh0ZXJuYWxfc3B0KVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodG9wdXBfZXh0ZXJuYWxfY2FjaGUpXFxuIEtWTV9YODZfT1AoaGFzX3diaW52ZF9leGl0KVxcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxcbiBLVk1fWDg2X09QKGdldF9sMl90c2NfbXVsdGlwbGllcilcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdC8qIFVwZGF0ZSBleHRlcm5hbCBwYWdlIHRhYmxlcyBmb3IgcGFnZSB0YWJsZSBhYm91dCB0byBiZSBmcmVlZC4gKi9cXG4gXFx0dm9pZCAoKmZyZWVfZXh0ZXJuYWxfc3B0KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKTtcXG4gXFxuK1xcdGludCAoKnRvcHVwX2V4dGVybmFsX2NhY2hlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cyk7XFxuIFxcbiBcXHRib29sICgqaGFzX3diaW52ZF9leGl0KSh2b2lkKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5pbmRleCA4OWU5N2Q1NzYxZDg5Li43OTEwOTAxYTdiYTIxIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcXG5AQCAtMzYsNiArMzYsNyBAQFxcbiAvKiBCaXQgZGVmaW5pdGlvbnMgb2YgVERYX0ZFQVRVUkVTMCBtZXRhZGF0YSBmaWVsZCAqL1xcbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1xcdEJJVF9VTEwoMSlcXG4gI2RlZmluZSBURFhfRkVBVFVSRVMwX05PX1JCUF9NT0RcXHRCSVRfVUxMKDE4KVxcbisjZGVmaW5lIFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UXFx0QklUX1VMTCgzNilcXG4gXFxuICNpZm5kZWYgX19BU1NFTUJMRVJfX1xcbiBcXG5AQCAtMTE4LDEyICsxMTksMzcgQEAgc3RhdGljIGlubGluZSBib29sIHRkeF9zdXBwb3J0c19ydW50aW1lX3VwZGF0ZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZcXG4gXFx0cmV0dXJuIHN5c2luZm8tXFx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXFx1MDAyNiBURFhfRkVBVFVSRVMwX1REX1BSRVNFUlZJTkc7XFxuIH1cXG4gXFxuK2Jvb2wgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKTtcXG4rXFxuKy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIER5bmFtaWMgUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi9cXG4rc3RydWN0IHRkeF9wYW10X2NhY2hlIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XFxuK1xcdGludCBjbnQ7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgdGR4X2luaXRfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0KTtcXG4rXFx0Y2FjaGUtXFx1MDAzZWNudCA9IDA7XFxuK31cXG4rXFxuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcXG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcXG4rdm9pZCB0ZHhfcGFtdF9wdXQoa3ZtX3Bmbl90IHBmbik7XFxuK1xcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xcbiB1MzIgdGR4X2dldF9ucl9ndWVzdF9rZXlpZHModm9pZCk7XFxuIHZvaWQgdGR4X2d1ZXN0X2tleWlkX2ZyZWUodW5zaWduZWQgaW50IGtleWlkKTtcXG4gXFxuIHZvaWQgdGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplKTtcXG4gXFxuKy8qIE51bWJlciBvZiBQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cXG4rI2RlZmluZSBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQgMlxcbitcXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7XFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTtcXG4rXFxuIHN0cnVjdCB0ZHhfdGQge1xcbiBcXHQvKiBURCByb290IHN0cnVjdHVyZTogKi9cXG4gXFx0c3RydWN0IHBhZ2UgKnRkcl9wYWdlO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcXG5pbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeF9nbG9iYWxfbWV0YWRhdGEuaFxcbkBAIC0yMSw2ICsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XFxuIFxcdHUxNiBwYW10XzRrX2VudHJ5X3NpemU7XFxuIFxcdHUxNiBwYW10XzJtX2VudHJ5X3NpemU7XFxuIFxcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XFxuK1xcbitcXHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqL1xcbitcXHR1OCAgcGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xcbiB9O1xcbiBcXG4gc3RydWN0IHRkeF9zeXNfaW5mb190ZF9jdHJsIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG5pbmRleCA2NmU2OWQyYTQxYjNjLi4yYTYyOGI4MzA0NDA5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXFxuQEAgLTYxNCw2ICs2MTQsMTAgQEAgc3RhdGljIGludCBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgbWF5YmVfaW5kaXJlY3QpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBQVDY0X1JPT1RfTUFYX0xFVkVMKTtcXG4gXFx0XFx0aWYgKHIpXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbitcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXHRyID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUoXFx1MDAyNnZjcHUtXFx1MDAzZWFyY2gubW11X3NoYWRvd19wYWdlX2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmMgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuaW5kZXggNTQ1YjAzZDlkMTBiOC4uMDk1NzMxMTI1NDBlOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguY1xcbkBAIC0zNjIsNyArMzYyLDcgQEAgc3RhdGljIHZvaWQgdGR4X3JlY2xhaW1fY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpjdHJsX3BhZ2UpXFxuIFxcdGlmICh0ZHhfcmVjbGFpbV9wYWdlKGN0cmxfcGFnZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdF9fZnJlZV9wYWdlKGN0cmxfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShjdHJsX3BhZ2UpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgdGR4X2ZsdXNoX3ZwX2FyZyB7XFxuQEAgLTU4OSw3ICs1ODksNyBAQCBzdGF0aWMgdm9pZCB0ZHhfcmVjbGFpbV90ZF9jb250cm9sX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFxuIFxcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMoa3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UpLCBQQUdFX1NJWkUpO1xcbiBcXG4tXFx0X19mcmVlX3BhZ2Uoa3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoa3ZtX3RkeC1cXHUwMDNldGQudGRyX3BhZ2UpO1xcbiBcXHRrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XFxuIH1cXG4gXFxuQEAgLTY4MSw2ICs2ODEsOCBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCFpcnFjaGlwX3NwbGl0KHZjcHUtXFx1MDAzZWt2bSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0dGR4X2luaXRfcGFtdF9jYWNoZShcXHUwMDI2dGR4LVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFxuIFxcdGZwc3RhdGVfc2V0X2NvbmZpZGVudGlhbChcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5ndWVzdF9mcHUpO1xcbiBcXHR2Y3B1LVxcdTAwM2VhcmNoLmFwaWMtXFx1MDAzZWd1ZXN0X2FwaWNfcHJvdGVjdGVkID0gdHJ1ZTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRkeC1cXHUwMDNldnQucGlfd2FrZXVwX2xpc3QpO1xcbkBAIC04NjYsNiArODY4LDggQEAgdm9pZCB0ZHhfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0dGR4X2ZyZWVfcGFtdF9jYWNoZShcXHUwMDI2dGR4LVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFxuIFxcdGlmICh2Y3B1LVxcdTAwM2VjcHUgIT0gLTEpIHtcXG4gXFx0XFx0S1ZNX0JVR19PTih0ZHgtXFx1MDAzZXN0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtXFx1MDAzZWt2bSk7XFxuIFxcdFxcdHRkeF9mbHVzaF92cF9vbl9jcHUodmNwdSk7XFxuQEAgLTE2MjEsNiArMTYyNSwxNyBAQCB2b2lkIHRkeF9sb2FkX21tdV9wZ2Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBocGFfdCByb290X2hwYSwgaW50IHBnZF9sZXZlbClcXG4gXFx0dGRfdm1jc193cml0ZTY0KHRvX3RkeCh2Y3B1KSwgU0hBUkVEX0VQVF9QT0lOVEVSLCByb290X2hwYSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbWluX25yX3NwdHMpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXFxuK1xcdCAqIHBvc3NpYmxlIDRLQiBwcml2YXRlIG1hcHBpbmcuXFxuK1xcdCAqL1xcbitcXHRtaW5fbnJfc3B0cyArPSAtMSArIDE7XFxuK1xcbitcXHRyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoXFx1MDAyNnRvX3RkeCh2Y3B1KS1cXHUwMDNlcGFtdF9jYWNoZSwgbWluX25yX3NwdHMpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHRkeF9tZW1fcGFnZV9hZGQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZWwsXFxuIFxcdFxcdFxcdCAgICBrdm1fcGZuX3QgcGZuKVxcbiB7XFxuQEAgLTE2NzksMTYgKzE2OTQsMjggQEAgc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfc3B0ZV90b19zZXB0X3B0KHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuIFxcdFxcdFxcdFxcdCAgICAgZW51bSBwZ19sZXZlbCBsZXZlbCwgdTY0IG5ld19zcHRlKVxcbiB7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XFxuIFxcdGdwYV90IGdwYSA9IGdmbl90b19ncGEoZ2ZuKTtcXG4gXFx0dTY0IGVyciwgZW50cnksIGxldmVsX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdHNlcHRfcHQgPSB0ZHhfc3B0ZV90b19zZXB0X3B0KGt2bSwgZ2ZuLCBuZXdfc3B0ZSwgbGV2ZWwpO1xcbiBcXHRpZiAoIXNlcHRfcHQpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4rXFx0cmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCBcXHUwMDI2dG9fdGR4KHZjcHUpLVxcdTAwM2VwYW10X2NhY2hlKTtcXG4rXFx0aWYgKEtWTV9CVUdfT04ocmV0LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4gXFx0ZXJyID0gdGRoX21lbV9zZXB0X2FkZChcXHUwMDI2dG9fa3ZtX3RkeChrdm0pLVxcdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCxcXG4gXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZlbnRyeSwgXFx1MDAyNmxldmVsX3N0YXRlKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpKTtcXG4rXFxuIFxcdGlmICh1bmxpa2VseSh0ZHhfb3BlcmFuZF9idXN5KGVycikpKVxcbiBcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiBcXG5AQCAtMTcwMSw4ICsxNzI4LDEzIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX25vbmxlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcXG4gc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxcbiBcXHRcXHRcXHRcXHQgIHU2NCBuZXdfc3B0ZSlcXG4ge1xcbitcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xcbiBcXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcXG4gXFx0a3ZtX3Bmbl90IHBmbiA9IHNwdGVfdG9fcGZuKG5ld19zcHRlKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChLVk1fQlVHX09OKCF2Y3B1LCBrdm0pKVxcbitcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdC8qIFRPRE86IGhhbmRsZSBsYXJnZSBwYWdlcy4gKi9cXG4gXFx0aWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpXFxuQEAgLTE3MTAsNiArMTc0MiwxMCBAQCBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sIGVudW0gcGdfbGV2ZWwgbGV2ZVxcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKChuZXdfc3B0ZSBcXHUwMDI2IFZNWF9FUFRfUldYX01BU0spICE9IFZNWF9FUFRfUldYX01BU0spO1xcbiBcXG4rXFx0cmV0ID0gdGR4X3BhbXRfZ2V0KHBmbiwgXFx1MDAyNnRvX3RkeCh2Y3B1KS1cXHUwMDNlcGFtdF9jYWNoZSk7XFxuK1xcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIEVuc3VyZSBwcmVfZmF1bHRfYWxsb3dlZCBpcyByZWFkIGJ5IGt2bV9hcmNoX3ZjcHVfcHJlX2ZhdWx0X21lbW9yeSgpXFxuIFxcdCAqIGJlZm9yZSBrdm1fdGR4LVxcdTAwM2VzdGF0ZS4gIFVzZXJzcGFjZSBtdXN0IG5vdCBiZSBhbGxvd2VkIHRvIHByZS1mYXVsdFxcbkBAIC0xNzIyLDEwICsxNzU4LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXFxuIFxcdCAqIElmIHRoZSBURCBpc24ndCBmaW5hbGl6ZWQvcnVubmFibGUsIHRoZW4gdXNlcnNwYWNlIGlzIGluaXRpYWxpemluZ1xcbiBcXHQgKiB0aGUgVk0gaW1hZ2UgdmlhIEtWTV9URFhfSU5JVF9NRU1fUkVHSU9OOyBBREQgdGhlIHBhZ2UgdG8gdGhlIFRELlxcbiBcXHQgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGt2bV90ZHgtXFx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSlcXG4tXFx0XFx0cmV0dXJuIHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xcbitcXHRpZiAobGlrZWx5KGt2bV90ZHgtXFx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcXG4rXFx0XFx0cmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0ID0gdGR4X21lbV9wYWdlX2FkZChrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XFxuK1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHR0ZHhfcGFtdF9wdXQocGZuKTtcXG4gXFxuLVxcdHJldHVybiB0ZHhfbWVtX3BhZ2VfYXVnKGt2bSwgZ2ZuLCBsZXZlbCwgcGZuKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTgyMiw2ICsxODYzLDcgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9yZW1vdmVfbGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdHRkeF9xdWlya19yZXNldF9wYWRkcihQRk5fUEhZUyhwZm4pLCBQQUdFX1NJWkUpO1xcbitcXHR0ZHhfcGFtdF9wdXQocGZuKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTE4NjUsNiArMTkwNyw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLFxcbiAgKi9cXG4gc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbiB7XFxuK1xcdHN0cnVjdCBwYWdlICpzZXB0X3B0ID0gdmlydF90b19wYWdlKHNwLVxcdTAwM2VleHRlcm5hbF9zcHQpO1xcbitcXG4gXFx0LypcXG4gXFx0ICogS1ZNIGRvZXNuJ3QgKHlldCkgemFwIHBhZ2UgdGFibGUgcGFnZXMgaW4gbWlycm9yIHBhZ2UgdGFibGUgd2hpbGVcXG4gXFx0ICogVEQgaXMgYWN0aXZlLCB0aG91Z2ggZ3Vlc3QgcGFnZXMgbWFwcGVkIGluIG1pcnJvciBwYWdlIHRhYmxlIGNvdWxkIGJlXFxuQEAgLTE4NzgsMTUgKzE5MjIsMTUgQEAgc3RhdGljIHZvaWQgdGR4X3NlcHRfZnJlZV9wcml2YXRlX3NwdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKVxcbiBcXHQgKiB0aGUgcGFnZSB0byBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBhY2Nlc3NpbmcgdGhlIGVuY3J5cHRlZCBwYWdlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKEtWTV9CVUdfT04oaXNfaGtpZF9hc3NpZ25lZCh0b19rdm1fdGR4KGt2bSkpLCBrdm0pIHx8XFxuLVxcdCAgICB0ZHhfcmVjbGFpbV9wYWdlKHZpcnRfdG9fcGFnZShzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0KSkpXFxuK1xcdCAgICB0ZHhfcmVjbGFpbV9wYWdlKHNlcHRfcHQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XFxuLVxcdCAqIGFmdGVyIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nXFxuLVxcdCAqIHJlYWRlcnMuXFxuK1xcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24ndCBzdXBwb3J0XFxuK1xcdCAqIGZyZWVpbmcgcGFnZXMgZnJvbSBSQ1UgY2FsbGJhY2tzLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBiZWNhdXNlXFxuK1xcdCAqIFRESC5QSFlNRU0uUEFHRS5SRUNMQUlNIGVuc3VyZXMgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlYWRlcnMuXFxuIFxcdCAqL1xcbi1cXHRmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3AtXFx1MDAzZWV4dGVybmFsX3NwdCk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShzZXB0X3B0KTtcXG4gb3V0OlxcbiBcXHRzcC1cXHUwMDNlZXh0ZXJuYWxfc3B0ID0gTlVMTDtcXG4gfVxcbkBAIC0yNDU5LDcgKzI1MDMsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXFxuIFxcbiBcXHRyZXQgPSAtRU5PTUVNO1xcbiBcXG4tXFx0dGRyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdHRkcl9wYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRpZiAoIXRkcl9wYWdlKVxcbiBcXHRcXHRnb3RvIGZyZWVfaGtpZDtcXG4gXFxuQEAgLTI0NzIsNyArMjUxNiw3IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gXFx0XFx0Z290byBmcmVlX3RkcjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0dGRjc19wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0XFx0dGRjc19wYWdlc1tpXSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcXG4gXFx0XFx0aWYgKCF0ZGNzX3BhZ2VzW2ldKVxcbiBcXHRcXHRcXHRnb3RvIGZyZWVfdGRjcztcXG4gXFx0fVxcbkBAIC0yNTkwLDEwICsyNjM0LDggQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxcbiB0ZWFyZG93bjpcXG4gXFx0LyogT25seSBmcmVlIHBhZ2VzIG5vdCB5ZXQgYWRkZWQsIHNvIHN0YXJ0IGF0ICdpJyAqL1xcbiBcXHRmb3IgKDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRpZiAodGRjc19wYWdlc1tpXSkge1xcbi1cXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4tXFx0XFx0XFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XFxuLVxcdFxcdH1cXG4rXFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbitcXHRcXHR0ZGNzX3BhZ2VzW2ldID0gTlVMTDtcXG4gXFx0fVxcbiBcXHRpZiAoIWt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfcGFnZXMpXFxuIFxcdFxcdGtmcmVlKHRkY3NfcGFnZXMpO1xcbkBAIC0yNjA4LDE2ICsyNjUwLDEzIEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcXG4gXFx0ZnJlZV9jcHVtYXNrX3ZhcihwYWNrYWdlcyk7XFxuIFxcbiBmcmVlX3RkY3M6XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHRkY3NfcGFnZXNbaV0pXFxuLVxcdFxcdFxcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGNzX25yX3BhZ2VzOyBpKyspXFxuK1xcdFxcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcXG4gXFx0a2ZyZWUodGRjc19wYWdlcyk7XFxuIFxcdGt2bV90ZHgtXFx1MDAzZXRkLnRkY3NfcGFnZXMgPSBOVUxMO1xcbiBcXG4gZnJlZV90ZHI6XFxuLVxcdGlmICh0ZHJfcGFnZSlcXG4tXFx0XFx0X19mcmVlX3BhZ2UodGRyX3BhZ2UpO1xcbitcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRyX3BhZ2UpO1xcbiBcXHRrdm1fdGR4LVxcdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XFxuIFxcbiBmcmVlX2hraWQ6XFxuQEAgLTI5NTEsNyArMjk5MCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFx0aW50IHJldCwgaTtcXG4gXFx0dTY0IGVycjtcXG4gXFxuLVxcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdHBhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XFxuIFxcdGlmICghcGFnZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSA9IHBhZ2U7XFxuQEAgLTI5NzEsNyArMzAxMCw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFx0fVxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXHRcXHRwYWdlID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xcbiBcXHRcXHRpZiAoIXBhZ2UpIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0Z290byBmcmVlX3RkY3g7XFxuQEAgLTI5OTMsNyArMzAzMiw3IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcXG4gXFx0XFx0XFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIGt2bV90ZHgtXFx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xcbi1cXHRcXHRcXHRcXHRfX2ZyZWVfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xcbitcXHRcXHRcXHRcXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4gXFx0XFx0XFx0XFx0dGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG5AQCAtMzAyMSwxNiArMzA2MCwxNCBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXFxuIFxcbiBmcmVlX3RkY3g6XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrdm1fdGR4LVxcdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcXG4tXFx0XFx0aWYgKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSlcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzW2ldKTtcXG4rXFx0XFx0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XFxuIFxcdFxcdHRkeC1cXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFx0a2ZyZWUodGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzKTtcXG4gXFx0dGR4LVxcdTAwM2V2cC50ZGN4X3BhZ2VzID0gTlVMTDtcXG4gXFxuIGZyZWVfdGR2cHI6XFxuLVxcdGlmICh0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UpXFxuLVxcdFxcdF9fZnJlZV9wYWdlKHRkeC1cXHUwMDNldnAudGR2cHJfcGFnZSk7XFxuK1xcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UpO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkdnByX3BhZ2UgPSBOVUxMO1xcbiBcXHR0ZHgtXFx1MDAzZXZwLnRkdnByX3BhID0gMDtcXG4gXFxuQEAgLTM0OTMsNiArMzUzMCwxMCBAQCBpbnQgX19pbml0IHRkeF9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiBcXG4gXFx0dnRfeDg2X29wcy5zZXRfZXh0ZXJuYWxfc3B0ZSA9IHRkeF9zZXB0X3NldF9wcml2YXRlX3NwdGU7XFxuIFxcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xcbitcXG4rXFx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKVxcbitcXHRcXHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XFxuK1xcbiBcXHR2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDtcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxcbmluZGV4IGFjODMyM2E2OGIxNjMuLmZkMzY4ZTNlZTA2MGIgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxcbisrKyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmhcXG5AQCAtNzIsNiArNzIsOCBAQCBzdHJ1Y3QgdmNwdV90ZHgge1xcbiBcXG4gXFx0dTY0IG1hcF9ncGFfbmV4dDtcXG4gXFx0dTY0IG1hcF9ncGFfZW5kO1xcbitcXG4rXFx0c3RydWN0IHRkeF9wYW10X2NhY2hlIHBhbXRfY2FjaGU7XFxuIH07XFxuIFxcbiB2b2lkIHRkaF92cF9yZF9mYWlsZWQoc3RydWN0IHZjcHVfdGR4ICp0ZHgsIGNoYXIgKnVjbGFzcywgdTMyIGZpZWxkLCB1NjQgZXJyKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXFxuaW5kZXggNDJkZjhlYTQ2NGM0Ny4uZGVjNDU3MDllNDU0YSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNcXG5AQCAtMzAsNiArMzAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY29yZV9vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lkci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zcGVjaWFsX2luc25zLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vbXNyLWluZGV4LmhcXHUwMDNlXFxuQEAgLTQ2LDYgKzQ3LDggQEBcXG4gI2luY2x1ZGUgXFxcInNlYW1jYWxsX2ludGVybmFsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ0ZHguaFxcXCJcXG4gXFxuK3N0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xcbitcXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xcbiBcXHRib29sIGluaXRpYWxpemVkO1xcbiBcXHRib29sIHN5c2luaXRfZG9uZTtcXG5AQCAtNjMsNiArNjYsMTQgQEAgc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIHRkeF9scF9pbml0aWFsaXplZCk7XFxuIFxcbiBzdGF0aWMgc3RydWN0IHRkbXJfaW5mb19saXN0IHRkeF90ZG1yX2xpc3Q7XFxuIFxcbisvKlxcbisgKiBPbiBhIG1hY2hpbmUgd2l0aCBEeW5hbWljIFBBTVQsIHRoZSBrZXJuZWwgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIGNvdW50ZXJcXG4rICogZm9yIGV2ZXJ5IDJNQiByYW5nZS4gVGhlIGNvdW50ZXIgaW5kaWNhdGVzIGhvdyBtYW55IHVzZXJzIHRoZXJlIGFyZSBmb3JcXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XFxuKyAqIGluaXRpYWxpemF0aW9uLlxcbisgKi9cXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcXG4rXFxuIC8qIEFsbCBURFgtdXNhYmxlIG1lbW9yeSByZWdpb25zLiAgUHJvdGVjdGVkIGJ5IG1lbV9ob3RwbHVnX2xvY2suICovXFxuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xcbiBcXG5AQCAtMjUyLDYgKzI2Myw0MiBAQCBzdGF0aWMgc3RydWN0IHN5c2NvcmUgdGR4X3N5c2NvcmUgPSB7XFxuIFxcdC5vcHMgPSBcXHUwMDI2dGR4X3N5c2NvcmVfb3BzLFxcbiB9O1xcbiBcXG4rLypcXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXFxuKyAqXFxuKyAqIEl0IGNvbnN1bWVzIDJNQiBmb3IgZXZlcnkgMVRCIG9mIHBoeXNpY2FsIG1lbW9yeS5cXG4rICovXFxuK3N0YXRpYyBfX2luaXQgaW50IGluaXRfcGFtdF9yZWZjb3VudHModm9pZClcXG4re1xcbitcXHRzaXplX3Qgc2l6ZSA9IERJVl9ST1VORF9VUChtYXhfcGZuLCBQVFJTX1BFUl9QVEUpICogc2l6ZW9mKCpwYW10X3JlZmNvdW50cyk7XFxuK1xcbitcXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRwYW10X3JlZmNvdW50cyA9IHZ6YWxsb2Moc2l6ZSk7XFxuK1xcdGlmICghcGFtdF9yZWZjb3VudHMpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBfX2luaXQgdm9pZCBmcmVlX3BhbXRfcmVmY291bnRzKHZvaWQpXFxuK3tcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZmcmVlKHBhbXRfcmVmY291bnRzKTtcXG4rXFx0cGFtdF9yZWZjb3VudHMgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgYXRvbWljX3QgKnRkeF9maW5kX3BhbXRfcmVmY291bnQodW5zaWduZWQgbG9uZyBwZm4pXFxuK3tcXG4rXFx0LyogRmluZCB3aGljaCBQTUQgYSBQRk4gaXMgaW4uICovXFxuK1xcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXFx1MDAzZVxcdTAwM2UgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XFxuK31cXG4rXFxuIC8qXFxuICAqIEFkZCBhIG1lbW9yeSByZWdpb24gYXMgYSBURFggbWVtb3J5IGJsb2NrLiAgVGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZVxcbiAgKiBhbGwgbWVtb3J5IHJlZ2lvbnMgYXJlIGFkZGVkIGluIGFkZHJlc3MgYXNjZW5kaW5nIG9yZGVyIGFuZCBkb24ndFxcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X2JpdG1hcF9zeihzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRpbnQgYml0c19wZXJfZW50cnk7XFxuK1xcbitcXHRiaXRzX3Blcl9lbnRyeSA9IHRkeF9zeXNpbmZvLnRkbXIucGFtdF9wYWdlX2JpdG1hcF9lbnRyeV9iaXRzO1xcbitcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdHBhbXRfc3ogPSBESVZfUk9VTkRfVVAobnJfcGFtdF9lbnRyaWVzICogYml0c19wZXJfZW50cnksIEJJVFNfUEVSX0JZVEUpO1xcbitcXG4rXFx0cmV0dXJuIFBBR0VfQUxJR04ocGFtdF9zeik7XFxuK31cXG4rXFxuIC8qXFxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxcbiAgKiBQQU1UIHNpemUgaXMgYWx3YXlzIGFsaWduZWQgdXAgdG8gNEsgcGFnZSBib3VuZGFyeS5cXG4gICovXFxuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXFxuK3N0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGFtdF9zeiwgbnJfcGFtdF9lbnRyaWVzO1xcbitcXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcXG4rXFx0Y29uc3QgdTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbitcXHRcXHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfNGtfZW50cnlfc2l6ZSxcXG4rXFx0XFx0dGR4X3N5c2luZm8udGRtci5wYW10XzJtX2VudHJ5X3NpemUsXFxuK1xcdFxcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8xZ19lbnRyeV9zaXplLFxcbitcXHR9O1xcbiBcXG4tXFx0c3dpdGNoIChwZ3N6KSB7XFxuLVxcdGNhc2UgVERYX1BTXzRLOlxcbi1cXHRcXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVxcdTAwM2VzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18yTTpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQTURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFREWF9QU18xRzpcXG4tXFx0XFx0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cXHUwMDNlc2l6ZSBcXHUwMDNlXFx1MDAzZSBQVURfU0hJRlQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRXQVJOX09OX09OQ0UoMSk7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuK1xcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXFx1MDAzZXNpemUgXFx1MDAzZVxcdTAwM2UgdGR4X3BnX3NpemVfc2hpZnRbcGdzel07XFxuK1xcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XFxuIFxcbi1cXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xcbiBcXHQvKiBURFggcmVxdWlyZXMgUEFNVCBzaXplIG11c3QgYmUgNEsgYWxpZ25lZCAqL1xcbi1cXHRwYW10X3N6ID0gQUxJR04ocGFtdF9zeiwgUEFHRV9TSVpFKTtcXG4tXFxuLVxcdHJldHVybiBwYW10X3N6O1xcbitcXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNTc2LDE1ICs2MjUsMTEgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9nZXRfbmlkKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXNcXG4gICogd2l0aGluIEB0ZG1yLCBhbmQgc2V0IHVwIFBBTVRzIGZvciBAdGRtci5cXG4gICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4tXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgIHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X2Jhc2VbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcXG4tXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfYmFzZTtcXG4gXFx0dW5zaWduZWQgbG9uZyB0ZG1yX3BhbXRfc2l6ZTtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhbXQ7XFxuLVxcdGludCBwZ3N6LCBuaWQ7XFxuK1xcdGludCBuaWQ7XFxuIFxcbiBcXHRuaWQgPSB0ZG1yX2dldF9uaWQodGRtciwgdG1iX2xpc3QpO1xcbiBcXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKiBDYWxjdWxhdGUgdGhlIFBBTVQgc2l6ZSBmb3IgZWFjaCBURFggc3VwcG9ydGVkIHBhZ2Ugc2l6ZVxcbiBcXHQgKiBhbmQgdGhlIHRvdGFsIFBBTVQgc2l6ZS5cXG4gXFx0ICovXFxuLVxcdHRkbXJfcGFtdF9zaXplID0gMDtcXG4tXFx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFxcdTAwM2MgVERYX1BTX05SOyBwZ3N6KyspIHtcXG4tXFx0XFx0cGFtdF9zaXplW3Bnc3pdID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBwZ3N6LFxcbi1cXHRcXHRcXHRcXHRcXHRwYW10X2VudHJ5X3NpemVbcGdzel0pO1xcbi1cXHRcXHR0ZG1yX3BhbXRfc2l6ZSArPSBwYW10X3NpemVbcGdzel07XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzFHKTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8ybV9zaXplID0gdGRtcl9nZXRfcGFtdF9zeih0ZG1yLCBURFhfUFNfMk0pO1xcbitcXG4rXFx0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkge1xcbitcXHRcXHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXFxuK1xcdFxcdHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfYml0bWFwX3N6KHRkbXIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU180Syk7XFxuIFxcdH1cXG4gXFxuK1xcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cXHUwMDNlcGFtdF80a19zaXplICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplICsgdGRtci1cXHUwMDNlcGFtdF8xZ19zaXplO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsb2NhdGUgb25lIGNodW5rIG9mIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZm9yIGFsbFxcbiBcXHQgKiBQQU1Ucy4gIFRoaXMgaGVscHMgbWluaW1pemUgdGhlIFBBTVQncyB1c2Ugb2YgcmVzZXJ2ZWQgYXJlYXNcXG5AQCAtNjA2LDI1ICs2NTYsMTcgQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxcbiBcXHQgKi9cXG4gXFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRuaWQsIFxcdTAwMjZub2RlX29ubGluZV9tYXApO1xcbi1cXHRpZiAoIXBhbXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQnJlYWsgdGhlIGNvbnRpZ3VvdXMgYWxsb2NhdGlvbiBiYWNrIHVwIGludG8gdGhlXFxuLVxcdCAqIGluZGl2aWR1YWwgUEFNVHMgZm9yIGVhY2ggcGFnZSBzaXplLlxcbitcXHQgKiB0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgaXMgc3RpbGwgemVybyBzbyB0aGUgZXJyb3JcXG4rXFx0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxcbiBcXHQgKi9cXG4tXFx0dGRtcl9wYW10X2Jhc2UgPSBwYWdlX3RvX3BmbihwYW10KSBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi1cXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xcbi1cXHRcXHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcXG4tXFx0XFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xcbi1cXHR9XFxuK1xcdGlmICghcGFtdClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzRLXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF80a19zaXplID0gcGFtdF9zaXplW1REWF9QU180S107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMk1dO1xcbi1cXHR0ZG1yLVxcdTAwM2VwYW10XzJtX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzJNXTtcXG4tXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gcGFtdF9iYXNlW1REWF9QU18xR107XFxuLVxcdHRkbXItXFx1MDAzZXBhbXRfMWdfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfMUddO1xcbitcXHR0ZG1yLVxcdTAwM2VwYW10XzRrX2Jhc2UgPSBwYWdlX3RvX3BoeXMocGFtdCk7XFxuK1xcdHRkbXItXFx1MDAzZXBhbXRfMm1fYmFzZSA9IHRkbXItXFx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXFx1MDAzZXBhbXRfNGtfc2l6ZTtcXG4rXFx0dGRtci1cXHUwMDNlcGFtdF8xZ19iYXNlID0gdGRtci1cXHUwMDNlcGFtdF8ybV9iYXNlICsgdGRtci1cXHUwMDNlcGFtdF8ybV9zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjU1LDEwICs2OTcsNyBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcl9kb19wYW10X2Z1bmMoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcXG4gXFx0dGRtcl9nZXRfcGFtdCh0ZG1yLCBcXHUwMDI2cGFtdF9iYXNlLCBcXHUwMDI2cGFtdF9zaXplKTtcXG4gXFxuIFxcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xcbi1cXHRpZiAoIXBhbXRfc2l6ZSlcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4tXFx0aWYgKFdBUk5fT05fT05DRSghcGFtdF9iYXNlKSlcXG4rXFx0aWYgKCFwYW10X2Jhc2UpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHBhbXRfZnVuYyhwYW10X2Jhc2UsIHBhbXRfc2l6ZSk7XFxuQEAgLTY4NCwxNCArNzIzLDEyIEBAIHN0YXRpYyBfX2luaXQgdm9pZCB0ZG1yc19mcmVlX3BhbXRfYWxsKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0KVxcbiBcXG4gLyogQWxsb2NhdGUgYW5kIHNldCB1cCBQQU1UcyBmb3IgYWxsIFRETVJzICovXFxuIHN0YXRpYyBfX2luaXQgaW50IHRkbXJzX3NldF91cF9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdFxcdHUxNiBwYW10X2VudHJ5X3NpemVbXSlcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0KVxcbiB7XFxuIFxcdGludCBpLCByZXQgPSAwO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xcbi1cXHRcXHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXFxuLVxcdFxcdFxcdFxcdHBhbXRfZW50cnlfc2l6ZSk7XFxuK1xcdFxcdHJldCA9IHRkbXJfc2V0X3VwX3BhbXQodGRtcl9lbnRyeSh0ZG1yX2xpc3QsIGkpLCB0bWJfbGlzdCk7XFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHR9XFxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4tXFx0dTE2IHBhbXRfZW50cnlfc2l6ZVtURFhfUFNfTlJdID0ge1xcbi1cXHRcXHRzeXNpbmZvX3RkbXItXFx1MDAzZXBhbXRfNGtfZW50cnlfc2l6ZSxcXG4tXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXFxuLVxcdFxcdHN5c2luZm9fdGRtci1cXHUwMDNlcGFtdF8xZ19lbnRyeV9zaXplLFxcbi1cXHR9O1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmV0ID0gZmlsbF9vdXRfdGRtcnModG1iX2xpc3QsIHRkbXJfbGlzdCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRyZXQgPSB0ZG1yc19zZXRfdXBfcGFtdF9hbGwodGRtcl9saXN0LCB0bWJfbGlzdCwgcGFtdF9lbnRyeV9zaXplKTtcXG4rXFx0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtOTk4LDYgKzEwMzAsOCBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXFx0QklUKDE2KVxcbitcXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgICB1NjQgZ2xvYmFsX2tleWlkKVxcbiB7XFxuQEAgLTEwMjYsNiArMTA2MCwxMiBAQCBzdGF0aWMgX19pbml0IGludCBjb25maWdfdGR4X21vZHVsZShzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdCxcXG4gXFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xcbiBcXHRhcmdzLnJkeCA9IHRkbXJfbGlzdC1cXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XFxuIFxcdGFyZ3MucjggPSBnbG9iYWxfa2V5aWQ7XFxuK1xcbitcXHRpZiAodGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKSB7XFxuK1xcdFxcdHByX2luZm8oXFxcIkVuYWJsZSBEeW5hbWljIFBBTVRcXFxcblxcXCIpO1xcbitcXHRcXHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gc2VhbWNhbGxfcHJlcnIoVERIX1NZU19DT05GSUcsIFxcdTAwMjZhcmdzKTtcXG4gXFxuIFxcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xcbkBAIC0xMTY3LDEwICsxMjA3LDE0IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHQgKi9cXG4gXFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuIFxcbi1cXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRyZXQgPSBpbml0X3BhbXRfcmVmY291bnRzKCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90ZHhtZW07XFxuIFxcbitcXHRyZXQgPSBidWlsZF90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3BhbXRfcmVmY291bnRzO1xcbitcXG4gXFx0LyogQWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciBjb25zdHJ1Y3RpbmcgVERNUnMgKi9cXG4gXFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFxcdTAwMjZ0ZHhfdGRtcl9saXN0LCBcXHUwMDI2dGR4X3N5c2luZm8udGRtcik7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEyMjAsNiArMTI2NCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbiBcXHRmcmVlX3RkbXJfbGlzdChcXHUwMDI2dGR4X3RkbXJfbGlzdCk7XFxuIGVycl9mcmVlX3RkeG1lbTpcXG4gXFx0ZnJlZV90ZHhfbWVtbGlzdChcXHUwMDI2dGR4X21lbWxpc3QpO1xcbitlcnJfZnJlZV9wYW10X3JlZmNvdW50czpcXG4rXFx0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xcbiBcXHRnb3RvIG91dF9wdXRfdGR4bWVtO1xcbiB9XFxuIFxcbkBAIC0yMDAzLDYgKzIwNDksMjg4IEBAIHU2NCB0ZGhfcGh5bWVtX3BhZ2Vfd2JpbnZkX2hraWQodTY0IGhraWQsIGt2bV9wZm5fdCBwZm4pXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkaF9waHltZW1fcGFnZV93YmludmRfaGtpZCk7XFxuIFxcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4re1xcbitcXHRyZXR1cm4gc3lzaW5mby1cXHUwMDNlZmVhdHVyZXMudGR4X2ZlYXR1cmVzMCBcXHUwMDI2IFREWF9GRUFUVVJFUzBfRFlOQU1JQ19QQU1UIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlO1xcbitcXG4rXFx0cGFnZSA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2Y2FjaGUtXFx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XFxuK1xcdGlmIChwYWdlKSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUpO1xcbitcXHRcXHRjYWNoZS1cXHUwMDNlY250LS07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFsbG9jX2RwYW10X3BhZ2Uoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRpZiAoY2FjaGUpXFxuK1xcdFxcdHJldHVybiB0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKGNhY2hlKTtcXG4rXFxuK1xcdHJldHVybiBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYWxsb2NfcGFtdF9hcnJheShzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMsIHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXFxuK3tcXG4rXFx0aW50IGksIGo7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVERYX0RQQU1UX0VOVFJZX1BBR0VfQ05UOyBpKyspIHtcXG4rXFx0XFx0cGFtdF9wYWdlc1tpXSA9IGFsbG9jX2RwYW10X3BhZ2UoY2FjaGUpO1xcbitcXHRcXHRpZiAoIXBhbXRfcGFnZXNbaV0pXFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGk7IGorKylcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFtdF9wYWdlc1tqXSk7XFxuK1xcbitcXHRyZXR1cm4gLUVOT01FTTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZnJlZV9wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFJlc2V0IHBhZ2VzIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciBjYXNlc1xcbitcXHRcXHQgKiB3aGVyZSB0aGV5IHdlcmUgcGFzc2VkIHRvIHRoZSBURFggbW9kdWxlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzW2ldKSwgUEFHRV9TSVpFKTtcXG4rXFxuK1xcdFxcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxcbisgKiBhIGdpdmVuIDRLQiBwYWdlLlxcbisgKi9cXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcXG4re1xcbitcXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xcbitcXHR1bnNpZ25lZCBsb25nIGhwYV8ybWIgPSBBTElHTl9ET1dOKHBmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZULCBQTURfU0laRSk7XFxuK1xcbitcXHRyZXR1cm4gaHBhXzJtYiB8IFREWF9QU18yTTtcXG4rfVxcbitcXG4rLyogQWRkIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfYWRkKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0XFx0LnJkeCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzBdKSxcXG4rXFx0XFx0LnI4ID0gcGFnZV90b19waHlzKHBhbXRfcGFnZXNbMV0pLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIHNlYW1jYWxsKFRESF9QSFlNRU1fUEFNVF9BREQsIFxcdTAwMjZhcmdzKTtcXG4rfVxcbitcXG4rLyogUmVtb3ZlIFBBTVQgYmFja2luZyBmb3IgdGhlIDJNQiByZWdpb24gc3Vycm91bmRpbmcgdGhlIGdpdmVuIHBmbi4gKi9cXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcXG4re1xcbitcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XFxuK1xcdFxcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcXG4rXFx0fTtcXG4rXFx0dTY0IHJldDtcXG4rXFxuK1xcdHJldCA9IHNlYW1jYWxsX3JldChUREhfUEhZTUVNX1BBTVRfUkVNT1ZFLCBcXHUwMDI2YXJncyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBDb3B5IFBBTVQgcGFnZXMgb3V0IG9mIHRoZSBzdHJ1Y3QgcGVyIHRoZSBURFggQUJJICovXFxuK1xcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xcbitcXHRwYW10X3BhZ2VzWzFdID0gcGh5c190b19wYWdlKGFyZ3MucjgpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIFNlcmlhbGl6ZXMgYWRkaW5nL3JlbW92aW5nIFBBTVQgbWVtb3J5ICovXFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcXG4rXFxuKy8qIEJ1bXAgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgYWxsb2NhdGUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XFxuK1xcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xcbitcXHR1NjQgdGR4X3N0YXR1cztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcXHUwMDI2dGR4X3N5c2luZm8pKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXFx1MDAzZT0gMSksXFxuK1xcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKGF0b21pY19pbmNfbm90X3plcm8ocGFtdF9yZWZjb3VudCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gYWxsb2NfcGFtdF9hcnJheShwYW10X3BhZ2VzLCBjYWNoZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cXG4rXFx0ICogYXRvbWljYWxseSBoYW5kbGUgdGhlIDEtXFx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xcbitcXHQgKiBlcXVpdmFsZW50IGNvbWJpbmVkIHByaW1pdGl2ZSBmb3IgMC1cXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcXG4rXFx0ICogbG9jayBzaW5jZSBhbm90aGVyIGdldCBtYXkgaGF2ZSBhbHJlYWR5IGRvbmUgdGhlIDAtXFx1MDAzZTFcXG4rXFx0ICogdHJhbnNpdGlvbiBhZnRlciBib3RoIHNhdyBhdG9taWNfaW5jX25vdF96ZXJvKCkgZmFpbC5cXG4rXFx0ICovXFxuK1xcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXG4rXFx0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHRyZXQgPSAtRUlPO1xcbitcXHRcXHRnb3RvIG91dF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXFxuK1xcdCAqIG9ubHkgd2F5IHRvIGluY3JlYXNlIGl0IGZyb20gMC1cXHUwMDNlMS5cXG4rXFx0ICovXFxuK1xcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK291dF9mcmVlOlxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGFtdF9sb2NrKTtcXG4rXFx0ZnJlZV9wYW10X2FycmF5KHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcXG4rXFxuKy8qIERyb3AgUEFNVCByZWZjb3VudCBmb3IgdGhlIGdpdmVuIHBmbiBhbmQgZnJlZSBQQU1UIGJhY2tpbmcgaWYgbmVlZGVkLiAqL1xcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxcbit7XFxuK1xcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcXG4rXFx0YXRvbWljX3QgKnBhbXRfcmVmY291bnQ7XFxuK1xcdHU2NCB0ZHhfc3RhdHVzO1xcbitcXG4rXFx0aWYgKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFxcdTAwMjZ0ZHhfc3lzaW5mbykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBhbXRfcmVmY291bnQgPSB0ZHhfZmluZF9wYW10X3JlZmNvdW50KHBmbik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gMSByZWZlcmVuY2Ugb24gdGhlIHBhbXQgcGFnZSwgZG9uJ3RcXG4rXFx0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxcbitcXHQgKi9cXG4rXFx0aWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKHBhbXRfcmVmY291bnQsIFxcdTAwMjZwYW10X2xvY2spKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR0ZHhfc3RhdHVzID0gdGRoX3BoeW1lbV9wYW10X3JlbW92ZShwZm4sIHBhbXRfcGFnZXMpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRG9uJ3QgZnJlZSBwYW10X3BhZ2VzIGFzIGl0IGNvdWxkIGhvbGQgZ2FyYmFnZSB3aGVuXFxuK1xcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xcbitcXHQgKiB0aGVyZSBpcyBubyByaXNrIG9mIGRhdGEgY29ycnVwdGlvbiwgYnV0IGRvIHllbGwgbG91ZGx5IGFzXFxuK1xcdCAqIGZhaWx1cmUgaW5kaWNhdGVzIGEga2VybmVsIGJ1ZywgbWVtb3J5IGlzIGJlaW5nIGxlYWtlZCwgYW5kXFxuK1xcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSh0ZHhfc3RhdHVzICE9IFREWF9TVUNDRVNTKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBhdG9taWNfZGVjX2FuZF9sb2NrKCkgYWxyZWFkeSBkZWNyZW1lbnRlZCBpdCB0byAwLFxcbitcXHRcXHQgKiBidXQgdGhlIFBBTVQgZW50cnkgc3RpbGwgZXhpc3RzIHNpbmNlIFJFTU9WRSBmYWlsZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRhdG9taWNfc2V0KHBhbXRfcmVmY291bnQsIDEpO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwYW10X2xvY2spO1xcbitcXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XFxuK1xcdHJldHVybjtcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBhbXRfbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9wYW10X3B1dCk7XFxuK1xcbit2b2lkIHRkeF9mcmVlX3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHdoaWxlICgocGFnZSA9IHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpKSlcXG4rXFx0XFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xcbitcXG4raW50IHRkeF90b3B1cF9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKVxcbit7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXFx1MDAyNnRkeF9zeXNpbmZvKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcXG4rXFxuK1xcdHdoaWxlIChjYWNoZS1cXHUwMDNlY250IFxcdTAwM2MgbnBhZ2VzKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbitcXG4rXFx0XFx0aWYgKCFwYWdlKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VscnUsIFxcdTAwMjZjYWNoZS1cXHUwMDNlcGFnZV9saXN0KTtcXG4rXFx0XFx0Y2FjaGUtXFx1MDAzZWNudCsrO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3RvcHVwX3BhbXRfY2FjaGUpO1xcbitcXG4rLypcXG4rICogUmV0dXJuIGEgcGFnZSB0aGF0IGNhbiBiZSBnaWZ0ZWQgdG8gdGhlIFREWC1Nb2R1bGUgZm9yIHVzZSBhcyBhIFxcXCJjb250cm9sXFxcIlxcbisgKiBwYWdlLCBpLmUuIHBhZ2VzIHRoYXQgYXJlIHVzZWQgZm9yIGNvbnRyb2wgc3RydWN0dXJlcyBmb3IgYSBnaXZlbiBURFhcXG4rICogZ3Vlc3QsIGFuZCB0aHVzIG9idGFpbiBURFggcHJvdGVjdGlvbnMsIGluY2x1ZGluZyBQQU1UIHRyYWNraW5nLlxcbisgKi9cXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4rXFxuK1xcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xcbitcXHRcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBwYWdlO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfYWxsb2NfY29udHJvbF9wYWdlKTtcXG4rXFxuKy8qXFxuKyAqIEZyZWUgYSBwYWdlIHRoYXQgd2FzIGdpZnRlZCB0byB0aGUgVERYLU1vZHVsZSBmb3IgdXNlIGFzIGEgY29udHJvbFxcbisgKiBwYWdlLiBBZnRlciB0aGlzLCB0aGUgcGFnZSBpcyBubyBsb25nZXIgcHJvdGVjdGVkIGJ5IFREWC5cXG4rICovXFxuK3ZvaWQgdGR4X2ZyZWVfY29udHJvbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKVxcbit7XFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGR4X3BhbXRfcHV0KHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4rXFx0X19mcmVlX3BhZ2UocGFnZSk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX2NvbnRyb2xfcGFnZSk7XFxuK1xcbitzdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbit7XFxuK1xcdHJldHVybiBrc3RydG9ib29sKHN0ciwgXFx1MDAyNnRkeF9lbmFibGVfZHBhbXQpID09IDA7XFxuK31cXG4rXFxuK19fc2V0dXAoXFxcInRkeF9kcGFtdD1cXFwiLCB0ZHhfZHBhbXRfc2V0dXApO1xcbitcXG4gdm9pZCB0ZHhfc3lzX2Rpc2FibGUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7fTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXFxuaW5kZXggYmRmZDBlMWUzMzdhYy4uYTg4NmM1NGRlY2FhZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcXG5AQCAtNDgsNiArNDgsOCBAQFxcbiAjZGVmaW5lIFRESF9TWVNfQ09ORklHXFx0XFx0XFx0NDVcXG4gI2RlZmluZSBUREhfU1lTX1NIVVRET1dOXFx0XFx0NTJcXG4gI2RlZmluZSBUREhfU1lTX1VQREFURVxcdFxcdFxcdDUzXFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX0FERFxcdFxcdDU4XFxuKyNkZWZpbmUgVERIX1BIWU1FTV9QQU1UX1JFTU9WRVxcdFxcdDU5XFxuICNkZWZpbmUgVERIX1NZU19ESVNBQkxFXFx0XFx0XFx0NjlcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmMgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuaW5kZXggZTQ5YzMwMGYyM2Q0My4uOTNiMWYyNjI1MmM2MyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXFxuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuY1xcbkBAIC0xLDYgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKlxcbi0gKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbisgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxcbiAgKlxcbiAgKiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlIG9uIGl0cyBvd24gYXMgaXQgbGFja3Mgb2YgaW5jbHVzaW9uXFxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cXG5AQCAtMzMsNiArMzMsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb19mZWF0dXJlcyhzdHJ1Y3QgdGR4X3N5c19pbmZvX2ZlYXR1cmVzICpzeXNpbmZcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcdHU2NCB2YWw7XFxuK1xcbitcXHRyZXQgPSByZWFkX3N5c19tZXRhZGF0YV9maWVsZCgweDkxMDAwMDAwMDAwMDAwMTMsIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAoIXJldClcXG4rXFx0XFx0c3lzaW5mb190ZG1yLVxcdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuQEAgLTEyOSw1ICsxNDEsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mbyhzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZvKVxcbiBcXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFxcdTAwMjZzeXNpbmZvLVxcdTAwM2V0ZF9jdHJsKTtcXG4gXFx0cmV0ID0gcmV0ID86IGdldF90ZHhfc3lzX2luZm9fdGRfY29uZihcXHUwMDI2c3lzaW5mby1cXHUwMDNldGRfY29uZik7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGUga2VybmVsIHN1cHBvcnRzIHVzaW5nIFREWCB3aXRob3V0IER5bmFtaWMgUEFNVCwgc29cXG4rXFx0ICogYXZvaWQgcmVwb3J0aW5nIGZhaWx1cmUgaWYgaXQncyBub3Qgc3VwcG9ydGVkLiBEb24ndCB0cnlcXG4rXFx0ICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVRcXG4rXFx0ICogYnV0IGRvbid0IGV4cG9zZSB0aGUgbWV0YWRhdGEuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KHN5c2luZm8pKVxcbitcXHRcXHRyZXQgPSBnZXRfdGR4X3N5c19pbmZvX3RkbXJfZHBhbXQoXFx1MDAyNnN5c2luZm8tXFx1MDAzZXRkbXIpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzowMTowMi4wOTkyMTg2NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozNjM2OTk1MDExOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwMGVmYzQ5MTMxODgxZjE2YTViMTU4MGFkZjNmN2M3OTQyNjMxNDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDAzOjAwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuaW5kZXggYjU0OTNhN2Y4ZjIyOC4uYTBhNzY3MDI0NmJjNSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuQEAgLTc1MTIsNiArNzUxMiwxNiBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFxuIFx0dGRmeD1cdFx0W0hXLERSTV1cbiBcbitcdHRkeF9kcGFtdD1cbitcdFx0XHRbWDg2XSBDb250cm9scyB3aGV0aGVyIFREWCB3aWxsIHVzZSBEeW5hbWljIFBBTVRcbitcdFx0XHR0byBzYXZlIG1lbW9yeSwgd2hlbiBzdXBwb3J0ZWQuXG4rXG4rXHRcdFx0VmFsaWQgcGFyYW1ldGVyczogXCJvblwiLCBcIm9mZlwiXG4rXHRcdFx0RGVmYXVsdDogXCJvZmZcIlxuK1xuK1x0XHRcdEZvciBkZXRhaWxzIHNlZTpcbitcdFx0XHREb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbitcbiBcdHRlc3Rfc3VzcGVuZD1cdFtTVVNQRU5EXVxuIFx0XHRcdEZvcm1hdDogeyBcIm1lbVwiIHwgXCJzdGFuZGJ5XCIgfCBcImZyZWV6ZVwiIH1bLE5dXG4gXHRcdFx0U3BlY2lmeSBcIm1lbVwiIChmb3IgU3VzcGVuZC10by1SQU0pIG9yIFwic3RhbmRieVwiIChmb3JcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbmluZGV4IDMzMDM0OTlhZDRjNmYuLmExYzIzMDkyMzA1ODAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FyY2gveDg2L3RkeC5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYXJjaC94ODYvdGR4LnJzdFxuQEAgLTIwMCw2ICsyMDAsMzQgQEAgcmVmbGVjdHMgdGhlIFRDQiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgVERYIG1vZHVsZSBhbmQgdGhlcmVmb3JlXG4gY2hhbmdlcyBhZnRlciBhbiB1cGRhdGUuIEJ5IGNvbnRyYXN0LCBURUVfVENCX1NWTiByZWZsZWN0cyB0aGUgVENCIGF0IFREXG4gbGF1bmNoIHRpbWUgYW5kIGlzIG5vdCBhZmZlY3RlZC5cbiBcbitEeW5hbWljIFBBTVRcbistLS0tLS0tLS0tLS1cbitcbitQaHlzaWNhbCBBZGRyZXNzIE1ldGFkYXRhIFRhYmxlIChQQU1UKSBpcyBtZW1vcnkgdGhhdCB0aGUgVERYIG1vZHVsZSBuZWVkc1xuK3RvIGtlZXAgZGF0YSBhYm91dCBlYWNoIHBhZ2UgKHRoaW5rIGxpa2Ugc3RydWN0IHBhZ2UpLiBJdCBuZWVkcyB0byBiZSBoYW5kZWRcbit0byB0aGUgVERYIG1vZHVsZSBmb3IgaXRzIGV4Y2x1c2l2ZSB1c2UuIEZvciBub3JtYWwgUEFNVCwgdGhpcyBpcyBpbnN0YWxsZWRcbit3aGVuIHRoZSBURFggbW9kdWxlIGlzIGZpcnN0IGxvYWRlZCBhbmQgY29tZXMgdG8gYWJvdXQgMC40JSBvZiBzeXN0ZW0gbWVtb3J5LlxuK1xuK0R5bmFtaWMgUEFNVCBpcyBhIFREWCBtb2R1bGUgZmVhdHVyZSB0aGF0IGFsbG93cyBWTU0gdG8gYWxsb2NhdGUgcGFydCBvZiB0aGVcbitQQU1UIGFzIG5lZWRlZCAodGhlIHBhcnRzIGZvciB0cmFja2luZyA0S0Igc2l6ZSBwYWdlcykuIFRoZSBvdGhlciBwYWdlIHNpemVzXG4rKDFHQiBhbmQgMk1CKSBhcmUgc3RpbGwgYWxsb2NhdGVkIHN0YXRpY2FsbHkgYXQgdGhlIHRpbWUgb2YgVERYIG1vZHVsZVxuK2luaXRpYWxpemF0aW9uLiBUaGlzIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBURFggdXNlcyB3aGlsZSBURHMgYXJlXG4rbm90IGluIHVzZS5cbitcbitXaGVuIER5bmFtaWMgUEFNVCBpcyBpbiB1c2UsIGRtZXNnIHNob3dzIGl0IGxpa2U6OlxuK1xuKyAgWy4uXSB2aXJ0L3RkeDogRW5hYmxlIER5bmFtaWMgUEFNVFxuKyAgWy4uXSB2aXJ0L3RkeDogMTAwOTIgS0IgYWxsb2NhdGVkIGZvciBQQU1UXG4rICBbLi5dIHZpcnQvdGR4OiBURFgtTW9kdWxlIGluaXRpYWxpemVkXG4rXG4rRHluYW1pYyBQQU1UIGlzIG9ubHkgZW5hYmxlZCB3aGVuIHN1cHBvcnRlZCBhbmQgdGhlIGBgdGR4X2RwYW10PWBgIGtlcm5lbFxuK3BhcmFtZXRlciBpcyBzZXQgdG8gXCJvblwiLiBUaGUgZmVhdHVyZSBpcyBvZmYgYnkgZGVmYXVsdCBiZWNhdXNlIFREWCBtb2R1bGVcbitpbnRlcm5hbCBkZXRhaWxzIHByZXZlbnQgRHluYW1pYyBQQU1UIGZyb20gd29ya2luZyBvbiBhbGwga2V5aWQgcGFydGl0aW9uaW5nXG4rY29uZmlndXJhdGlvbnMuIFdoZW4gdGhlIFREWCBtb2R1bGUgaXMgZml4ZWQgdG8gaW5jbHVkZSB0aGVzZSBjb25zdHJhaW50cyBpblxuK2l0cyBlbnVtZXJhdGlvbiBvZiBEeW5hbWljIFBBTVQgc3VwcG9ydCwga2VybmVsIHN1cHBvcnQgY2FuIGJlIGNoYW5nZWQgdG9cbitkZWZhdWx0IG9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY29uc3VsdCB0aGUgSW50ZWwgVERYIGRvY3VtZW50YXRpb24gYWJvdXRcbitEeW5hbWljIFBBTVQuXG4rXG4gVERYIEludGVyYWN0aW9uIHRvIE90aGVyIEtlcm5lbCBDb21wb25lbnRzXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbmluZGV4IDgzZGM1MDg2MTM4YjMuLjU4ODU2M2RmZTg4ZDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXG5AQCAtOTgsNiArOTgsNyBAQCBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKVxuIEtWTV9YODZfT1AobG9hZF9tbXVfcGdkKVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSlcbiBLVk1fWDg2X09QX09QVElPTkFMKGZyZWVfZXh0ZXJuYWxfc3B0KVxuK0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCh0b3B1cF9leHRlcm5hbF9jYWNoZSlcbiBLVk1fWDg2X09QKGhhc193YmludmRfZXhpdClcbiBLVk1fWDg2X09QKGdldF9sMl90c2Nfb2Zmc2V0KVxuIEtWTV9YODZfT1AoZ2V0X2wyX3RzY19tdWx0aXBsaWVyKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCA1ZjZjMWNlOTY3M2I3Li4wZGJmNjU2NGRkMGM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTE5MjIsNiArMTkyMiw3IEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XG4gXHQvKiBVcGRhdGUgZXh0ZXJuYWwgcGFnZSB0YWJsZXMgZm9yIHBhZ2UgdGFibGUgYWJvdXQgdG8gYmUgZnJlZWQuICovXG4gXHR2b2lkICgqZnJlZV9leHRlcm5hbF9zcHQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tbXVfcGFnZSAqc3ApO1xuIFxuK1x0aW50ICgqdG9wdXBfZXh0ZXJuYWxfY2FjaGUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG1pbl9ucl9zcHRzKTtcbiBcbiBcdGJvb2wgKCpoYXNfd2JpbnZkX2V4aXQpKHZvaWQpO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RkeC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbmluZGV4IDg5ZTk3ZDU3NjFkODkuLjc5MTA5MDFhN2JhMjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHguaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4LmhcbkBAIC0zNiw2ICszNiw3IEBAXG4gLyogQml0IGRlZmluaXRpb25zIG9mIFREWF9GRUFUVVJFUzAgbWV0YWRhdGEgZmllbGQgKi9cbiAjZGVmaW5lIFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklOR1x0QklUX1VMTCgxKVxuICNkZWZpbmUgVERYX0ZFQVRVUkVTMF9OT19SQlBfTU9EXHRCSVRfVUxMKDE4KVxuKyNkZWZpbmUgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVRcdEJJVF9VTEwoMzYpXG4gXG4gI2lmbmRlZiBfX0FTU0VNQkxFUl9fXG4gXG5AQCAtMTE4LDEyICsxMTksMzcgQEAgc3RhdGljIGlubGluZSBib29sIHRkeF9zdXBwb3J0c19ydW50aW1lX3VwZGF0ZShjb25zdCBzdHJ1Y3QgdGR4X3N5c19pbmZvICpzeXNpbmZcbiBcdHJldHVybiBzeXNpbmZvLVx1MDAzZWZlYXR1cmVzLnRkeF9mZWF0dXJlczAgXHUwMDI2IFREWF9GRUFUVVJFUzBfVERfUFJFU0VSVklORztcbiB9XG4gXG4rYm9vbCB0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KGNvbnN0IHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pO1xuK1xuKy8qIFNpbXBsZSBzdHJ1Y3R1cmUgZm9yIHByZS1hbGxvY2F0aW5nIER5bmFtaWMgUEFNVCBwYWdlcyBvdXRzaWRlIG9mIHNwaW5sb2Nrcy4gKi9cbitzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBwYWdlX2xpc3Q7XG4rXHRpbnQgY250O1xuK307XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHRkeF9pbml0X3BhbXRfY2FjaGUoc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZjYWNoZS1cdTAwM2VwYWdlX2xpc3QpO1xuK1x0Y2FjaGUtXHUwMDNlY250ID0gMDtcbit9XG4rXG4rdm9pZCB0ZHhfZnJlZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpO1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKTtcbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKTtcbitcbiBpbnQgdGR4X2d1ZXN0X2tleWlkX2FsbG9jKHZvaWQpO1xuIHUzMiB0ZHhfZ2V0X25yX2d1ZXN0X2tleWlkcyh2b2lkKTtcbiB2b2lkIHRkeF9ndWVzdF9rZXlpZF9mcmVlKHVuc2lnbmVkIGludCBrZXlpZCk7XG4gXG4gdm9pZCB0ZHhfcXVpcmtfcmVzZXRfcGFkZHIodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpO1xuIFxuKy8qIE51bWJlciBvZiBQQU1UIHBhZ2VzIHRvIGJlIHByb3ZpZGVkIHRvIFREWCBtb2R1bGUgcGVyIDJNQiByZWdpb24gb2YgUEEgKi9cbisjZGVmaW5lIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVCAyXG4rXG4rc3RydWN0IHBhZ2UgKnRkeF9hbGxvY19jb250cm9sX3BhZ2Uodm9pZCk7XG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuK1xuIHN0cnVjdCB0ZHhfdGQge1xuIFx0LyogVEQgcm9vdCBzdHJ1Y3R1cmU6ICovXG4gXHRzdHJ1Y3QgcGFnZSAqdGRyX3BhZ2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG5pbmRleCA0MTE1MGQ1NDY1ODljLi4yYTQyNTUxZmMzM2NkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGR4X2dsb2JhbF9tZXRhZGF0YS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90ZHhfZ2xvYmFsX21ldGFkYXRhLmhcbkBAIC0yMSw2ICsyMSw5IEBAIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciB7XG4gXHR1MTYgcGFtdF80a19lbnRyeV9zaXplO1xuIFx0dTE2IHBhbXRfMm1fZW50cnlfc2l6ZTtcbiBcdHUxNiBwYW10XzFnX2VudHJ5X3NpemU7XG4rXG4rXHQvKiBPcHRpb25hbCBtZXRhZGF0YSwgaWYgRHluYW1pYyBQQU1UIGlzIHN1cHBvcnRlZCAqL1xuK1x0dTggIHBhbXRfcGFnZV9iaXRtYXBfZW50cnlfYml0cztcbiB9O1xuIFxuIHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRfY3RybCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUvbW11LmNcbmluZGV4IDY2ZTY5ZDJhNDFiM2MuLjJhNjI4YjgzMDQ0MDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vbW11L21tdS5jXG5AQCAtNjE0LDYgKzYxNCwxMCBAQCBzdGF0aWMgaW50IG1tdV90b3B1cF9tZW1vcnlfY2FjaGVzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBtYXliZV9pbmRpcmVjdClcbiBcdFx0XHRcdFx0ICAgICAgIFBUNjRfUk9PVF9NQVhfTEVWRUwpO1xuIFx0XHRpZiAocilcbiBcdFx0XHRyZXR1cm4gcjtcbitcbitcdFx0ciA9IGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSkodmNwdSwgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0ciA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKFx1MDAyNnZjcHUtXHUwMDNlYXJjaC5tbXVfc2hhZG93X3BhZ2VfY2FjaGUsXG4gXHRcdFx0XHQgICAgICAgUFQ2NF9ST09UX01BWF9MRVZFTCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC90ZHguYyBiL2FyY2gveDg2L2t2bS92bXgvdGR4LmNcbmluZGV4IDU0NWIwM2Q5ZDEwYjguLjA5NTczMTEyNTQwZTkgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5jXG5AQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX2NvbnRyb2xfcGFnZShzdHJ1Y3QgcGFnZSAqY3RybF9wYWdlKVxuIFx0aWYgKHRkeF9yZWNsYWltX3BhZ2UoY3RybF9wYWdlKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0X19mcmVlX3BhZ2UoY3RybF9wYWdlKTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZShjdHJsX3BhZ2UpO1xuIH1cbiBcbiBzdHJ1Y3QgdGR4X2ZsdXNoX3ZwX2FyZyB7XG5AQCAtNTg5LDcgKzU4OSw3IEBAIHN0YXRpYyB2b2lkIHRkeF9yZWNsYWltX3RkX2NvbnRyb2xfcGFnZXMoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0dGR4X3F1aXJrX3Jlc2V0X3BhZGRyKHBhZ2VfdG9fcGh5cyhrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlKSwgUEFHRV9TSVpFKTtcbiBcbi1cdF9fZnJlZV9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKGt2bV90ZHgtXHUwMDNldGQudGRyX3BhZ2UpO1xuIFx0a3ZtX3RkeC1cdTAwM2V0ZC50ZHJfcGFnZSA9IE5VTEw7XG4gfVxuIFxuQEAgLTY4MSw2ICs2ODEsOCBAQCBpbnQgdGR4X3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmICghaXJxY2hpcF9zcGxpdCh2Y3B1LVx1MDAzZWt2bSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0dGR4X2luaXRfcGFtdF9jYWNoZShcdTAwMjZ0ZHgtXHUwMDNlcGFtdF9jYWNoZSk7XG4rXG4gXHRmcHN0YXRlX3NldF9jb25maWRlbnRpYWwoXHUwMDI2dmNwdS1cdTAwM2VhcmNoLmd1ZXN0X2ZwdSk7XG4gXHR2Y3B1LVx1MDAzZWFyY2guYXBpYy1cdTAwM2VndWVzdF9hcGljX3Byb3RlY3RlZCA9IHRydWU7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0ZHgtXHUwMDNldnQucGlfd2FrZXVwX2xpc3QpO1xuQEAgLTg2Niw2ICs4NjgsOCBAQCB2b2lkIHRkeF92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIFx0c3RydWN0IHZjcHVfdGR4ICp0ZHggPSB0b190ZHgodmNwdSk7XG4gXHRpbnQgaTtcbiBcbitcdHRkeF9mcmVlX3BhbXRfY2FjaGUoXHUwMDI2dGR4LVx1MDAzZXBhbXRfY2FjaGUpO1xuK1xuIFx0aWYgKHZjcHUtXHUwMDNlY3B1ICE9IC0xKSB7XG4gXHRcdEtWTV9CVUdfT04odGR4LVx1MDAzZXN0YXRlID09IFZDUFVfVERfU1RBVEVfSU5JVElBTElaRUQsIHZjcHUtXHUwMDNla3ZtKTtcbiBcdFx0dGR4X2ZsdXNoX3ZwX29uX2NwdSh2Y3B1KTtcbkBAIC0xNjIxLDYgKzE2MjUsMTcgQEAgdm9pZCB0ZHhfbG9hZF9tbXVfcGdkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHBhX3Qgcm9vdF9ocGEsIGludCBwZ2RfbGV2ZWwpXG4gXHR0ZF92bWNzX3dyaXRlNjQodG9fdGR4KHZjcHUpLCBTSEFSRURfRVBUX1BPSU5URVIsIHJvb3RfaHBhKTtcbiB9XG4gXG4rc3RhdGljIGludCB0ZHhfdG9wdXBfZXh0ZXJuYWxfcGFtdF9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBtaW5fbnJfc3B0cylcbit7XG4rXHQvKlxuK1x0ICogTWludXMgb25lIHBhZ2UgdG8gZXhjbHVkZSB0aGUgcm9vdCBTUFQsIGJ1dCBwbHVzIG9uZSBwYWdlIGZvciBhXG4rXHQgKiBwb3NzaWJsZSA0S0IgcHJpdmF0ZSBtYXBwaW5nLlxuK1x0ICovXG4rXHRtaW5fbnJfc3B0cyArPSAtMSArIDE7XG4rXG4rXHRyZXR1cm4gdGR4X3RvcHVwX3BhbXRfY2FjaGUoXHUwMDI2dG9fdGR4KHZjcHUpLVx1MDAzZXBhbXRfY2FjaGUsIG1pbl9ucl9zcHRzKTtcbit9XG4rXG4gc3RhdGljIGludCB0ZHhfbWVtX3BhZ2VfYWRkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLCBlbnVtIHBnX2xldmVsIGxldmVsLFxuIFx0XHRcdCAgICBrdm1fcGZuX3QgcGZuKVxuIHtcbkBAIC0xNjc5LDE2ICsxNjk0LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqdGR4X3NwdGVfdG9fc2VwdF9wdChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBzdGF0aWMgaW50IHRkeF9zZXB0X21hcF9ub25sZWFmX3NwdGUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRcdFx0XHQgICAgIGVudW0gcGdfbGV2ZWwgbGV2ZWwsIHU2NCBuZXdfc3B0ZSlcbiB7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBrdm1fZ2V0X3J1bm5pbmdfdmNwdSgpO1xuIFx0Z3BhX3QgZ3BhID0gZ2ZuX3RvX2dwYShnZm4pO1xuIFx0dTY0IGVyciwgZW50cnksIGxldmVsX3N0YXRlO1xuIFx0c3RydWN0IHBhZ2UgKnNlcHRfcHQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4rXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0c2VwdF9wdCA9IHRkeF9zcHRlX3RvX3NlcHRfcHQoa3ZtLCBnZm4sIG5ld19zcHRlLCBsZXZlbCk7XG4gXHRpZiAoIXNlcHRfcHQpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuK1x0cmV0ID0gdGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHNlcHRfcHQpLCBcdTAwMjZ0b190ZHgodmNwdSktXHUwMDNlcGFtdF9jYWNoZSk7XG4rXHRpZiAoS1ZNX0JVR19PTihyZXQsIGt2bSkpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4gXHRlcnIgPSB0ZGhfbWVtX3NlcHRfYWRkKFx1MDAyNnRvX2t2bV90ZHgoa3ZtKS1cdTAwM2V0ZCwgZ3BhLCBsZXZlbCwgc2VwdF9wdCxcbiBcdFx0XHQgICAgICAgXHUwMDI2ZW50cnksIFx1MDAyNmxldmVsX3N0YXRlKTtcbitcdGlmIChlcnIpXG4rXHRcdHRkeF9wYW10X3B1dChwYWdlX3RvX3BmbihzZXB0X3B0KSk7XG4rXG4gXHRpZiAodW5saWtlbHkodGR4X29wZXJhbmRfYnVzeShlcnIpKSlcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbkBAIC0xNzAxLDggKzE3MjgsMTMgQEAgc3RhdGljIGludCB0ZHhfc2VwdF9tYXBfbm9ubGVhZl9zcHRlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlbCxcbiBcdFx0XHRcdCAgdTY0IG5ld19zcHRlKVxuIHtcbitcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGt2bV9nZXRfcnVubmluZ192Y3B1KCk7XG4gXHRzdHJ1Y3Qga3ZtX3RkeCAqa3ZtX3RkeCA9IHRvX2t2bV90ZHgoa3ZtKTtcbiBcdGt2bV9wZm5fdCBwZm4gPSBzcHRlX3RvX3BmbihuZXdfc3B0ZSk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKEtWTV9CVUdfT04oIXZjcHUsIGt2bSkpXG4rXHRcdHJldHVybiAtRUlPO1xuIFxuIFx0LyogVE9ETzogaGFuZGxlIGxhcmdlIHBhZ2VzLiAqL1xuIFx0aWYgKEtWTV9CVUdfT04obGV2ZWwgIT0gUEdfTEVWRUxfNEssIGt2bSkpXG5AQCAtMTcxMCw2ICsxNzQyLDEwIEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXG4gXG4gXHRXQVJOX09OX09OQ0UoKG5ld19zcHRlIFx1MDAyNiBWTVhfRVBUX1JXWF9NQVNLKSAhPSBWTVhfRVBUX1JXWF9NQVNLKTtcbiBcbitcdHJldCA9IHRkeF9wYW10X2dldChwZm4sIFx1MDAyNnRvX3RkeCh2Y3B1KS1cdTAwM2VwYW10X2NhY2hlKTtcbitcdGlmIChLVk1fQlVHX09OKHJldCwga3ZtKSlcbitcdFx0cmV0dXJuIHJldDtcbitcbiBcdC8qXG4gXHQgKiBFbnN1cmUgcHJlX2ZhdWx0X2FsbG93ZWQgaXMgcmVhZCBieSBrdm1fYXJjaF92Y3B1X3ByZV9mYXVsdF9tZW1vcnkoKVxuIFx0ICogYmVmb3JlIGt2bV90ZHgtXHUwMDNlc3RhdGUuICBVc2Vyc3BhY2UgbXVzdCBub3QgYmUgYWxsb3dlZCB0byBwcmUtZmF1bHRcbkBAIC0xNzIyLDEwICsxNzU4LDE1IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfbWFwX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgZW51bSBwZ19sZXZlbCBsZXZlXG4gXHQgKiBJZiB0aGUgVEQgaXNuJ3QgZmluYWxpemVkL3J1bm5hYmxlLCB0aGVuIHVzZXJzcGFjZSBpcyBpbml0aWFsaXppbmdcbiBcdCAqIHRoZSBWTSBpbWFnZSB2aWEgS1ZNX1REWF9JTklUX01FTV9SRUdJT047IEFERCB0aGUgcGFnZSB0byB0aGUgVEQuXG4gXHQgKi9cbi1cdGlmICh1bmxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlICE9IFREX1NUQVRFX1JVTk5BQkxFKSlcbi1cdFx0cmV0dXJuIHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuK1x0aWYgKGxpa2VseShrdm1fdGR4LVx1MDAzZXN0YXRlID09IFREX1NUQVRFX1JVTk5BQkxFKSlcbitcdFx0cmV0ID0gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRlbHNlXG4rXHRcdHJldCA9IHRkeF9tZW1fcGFnZV9hZGQoa3ZtLCBnZm4sIGxldmVsLCBwZm4pO1xuK1xuK1x0aWYgKHJldClcbitcdFx0dGR4X3BhbXRfcHV0KHBmbik7XG4gXG4tXHRyZXR1cm4gdGR4X21lbV9wYWdlX2F1Zyhrdm0sIGdmbiwgbGV2ZWwsIHBmbik7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKlxuQEAgLTE4MjIsNiArMTg2Myw3IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfcmVtb3ZlX2xlYWZfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR0ZHhfcXVpcmtfcmVzZXRfcGFkZHIoUEZOX1BIWVMocGZuKSwgUEFHRV9TSVpFKTtcbitcdHRkeF9wYW10X3B1dChwZm4pO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE4NjUsNiArMTkwNyw4IEBAIHN0YXRpYyBpbnQgdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbiwgdTY0IG9sZF9zcHRlLFxuICAqL1xuIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbiB7XG4rXHRzdHJ1Y3QgcGFnZSAqc2VwdF9wdCA9IHZpcnRfdG9fcGFnZShzcC1cdTAwM2VleHRlcm5hbF9zcHQpO1xuK1xuIFx0LypcbiBcdCAqIEtWTSBkb2Vzbid0ICh5ZXQpIHphcCBwYWdlIHRhYmxlIHBhZ2VzIGluIG1pcnJvciBwYWdlIHRhYmxlIHdoaWxlXG4gXHQgKiBURCBpcyBhY3RpdmUsIHRob3VnaCBndWVzdCBwYWdlcyBtYXBwZWQgaW4gbWlycm9yIHBhZ2UgdGFibGUgY291bGQgYmVcbkBAIC0xODc4LDE1ICsxOTIyLDE1IEBAIHN0YXRpYyB2b2lkIHRkeF9zZXB0X2ZyZWVfcHJpdmF0ZV9zcHQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcClcbiBcdCAqIHRoZSBwYWdlIHRvIHByZXZlbnQgdGhlIGtlcm5lbCBmcm9tIGFjY2Vzc2luZyB0aGUgZW5jcnlwdGVkIHBhZ2UuXG4gXHQgKi9cbiBcdGlmIChLVk1fQlVHX09OKGlzX2hraWRfYXNzaWduZWQodG9fa3ZtX3RkeChrdm0pKSwga3ZtKSB8fFxuLVx0ICAgIHRkeF9yZWNsYWltX3BhZ2UodmlydF90b19wYWdlKHNwLVx1MDAzZWV4dGVybmFsX3NwdCkpKVxuK1x0ICAgIHRkeF9yZWNsYWltX3BhZ2Uoc2VwdF9wdCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0Lypcbi1cdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYmVjYXVzZSBSQ1UtdGltZSBmcmVlIGlzIHVubmVjZXNzYXJ5XG4tXHQgKiBhZnRlciBUREguUEhZTUVNLlBBR0UuUkVDTEFJTSBlbnN1cmVzIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZ1xuLVx0ICogcmVhZGVycy5cbitcdCAqIEltbWVkaWF0ZWx5IGZyZWUgdGhlIFMtRVBUIHBhZ2UgYXMgdGhlIFREWCBzdWJzeXN0ZW0gZG9lc24ndCBzdXBwb3J0XG4rXHQgKiBmcmVlaW5nIHBhZ2VzIGZyb20gUkNVIGNhbGxiYWNrcywgYW5kIG1vcmUgaW1wb3J0YW50bHkgYmVjYXVzZVxuK1x0ICogVERILlBIWU1FTS5QQUdFLlJFQ0xBSU0gZW5zdXJlcyB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVhZGVycy5cbiBcdCAqL1xuLVx0ZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXNwLVx1MDAzZWV4dGVybmFsX3NwdCk7XG4rXHR0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc2VwdF9wdCk7XG4gb3V0OlxuIFx0c3AtXHUwMDNlZXh0ZXJuYWxfc3B0ID0gTlVMTDtcbiB9XG5AQCAtMjQ1OSw3ICsyNTAzLDcgQEAgc3RhdGljIGludCBfX3RkeF90ZF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHRkX3BhcmFtcyAqdGRfcGFyYW1zLFxuIFxuIFx0cmV0ID0gLUVOT01FTTtcbiBcbi1cdHRkcl9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0dGRyX3BhZ2UgPSB0ZHhfYWxsb2NfY29udHJvbF9wYWdlKCk7XG4gXHRpZiAoIXRkcl9wYWdlKVxuIFx0XHRnb3RvIGZyZWVfaGtpZDtcbiBcbkBAIC0yNDcyLDcgKzI1MTYsNyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXHRcdGdvdG8gZnJlZV90ZHI7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xuLVx0XHR0ZGNzX3BhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0XHR0ZGNzX3BhZ2VzW2ldID0gdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSgpO1xuIFx0XHRpZiAoIXRkY3NfcGFnZXNbaV0pXG4gXHRcdFx0Z290byBmcmVlX3RkY3M7XG4gXHR9XG5AQCAtMjU5MCwxMCArMjYzNCw4IEBAIHN0YXRpYyBpbnQgX190ZHhfdGRfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCB0ZF9wYXJhbXMgKnRkX3BhcmFtcyxcbiB0ZWFyZG93bjpcbiBcdC8qIE9ubHkgZnJlZSBwYWdlcyBub3QgeWV0IGFkZGVkLCBzbyBzdGFydCBhdCAnaScgKi9cbiBcdGZvciAoOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSkge1xuLVx0XHRcdF9fZnJlZV9wYWdlKHRkY3NfcGFnZXNbaV0pO1xuLVx0XHRcdHRkY3NfcGFnZXNbaV0gPSBOVUxMO1xuLVx0XHR9XG4rXHRcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbitcdFx0dGRjc19wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRpZiAoIWt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcylcbiBcdFx0a2ZyZWUodGRjc19wYWdlcyk7XG5AQCAtMjYwOCwxNiArMjY1MCwxMyBAQCBzdGF0aWMgaW50IF9fdGR4X3RkX2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3QgdGRfcGFyYW1zICp0ZF9wYXJhbXMsXG4gXHRmcmVlX2NwdW1hc2tfdmFyKHBhY2thZ2VzKTtcbiBcbiBmcmVlX3RkY3M6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3NfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRpZiAodGRjc19wYWdlc1tpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZSh0ZGNzX3BhZ2VzW2ldKTtcbi1cdH1cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjc19ucl9wYWdlczsgaSsrKVxuK1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGRjc19wYWdlc1tpXSk7XG4gXHRrZnJlZSh0ZGNzX3BhZ2VzKTtcbiBcdGt2bV90ZHgtXHUwMDNldGQudGRjc19wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHI6XG4tXHRpZiAodGRyX3BhZ2UpXG4tXHRcdF9fZnJlZV9wYWdlKHRkcl9wYWdlKTtcbitcdHRkeF9mcmVlX2NvbnRyb2xfcGFnZSh0ZHJfcGFnZSk7XG4gXHRrdm1fdGR4LVx1MDAzZXRkLnRkcl9wYWdlID0gTlVMTDtcbiBcbiBmcmVlX2hraWQ6XG5AQCAtMjk1MSw3ICsyOTkwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0aW50IHJldCwgaTtcbiBcdHU2NCBlcnI7XG4gXG4tXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMX0FDQ09VTlQpO1xuK1x0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdGlmICghcGFnZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSA9IHBhZ2U7XG5AQCAtMjk3MSw3ICszMDEwLDcgQEAgc3RhdGljIGludCB0ZHhfdGRfdmNwdV9pbml0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZjcHVfcmN4KVxuIFx0fVxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mga3ZtX3RkeC1cdTAwM2V0ZC50ZGN4X25yX3BhZ2VzOyBpKyspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdFx0cGFnZSA9IHRkeF9hbGxvY19jb250cm9sX3BhZ2UoKTtcbiBcdFx0aWYgKCFwYWdlKSB7XG4gXHRcdFx0cmV0ID0gLUVOT01FTTtcbiBcdFx0XHRnb3RvIGZyZWVfdGRjeDtcbkBAIC0yOTkzLDcgKzMwMzIsNyBAQCBzdGF0aWMgaW50IHRkeF90ZF92Y3B1X2luaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmNwdV9yY3gpXG4gXHRcdFx0ICogbWV0aG9kLCBidXQgdGhlIHJlc3QgYXJlIGZyZWVkIGhlcmUuXG4gXHRcdFx0ICovXG4gXHRcdFx0Zm9yICg7IGkgXHUwMDNjIGt2bV90ZHgtXHUwMDNldGQudGRjeF9ucl9wYWdlczsgaSsrKSB7XG4tXHRcdFx0XHRfX2ZyZWVfcGFnZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSk7XG4rXHRcdFx0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHRcdFx0dGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0gPSBOVUxMO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gLUVJTztcbkBAIC0zMDIxLDE2ICszMDYwLDE0IEBAIHN0YXRpYyBpbnQgdGR4X3RkX3ZjcHVfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2Y3B1X3JjeClcbiBcbiBmcmVlX3RkY3g6XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBrdm1fdGR4LVx1MDAzZXRkLnRkY3hfbnJfcGFnZXM7IGkrKykge1xuLVx0XHRpZiAodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pXG4tXHRcdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuK1x0XHR0ZHhfZnJlZV9jb250cm9sX3BhZ2UodGR4LVx1MDAzZXZwLnRkY3hfcGFnZXNbaV0pO1xuIFx0XHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlc1tpXSA9IE5VTEw7XG4gXHR9XG4gXHRrZnJlZSh0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyk7XG4gXHR0ZHgtXHUwMDNldnAudGRjeF9wYWdlcyA9IE5VTEw7XG4gXG4gZnJlZV90ZHZwcjpcbi1cdGlmICh0ZHgtXHUwMDNldnAudGR2cHJfcGFnZSlcbi1cdFx0X19mcmVlX3BhZ2UodGR4LVx1MDAzZXZwLnRkdnByX3BhZ2UpO1xuK1x0dGR4X2ZyZWVfY29udHJvbF9wYWdlKHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlKTtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYWdlID0gTlVMTDtcbiBcdHRkeC1cdTAwM2V2cC50ZHZwcl9wYSA9IDA7XG4gXG5AQCAtMzQ5Myw2ICszNTMwLDEwIEBAIGludCBfX2luaXQgdGR4X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXG4gXHR2dF94ODZfb3BzLnNldF9leHRlcm5hbF9zcHRlID0gdGR4X3NlcHRfc2V0X3ByaXZhdGVfc3B0ZTtcbiBcdHZ0X3g4Nl9vcHMuZnJlZV9leHRlcm5hbF9zcHQgPSB0ZHhfc2VwdF9mcmVlX3ByaXZhdGVfc3B0O1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQodGR4X3N5c2luZm8pKVxuK1x0XHR2dF94ODZfb3BzLnRvcHVwX2V4dGVybmFsX2NhY2hlID0gdGR4X3RvcHVwX2V4dGVybmFsX3BhbXRfY2FjaGU7XG4rXG4gXHR2dF94ODZfb3BzLnByb3RlY3RlZF9hcGljX2hhc19pbnRlcnJ1cHQgPSB0ZHhfcHJvdGVjdGVkX2FwaWNfaGFzX2ludGVycnVwdDtcbiBcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS92bXgvdGR4LmggYi9hcmNoL3g4Ni9rdm0vdm14L3RkeC5oXG5pbmRleCBhYzgzMjNhNjhiMTYzLi5mZDM2OGUzZWUwNjBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuKysrIGIvYXJjaC94ODYva3ZtL3ZteC90ZHguaFxuQEAgLTcyLDYgKzcyLDggQEAgc3RydWN0IHZjcHVfdGR4IHtcbiBcbiBcdHU2NCBtYXBfZ3BhX25leHQ7XG4gXHR1NjQgbWFwX2dwYV9lbmQ7XG4rXG4rXHRzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgcGFtdF9jYWNoZTtcbiB9O1xuIFxuIHZvaWQgdGRoX3ZwX3JkX2ZhaWxlZChzdHJ1Y3QgdmNwdV90ZHggKnRkeCwgY2hhciAqdWNsYXNzLCB1MzIgZmllbGQsIHU2NCBlcnIpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuaW5kZXggNDJkZjhlYTQ2NGM0Ny4uZGVjNDU3MDllNDU0YSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1xuKysrIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jXG5AQCAtMzAsNiArMzAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N1c3BlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NvcmVfb3BzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZHIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9wYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vc3BlY2lhbF9pbnNucy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL21zci1pbmRleC5oXHUwMDNlXG5AQCAtNDYsNiArNDcsOCBAQFxuICNpbmNsdWRlIFwic2VhbWNhbGxfaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0ZHguaFwiXG4gXG4rc3RhdGljIGJvb2wgdGR4X2VuYWJsZV9kcGFtdCBfX3JvX2FmdGVyX2luaXQ7XG4rXG4gc3RydWN0IHRkeF9tb2R1bGVfc3RhdGUge1xuIFx0Ym9vbCBpbml0aWFsaXplZDtcbiBcdGJvb2wgc3lzaW5pdF9kb25lO1xuQEAgLTYzLDYgKzY2LDE0IEBAIHN0YXRpYyBERUZJTkVfUEVSX0NQVShib29sLCB0ZHhfbHBfaW5pdGlhbGl6ZWQpO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgdGR4X3RkbXJfbGlzdDtcbiBcbisvKlxuKyAqIE9uIGEgbWFjaGluZSB3aXRoIER5bmFtaWMgUEFNVCwgdGhlIGtlcm5lbCBtYWludGFpbnMgYSByZWZlcmVuY2UgY291bnRlclxuKyAqIGZvciBldmVyeSAyTUIgcmFuZ2UuIFRoZSBjb3VudGVyIGluZGljYXRlcyBob3cgbWFueSB1c2VycyB0aGVyZSBhcmUgZm9yXG4rICogdGhlIFBBTVQgbWVtb3J5IG9mIHRoZSAyTUIgcmFuZ2UuIFRoZSBrZXJuZWwgYWxsb2NhdGVzIFBBTVQgcmVmY291bnRzIGF0XG4rICogaW5pdGlhbGl6YXRpb24uXG4rICovXG4rc3RhdGljIGF0b21pY190ICpwYW10X3JlZmNvdW50cztcbitcbiAvKiBBbGwgVERYLXVzYWJsZSBtZW1vcnkgcmVnaW9ucy4gIFByb3RlY3RlZCBieSBtZW1faG90cGx1Z19sb2NrLiAqL1xuIHN0YXRpYyBMSVNUX0hFQUQodGR4X21lbWxpc3QpO1xuIFxuQEAgLTI1Miw2ICsyNjMsNDIgQEAgc3RhdGljIHN0cnVjdCBzeXNjb3JlIHRkeF9zeXNjb3JlID0ge1xuIFx0Lm9wcyA9IFx1MDAyNnRkeF9zeXNjb3JlX29wcyxcbiB9O1xuIFxuKy8qXG4rICogQWxsb2NhdGUgUEFNVCByZWZlcmVuY2UgY291bnRlcnMgZm9yIGFsbCBwaHlzaWNhbCBtZW1vcnkuXG4rICpcbisgKiBJdCBjb25zdW1lcyAyTUIgZm9yIGV2ZXJ5IDFUQiBvZiBwaHlzaWNhbCBtZW1vcnkuXG4rICovXG4rc3RhdGljIF9faW5pdCBpbnQgaW5pdF9wYW10X3JlZmNvdW50cyh2b2lkKVxuK3tcbitcdHNpemVfdCBzaXplID0gRElWX1JPVU5EX1VQKG1heF9wZm4sIFBUUlNfUEVSX1BURSkgKiBzaXplb2YoKnBhbXRfcmVmY291bnRzKTtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudHMgPSB2emFsbG9jKHNpemUpO1xuK1x0aWYgKCFwYW10X3JlZmNvdW50cylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIF9faW5pdCB2b2lkIGZyZWVfcGFtdF9yZWZjb3VudHModm9pZClcbit7XG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR2ZnJlZShwYW10X3JlZmNvdW50cyk7XG4rXHRwYW10X3JlZmNvdW50cyA9IE5VTEw7XG4rfVxuK1xuK3N0YXRpYyBhdG9taWNfdCAqdGR4X2ZpbmRfcGFtdF9yZWZjb3VudCh1bnNpZ25lZCBsb25nIHBmbilcbit7XG4rXHQvKiBGaW5kIHdoaWNoIFBNRCBhIFBGTiBpcyBpbi4gKi9cbitcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBwZm4gXHUwMDNlXHUwMDNlIChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTtcbitcbitcdHJldHVybiBcdTAwMjZwYW10X3JlZmNvdW50c1tpbmRleF07XG4rfVxuK1xuIC8qXG4gICogQWRkIGEgbWVtb3J5IHJlZ2lvbiBhcyBhIFREWCBtZW1vcnkgYmxvY2suICBUaGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlXG4gICogYWxsIG1lbW9yeSByZWdpb25zIGFyZSBhZGRlZCBpbiBhZGRyZXNzIGFzY2VuZGluZyBvcmRlciBhbmQgZG9uJ3RcbkBAIC01MTAsMzUgKzU1NywzNyBAQCBzdGF0aWMgX19pbml0IGludCBmaWxsX291dF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgX19pbml0IHVuc2lnbmVkIGxvbmcgdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtcilcbit7XG4rXHR1bnNpZ25lZCBsb25nIHBhbXRfc3osIG5yX3BhbXRfZW50cmllcztcbitcdGludCBiaXRzX3Blcl9lbnRyeTtcbitcbitcdGJpdHNfcGVyX2VudHJ5ID0gdGR4X3N5c2luZm8udGRtci5wYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHM7XG4rXHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRwYW10X3N6ID0gRElWX1JPVU5EX1VQKG5yX3BhbXRfZW50cmllcyAqIGJpdHNfcGVyX2VudHJ5LCBCSVRTX1BFUl9CWVRFKTtcbitcbitcdHJldHVybiBQQUdFX0FMSUdOKHBhbXRfc3opO1xuK31cbitcbiAvKlxuICAqIENhbGN1bGF0ZSBQQU1UIHNpemUgZ2l2ZW4gYSBURE1SIGFuZCBhIHBhZ2Ugc2l6ZS4gIFRoZSByZXR1cm5lZFxuICAqIFBBTVQgc2l6ZSBpcyBhbHdheXMgYWxpZ25lZCB1cCB0byA0SyBwYWdlIGJvdW5kYXJ5LlxuICAqL1xuLXN0YXRpYyBfX2luaXQgdW5zaWduZWQgbG9uZyB0ZG1yX2dldF9wYW10X3N6KHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsIGludCBwZ3N6LFxuLVx0XHRcdFx0XHQgICAgIHUxNiBwYW10X2VudHJ5X3NpemUpXG4rc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIHRkbXJfZ2V0X3BhbXRfc3ooc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgaW50IHBnc3opXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBwYW10X3N6LCBucl9wYW10X2VudHJpZXM7XG4rXHRjb25zdCBpbnQgdGR4X3BnX3NpemVfc2hpZnRbVERYX1BTX05SXSA9IHsgUEFHRV9TSElGVCwgUE1EX1NISUZULCBQVURfU0hJRlQgfTtcbitcdGNvbnN0IHUxNiBwYW10X2VudHJ5X3NpemVbVERYX1BTX05SXSA9IHtcbitcdFx0dGR4X3N5c2luZm8udGRtci5wYW10XzRrX2VudHJ5X3NpemUsXG4rXHRcdHRkeF9zeXNpbmZvLnRkbXIucGFtdF8ybV9lbnRyeV9zaXplLFxuK1x0XHR0ZHhfc3lzaW5mby50ZG1yLnBhbXRfMWdfZW50cnlfc2l6ZSxcbitcdH07XG4gXG4tXHRzd2l0Y2ggKHBnc3opIHtcbi1cdGNhc2UgVERYX1BTXzRLOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBURFhfUFNfMk06XG4tXHRcdG5yX3BhbXRfZW50cmllcyA9IHRkbXItXHUwMDNlc2l6ZSBcdTAwM2VcdTAwM2UgUE1EX1NISUZUO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgVERYX1BTXzFHOlxuLVx0XHRucl9wYW10X2VudHJpZXMgPSB0ZG1yLVx1MDAzZXNpemUgXHUwMDNlXHUwMDNlIFBVRF9TSElGVDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRXQVJOX09OX09OQ0UoMSk7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuK1x0bnJfcGFtdF9lbnRyaWVzID0gdGRtci1cdTAwM2VzaXplIFx1MDAzZVx1MDAzZSB0ZHhfcGdfc2l6ZV9zaGlmdFtwZ3N6XTtcbitcdHBhbXRfc3ogPSBucl9wYW10X2VudHJpZXMgKiBwYW10X2VudHJ5X3NpemVbcGdzel07XG4gXG4tXHRwYW10X3N6ID0gbnJfcGFtdF9lbnRyaWVzICogcGFtdF9lbnRyeV9zaXplO1xuIFx0LyogVERYIHJlcXVpcmVzIFBBTVQgc2l6ZSBtdXN0IGJlIDRLIGFsaWduZWQgKi9cbi1cdHBhbXRfc3ogPSBBTElHTihwYW10X3N6LCBQQUdFX1NJWkUpO1xuLVxuLVx0cmV0dXJuIHBhbXRfc3o7XG4rXHRyZXR1cm4gUEFHRV9BTElHTihwYW10X3N6KTtcbiB9XG4gXG4gLypcbkBAIC01NzYsMTUgKzYyNSwxMSBAQCBzdGF0aWMgX19pbml0IGludCB0ZG1yX2dldF9uaWQoc3RydWN0IHRkbXJfaW5mbyAqdGRtciwgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc1xuICAqIHdpdGhpbiBAdGRtciwgYW5kIHNldCB1cCBQQU1UcyBmb3IgQHRkbXIuXG4gICovXG4gc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4tXHRcdFx0XHQgICB1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBhbXRfYmFzZVtURFhfUFNfTlJdO1xuLVx0dW5zaWduZWQgbG9uZyBwYW10X3NpemVbVERYX1BTX05SXTtcbi1cdHVuc2lnbmVkIGxvbmcgdGRtcl9wYW10X2Jhc2U7XG4gXHR1bnNpZ25lZCBsb25nIHRkbXJfcGFtdF9zaXplO1xuIFx0c3RydWN0IHBhZ2UgKnBhbXQ7XG4tXHRpbnQgcGdzeiwgbmlkO1xuK1x0aW50IG5pZDtcbiBcbiBcdG5pZCA9IHRkbXJfZ2V0X25pZCh0ZG1yLCB0bWJfbGlzdCk7XG4gXG5AQCAtNTkyLDEzICs2MzcsMTggQEAgc3RhdGljIF9faW5pdCBpbnQgdGRtcl9zZXRfdXBfcGFtdChzdHJ1Y3QgdGRtcl9pbmZvICp0ZG1yLFxuIFx0ICogQ2FsY3VsYXRlIHRoZSBQQU1UIHNpemUgZm9yIGVhY2ggVERYIHN1cHBvcnRlZCBwYWdlIHNpemVcbiBcdCAqIGFuZCB0aGUgdG90YWwgUEFNVCBzaXplLlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfc2l6ZSA9IDA7XG4tXHRmb3IgKHBnc3ogPSBURFhfUFNfNEs7IHBnc3ogXHUwMDNjIFREWF9QU19OUjsgcGdzeisrKSB7XG4tXHRcdHBhbXRfc2l6ZVtwZ3N6XSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgcGdzeixcbi1cdFx0XHRcdFx0cGFtdF9lbnRyeV9zaXplW3Bnc3pdKTtcbi1cdFx0dGRtcl9wYW10X3NpemUgKz0gcGFtdF9zaXplW3Bnc3pdO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSB0ZG1yX2dldF9wYW10X3N6KHRkbXIsIFREWF9QU18xRyk7XG4rXHR0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzJNKTtcbitcbitcdGlmICh0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkge1xuK1x0XHQvKiBXaXRoIER5bmFtaWMgUEFNVCwgUEFNVF80SyBpcyByZXBsYWNlZCB3aXRoIGEgYml0bWFwICovXG4rXHRcdHRkbXItXHUwMDNlcGFtdF80a19zaXplID0gdGRtcl9nZXRfcGFtdF9iaXRtYXBfc3oodGRtcik7XG4rXHR9IGVsc2Uge1xuK1x0XHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHRkbXJfZ2V0X3BhbXRfc3oodGRtciwgVERYX1BTXzRLKTtcbiBcdH1cbiBcbitcdHRkbXJfcGFtdF9zaXplID0gdGRtci1cdTAwM2VwYW10XzRrX3NpemUgKyB0ZG1yLVx1MDAzZXBhbXRfMm1fc2l6ZSArIHRkbXItXHUwMDNlcGFtdF8xZ19zaXplO1xuK1xuIFx0LypcbiBcdCAqIEFsbG9jYXRlIG9uZSBjaHVuayBvZiBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciBhbGxcbiBcdCAqIFBBTVRzLiAgVGhpcyBoZWxwcyBtaW5pbWl6ZSB0aGUgUEFNVCdzIHVzZSBvZiByZXNlcnZlZCBhcmVhc1xuQEAgLTYwNiwyNSArNjU2LDE3IEBAIHN0YXRpYyBfX2luaXQgaW50IHRkbXJfc2V0X3VwX3BhbXQoc3RydWN0IHRkbXJfaW5mbyAqdGRtcixcbiBcdCAqL1xuIFx0cGFtdCA9IGFsbG9jX2NvbnRpZ19wYWdlcyh0ZG1yX3BhbXRfc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRuaWQsIFx1MDAyNm5vZGVfb25saW5lX21hcCk7XG4tXHRpZiAoIXBhbXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0Lypcbi1cdCAqIEJyZWFrIHRoZSBjb250aWd1b3VzIGFsbG9jYXRpb24gYmFjayB1cCBpbnRvIHRoZVxuLVx0ICogaW5kaXZpZHVhbCBQQU1UcyBmb3IgZWFjaCBwYWdlIHNpemUuXG4rXHQgKiB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSBpcyBzdGlsbCB6ZXJvIHNvIHRoZSBlcnJvclxuK1x0ICogcGF0aCBvZiB0aGUgY2FsbGVyIHdpbGwgc2tpcCBmcmVlaW5nIHRoZSBQQU1ULlxuIFx0ICovXG4tXHR0ZG1yX3BhbXRfYmFzZSA9IHBhZ2VfdG9fcGZuKHBhbXQpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuLVx0Zm9yIChwZ3N6ID0gVERYX1BTXzRLOyBwZ3N6IFx1MDAzYyBURFhfUFNfTlI7IHBnc3orKykge1xuLVx0XHRwYW10X2Jhc2VbcGdzel0gPSB0ZG1yX3BhbXRfYmFzZTtcbi1cdFx0dGRtcl9wYW10X2Jhc2UgKz0gcGFtdF9zaXplW3Bnc3pdO1xuLVx0fVxuK1x0aWYgKCFwYW10KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFtdF9iYXNlW1REWF9QU180S107XG4tXHR0ZG1yLVx1MDAzZXBhbXRfNGtfc2l6ZSA9IHBhbXRfc2l6ZVtURFhfUFNfNEtdO1xuLVx0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSBwYW10X2Jhc2VbVERYX1BTXzJNXTtcbi1cdHRkbXItXHUwMDNlcGFtdF8ybV9zaXplID0gcGFtdF9zaXplW1REWF9QU18yTV07XG4tXHR0ZG1yLVx1MDAzZXBhbXRfMWdfYmFzZSA9IHBhbXRfYmFzZVtURFhfUFNfMUddO1xuLVx0dGRtci1cdTAwM2VwYW10XzFnX3NpemUgPSBwYW10X3NpemVbVERYX1BTXzFHXTtcbitcdHRkbXItXHUwMDNlcGFtdF80a19iYXNlID0gcGFnZV90b19waHlzKHBhbXQpO1xuK1x0dGRtci1cdTAwM2VwYW10XzJtX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfNGtfYmFzZSArIHRkbXItXHUwMDNlcGFtdF80a19zaXplO1xuK1x0dGRtci1cdTAwM2VwYW10XzFnX2Jhc2UgPSB0ZG1yLVx1MDAzZXBhbXRfMm1fYmFzZSArIHRkbXItXHUwMDNlcGFtdF8ybV9zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTY1NSwxMCArNjk3LDcgQEAgc3RhdGljIF9faW5pdCB2b2lkIHRkbXJfZG9fcGFtdF9mdW5jKHN0cnVjdCB0ZG1yX2luZm8gKnRkbXIsXG4gXHR0ZG1yX2dldF9wYW10KHRkbXIsIFx1MDAyNnBhbXRfYmFzZSwgXHUwMDI2cGFtdF9zaXplKTtcbiBcbiBcdC8qIERvIG5vdGhpbmcgaWYgUEFNVCBoYXNuJ3QgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoaXMgVERNUiAqL1xuLVx0aWYgKCFwYW10X3NpemUpXG4tXHRcdHJldHVybjtcbi1cbi1cdGlmIChXQVJOX09OX09OQ0UoIXBhbXRfYmFzZSkpXG4rXHRpZiAoIXBhbXRfYmFzZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cGFtdF9mdW5jKHBhbXRfYmFzZSwgcGFtdF9zaXplKTtcbkBAIC02ODQsMTQgKzcyMywxMiBAQCBzdGF0aWMgX19pbml0IHZvaWQgdGRtcnNfZnJlZV9wYW10X2FsbChzdHJ1Y3QgdGRtcl9pbmZvX2xpc3QgKnRkbXJfbGlzdClcbiBcbiAvKiBBbGxvY2F0ZSBhbmQgc2V0IHVwIFBBTVRzIGZvciBhbGwgVERNUnMgKi9cbiBzdGF0aWMgX19pbml0IGludCB0ZG1yc19zZXRfdXBfcGFtdF9hbGwoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4tXHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKnRtYl9saXN0LFxuLVx0XHRcdFx0XHR1MTYgcGFtdF9lbnRyeV9zaXplW10pXG4rXHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QpXG4ge1xuIFx0aW50IGksIHJldCA9IDA7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7IGkrKykge1xuLVx0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QsXG4tXHRcdFx0XHRwYW10X2VudHJ5X3NpemUpO1xuK1x0XHRyZXQgPSB0ZG1yX3NldF91cF9wYW10KHRkbXJfZW50cnkodGRtcl9saXN0LCBpKSwgdG1iX2xpc3QpO1xuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gZXJyO1xuIFx0fVxuQEAgLTk2OCwxOCArMTAwNSwxMyBAQCBzdGF0aWMgX19pbml0IGludCBjb25zdHJ1Y3RfdGRtcnMoc3RydWN0IGxpc3RfaGVhZCAqdG1iX2xpc3QsXG4gXHRcdFx0XHQgIHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdGR4X3N5c19pbmZvX3RkbXIgKnN5c2luZm9fdGRtcilcbiB7XG4tXHR1MTYgcGFtdF9lbnRyeV9zaXplW1REWF9QU19OUl0gPSB7XG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzRrX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzJtX2VudHJ5X3NpemUsXG4tXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10XzFnX2VudHJ5X3NpemUsXG4tXHR9O1xuIFx0aW50IHJldDtcbiBcbiBcdHJldCA9IGZpbGxfb3V0X3RkbXJzKHRtYl9saXN0LCB0ZG1yX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdHJldCA9IHRkbXJzX3NldF91cF9wYW10X2FsbCh0ZG1yX2xpc3QsIHRtYl9saXN0LCBwYW10X2VudHJ5X3NpemUpO1xuK1x0cmV0ID0gdGRtcnNfc2V0X3VwX3BhbXRfYWxsKHRkbXJfbGlzdCwgdG1iX2xpc3QpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC05OTgsNiArMTAzMCw4IEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbnN0cnVjdF90ZG1ycyhzdHJ1Y3QgbGlzdF9oZWFkICp0bWJfbGlzdCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgVERYX1NZU19DT05GSUdfRFlOQU1JQ19QQU1UXHRCSVQoMTYpXG4rXG4gc3RhdGljIF9faW5pdCBpbnQgY29uZmlnX3RkeF9tb2R1bGUoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QsXG4gXHRcdFx0XHQgICAgdTY0IGdsb2JhbF9rZXlpZClcbiB7XG5AQCAtMTAyNiw2ICsxMDYwLDEyIEBAIHN0YXRpYyBfX2luaXQgaW50IGNvbmZpZ190ZHhfbW9kdWxlKHN0cnVjdCB0ZG1yX2luZm9fbGlzdCAqdGRtcl9saXN0LFxuIFx0YXJncy5yY3ggPSBfX3BhKHRkbXJfcGFfYXJyYXkpO1xuIFx0YXJncy5yZHggPSB0ZG1yX2xpc3QtXHUwMDNlbnJfY29uc3VtZWRfdGRtcnM7XG4gXHRhcmdzLnI4ID0gZ2xvYmFsX2tleWlkO1xuK1xuK1x0aWYgKHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKSB7XG4rXHRcdHByX2luZm8oXCJFbmFibGUgRHluYW1pYyBQQU1UXFxuXCIpO1xuK1x0XHRhcmdzLnI4IHw9IFREWF9TWVNfQ09ORklHX0RZTkFNSUNfUEFNVDtcbitcdH1cbitcbiBcdHJldCA9IHNlYW1jYWxsX3ByZXJyKFRESF9TWVNfQ09ORklHLCBcdTAwMjZhcmdzKTtcbiBcbiBcdC8qIEZyZWUgdGhlIGFycmF5IGFzIGl0IGlzIG5vdCByZXF1aXJlZCBhbnltb3JlLiAqL1xuQEAgLTExNjcsMTAgKzEyMDcsMTQgQEAgc3RhdGljIF9faW5pdCBpbnQgaW5pdF90ZHhfbW9kdWxlKHZvaWQpXG4gXHQgKi9cbiBcdGdldF9vbmxpbmVfbWVtcygpO1xuIFxuLVx0cmV0ID0gYnVpbGRfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK1x0cmV0ID0gaW5pdF9wYW10X3JlZmNvdW50cygpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiBcbitcdHJldCA9IGJ1aWxkX3RkeF9tZW1saXN0KFx1MDAyNnRkeF9tZW1saXN0KTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfcGFtdF9yZWZjb3VudHM7XG4rXG4gXHQvKiBBbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBURE1ScyAqL1xuIFx0cmV0ID0gYWxsb2NfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QsIFx1MDAyNnRkeF9zeXNpbmZvLnRkbXIpO1xuIFx0aWYgKHJldClcbkBAIC0xMjIwLDYgKzEyNjQsOCBAQCBzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcbiBcdGZyZWVfdGRtcl9saXN0KFx1MDAyNnRkeF90ZG1yX2xpc3QpO1xuIGVycl9mcmVlX3RkeG1lbTpcbiBcdGZyZWVfdGR4X21lbWxpc3QoXHUwMDI2dGR4X21lbWxpc3QpO1xuK2Vycl9mcmVlX3BhbXRfcmVmY291bnRzOlxuK1x0ZnJlZV9wYW10X3JlZmNvdW50cygpO1xuIFx0Z290byBvdXRfcHV0X3RkeG1lbTtcbiB9XG4gXG5AQCAtMjAwMyw2ICsyMDQ5LDI4OCBAQCB1NjQgdGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKHU2NCBoa2lkLCBrdm1fcGZuX3QgcGZuKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGRoX3BoeW1lbV9wYWdlX3diaW52ZF9oa2lkKTtcbiBcbitib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcbit7XG4rXHRyZXR1cm4gc3lzaW5mby1cdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFx1MDAyNiBURFhfRkVBVFVSRVMwX0RZTkFNSUNfUEFNVCBcdTAwMjZcdTAwMjZcbitcdCAgICAgICB0ZHhfZW5hYmxlX2RwYW10O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdCk7XG4rXG4rc3RhdGljIHN0cnVjdCBwYWdlICp0ZHhfYWxsb2NfcGFnZV9wYW10X2NhY2hlKHN0cnVjdCB0ZHhfcGFtdF9jYWNoZSAqY2FjaGUpXG4re1xuK1x0c3RydWN0IHBhZ2UgKnBhZ2U7XG4rXG4rXHRwYWdlID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNmNhY2hlLVx1MDAzZXBhZ2VfbGlzdCwgc3RydWN0IHBhZ2UsIGxydSk7XG4rXHRpZiAocGFnZSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZwYWdlLVx1MDAzZWxydSk7XG4rXHRcdGNhY2hlLVx1MDAzZWNudC0tO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHBhZ2U7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYWxsb2NfZHBhbXRfcGFnZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdGlmIChjYWNoZSlcbitcdFx0cmV0dXJuIHRkeF9hbGxvY19wYWdlX3BhbXRfY2FjaGUoY2FjaGUpO1xuK1xuK1x0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbit9XG4rXG4rc3RhdGljIGludCBhbGxvY19wYW10X2FycmF5KHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcywgc3RydWN0IHRkeF9wYW10X2NhY2hlICpjYWNoZSlcbit7XG4rXHRpbnQgaSwgajtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDsgaSsrKSB7XG4rXHRcdHBhbXRfcGFnZXNbaV0gPSBhbGxvY19kcGFtdF9wYWdlKGNhY2hlKTtcbitcdFx0aWYgKCFwYW10X3BhZ2VzW2ldKVxuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaTsgaisrKVxuK1x0XHRfX2ZyZWVfcGFnZShwYW10X3BhZ2VzW2pdKTtcbitcbitcdHJldHVybiAtRU5PTUVNO1xuK31cbitcbitzdGF0aWMgdm9pZCBmcmVlX3BhbXRfYXJyYXkoc3RydWN0IHBhZ2UgKipwYW10X3BhZ2VzKVxuK3tcbitcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBURFhfRFBBTVRfRU5UUllfUEFHRV9DTlQ7IGkrKykge1xuK1x0XHQvKlxuK1x0XHQgKiBSZXNldCBwYWdlcyB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgY2FzZXNcbitcdFx0ICogd2hlcmUgdGhleSB3ZXJlIHBhc3NlZCB0byB0aGUgVERYIG1vZHVsZS5cbitcdFx0ICovXG4rXHRcdHRkeF9xdWlya19yZXNldF9wYWRkcihwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1tpXSksIFBBR0VfU0laRSk7XG4rXG4rXHRcdF9fZnJlZV9wYWdlKHBhbXRfcGFnZXNbaV0pO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIENhbGN1bGF0ZSB0aGUgYXJnIG5lZWRlZCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBEUEFNVCBiYWNraW5nIGZvclxuKyAqIGEgZ2l2ZW4gNEtCIHBhZ2UuXG4rICovXG4rc3RhdGljIHU2NCBwYW10XzJtYl9hcmcoa3ZtX3Bmbl90IHBmbilcbit7XG4rXHQvKiBBcmcgdmFsdWUgd2lsbCBzcGVjaWZ5IGEgMk1CIHJlZ2lvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLiAqL1xuK1x0dW5zaWduZWQgbG9uZyBocGFfMm1iID0gQUxJR05fRE9XTihwZm4gXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQsIFBNRF9TSVpFKTtcbitcbitcdHJldHVybiBocGFfMm1iIHwgVERYX1BTXzJNO1xuK31cbitcbisvKiBBZGQgUEFNVCBiYWNraW5nIGZvciB0aGUgMk1CIHJlZ2lvbiBzdXJyb3VuZGluZyB0aGUgZ2l2ZW4gcGZuLiAqL1xuK3N0YXRpYyB1NjQgdGRoX3BoeW1lbV9wYW10X2FkZChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgcGFnZSAqKnBhbXRfcGFnZXMpXG4re1xuK1x0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge1xuK1x0XHQucmN4ID0gcGFtdF8ybWJfYXJnKHBmbiksXG4rXHRcdC5yZHggPSBwYWdlX3RvX3BoeXMocGFtdF9wYWdlc1swXSksXG4rXHRcdC5yOCA9IHBhZ2VfdG9fcGh5cyhwYW10X3BhZ2VzWzFdKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gc2VhbWNhbGwoVERIX1BIWU1FTV9QQU1UX0FERCwgXHUwMDI2YXJncyk7XG4rfVxuK1xuKy8qIFJlbW92ZSBQQU1UIGJhY2tpbmcgZm9yIHRoZSAyTUIgcmVnaW9uIHN1cnJvdW5kaW5nIHRoZSBnaXZlbiBwZm4uICovXG4rc3RhdGljIHU2NCB0ZGhfcGh5bWVtX3BhbXRfcmVtb3ZlKGt2bV9wZm5fdCBwZm4sIHN0cnVjdCBwYWdlICoqcGFtdF9wYWdlcylcbit7XG4rXHRzdHJ1Y3QgdGR4X21vZHVsZV9hcmdzIGFyZ3MgPSB7XG4rXHRcdC5yY3ggPSBwYW10XzJtYl9hcmcocGZuKSxcbitcdH07XG4rXHR1NjQgcmV0O1xuK1xuK1x0cmV0ID0gc2VhbWNhbGxfcmV0KFRESF9QSFlNRU1fUEFNVF9SRU1PVkUsIFx1MDAyNmFyZ3MpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIENvcHkgUEFNVCBwYWdlcyBvdXQgb2YgdGhlIHN0cnVjdCBwZXIgdGhlIFREWCBBQkkgKi9cbitcdHBhbXRfcGFnZXNbMF0gPSBwaHlzX3RvX3BhZ2UoYXJncy5yZHgpO1xuK1x0cGFtdF9wYWdlc1sxXSA9IHBoeXNfdG9fcGFnZShhcmdzLnI4KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKiBTZXJpYWxpemVzIGFkZGluZy9yZW1vdmluZyBQQU1UIG1lbW9yeSAqL1xuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGFtdF9sb2NrKTtcbitcbisvKiBCdW1wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGFsbG9jYXRlIFBBTVQgYmFja2luZyBpZiBuZWVkZWQuICovXG4raW50IHRkeF9wYW10X2dldChrdm1fcGZuX3QgcGZuLCBzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF07XG4rXHRhdG9taWNfdCAqcGFtdF9yZWZjb3VudDtcbitcdHU2NCB0ZHhfc3RhdHVzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChcdTAwMjZ0ZHhfc3lzaW5mbykpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cGFtdF9yZWZjb3VudCA9IHRkeF9maW5kX3BhbXRfcmVmY291bnQocGZuKTtcbitcbitcdC8qXG4rXHQgKiBJZiB0aGUgcGFtdCBwYWdlIGlzIGFscmVhZHkgYWRkZWQgKGkuZS4gcmVmY291bnQgXHUwMDNlPSAxKSxcbitcdCAqIHRoZW4ganVzdCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoYXRvbWljX2luY19ub3RfemVybyhwYW10X3JlZmNvdW50KSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXQgPSBhbGxvY19wYW10X2FycmF5KHBhbXRfcGFnZXMsIGNhY2hlKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGFtdF9sb2NrKTtcbitcbitcdC8qXG4rXHQgKiBVbmxpa2UgdGR4X3BhbXRfcHV0KCkgd2hpY2ggdXNlcyBhdG9taWNfZGVjX2FuZF9sb2NrKCkgdG9cbitcdCAqIGF0b21pY2FsbHkgaGFuZGxlIHRoZSAxLVx1MDAzZTAgdHJhbnNpdGlvbiwgdGhlIGdldCBzaWRlIGhhcyBub1xuK1x0ICogZXF1aXZhbGVudCBjb21iaW5lZCBwcmltaXRpdmUgZm9yIDAtXHUwMDNlMS4gUmVjaGVjayB1bmRlciB0aGVcbitcdCAqIGxvY2sgc2luY2UgYW5vdGhlciBnZXQgbWF5IGhhdmUgYWxyZWFkeSBkb25lIHRoZSAwLVx1MDAzZTFcbitcdCAqIHRyYW5zaXRpb24gYWZ0ZXIgYm90aCBzYXcgYXRvbWljX2luY19ub3RfemVybygpIGZhaWwuXG4rXHQgKi9cbitcdGlmIChhdG9taWNfaW5jX25vdF96ZXJvKHBhbXRfcmVmY291bnQpKVxuK1x0XHRnb3RvIG91dF9mcmVlO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9hZGQocGZuLCBwYW10X3BhZ2VzKTtcbitcdGlmIChXQVJOX09OX09OQ0UodGR4X3N0YXR1cyAhPSBURFhfU1VDQ0VTUykpIHtcbitcdFx0cmV0ID0gLUVJTztcbitcdFx0Z290byBvdXRfZnJlZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgcmVmY291bnQgaXMgemVybywgYW5kIHRoaXMgbG9ja2VkIHBhdGggaXMgdGhlXG4rXHQgKiBvbmx5IHdheSB0byBpbmNyZWFzZSBpdCBmcm9tIDAtXHUwMDNlMS5cbitcdCAqL1xuK1x0YXRvbWljX3NldChwYW10X3JlZmNvdW50LCAxKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZnJlZTpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0ZPUl9LVk0odGR4X3BhbXRfZ2V0KTtcbitcbisvKiBEcm9wIFBBTVQgcmVmY291bnQgZm9yIHRoZSBnaXZlbiBwZm4gYW5kIGZyZWUgUEFNVCBiYWNraW5nIGlmIG5lZWRlZC4gKi9cbit2b2lkIHRkeF9wYW10X3B1dChrdm1fcGZuX3QgcGZuKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYW10X3BhZ2VzW1REWF9EUEFNVF9FTlRSWV9QQUdFX0NOVF0gPSB7fTtcbitcdGF0b21pY190ICpwYW10X3JlZmNvdW50O1xuK1x0dTY0IHRkeF9zdGF0dXM7XG4rXG4rXHRpZiAoIXRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoXHUwMDI2dGR4X3N5c2luZm8pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwYW10X3JlZmNvdW50ID0gdGR4X2ZpbmRfcGFtdF9yZWZjb3VudChwZm4pO1xuK1xuK1x0LypcbitcdCAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiAxIHJlZmVyZW5jZSBvbiB0aGUgcGFtdCBwYWdlLCBkb24ndFxuK1x0ICogcmVtb3ZlIGl0IHlldC4gSnVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LlxuK1x0ICovXG4rXHRpZiAoIWF0b21pY19kZWNfYW5kX2xvY2socGFtdF9yZWZjb3VudCwgXHUwMDI2cGFtdF9sb2NrKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0dGR4X3N0YXR1cyA9IHRkaF9waHltZW1fcGFtdF9yZW1vdmUocGZuLCBwYW10X3BhZ2VzKTtcbitcbitcdC8qXG4rXHQgKiBEb24ndCBmcmVlIHBhbXRfcGFnZXMgYXMgaXQgY291bGQgaG9sZCBnYXJiYWdlIHdoZW5cbitcdCAqIHRkaF9waHltZW1fcGFtdF9yZW1vdmUoKSBmYWlscy4gIERvbid0IHBhbmljL0JVR19PTigpLCBhc1xuK1x0ICogdGhlcmUgaXMgbm8gcmlzayBvZiBkYXRhIGNvcnJ1cHRpb24sIGJ1dCBkbyB5ZWxsIGxvdWRseSBhc1xuK1x0ICogZmFpbHVyZSBpbmRpY2F0ZXMgYSBrZXJuZWwgYnVnLCBtZW1vcnkgaXMgYmVpbmcgbGVha2VkLCBhbmRcbitcdCAqIHRoZSBkYW5nbGluZyBQQU1UIGVudHJ5IG1heSBjYXVzZSBmdXR1cmUgb3BlcmF0aW9ucyB0byBmYWlsLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHRkeF9zdGF0dXMgIT0gVERYX1NVQ0NFU1MpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIGF0b21pY19kZWNfYW5kX2xvY2soKSBhbHJlYWR5IGRlY3JlbWVudGVkIGl0IHRvIDAsXG4rXHRcdCAqIGJ1dCB0aGUgUEFNVCBlbnRyeSBzdGlsbCBleGlzdHMgc2luY2UgUkVNT1ZFIGZhaWxlZC5cbitcdFx0ICovXG4rXHRcdGF0b21pY19zZXQocGFtdF9yZWZjb3VudCwgMSk7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbitcdH1cbitcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rXHRmcmVlX3BhbXRfYXJyYXkocGFtdF9wYWdlcyk7XG4rXHRyZXR1cm47XG4rb3V0X3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBhbXRfbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfcGFtdF9wdXQpO1xuK1xuK3ZvaWQgdGR4X2ZyZWVfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0d2hpbGUgKChwYWdlID0gdGR4X2FsbG9jX3BhZ2VfcGFtdF9jYWNoZShjYWNoZSkpKVxuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9mcmVlX3BhbXRfY2FjaGUpO1xuK1xuK2ludCB0ZHhfdG9wdXBfcGFtdF9jYWNoZShzdHJ1Y3QgdGR4X3BhbXRfY2FjaGUgKmNhY2hlLCB1bnNpZ25lZCBsb25nIG5wYWdlcylcbit7XG4rXHRpZiAoV0FSTl9PTl9PTkNFKCF0ZHhfc3VwcG9ydHNfZHluYW1pY19wYW10KFx1MDAyNnRkeF9zeXNpbmZvKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0bnBhZ2VzICo9IFREWF9EUEFNVF9FTlRSWV9QQUdFX0NOVDtcbitcbitcdHdoaWxlIChjYWNoZS1cdTAwM2VjbnQgXHUwMDNjIG5wYWdlcykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcbitcdFx0aWYgKCFwYWdlKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZWxydSwgXHUwMDI2Y2FjaGUtXHUwMDNlcGFnZV9saXN0KTtcbitcdFx0Y2FjaGUtXHUwMDNlY250Kys7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF90b3B1cF9wYW10X2NhY2hlKTtcbitcbisvKlxuKyAqIFJldHVybiBhIHBhZ2UgdGhhdCBjYW4gYmUgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBcImNvbnRyb2xcIlxuKyAqIHBhZ2UsIGkuZS4gcGFnZXMgdGhhdCBhcmUgdXNlZCBmb3IgY29udHJvbCBzdHJ1Y3R1cmVzIGZvciBhIGdpdmVuIFREWFxuKyAqIGd1ZXN0LCBhbmQgdGh1cyBvYnRhaW4gVERYIHByb3RlY3Rpb25zLCBpbmNsdWRpbmcgUEFNVCB0cmFja2luZy5cbisgKi9cbitzdHJ1Y3QgcGFnZSAqdGR4X2FsbG9jX2NvbnRyb2xfcGFnZSh2b2lkKVxuK3tcbitcdHN0cnVjdCBwYWdlICpwYWdlO1xuK1xuK1x0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghcGFnZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAodGR4X3BhbXRfZ2V0KHBhZ2VfdG9fcGZuKHBhZ2UpLCBOVUxMKSkge1xuK1x0XHRfX2ZyZWVfcGFnZShwYWdlKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcGFnZTtcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfS1ZNKHRkeF9hbGxvY19jb250cm9sX3BhZ2UpO1xuK1xuKy8qXG4rICogRnJlZSBhIHBhZ2UgdGhhdCB3YXMgZ2lmdGVkIHRvIHRoZSBURFgtTW9kdWxlIGZvciB1c2UgYXMgYSBjb250cm9sXG4rICogcGFnZS4gQWZ0ZXIgdGhpcywgdGhlIHBhZ2UgaXMgbm8gbG9uZ2VyIHByb3RlY3RlZCBieSBURFguXG4rICovXG4rdm9pZCB0ZHhfZnJlZV9jb250cm9sX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0ZHhfcGFtdF9wdXQocGFnZV90b19wZm4ocGFnZSkpO1xuK1x0X19mcmVlX3BhZ2UocGFnZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfRk9SX0tWTSh0ZHhfZnJlZV9jb250cm9sX3BhZ2UpO1xuK1xuK3N0YXRpYyBpbnQgX19pbml0IHRkeF9kcGFtdF9zZXR1cChjaGFyICpzdHIpXG4re1xuK1x0cmV0dXJuIGtzdHJ0b2Jvb2woc3RyLCBcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xuK31cbitcbitfX3NldHVwKFwidGR4X2RwYW10PVwiLCB0ZHhfZHBhbXRfc2V0dXApO1xuK1xuIHZvaWQgdGR4X3N5c19kaXNhYmxlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHRkeF9tb2R1bGVfYXJncyBhcmdzID0ge307XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oIGIvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG5pbmRleCBiZGZkMGUxZTMzN2FjLi5hODg2YzU0ZGVjYWFkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5oXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmhcbkBAIC00OCw2ICs0OCw4IEBAXG4gI2RlZmluZSBUREhfU1lTX0NPTkZJR1x0XHRcdDQ1XG4gI2RlZmluZSBUREhfU1lTX1NIVVRET1dOXHRcdDUyXG4gI2RlZmluZSBUREhfU1lTX1VQREFURVx0XHRcdDUzXG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfQUREXHRcdDU4XG4rI2RlZmluZSBUREhfUEhZTUVNX1BBTVRfUkVNT1ZFXHRcdDU5XG4gI2RlZmluZSBUREhfU1lTX0RJU0FCTEVcdFx0XHQ2OVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeF9nbG9iYWxfbWV0YWRhdGEuYyBiL2FyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHhfZ2xvYmFsX21ldGFkYXRhLmNcbmluZGV4IGU0OWMzMDBmMjNkNDMuLjkzYjFmMjYyNTJjNjMgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG4rKysgYi9hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4X2dsb2JhbF9tZXRhZGF0YS5jXG5AQCAtMSw2ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qXG4tICogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnVuY3Rpb25zIHRvIHJlYWQgVERYIGdsb2JhbCBtZXRhZGF0YS5cbisgKiBGdW5jdGlvbnMgdG8gcmVhZCBURFggZ2xvYmFsIG1ldGFkYXRhLlxuICAqXG4gICogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZSBvbiBpdHMgb3duIGFzIGl0IGxhY2tzIG9mIGluY2x1c2lvblxuICAqIG9mIFNFQU1DQUxMIHdyYXBwZXIgcHJpbWl0aXZlIHdoaWNoIHJlYWRzIGdsb2JhbCBtZXRhZGF0YS5cbkBAIC0zMyw2ICszMywxOCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX2ZlYXR1cmVzKHN0cnVjdCB0ZHhfc3lzX2luZm9fZmVhdHVyZXMgKnN5c2luZlxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIF9faW5pdCBpbnQgZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KHN0cnVjdCB0ZHhfc3lzX2luZm9fdGRtciAqc3lzaW5mb190ZG1yKVxuK3tcbitcdGludCByZXQ7XG4rXHR1NjQgdmFsO1xuK1xuK1x0cmV0ID0gcmVhZF9zeXNfbWV0YWRhdGFfZmllbGQoMHg5MTAwMDAwMDAwMDAwMDEzLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKCFyZXQpXG4rXHRcdHN5c2luZm9fdGRtci1cdTAwM2VwYW10X3BhZ2VfYml0bWFwX2VudHJ5X2JpdHMgPSB2YWw7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvX3RkbXIoc3RydWN0IHRkeF9zeXNfaW5mb190ZG1yICpzeXNpbmZvX3RkbXIpXG4ge1xuIFx0aW50IHJldCA9IDA7XG5AQCAtMTI5LDUgKzE0MSwxNCBAQCBzdGF0aWMgX19pbml0IGludCBnZXRfdGR4X3N5c19pbmZvKHN0cnVjdCB0ZHhfc3lzX2luZm8gKnN5c2luZm8pXG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jdHJsKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY3RybCk7XG4gXHRyZXQgPSByZXQgPzogZ2V0X3RkeF9zeXNfaW5mb190ZF9jb25mKFx1MDAyNnN5c2luZm8tXHUwMDNldGRfY29uZik7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGtlcm5lbCBzdXBwb3J0cyB1c2luZyBURFggd2l0aG91dCBEeW5hbWljIFBBTVQsIHNvXG4rXHQgKiBhdm9pZCByZXBvcnRpbmcgZmFpbHVyZSBpZiBpdCdzIG5vdCBzdXBwb3J0ZWQuIERvbid0IHRyeVxuK1x0ICogdG8gc3VwcG9ydCBidWdneSBURFggbW9kdWxlcyB0aGF0IGFkdmVydGlzZSBEeW5hbWljIFBBTVRcbitcdCAqIGJ1dCBkb24ndCBleHBvc2UgdGhlIG1ldGFkYXRhLlxuK1x0ICovXG4rXHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdChzeXNpbmZvKSlcbitcdFx0cmV0ID0gZ2V0X3RkeF9zeXNfaW5mb190ZG1yX2RwYW10KFx1MDAyNnN5c2luZm8tXHUwMDNldGRtcik7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjAyLjA5OTIxOTkwMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3NDYzNTkxMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRHluYW1pYyBQQU1UIFREWCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYWRkaW5nIFwiRHluYW1pYyBQQU1UXCIgc3VwcG9ydCB3aXRoaW4gdGhlIFREWCBtb2R1bGUgZm9yIHg4Ni4gSXQncyB0b3VjaGluZyBzZXZlcmFsIGNvcmUgZmlsZXMgaW4gdGhlIEtWTSBhbmQgVERYIGluZnJhc3RydWN0dXJlOiBgdGR4LmNgIGZpbGVzLCB0aGUgTU1VLCBldGMuIFRoaXMgaXMgYWN0aXZhdGVkIHdpdGggdGhlIGB0ZHhfZHBhbXQ9b25gIGtlcm5lbCBwYXJhbWV0ZXIsIGFuZCBpdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgbGlrZSBgdGR4X3BhbXRfZ2V0YCwgYHRkeF9wYW10X3B1dGAsIGFsbCB0aGF0IGdvb2Qgc3R1ZmYsIHBsdXMgaXQgdXRpbGl6ZXMgYFRESF9QSFlNRU1fUEFNVF9BRERgIGFuZCBgVERIX1BIWU1FTV9QQU1UX1JFTU9WRWAgU0VBTUNBTExzLlxuXG5UaGUgaW5pdGlhbCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gSW1tZWRpYXRlbHksIHRoZSBURFggcmVxdWlyZW1lbnQgcG9wcyB0byBtaW5kIC0gc3BlY2lmaWMgSW50ZWwgVERYIGhhcmR3YXJlLiBJdCdzIGEgdmlydHVhbGl6YXRpb24gZmVhdHVyZSwgYnV0IHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiB0aGUgKmhvc3QqIHNpZGUsIHRoZSBLVk0gc3VwcG9ydCwgbm90IHRoZSBndWVzdCBpdHNlbGYsIGF0IGxlYXN0IHRoYXQncyBteSB1bmRlcnN0YW5kaW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gd2UgcmVhbGx5IHRlc3QgdGhpcyBpbiBRRU1VP1wiLlxuXG5XYWl0LCBhIGZ1cnRoZXIgdGhvdWdodCBzdHJpa2VzOiBJc24ndCBURFggZ3Vlc3Qgc3VwcG9ydCBzZXBhcmF0ZSBmcm9tIHRoaXMgS1ZNIGhvc3Qtc2lkZSB3b3JrPyBJIG5lZWQgdG8gYmUgcHJlY2lzZSwgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgVERYIGhvc3Qtc2lkZSBLVk0gZnVuY3Rpb25hbGl0eS4gTm93IEknbSBxdWVzdGlvbmluZyB3aGV0aGVyIFREWCBob3N0IHN1cHBvcnQgaW4gS1ZNIGlzIGV2ZW4gZnVsbHkgdXBzdHJlYW1lZCwgb3IgaWYgaXQgaXMgdGVzdGFibGUgd2l0aCBzdGFuZGFyZCBRRU1VLlxuXG5SZWFsaXN0aWNhbGx5LCBURFggaG9zdCBzdXBwb3J0ICp0eXBpY2FsbHkqIGRlbWFuZHMgYmFyZSBtZXRhbCB3aXRoIFREWC1jYXBhYmxlIGhhcmR3YXJlLiBOZXN0ZWQgdmlydHVhbGl6YXRpb24sIGV2ZW4gaWYgaXQgY291bGQgYmUgbmVzdGVkICh3aGljaCBpdCBjYW4ndCByaWdodCBub3cpLCBpcyBhIG5vLWdvLiBUaGUgcHJvbXB0IGl0c2VsZiBpcyB2ZXJ5IGV4cGxpY2l0IGFib3V0IHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFL1FFTVUgd2hlbiBlbXVsYXRpbmcgaGFyZHdhcmUsIGl0J3MgcmVmZXJyaW5nIHRvIHRoZSBURFggaG9zdCBjb2RlLlxuXG5TbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBhIGZ1enplciBsaWtlIHN5emthbGxlciByZWFjaCB0aGlzIFREWCBob3N0IGNvZGUgaW4gc29tZXRoaW5nIGxpa2UgR0NFIG9yIFFFTVU/IEFuZCB0aGUgYW5zd2VyIGlzIGxpa2VseSBhIGZpcm0gbm8uIFRoaXMgVERYIGhvc3QgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhlIHVuZGVybHlpbmcgSW50ZWwgQ1BVIHdpdGggVERYIHN1cHBvcnQuIFFFTVUsIGluIGl0cyBzdGFuZGFyZCBjb25maWd1cmF0aW9uLCBkb2Vzbid0IGVtdWxhdGUgdGhhdCBoYXJkd2FyZSwgYW5kIHN0YW5kYXJkIEdDRSBWTXMgZG9uJ3QgdHlwaWNhbGx5IHByb3ZpZGUgaXQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgYXZhaWxhYmxlIGZvciBnZW5lcmFsIHVzZS4gUUVNVSBjYW4gYmUgYSBWTU0gdGhhdCAqcnVucyogVERYIGd1ZXN0cywgdXNpbmcgS1ZNLCBidXQgdGhlIEtWTSBwYXJ0ICh0aGUgaG9zdCBrZXJuZWwpIHN0aWxsIG5lZWRzIHRvIGJlIG9uIFREWC1jYXBhYmxlIGhhcmR3YXJlLCBhbmQgaWYgSSB0cnkgdG8gcnVuIGEga2VybmVsIGluIFFFTVUsIEtWTSB3aWxsIGNoZWNrIGZvciB0aGUgVERYIGhhcmR3YXJlLiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgZmFpbC5cblxuSSBzaG91bGQgdmVyaWZ5IHRoYXQsIEknbSBnb2luZyB0byBsb29rIGF0IGBpbml0X3RkeF9tb2R1bGVgIGluIGBhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmNgIGFuZCBzZWFyY2ggZm9yIHRoZSBrZXkgaWRlbnRpZmllcnMgbGlrZSBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgYW5kIGBpbml0X3RkeF9tb2R1bGVgIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjIzLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MTAuODQ1NTgxOTgzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDg2MjA0MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5pdF90ZHhfbW9kdWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMTY2PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGRtcnMoc3RydWN0IHRkbXJfaW5mb19saXN0ICp0ZG1yX2xpc3QpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4NC1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTE4NTpzdGF0aWMgX19pbml0IGludCBpbml0X3RkeF9tb2R1bGUodm9pZClcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTE4Ni17XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MTI3Mj1zdGF0aWMgX19pbml0IGludCB0ZHhfZW5hYmxlKHZvaWQpXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTMwMjpcXHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMTMwMy1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjEyLjY5NDIwODYyN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MzcyMzQ0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQWN0aXZhdGlvbiBvZiBgdGR4X2VuYWJsZWAqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aGVuIGRvZXMgYHRkeF9lbmFibGVgIGFjdHVhbGx5IGdldCBjYWxsZWQ/IElzIGl0IGJha2VkIGludG8gdGhlIGVhcmx5IGJvb3Qgc2VxdWVuY2UsIG9yIGlzIGl0IGV4Y2x1c2l2ZWx5IHRyaWdnZXJlZCBieSB0aGUgS1ZNIGxvYWRpbmcgcHJvY2Vzcz8gVW5kZXJzdGFuZGluZyB0aGlzIGhhcyBzb21lIG1ham9yIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIGFyY2hpdGVjdCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgd2UgbmVlZCB0byBjb25zaWRlci4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzb21lIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlbiB0aGlzIGtleSBmdW5jdGlvbiBoaXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc5OSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjE1LjYzMTQ0NTc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUzNjkwODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGR4X2VuYWJsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtNDktXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjUwOnN0YXRpYyBib29sIHRkeF9lbmFibGVfZHBhbXQgX19yb19hZnRlcl9pbml0O1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy01MS1cXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYz0xMTg1PXN0YXRpYyBfX2luaXQgaW50IGluaXRfdGR4X21vZHVsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEyNzEtXFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jOjEyNzI6c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMjczLXtcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0xMzE0LX1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MTMxNTpzdWJzeXNfaW5pdGNhbGwodGR4X2VuYWJsZSk7XFxuYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jLTEzMTYtXFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjA1Mj1ib29sIHRkeF9zdXBwb3J0c19keW5hbWljX3BhbXQoY29uc3Qgc3RydWN0IHRkeF9zeXNfaW5mbyAqc3lzaW5mbylcXG4tLVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMDU0LVxcdHJldHVybiBzeXNpbmZvLVxcdTAwM2VmZWF0dXJlcy50ZHhfZmVhdHVyZXMwIFxcdTAwMjYgVERYX0ZFQVRVUkVTMF9EWU5BTUlDX1BBTVQgXFx1MDAyNlxcdTAwMjZcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjA1NTpcXHQgICAgICAgdGR4X2VuYWJsZV9kcGFtdDtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmMtMjA1Ni19XFxuLS1cXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM9MjMyNz1zdGF0aWMgaW50IF9faW5pdCB0ZHhfZHBhbXRfc2V0dXAoY2hhciAqc3RyKVxcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzI4LXtcXG5hcmNoL3g4Ni92aXJ0L3ZteC90ZHgvdGR4LmM6MjMyOTpcXHRyZXR1cm4ga3N0cnRvYm9vbChzdHIsIFxcdTAwMjZ0ZHhfZW5hYmxlX2RwYW10KSA9PSAwO1xcbmFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguYy0yMzMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MTcuMjY2ODI0MjM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE4ODg2MTQ1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGB0ZHhfZW5hYmxlYCBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIGB0ZHhfZW5hYmxlYCBpcyBnZXR0aW5nIGhvb2tlZCB1cCBhcyBhIGBzdWJzeXNfaW5pdGNhbGxgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbWVhbnMgdGhpcyBpcyBhIGxvdy1sZXZlbCwgZWFybHktc3RhZ2UgY29tcG9uZW50LCBsaWtlbHkgY3J1Y2lhbCBmb3Igc2V0dGluZyB1cCB0aGUgVHJ1c3RlZCBEb21haW4gRXh0ZW5zaW9ucyAoVERYKSBlbnZpcm9ubWVudCB3aXRoaW4gdGhlIHN5c3RlbSwgcHJlc3VtaW5nIHRoaXMgaXMgYSBURFgtYXdhcmUga2VybmVsLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIGhhcmR3YXJlLWxldmVsIFREWCBmdW5jdGlvbmFsaXR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3Qgcm9sZSBpbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEknbGwgbmVlZCB0byBkaXNzZWN0IHRoZSBmdW5jdGlvbidzIGludGVybmFscyB0byBzZWUgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgQ1BVLCBtZW1vcnkgY29udHJvbGxlcnMsIGFuZCBhbnkgcmVsZXZhbnQgcGxhdGZvcm0tc3BlY2lmaWMgcmVnaXN0ZXJzIG9yIEFDUEkgdGFibGVzLiBJcyBpdCBhdHRlbXB0aW5nIHRvIGRpc2NvdmVyIGFuZCB2YWxpZGF0ZSBURFggc3VwcG9ydCwgcHJvYmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSByZXF1aXJlZCBoYXJkd2FyZSBmZWF0dXJlcyBsaWtlIHRoZSBURFggTW9kdWxlIChURFgtTSk/IElzIGl0IGVuYWJsaW5nIHNwZWNpZmljIENQVSBmbGFncyBvciBNU1JzPyBQZXJoYXBzIGl0J3MgY3JlYXRpbmcgb3IgcmVnaXN0ZXJpbmcgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgcmVxdWlyZWQgZm9yIFREWCBvcGVyYXRpb24gbGF0ZXIgb24uIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVERYLXJlbGF0ZWQgZmlybXdhcmUgY29tcG9uZW50cywgdGhlIEludGVsIFRYVCBvciB0aGUgQU1EIFNFVi9TRVYtU05QLCBhc3N1bWluZyB0aGF0IGlzIGluIGVmZmVjdC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGdvaW5nIG9uIGluc2lkZSBgdGR4X2VuYWJsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MjIuNDU1Njg3OTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L3ZpcnQvdm14L3RkeC90ZHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjcwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjcwOlxcdH1cXG4xMjcxOlxcdFxcbjEyNzI6XFx0c3RhdGljIF9faW5pdCBpbnQgdGR4X2VuYWJsZSh2b2lkKVxcbjEyNzM6XFx0e1xcbjEyNzQ6XFx0XFx0ZW51bSBjcHVocF9zdGF0ZSBzdGF0ZTtcXG4xMjc1OlxcdFxcdGludCByZXQ7XFxuMTI3NjpcXHRcXG4xMjc3OlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9URFhfSE9TVF9QTEFURk9STSkpIHtcXG4xMjc4OlxcdFxcdFxcdHByX2VycihcXFwiVERYIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgcGxhdGZvcm1cXFxcblxcXCIpO1xcbjEyNzk6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTI4MDpcXHRcXHR9XFxuMTI4MTpcXHRcXG4xMjgyOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9YU0FWRSkpIHtcXG4xMjgzOlxcdFxcdFxcdHByX2VycihcXFwiWFNBVkUgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMTI4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjg1OlxcdFxcdH1cXG4xMjg2OlxcdFxcbjEyODc6XFx0XFx0aWYgKCFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX01PVkRJUjY0QikpIHtcXG4xMjg4OlxcdFxcdFxcdHByX2VycihcXFwiTU9WRElSNjRCIGlzIHJlcXVpcmVkIGZvciBURFhcXFxcblxcXCIpO1xcbjEyODk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI5MDpcXHRcXHR9XFxuMTI5MTpcXHRcXG4xMjkyOlxcdFxcdGlmICghY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRUxGU05PT1ApKSB7XFxuMTI5MzpcXHRcXHRcXHRwcl9lcnIoXFxcIlNlbGYtc25vb3AgaXMgcmVxdWlyZWQgZm9yIFREWFxcXFxuXFxcIik7XFxuMTI5NDpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4xMjk1OlxcdFxcdH1cXG4xMjk2OlxcdFxcbjEyOTc6XFx0XFx0c3RhdGUgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCBcXFwidmlydC90ZHg6b25saW5lXFxcIixcXG4xMjk4OlxcdFxcdFxcdFxcdFxcdCAgdGR4X29ubGluZV9jcHUsIHRkeF9vZmZsaW5lX2NwdSk7XFxuMTI5OTpcXHRcXHRpZiAoc3RhdGUgXFx1MDAzYyAwKVxcbjEzMDA6XFx0XFx0XFx0cmV0dXJuIHN0YXRlO1xcbjEzMDE6XFx0XFxuMTMwMjpcXHRcXHRyZXQgPSBpbml0X3RkeF9tb2R1bGUoKTtcXG4xMzAzOlxcdFxcdGlmIChyZXQpIHtcXG4xMzA0OlxcdFxcdFxcdHByX2VycihcXFwiVERYLU1vZHVsZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4xMzA1OlxcdFxcdFxcdGNwdWhwX3JlbW92ZV9zdGF0ZShzdGF0ZSk7XFxuMTMwNjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMDc6XFx0XFx0fVxcbjEzMDg6XFx0XFxuMTMwOTpcXHRcXHRyZWdpc3Rlcl9zeXNjb3JlKFxcdTAwMjZ0ZHhfc3lzY29yZSk7XFxuMTMxMDpcXHRcXG4xMzExOlxcdFxcdHRkeF9tb2R1bGVfc3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbjEzMTI6XFx0XFx0cHJfaW5mbyhcXFwiVERYLU1vZHVsZSBpbml0aWFsaXplZFxcXFxuXFxcIik7XFxuMTMxMzpcXHRcXHRyZXR1cm4gMDtcXG4xMzE0OlxcdH1cXG4xMzE1OlxcdHN1YnN5c19pbml0Y2FsbCh0ZHhfZW5hYmxlKTtcXG4xMzE2OlxcdFxcbjEzMTc6XFx0aW50IHRkeF9tb2R1bGVfc2h1dGRvd24odm9pZClcXG4xMzE4OlxcdHtcXG4xMzE5OlxcdFxcdHN0cnVjdCB0ZHhfc3lzX2luZm9faGFuZG9mZiBoYW5kb2ZmID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjIyLjQ1NTg1NTY4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDc0NTczMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFREWCBIb3N0IENvZGUgUmVhY2hhYmlsaXR5IGZvciBGdXp6aW5nKipcblxuT2theSwgc28gYHRkeF9lbmFibGVgIGNoZWNrcyBmb3IgYFg4Nl9GRUFUVVJFX1REWF9IT1NUX1BMQVRGT1JNYCBhbmQgcmV0dXJucyBgLUVOT0RFVmAgaWYgaXQncyBub3QgZW5hYmxlZC4gTmF0dXJhbGx5LCBteSBmaXJzdCB0aG91Z2h0IGlzOiBpcyB0aGlzIHBsYXRmb3JtIGZlYXR1cmUgZW11bGF0ZWQgYnkgUUVNVS9LVk0/IE5vLCBzdGFuZGFyZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgVERYIGhvc3QgcGxhdGZvcm0uIEl0IHJlcXVpcmVzIGFjdHVhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFREWCBlbmFibGVkIGluIHRoZSBCSU9TLCBhbmQgdGhlIFNFQU0gbW9kdWxlIGxvYWRlZCwgYW5kIHNvIG9uLlxuXG5Ob3cgSSdtIHRoaW5raW5nLCBjYW4gc3l6a2FsbGVyIGV2ZW4gcnVuIG9uIFREWCBoYXJkd2FyZT8gVGhlIHByb21wdCBpcyBoaW50aW5nIGF0OiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBTaW5jZSBURFggaG9zdCBjb2RlIGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gc3RhbmRhcmQgUUVNVSwgYW5kIHRoZXJlIGlzIG5vIFNFQU0gbW9kdWxlIGVtdWxhdGlvbiwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBhbnkgc29mdHdhcmUgZW11bGF0aW9uIGV4aXN0cyBmb3IgdGhlIFREWCBob3N0LiBJIGFtIGZhaXJseSBjb25maWRlbnQgaW4gbXkga25vd2xlZGdlIGhlcmUsIGJ1dCBhIHF1aWNrIGNvbmZpcm1hdGlvbiBpcyB3YXJyYW50ZWQuXG5cbk5vLCBpdCdzIG5vdCBlbXVsYXRlZC4gVERYIGlzIGEgaGFyZHdhcmUgZmVhdHVyZSwgYW5kIGBTRUFNQ0FMTHNgIGFyZSBoYW5kbGVkIGJ5IHRoZSBURFggbW9kdWxlLCB3aGljaCBpcyBhIHNlY3VyZSBlbmNsYXZlLiBRRU1VIGRvZXMgbm90IGVtdWxhdGUgdGhlIFREWCBtb2R1bGUgZm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiwgb3IgYXQgbGVhc3Qgbm90IGluIHRoZSBzdGFuZGFyZCB1cHN0cmVhbSB2ZXJzaW9uLiBTbywgdGhpcyBjb25maXJtcyB0aGF0IFREWCBob3N0IGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5UaGlzIGJyaW5ncyBtZSBiYWNrIHRvIHRoZSBwcm9tcHQsIHdoaWNoIHN0YXRlcyB0byBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVERYIGhvc3QgY29kZSBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJcyB0aGVyZSAqYW55KiBwYXJ0IG9mIHRoaXMgcGF0Y2ggdGhhdCAqaXMqIHJlYWNoYWJsZSB3aXRob3V0IFREWCBoYXJkd2FyZT8gTGV0IG1lIGNoZWNrIHRoZSBhY3R1YWwgY29kZSBjaGFuZ2VzLiBPa2F5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2gveDg2L2t2bS9tbXUvbW11LmNgLiBUaGUgY2hhbmdlIGlzIGFkZGluZyBhIGNhbGwgdG8gYGt2bV94ODZfY2FsbCh0b3B1cF9leHRlcm5hbF9jYWNoZSlgLiBUaGF0IGxvb2tzIGxpa2UgYW4gb3B0aW9uYWwgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrdm1feDg2X2NhbGxgLiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2ODcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwMzowMToyOS41NjMzMTU3ODRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODg5ODc1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBrdm1feDg2X2NhbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMDYzPWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaC0yMDY0LVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjA2NTojZGVmaW5lIGt2bV94ODZfY2FsbChmdW5jKSBzdGF0aWNfY2FsbChrdm1feDg2XyMjZnVuYylcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNjYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDAzOjAxOjMxLjA1MjMxMjQxM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDE2ODMzMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlREWCBIb3N0IENvZGUgVW5yZWFjaGFiaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGRlZmluZWQgdXNpbmcgYEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMGAuIFRoYXQgbWVhbnMgaWYgdGhlIHVuZGVybHlpbmcgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9neSAobGlrZSBWTVggb3IgU1ZNKSBkb2Vzbid0IGltcGxlbWVudCBpdCwgaXQgc2ltcGx5IHJldHVybnMgemVyby4gQ3J1Y2lhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXNzaWduZWQgYSBub24temVybyB2YWx1ZSB3aXRoaW4gYHRkeF9oYXJkd2FyZV9zZXR1cGAuIEFuZCBgdGR4X2hhcmR3YXJlX3NldHVwYCBpcywgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIHBvaW50LCAqb25seSogY2FsbGVkIGlmIFREWCBzdXBwb3J0IGlzIGRldGVjdGVkLlxuXG5TbywgaW4gdGhlIGFic2VuY2Ugb2YgYSBURFgtZW5hYmxlZCBlbnZpcm9ubWVudCwgd2hpY2ggaXMgdGhlIG5vcm0gZm9yIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwcywgYHRvcHVwX2V4dGVybmFsX2NhY2hlYCB3aWxsICphbHdheXMqIHJldHVybiB6ZXJvLiBUaGUgcmVzdCBvZiB0aGUgcGF0Y2gsIGFzIEkndmUgc2VlbiwgaXMgY29uZmluZWQgdG8gYGFyY2gveDg2L2t2bS92bXgvdGR4LmNgIGFuZCBgYXJjaC94ODYvdmlydC92bXgvdGR4L3RkeC5jYC4gQ29uc2VxdWVudGx5LCB0aGlzIFREWC1zcGVjaWZpYyBjb2RlIHNpbXBseSB3b24ndCBiZSBleGVjdXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBJdCdzIHRvdGFsbHkgdW5yZWFjaGFibGUgZm9yIFN5emthbGxlci5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcG90ZW50aWFsIGVzY2FwZSByb3V0ZXMuIFRoZSBgdGR4X2RwYW10X3NldHVwYCBmdW5jdGlvbiBpcyBhbiBgX19zZXR1cGAgZnVuY3Rpb24sIHdoaWNoIHNpbXBseSBmbGlwcyBhIGJvb2xlYW4sIGl0J3Mgbm90IHJlbGV2YW50LiBgdGR4X3N1cHBvcnRzX2R5bmFtaWNfcGFtdGAgaXMgZXhwb3J0ZWQsIGJ1dCBpcyBvbmx5IHVzZWQgd2l0aGluIHRoZSBLVk0gVERYIGluZnJhc3RydWN0dXJlLiBTaW1pbGFybHksIGZ1bmN0aW9ucyBsaWtlIGB0ZHhfcGFtdF9nZXRgLCBgdGR4X3BhbXRfcHV0YCwgZXRjLiwgYXJlIGV4cG9ydGVkLCBidXQgdGhleSdyZSBhbGwgZmlybWx5IHdpdGhpbiB0aGUgS1ZNIFREWCBkb21haW4uIEFuZCB0aGF0IGBtbXVfdG9wdXBfbWVtb3J5X2NhY2hlc2AgY2FsbCB0byBgdG9wdXBfZXh0ZXJuYWxfY2FjaGVgIGlzIGEgc3RhdGljIGNhbGwgdGhhdCBlZmZlY3RpdmVseSBiZWNvbWVzIGEgbm8tb3AgdGhhdCdzIGRlc2lnbmVkIHRvIHJldHVybiAwLlxuXG5UaGVyZWZvcmUsIHdpdGhvdXQgVERYIGhhcmR3YXJlLCB0aGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZC5cblxuU28sIHRoZSByZWFzb25pbmcgSSdsbCBmb3JtdWxhdGUgaXMgdGhpczogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBEeW5hbWljIFBBTVQgc3VwcG9ydCB3aXRoaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIEZ1bmN0aW9uYWxpdHkgZGVwZW5kZW50IG9uIHRoaXMgc3VwcG9ydCByZXF1aXJlcyBzcGVjaWZpYyBiYXJlLW1ldGFsIEludGVsIGhhcmR3YXJlIHdpdGggVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgZW5hYmxlZCBhbmQgdGhlIFREWCBtb2R1bGUgbG9hZGVkLiBTaW5jZSB0aGlzIGhhcmR3YXJlIGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkzMCwiT3V0cHV0VG9rZW5zIjoxMDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDM6MDE6MzguNDY5MTQ4MDMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBEeW5hbWljIFBBTVQgaW4gdGhlIFREWCBob3N0IChLVk0pIGNvZGUuIFREWCBob3N0IHN1cHBvcnQgcmVxdWlyZXMgc3BlY2lmaWMgYmFyZS1tZXRhbCBJbnRlbCBoYXJkd2FyZSB3aXRoIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIGVuYWJsZWQgYW5kIHRoZSBURFggbW9kdWxlIGxvYWRlZC4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRHluYW1pYyBQQU1UIGluIHRoZSBURFggaG9zdCAoS1ZNKSBjb2RlLiBURFggaG9zdCBzdXBwb3J0IHJlcXVpcmVzIHNwZWNpZmljIGJhcmUtbWV0YWwgSW50ZWwgaGFyZHdhcmUgd2l0aCBUcnVzdCBEb21haW4gRXh0ZW5zaW9ucyBlbmFibGVkIGFuZCB0aGUgVERYIG1vZHVsZSBsb2FkZWQuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowhqq96[1] Phase: Running StartedAt: 2026-08-06 03:01:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhqq96[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-06 03:01:49 +0000 UTC FinishedAt: 2026-08-06 03:01:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}