Name: series-workflowjwbdf Phase: Failed StartedAt: 2026-09-11 00:41:24 +0000 UTC FinishedAt: 2026-09-11 01:04:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbdf[0] Phase: Succeeded StartedAt: 2026-09-11 00:41:24 +0000 UTC FinishedAt: 2026-09-11 01:04:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbdf[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 00:41:24 +0000 UTC FinishedAt: 2026-09-11 01:04:29 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgaXNvbGF0ZWQgdG8gdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODcyNWYwMjdiMTEwYzFlODI2NDdjNWVhNDgwM2FhNmM1ZTNhZmE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6MDM6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuaW5kZXggMmRjMzYyOWQ2ZDBmNi4uZDE2NDNiZjhhMWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuQEAgLTY2LDE4ICYjNDM7NjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZhZGFwdGVyLVx1MDAzZXJlZmNvdW50LCAxKTtcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0KTtcbiBcbiBcdHJldHVybiBhZGFwdGVyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpY2VfYWRhcHRlcl9mcmVlKHN0cnVjdCBpY2VfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4tXHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpKTtcbiYjNDM7XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCkpO1xuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2spOyBpJiM0MzsmIzQzOylcbiBcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4gXG4gXHRrZnJlZShhZGFwdGVyKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuaW5kZXggNGY2OTVmMzJkYTNkOC4uMzk5MjNkZWRkNTM0ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuQEAgLTE5LDEzICYjNDM7MTksMTMgQEAgc3RydWN0IGljZV9wZjtcbiAgKlxuICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0c1xuICAqXG4tICogQHBvcnRzOiBsaXN0IG9mIHBvcnRzXG4mIzQzOyAqIEBsaXN0OiBsaXN0IG9mIHBvcnRzXG4gICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0XG4gICovXG4gc3RydWN0IGljZV9wb3J0X2xpc3Qge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBwb3J0cztcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHQvKiBUbyBzeW5jaHJvbml6ZSB0aGUgcG9ydHMgbGlzdCBvcGVyYXRpb25zICovXG4tXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5kMTI5NTIxNzFhOTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzI0OCw3ICYjNDM7MzI0OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyX3RocmVhZF9mbihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbi1cdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcbiYjNDM7XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XG4gXHRcdC8qIElmIGFueSBuZXcgVHggdGltZXN0YW1wcyBoYXBwZW5lZCB3aGlsZSBpbiBpbnRlcnJ1cHQsXG4gXHRcdCAqIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgaXQgYWdhaW4uXG4gXHRcdCAqL1xuQEAgLTY3NDUsNyAmIzQzOzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcbiBcdFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXHUwMDNlbmV0ZGV2KTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XG4gXHR9XG4gXG4gXHQvKiBQZXJmb3JtIGFuIGluaXRpYWwgcmVhZCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgbm93IHRvXG5AQCAtNzI3Myw3ICYjNDM7NzI3Miw2IEBAIGludCBpY2VfZG93bihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFxuIFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYpIHtcbiBcdFx0dmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktXHUwMDNlYmFjaywgZmFsc2UpO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZih2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfdHhfZGlzYWJsZSh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdH1cbkBAIC03Nzk0LDYgJiM0Mzs3NzkyLDE0IEBAIHN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbiBcbiBcdGljZV91cGRhdGVfcGZfbmV0ZGV2X2xpbmsocGYpO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZWh3LnBvcnRfaW5mbykge1xuJiM0MztcdFx0Ym9vbCBsaW5rX3VwO1xuJiM0MztcbiYjNDM7XHRcdGxpbmtfdXAgPSAhIShwZi1cdTAwM2Vody5wb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgSUNFX0FRX0xJTktfVVApO1xuJiM0MztcdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgbGlua191cCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHRlbGwgdGhlIGZpcm13YXJlIHdlIGFyZSB1cCAqL1xuIFx0ZXJyID0gaWNlX3NlbmRfdmVyc2lvbihwZik7XG4gXHRpZiAoZXJyKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbmluZGV4IGVhZWMzNmFiNmFlM2YuLmE1ZWZiMGE5NTk0MWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMSw2ICYjNDM7MSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ljZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWNlX2xpYi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWNlX3RyYWNlLmhcJiMzNDtcbkBAIC0zNjIsOSAmIzQzOzM2NCwxMiBAQCBzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcClcbiBzdGF0aWMgYm9vbFxuIGljZV9wdHBfaXNfdHhfdHJhY2tlcl91cChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4ge1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xuJiM0MztcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dHgtXHUwMDNlbG9jayk7XG4gXG4tXHRyZXR1cm4gdHgtXHUwMDNlaW5pdCBcdTAwMjZcdTAwMjYgIXR4LVx1MDAzZWNhbGlicmF0aW5nO1xuJiM0MztcdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmcgXHUwMDI2XHUwMDI2IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4gfVxuIFxuIC8qKlxuQEAgLTU2MSw3ICYjNDM7NTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZjtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3O1xuIFx0dTY0IHRzdGFtcF9yZWFkeTtcbi1cdGJvb2wgbGlua191cDtcbiBcdGludCBlcnI7XG4gXHR1OCBpZHg7XG4gXG5AQCAtNTY5LDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xuIFx0aHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcbi1cdGlmICghdHgtXHUwMDNlaW5pdClcbiYjNDM7XHRpZiAoIXR4LVx1MDAzZWluaXQgfHwgYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXG5AQCAtNTc5LDE0ICYjNDM7NTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdC8qIERyb3AgcGFja2V0cyBpZiB0aGUgbGluayB3ZW50IGRvd24gKi9cbi1cdGxpbmtfdXAgPSBwdHBfcG9ydC1cdTAwM2VsaW5rX3VwO1xuLVxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSB7XG4gXHRcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9O1xuIFx0XHR1OCBwaHlfaWR4ID0gaWR4ICYjNDM7IHR4LVx1MDAzZW9mZnNldDtcbiBcdFx0dTY0IHJhd190c3RhbXAgPSAwLCB0c3RhbXA7XG4tXHRcdGJvb2wgZHJvcF90cyA9ICFsaW5rX3VwO1xuJiM0MztcdFx0Ym9vbCBkcm9wX3RzID0gZmFsc2U7XG4gXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRcdC8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqL1xuQEAgLTYxOSw2ICYjNDM7NjIwLDE5IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhZHJvcF90cylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qIHZlcmlmeSByZWFkeSBiaXQgY2xlYXJlZCAqL1xuJiM0MztcdFx0aWYgKHR4LVx1MDAzZWhhc19yZWFkeV9iaXRtYXApIHtcbiYjNDM7XHRcdFx0ZXJyID0gaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KTtcbiYjNDM7XHRcdFx0aWYgKGVyciB8fCB0c3RhbXBfcmVhZHkgXHUwMDI2IEJJVF9VTEwocGh5X2lkeCkpIHtcbiYjNDM7XHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlc3RhbGUpKVxuJiM0MztcdFx0XHRcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7UEhZIHBvcnQgJXUgZmFpbGVkIHRvIGNsZWFyIHJlYWR5IGJpdCBmb3IgaWR4ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRwdHBfcG9ydC1cdTAwM2Vwb3J0X251bSwgcGh5X2lkeCk7XG4mIzQzO1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGljZV90cmFjZSh0eF90c3RhbXBfZndfZG9uZSwgdHgtXHUwMDNldHN0YW1wc1tpZHhdLnNrYiwgaWR4KTtcbiBcbiBcdFx0LyogRm9yIFBIWXMgd2hpY2ggZG9uJiMzOTt0IGltcGxlbWVudCBhIHByb3BlciB0aW1lc3RhbXAgcmVhZHlcbkBAIC02NzMsMjAgJiM0Mzs2ODcsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZi1cdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCAmIzQzOz0gdHN0YW1wX2dvb2Q7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3Uoc3RydWN0IGtyZWYgKnJlZilcbiYjNDM7e1xuJiM0MztcdHdha2VfdXBfdmFyKHJlZik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4gXHRcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFx1MDAyNnBvcnQtXHUwMDNldHg7XG4gXG4tXHRcdGlmICghdHggfHwgIXR4LVx1MDAzZWluaXQpXG4mIzQzO1x0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0XHRpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHR4KTtcbiYjNDM7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC03MjUsNiAmIzQzOzc1MiwzNyBAQCBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoMTApO1xuJiM0MztcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4mIzQzO1x0dTY0IHRzdGFtcF9yZWFkeTtcbiYjNDM7XHRib29sIHBlbmRpbmc7XG4mIzQzO1x0dTggaWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoaHctXHUwMDNlcmVzZXRfb25nb2luZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXHUwMDNlYmxvY2ssIFx1MDAyNnRzdGFtcF9yZWFkeSkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRwZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKCEodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKGlkeCAmIzQzOyB0eC1cdTAwM2VvZmZzZXQpKSlcbiYjNDM7XHRcdFx0XHRwZW5kaW5nID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghcGVuZGluZylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSg1MDAsIDEwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBpbi1mbGlnaHQgVHggdGltZXN0YW1wcyBvbiBibG9jayAldVxcblwmIzM0OyxcbiYjNDM7XHRcdHR4LVx1MDAzZWJsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC03NDEsNiAmIzQzOzc5OSw4IEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbiYjNDM7XHRpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTtcbiYjNDM7XG4gXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHRoZSBUeCB0c3RhbXAgcmVhZHkgYml0bWFwIGZvciBibG9jayAldSwgZXJyICVkXFxuXCYjMzQ7LFxuQEAgLTc3OSwxMiAmIzQzOzgzOSwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXG4gICpcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXG4tICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS5cbi0gKlxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxuLSAqIHRpbWUgcmVxdWVzdC5cbiYjNDM7ICogTWFyayBjdXJyZW50bHkgb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcyBhcyBzdGFsZS4gVGhpcyBwcmV2ZW50cyB0aGUgZHJpdmVyXG4mIzQzOyAqIGZyb20gcmVwb3J0aW5nIHRoZSB0aW1lc3RhbXAgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIGNhbGxlZCB0byBpbmZvcm0gdGhlXG4mIzQzOyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGlua1xuJiM0MzsgKiB3ZW50IGRvd24uXG4gICovXG4gc3RhdGljIHZvaWRcbiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZShzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG5AQCAtODA4LDggJiM0Mzs4NjYsMTYgQEAgaWNlX3B0cF9mbHVzaF9hbGxfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLCBsaXN0X25vZGUpXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHB0cF9wb3J0X3RvX3BmKHBvcnQpLCBcdTAwMjZwb3J0LVx1MDAzZXR4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtOTk0LDEzICYjNDM7MTA2MCw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwZi1cdTAwM2VwdHAud29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMCkpO1xuIFx0fVxuLVxuLVx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXG4tXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxuLVx0ICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpblxuLVx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4tXHQgKi9cbi1cdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTEzMyw2ICYjNDM7MTE5Miw3IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGljZV9wZiAqcGY7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodztcbiBcdGludCB0eF9lcnI7XG5AQCAtMTE1NSwxMiAmIzQzOzEyMTUsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4gXHRcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XG4tXHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiYjNDM7XHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIuXG4mIzQzO1x0XHQgKiBUaGlzIGlzIGV4cGVjdGVkIGR1cmluZyBub3JtYWwgbGluay11cDogdGhlIHZlcm5pZXIgb2Zmc2V0XG4mIzQzO1x0XHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcbiYjNDM7XHRcdCAqIGJlZW4gdHJhbnNtaXR0ZWQsIHNvIHRoZSBmaXJzdCByZXRyaWVzIHJvdXRpbmVseSBsYW5kIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdFwmIzM0O1BUUCBvZmZzZXQgbm90IHlldCB2YWxpZCBmb3IgcG9ydCAldSAodHhfZXJyPSVkIHJ4X2Vycj0lZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0sIHR4X2VyciwgcnhfZXJyKTtcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsXG4gXHRcdFx0XHRcdCAgIFx1MDAyNnBvcnQtXHUwMDNlb3Zfd29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4mIzQzO1x0cG9ydC1cdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcJiMzNDtQVFAgb2Zmc2V0IHZhbGlkIGZvciBwb3J0ICV1LCBUeCB0aW1lc3RhbXBzIGVuYWJsZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTI0NiwxMCAmIzQzOzEzMjIsMTMgQEAgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHQvKiBFbmFibGUgVHggdGltZXN0YW1wcyByaWdodCBhd2F5ICovXG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbi1cdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxuJiM0MztcdFx0ICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkXG4mIzQzO1x0XHQgKiB0aGF0IHRoZSBUeCBhbmQgUnggb2Zmc2V0IGNhbGlicmF0aW9uIGhhcyBjb21wbGV0ZWQuXG4mIzQzO1x0XHQgKiBDbGVhcmluZyBpdCBoZXJlIHdvdWxkIGFsbG93IFR4IHRpbWVzdGFtcHMgdG8gYmUgcmVwb3J0ZWRcbiYjNDM7XHRcdCAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmdcbiYjNDM7XHRcdCAqIHRvIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLlxuJiM0MztcdFx0ICovXG4gXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwdHBfcG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICAwKTtcbkBAIC0xMjgwLDE3ICYjNDM7MTM1OSwyMyBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFxuLVx0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwdHBfcG9ydCA9IFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0O1xuIFxuJiM0MztcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cHRwX3BvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi9cbiBcdHB0cF9wb3J0LVx1MDAzZWxpbmtfdXAgPSBsaW5rdXA7XG4gXG4mIzQzO1x0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuJiM0MztcbiBcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXG4gXHRpZiAocGYtXHUwMDNlaHcucmVzZXRfb25nb2luZylcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWxpbmt1cClcbiYjNDM7XHRcdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4KTtcbiBcbiBcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykpIHtcbkBAIC0xMzMzLDE3ICYjNDM7MTQxOCwyMCBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxuIFx0Y2FzZSBJQ0VfTUFDX0U4MTA6XG4gXHRjYXNlIElDRV9NQUNfRTgzMDpcbiBcdFx0LyogRG8gbm90IHJlY29uZmlndXJlIEU4MTAgb3IgRTgzMCBQSFkgKi9cbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUM6XG4gXHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdGdvdG8gZXhpdF9rcmVmX3B1dDtcbiBcdGNhc2UgSUNFX01BQ19HRU5FUklDXzNLX0U4MjU6XG4gXHRcdGlmIChsaW5rdXApXG4gXHRcdFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHB0cF9wb3J0KTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0OyVzOiBVbmtub3duIFBIWSB0eXBlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHR9XG4mIzQzO1xuJiM0MztleGl0X2tyZWZfcHV0OlxuJiM0MztcdGtyZWZfcHV0KFx1MDAyNnB0cF9wb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTQyNCwxNiAmIzQzOzE1MTIsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqL1xuIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzdGFydF9hbGxfcGh5KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuJiM0MztcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGlmIChwb3J0LVx1MDAzZWxpbmtfdXApXG4gXHRcdFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHBvcnQpO1xuJiM0MztcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTI3LDggJiM0MzsyMDIwLDkgQEAgaWNlX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gXHQvKiBSZWVuYWJsZSBwZXJpb2RpYyBvdXRwdXRzICovXG4gXHRpY2VfcHRwX2VuYWJsZV9hbGxfcGVyb3V0KHBmKTtcbiBcbi1cdC8qIFJlY2FsaWJyYXRlIGFuZCByZS1lbmFibGUgdGltZXN0YW1wIGJsb2NrcyBmb3IgRTgyMi9FODIzICovXG4tXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDKVxuJiM0MztcdC8qIFJlY2FsaWJyYXRlIGFuZCByZS1lbmFibGUgdGltZXN0YW1wIGJsb2NrcyBmb3IgRTgyMi9FODIzL0U4MjUtQyAqL1xuJiM0MztcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMgfHxcbiYjNDM7XHQgICAgaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpXG4gXHRcdGljZV9wdHBfcmVzdGFydF9hbGxfcGh5KHBmKTtcbiBleGl0OlxuIFx0aWYgKGVycikge1xuQEAgLTI2MzgsMTEgJiM0MzsyNzMyLDEzIEBAIHM4IGljZV9wdHBfcmVxdWVzdF90cyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIGEgcmVmZXJlbmNlIHRvIHRoZSBza2IgYW5kIHRoZSBzdGFydCB0aW1lIHRvIGFsbG93IGRpc2NhcmRpbmcgb2xkXG4gXHRcdCAqIHJlcXVlc3RzLlxuIFx0XHQgKi9cbi1cdFx0c2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSk7XG4tXHRcdGNsZWFyX2JpdChpZHgsIHR4LVx1MDAzZXN0YWxlKTtcbiBcdFx0dHgtXHUwMDNldHN0YW1wc1tpZHhdLnN0YXJ0ID0gamlmZmllcztcbiBcdFx0dHgtXHUwMDNldHN0YW1wc1tpZHhdLnNrYiA9IHNrYl9nZXQoc2tiKTtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xuJiM0MztcdFx0Y2xlYXJfYml0KGlkeCwgdHgtXHUwMDNlc3RhbGUpO1xuJiM0MztcdFx0LyogRW5zdXJlIGluZGV4IGlzIHNldHVwIGJlZm9yZSBtYXJraW5nIGl0IGFzIHVzZWQgKi9cbiYjNDM7XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuJiM0MztcdFx0c2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSk7XG4gXHRcdGljZV90cmFjZSh0eF90c3RhbXBfcmVxdWVzdCwgc2tiLCBpZHgpO1xuIFx0fVxuIFxuQEAgLTI2NzgsNzQgJiM0MzsyNzc0LDU2IEBAIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4mIzQzO3N0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0Ym9vbCBtb3JlX3RpbWVzdGFtcHM7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAodHN0YW1wcywgSU5ERVhfUEVSX1BPUlRfTUFYKSA9IHt9O1xuIFxuIFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnR4LVx1MDAzZWxvY2spIHtcbiBcdFx0aWYgKCF0eC1cdTAwM2Vpbml0KVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0bW9yZV90aW1lc3RhbXBzID0gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4tXHR9XG4mIzQzO1x0XHRpZiAoaW5faXJxKSB7XG4mIzQzO1x0XHRcdGlmICghaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHR4KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gbW9yZV90aW1lc3RhbXBzO1xuJiM0MztcdFx0XHRyZXR1cm4gYml0bWFwX2FuZG5vdCh0c3RhbXBzLCB0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZXN0YWxlLCB0eC1cdTAwM2VsZW4pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0dXJuICFiaXRtYXBfZW1wdHkodHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiB9XG4gXG4tc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0MztzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiYjNDM7XHRib29sIGhhdmVfdHN0YW1wcyA9IGZhbHNlO1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKSB7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cyxcbi1cdFx0XHRcdCAgICBsaXN0X25vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuLVxuLVx0XHRcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyh0eCkpXG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcdTAwMjZwb3J0LVx1MDAzZXR4LCBpbl9pcnEpKSB7XG4mIzQzO1x0XHRcdGhhdmVfdHN0YW1wcyA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIGhhdmVfdHN0YW1wcztcbiB9XG4gXG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiYjNDM7Ym9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2Vodztcbi1cdGludCByZXQ7XG4tXG4tXHQvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi9cbiBcdHN3aXRjaCAocGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKSB7XG4gXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfU0VMRjpcbi1cdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4mIzQzO1x0XHRyZXR1cm4gaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgsIGluX2lycSk7XG4gXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX0FMTDpcbi1cdFx0aWYgKGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZikpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZiwgaW5faXJxKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtVbmV4cGVjdGVkIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbW9kZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgIHBmLVx1MDAzZXB0cC50eF9pbnRlcnJ1cHRfbW9kZSk7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0LyogQ2hlY2sgaGFyZHdhcmUgaW5kaWNhdG9yICovXG4tXHRyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1VuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJWRcXG5cJiMzNDssXG4tXHRcdFx0cmV0KTtcbi1cdFx0LyogU3RvcCB0cmlnZ2VyaW5nIElSUXMgaWYgd2UmIzM5O3JlIHVuYWJsZSB0byByZWFkIFBIWSAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4tXG4tXHQvKiBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeSgpIHJldHVybnMgMSBpZiB0aGVyZSBhcmUgdGltZXN0YW1wc1xuLVx0ICogYXZhaWxhYmxlLCAwIGlmIHRoZXJlIGFyZSBubyB3YWl0aW5nIHRpbWVzdGFtcHMsIGFuZCBhIG5lZ2F0aXZlXG4tXHQgKiB2YWx1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgKHdoaWNoIHdlIGNoZWNrZWQgZm9yIGFib3ZlKS5cbi1cdCAqL1xuLVx0cmV0dXJuIHJldCBcdTAwM2UgMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjc5OSw3ICYjNDM7Mjg3Nyw3IEBAIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHQvKiBFODMwIGNhbiByZWFkIHRpbWVzdGFtcHMgaW4gdGhlIHRvcCBoYWxmIHVzaW5nIHJkMzIoKSAqL1xuIFx0XHRpY2VfcHRwX3Byb2Nlc3NfdHMocGYpO1xuIFxuLVx0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7XG4mIzQzO1x0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XG4gXHRcdFx0LyogUHJvY2VzcyBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLiBJZiB0aGVyZVxuIFx0XHRcdCAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi5cbiBcdFx0XHQgKi9cbkBAIC0yODM5LDkgJiM0MzsyOTE3LDEzIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG4gXG4gXHRyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGRldl9kYmcoZGV2LCBcJiMzNDtQVFAgcGVyaW9kaWMgdGFzayB1bmFibGUgdG8gcmVhZCBQSFkgdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdHJldCk7XG4tXHR9IGVsc2UgaWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1VuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0LyogRG9uJiMzOTt0IHRyaWdnZXIgYW4gSVJRIGlmIHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHRoZSBQSFkgKi9cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlIDAgfHwgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIGZhbHNlKSkge1xuIFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgZGV0ZWN0ZWQgd2FpdGluZyB0aW1lc3RhbXBzLiBUcmlnZ2VyaW5nIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbm93LlxcblwmIzM0Oyk7XG4gXG4gXHRcdHdyMzIoaHcsIFBGSU5UX09JQ1IsIFBGSU5UX09JQ1JfVFNZTl9UWF9NKTtcbkBAIC0yODkwLDE0ICYjNDM7Mjk3MiwxNiBAQCB2b2lkIGljZV9wdHBfcXVldWVfd29yayhzdHJ1Y3QgaWNlX3BmICpwZilcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcbiBcdFx0XHRcdFx0ZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4ge1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4mIzQzO1x0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2goZW50cnksIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpIHtcbi1cdFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksXG4tXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGxpc3Rfbm9kZSk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4gXHRcdHN0cnVjdCBpY2VfcGYgKnBlZXJfcGYgPSBwdHBfcG9ydF90b19wZihwb3J0KTtcbiBcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiBcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcdTAwMjZwZWVyX3BmLVx1MDAzZWh3KSkge1xuIFx0XHRcdGlmIChyZWJ1aWxkKSB7XG4gXHRcdFx0XHQvKiBUT0RPOiBXaGVuIGltcGxlbWVudGluZyByZWJ1aWxkPXRydWU6XG5AQCAtMjkwOSw3ICYjNDM7Mjk5MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcbiBcdFx0XHRcdGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQocGVlcl9wZiwgcmVzZXRfdHlwZSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzYsMTEgJiM0MzszMDI0LDE3IEBAIHZvaWQgaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXHRpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcbiYjNDM7XHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcbiYjNDM7XHQgKiBzaWRlYmFuZCBxdWV1ZSBjb21tYW5kcyB0aGF0IHdpbGwgZmFpbCBvciB0aW1lb3V0LCBhbmQgbWF5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXG4mIzQzO1x0XHRrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwdHAtXHUwMDNlcG9ydC5vdl93b3JrKTtcbiYjNDM7XG4gXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFx1MDAyNlx1MDAyNiBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XG4gXG4tXHRpY2VfcHRwX3JlbGVhc2VfdHhfdHJhY2tlcihwZiwgXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpO1xuLVxuIFx0LyogRGlzYWJsZSBwZXJpb2RpYyBvdXRwdXRzICovXG4gXHRpY2VfcHRwX2Rpc2FibGVfYWxsX3Blcm91dChwZik7XG4gXG5AQCAtMzA4NiwxMSAmIzQzOzMxODAsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZik7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsXG4tXHRcdCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdGxpc3RfYWRkX3JjdShcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxuIFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24mIzM5O3QgZXhwb3NlIHR4LWNsa1xuQEAgLTMxMTMsMTIgJiM0MzszMjA3LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2NsZWFudXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiYjNDM7XHRzdHJ1Y3Qga3JlZiAqcmVmO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0fVxuJiM0MztcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcbiYjNDM7XHQgKiBvdXRzdGFuZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQVFAgcG9ydC4gVG8gbWFrZSBzdXJlIHRoaXMgaXMgdHJ1ZSxcbiYjNDM7XHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcbiYjNDM7XHQgKiBleGlzdGluZyByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBGaW5hbGx5LCBzeW5jaHJvbml6ZV9yY3UoKSB0b1xuJiM0MztcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXG4mIzQzO1x0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbF9yY3UoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcbiYjNDM7XHRyZWYgPSBcdTAwMjZwdHAtXHUwMDNlcG9ydC5yZWY7XG4mIzQzO1x0a3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcbiYjNDM7XHRkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0ICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLFxuJiM0MztcdFx0ICAgICAgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHBvcnQgcmVmZXJlbmNlcyB0byByZWxlYXNlLiBDb250aW51aW5nIHRvIHVubG9hZCBhbnl3YXlzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIH1cbiBcbiAvKipcbkBAIC0zMjEwLDkgJiM0MzszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgdGhyZWFkc1xuJiM0MzsgKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgdGhlIFBUUCBrd29ya2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxuJiM0MzsgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXG4mIzQzOyAqIHN0YXRlIGlzIElDRV9QVFBfUkVBRFkuXG4gICovXG4gc3RhdGljIGludCBpY2VfcHRwX2luaXRfd29yayhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHAgKnB0cClcbiB7XG5AQCAtMzIzMSw5ICYjNDM7MzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4gXG4gXHRwdHAtXHUwMDNla3dvcmtlciA9IGt3b3JrZXI7XG4gXG4tXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIGdvaW5nICovXG4tXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMzNTUsNiAmIzQzOzM0NzAsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbl9wZjtcbiBcbiYjNDM7XHQvKiBTZWVkIGxpbmtfdXAgZnJvbSBjdXJyZW50IFBIWSBzdGF0dXMsIHNpbmNlIGxpbmsgbWF5IGFscmVhZHkgYmUgdXBcbiYjNDM7XHQgKiAoZS5nLiBhZnRlciBQWEUgYm9vdCkgd2l0aCBubyBsaW5rLWNoYW5nZSBlZGdlIHRvIGNhdGNoIGl0IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZi1cdTAwM2Vody5wb3J0X2luZm8pXG4mIzQzO1x0XHRwdHAtXHUwMDNlcG9ydC5saW5rX3VwID1cbiYjNDM7XHRcdFx0ISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuJiM0MztcdFx0XHRJQ0VfQVFfTElOS19VUCk7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxuJiM0MztcdCAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzXG4mIzQzO1x0ICogZnJvbSByZWFjaGluZyBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoKSB3aGlsZSBrd29ya2VyIGlzIHN0aWxsIE5VTExcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfY2xlYW5fcGY7XG4mIzQzO1xuIFx0LyogU3RhcnQgdGhlIFBIWSB0aW1lc3RhbXBpbmcgYmxvY2sgKi9cbiBcdGljZV9wdHBfcmVzZXRfcGh5X3RpbWVzdGFtcGluZyhwZik7XG4gXG5AQCAtMzM2Myw5ICYjNDM7MzQ5NCwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHB0cC1cdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XG4gXG4tXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2V4aXQ7XG4mIzQzO1x0LyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlclxuJiM0MztcdCAqIHJldHVybnMgd2l0aG91dCByZXNjaGVkdWxpbmcgd2hpbGUgdGhlIHN0YXRlIGlzIG5vdCBSRUFEWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuIFxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1BUUCBpbml0IHN1Y2Nlc3NmdWxcXG5cJiMzNDspO1xuIFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5pbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuQEAgLTUsNiAmIzQzOzUsOCBAQFxuICNkZWZpbmUgX0lDRV9QVFBfSF9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ljZV9wdHBfaHcuaFwmIzM0O1xuQEAgLTEzMCw2ICYjNDM7MTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFx0XHQxNlxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcdFx0XHQ2NFxuIFxuJiM0MzsvKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lc3RhbXAgaW5kZXhlcyBhY3Jvc3MgYWxsIGRldmljZXMgKi9cbiYjNDM7I2RlZmluZSBJTkRFWF9QRVJfUE9SVF9NQVggICAgICAgICAgICAgIElOREVYX1BFUl9QT1JUXG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcbiAgKlxuQEAgLTEzOCw2ICYjNDM7MTQzLDcgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICAqIGFuZCBkZXRlcm1pbmUgd2hlbiB0aGUgcG9ydCYjMzk7cyBQSFkgb2Zmc2V0IGlzIHZhbGlkLlxuICAqXG4gICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlXG4mIzQzOyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcbiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0XG4gICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWRcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXG5AQCAtMTQ5LDYgJiM0MzsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICovXG4gc3RydWN0IGljZV9wdHBfcG9ydCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTtcbiYjNDM7XHRzdHJ1Y3Qga3JlZiByZWY7XG4gXHRzdHJ1Y3QgaWNlX3B0cF90eCB0eDtcbiBcdHN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrO1xuIFx0c3RydWN0IG11dGV4IHBzX2xvY2s7IC8qIHByb3RlY3RzIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmUgKi9cbkBAIC0zMTIsNyAmIzQzOzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7XG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcbiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpO1xuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xuJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7XG4gdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZixcbiBcdFx0XHQgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbiBcbkBAIC0zNjAsNyAmIzQzOzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO2ljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCAzYTQxYzcxMWU3NTFiLi42NGUxOGZlMTE3NmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTczNywyNCAmIzQzOzczNyw2IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcG9ydF9tZW1fZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LFxuIFx0cmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcbiB9XG4gXG4tLyoqXG4tICogaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyAtIFdyaXRlIGEgUEhZIHBvcnQgbWVtb3J5IGxvY2F0aW9uXG4tICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3Rcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZFxuLSAqIEBvZmZzZXQ6IE9mZnNldCBmcm9tIFBIWSBwb3J0IHJlZ2lzdGVyIGJhc2Vcbi0gKiBAdmFsOiBQb2ludGVyIHRvIHRoZSB2YWx1ZSB0byByZWFkIChvdXQgcGFyYW0pXG4tICpcbi0gKiBSZXR1cm46XG4tICogKiAlMCAgICAgIC0gc3VjY2Vzc1xuLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZVxuLSAqICogJW90aGVyICAtIGZhaWxlZCB0byB3cml0ZSB0byBQSFlcbi0gKi9cbi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXG4tXHRcdFx0XHQgICAgIHUzMiB2YWwpXG4te1xuLVx0cmV0dXJuIGljZV93cml0ZV9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7XG4tfVxuLVxuIC8qKlxuICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlclxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG5AQCAtMTEzOSw4ICYjNDM7MTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy5cbiAgKlxuICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nXG4tICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZVxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXG4mIzQzOyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnRcbiYjNDM7ICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhbiBpZHggd2hvc2UgYml0IGlzIHNldCBhY2NvcmRpbmcgdG9cbiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS5cbkBAIC0xMTUyLDI0ICYjNDM7MTEzNCwxNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXG4gc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiB7XG4gXHR1NjQgdW51c2VkX3RzdGFtcDtcbi1cdHUxNiBsb19hZGRyO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzXG4tXHQgKiBjbGVhcmVkLlxuJiM0MztcdC8qIFBlciB0aGUgUEhZIHNwZWMsIHJlYWRpbmcgdGhlIHRpbWVzdGFtcCBtZW1vcnkgbG9jYXRpb24gaXMgd2hhdFxuJiM0MztcdCAqIGNsZWFycyB0aGUgZW50cnkmIzM5O3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KVxuJiM0MztcdCAqIHRzX21lbW9yeV9zdGF0dXMgYml0LlxuIFx0ICovXG4gXHRlcnIgPSBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4LCBcdTAwMjZ1bnVzZWRfdHN0YW1wKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgdGhlIFBIWSB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0fVxuLVxuLVx0bG9fYWRkciA9ICh1MTYpUEhZX1RTVEFNUF9MKGlkeCk7XG4tXG4tXHRlcnIgPSBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKGh3LCBwb3J0LCBsb19hZGRyLCAwKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIGNsZWFyIGxvdyBQVFAgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHQgIHBvcnQsIGlkeCwgZXJyKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC0xMTc3LDE5ICYjNDM7MTE1MSwzNiBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcgLSBDbGVhciBhbGwgdGltZXN0YW1wcyBmcm9tIHRoZSBwb3J0IGJsb2NrXG4mIzQzOyAqIGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcgLSBSZXNldCBvbmUgcG9ydCYjMzk7cyBUeCB0aW1lc3RhbXAgbWVtb3J5XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbiYjNDM7ICogQHBvcnQ6IHBvcnQgbnVtYmVyIHRvIGNsZWFyXG4mIzQzOyAqXG4mIzQzOyAqIEZ1bGx5IHJlc2V0IGEgc2luZ2xlIFBIWSBwb3J0JiMzOTtzIFR4IHRpbWVzdGFtcCBtZW1vcnkuIFBlciB0aGUgUEhZIHNwZWMsIHRoZVxuJiM0MzsgKiBvbmx5IHdheSB0byBjbGVhciBhIHRpbWVzdGFtcCB2YWxpZCBiaXQgKGFuZCBpdHMgcmVhZC1vbmx5IHRzX21lbW9yeV9zdGF0dXNcbiYjNDM7ICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGVcbiYjNDM7ICogcG9ydCAodHdvIDMyLWJpdCByZWFkcyBlYWNoKS4gVGhpcyBkaXNjYXJkcyBhbGwgdGltZXN0YW1wIGRhdGEgb24gdGhlIHBvcnQsXG4mIzQzOyAqIHNvIGl0IG11c3Qgb25seSBiZSB1c2VkIGZvciBhIGZ1bGwgcmVzZXQ7IGNhbGxlcnMgdGhhdCBtdXN0IHByZXNlcnZlXG4mIzQzOyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS5cbiYjNDM7ICpcbiYjNDM7ICogRHVlIHRvIGludGVyYWN0aW9ucyB3aXRoIGFuIGludGVybmFsIEhXIGNvdW50ZXIgZm9yIHRoZSBudW1iZXIgb2ZcbiYjNDM7ICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGVcbiYjNDM7ICogaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKSBwcm9jZWR1cmUuIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGNvdW50ZXJcbiYjNDM7ICogbWF5IGJlY29tZSBvdXQgb2Ygc3luYyBhbmQgcHJldmVudCBuZXcgdGltZXN0YW1wIGludGVycnVwdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgdG8gcmVhZCB0aGUgUEhZLlxuICAqL1xuLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodylcbiYjNDM7c3RhdGljIGludCBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBwb3J0O1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHU4IGlkeDtcbiBcbi1cdGZvciAocG9ydCA9IDA7IHBvcnQgXHUwMDNjIGh3LVx1MDAzZXB0cC5udW1fbHBvcnRzOyBwb3J0JiM0MzsmIzQzOykge1xuLVx0XHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLFxuLVx0XHRcdFx0XHQgMCk7XG4tXHRcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsXG4tXHRcdFx0XHRcdCAwKTtcbiYjNDM7XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgSU5ERVhfUEVSX1BPUlQ7IGlkeCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTE1LDEwICYjNDM7MjEwNiw2IEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9PRkZTRVRfUkVBRFksIDApO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbiBcdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19SWF9PRkZTRVRfUkVBRFksIDApO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMTMzLDkgJiM0MzsyMTIwLDExIEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0XG4gICpcbi0gKiBTdGFydCB0aGUgY2xvY2sgb2YgYSBQSFkgcG9ydC4gVGhpcyBtdXN0IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgZmxvdyB0b1xuLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXNcbi0gKiBpbml0aWFsaXplZCBvciB3aGVuIGxpbmsgc3BlZWQgY2hhbmdlcy5cbiYjNDM7ICogUGVyZm9ybSBhIFBIWSBzb2Z0IHJlc2V0IGFuZCB0aGVuIHN0YXJ0IHRoZSBjbG9jayBmb3IgdGhlIFBIWSBwb3J0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnhcbiYjNDM7ICogdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMgaW5pdGlhbGl6ZWQgb3Igd2hlbiBsaW5rXG4mIzQzOyAqIHNwZWVkIGNoYW5nZXMuXG4gICpcbiAgKiBSZXR1cm46XG4gICogKiAlMCAgICAgLSBzdWNjZXNzXG5AQCAtMjE1MSw2ICYjNDM7MjE0MCwxMCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXG4gXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcbiBcbiYjNDM7XHRlcnIgPSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZyhodywgcG9ydCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuIFx0ZXJyID0gaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhodywgcG9ydCwgZmFsc2UpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMjk0LDYgJiM0MzsyMjg3LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcbiAgKlxuICAqIFRyaWdnZXIgYSBzb2Z0IHJlc2V0IG9mIHRoZSBFVEg1NkcgUEhZIGJ5IHRvZ2dsaW5nIHRoZSBzb2Z0IHJlc2V0XG4gICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6XG4mIzQzOyAqICAgMC4gUmVhZGluZyBldmVyeSB0aW1lc3RhbXAgbWVtb3J5IHJlZ2lzdGVyIHRvIGNsZWFyIGl0cyB2YWxpZCBiaXRcbiAgKiAgIDEuIENsZWFyaW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMy4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0IGFnYWluXG5AQCAtMjMwMiw2ICYjNDM7MjI5NiwxMiBAQCBpbnQgaWNlX3B0cF9yZWFkX3R4X2h3dHN0YW1wX3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHUzMiAqdHNfc3RhdHVzKVxuICAqIHRvIHNldHRsZS4gVGhpcyBwcm92aWRlcyBhIGNvbnRyb2xsZWQgd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgUEhZXG4gICogd2l0aG91dCByZXF1aXJpbmcgYSBmdWxsIGRldmljZSByZXNldC5cbiAgKlxuJiM0MzsgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGVcbiYjNDM7ICogUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTLCByZWFkIGV2ZXJ5IHRpbWVzdGFtcCBpbmRleCBwcmlvciB0byBwZXJmb3JtaW5nXG4mIzQzOyAqIHRoZSBzb2Z0IHJlc2V0LiBUaGUgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIHJlYWRzIGVuc3VyZSB0aGF0IHRoZSByZWdpb25cbiYjNDM7ICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltZXN0YW1wXG4mIzQzOyAqIGNvdW50ZXIgaXMgcmVzZXQgdG8gemVyby5cbiYjNDM7ICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgd2hlblxuICAqICAgICAgICAgcmVhZGluZyBvciB3cml0aW5nIHRoZSBQSFkgcmVnaXN0ZXIuXG4gICovXG5AQCAtMjMxMCw2ICYjNDM7MjMxMCwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXHR1MzIgZ2xvYmFsX3ZhbDtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0ZXJyID0gaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhodywgcG9ydCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIGNsZWFyIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHBvcnQsIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsIFx1MDAyNmdsb2JhbF92YWwpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBQSFlfUkVHX0dMT0JBTCBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCYjMzQ7LFxuQEAgLTU4MDEsOCAmIzQzOzU4MDgsOSBAQCB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5KHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9lODJ4KGh3KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxuLVx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpO1xuLVx0XHRicmVhaztcbiYjNDM7XHRcdC8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZlxuJiM0MztcdFx0ICogdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlLlxuJiM0MztcdFx0ICovXG4gXHRjYXNlIElDRV9NQUNfRTgxMDpcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSBpc29sYXRlZCB0byB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBFODAwIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4NzI1ZjAyN2IxMTBjMWU4MjY0N2M1ZWE0ODAzYWE2YzVlM2FmYTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMTowMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMKaW5kZXggMmRjMzYyOWQ2ZDBmNi4uZDE2NDNiZjhhMWI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMKQEAgLTY2LDE4ICYjNDM7NjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7Y3BpX3BoeV9sb2NrW2ldKTsKIAlyZWZjb3VudF9zZXQoJmFtcDthZGFwdGVyLSZndDtyZWZjb3VudCwgMSk7CiAKLQltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubGlzdCk7CiAKIAlyZXR1cm4gYWRhcHRlcjsKIH0KIAogc3RhdGljIHZvaWQgaWNlX2FkYXB0ZXJfZnJlZShzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmYW1wO2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSk7CiYjNDM7CVdBUk5fT04oIWxpc3RfZW1wdHkoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5saXN0KSk7CiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGFkYXB0ZXItJmd0O2NwaV9waHlfbG9jayk7IGkmIzQzOyYjNDM7KQogCQltdXRleF9kZXN0cm95KCZhbXA7YWRhcHRlci0mZ3Q7Y3BpX3BoeV9sb2NrW2ldKTsKLQltdXRleF9kZXN0cm95KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiAKIAlrZnJlZShhZGFwdGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKaW5kZXggNGY2OTVmMzJkYTNkOC4uMzk5MjNkZWRkNTM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKQEAgLTE5LDEzICYjNDM7MTksMTMgQEAgc3RydWN0IGljZV9wZjsKICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBkYXRhIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGFkYXB0ZXIgcG9ydHMKICAqCi0gKiBAcG9ydHM6IGxpc3Qgb2YgcG9ydHMKJiM0MzsgKiBAbGlzdDogbGlzdCBvZiBwb3J0cwogICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0CiAgKi8KIHN0cnVjdCBpY2VfcG9ydF9saXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJLyogVG8gc3luY2hyb25pemUgdGhlIHBvcnRzIGxpc3Qgb3BlcmF0aW9ucyAqLwotCXN0cnVjdCBtdXRleCBsb2NrOwomIzQzOwlzcGlubG9ja190IGxvY2s7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKaW5kZXggZDg4ODM1NDgyZDNhYS4uZDEyOTUyMTcxYTk5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKQEAgLTMyNDgsNyAmIzQzOzMyNDgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21pc2NfaW50cl90aHJlYWRfZm4oaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpCiAJaWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7CiAJaWNlX2ZsdXNoKGh3KTsKIAotCWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHsKJiM0MzsJaWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkgewogCQkvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LAogCQkgKiByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGl0IGFnYWluLgogCQkgKi8KQEAgLTY3NDUsNyAmIzQzOzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQlpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTsKIAkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktJmd0O25ldGRldik7CiAJCW5ldGlmX2NhcnJpZXJfb24odnNpLSZndDtuZXRkZXYpOwotCQlpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCB0cnVlKTsKIAl9CiAKIAkvKiBQZXJmb3JtIGFuIGluaXRpYWwgcmVhZCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgbm93IHRvCkBAIC03MjczLDcgJiM0Mzs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAKIAlpZiAodnNpLSZndDtuZXRkZXYpIHsKIAkJdmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTsKLQkJaWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktJmd0O2JhY2ssIGZhbHNlKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYodnNpLSZndDtuZXRkZXYpOwogCQluZXRpZl90eF9kaXNhYmxlKHZzaS0mZ3Q7bmV0ZGV2KTsKIAl9CkBAIC03Nzk0LDYgJiM0Mzs3NzkyLDE0IEBAIHN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIAogCWljZV91cGRhdGVfcGZfbmV0ZGV2X2xpbmsocGYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsgcGYtJmd0O2h3LnBvcnRfaW5mbykgewomIzQzOwkJYm9vbCBsaW5rX3VwOwomIzQzOwomIzQzOwkJbGlua191cCA9ICEhKHBmLSZndDtody5wb3J0X2luZm8tJmd0O3BoeS5saW5rX2luZm8ubGlua19pbmZvICZhbXA7CiYjNDM7CQkJICAgICBJQ0VfQVFfTElOS19VUCk7CiYjNDM7CQlpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTsKJiM0MzsJfQomIzQzOwogCS8qIHRlbGwgdGhlIGZpcm13YXJlIHdlIGFyZSB1cCAqLwogCWVyciA9IGljZV9zZW5kX3ZlcnNpb24ocGYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCmluZGV4IGVhZWMzNmFiNmFlM2YuLmE1ZWZiMGE5NTk0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwpAQCAtMSw2ICYjNDM7MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VsaXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXRfYml0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ljZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWNlX2xpYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWNlX3RyYWNlLmgmIzM0OwpAQCAtMzYyLDkgJiM0MzszNjQsMTIgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApCiBzdGF0aWMgYm9vbAogaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIHsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQgPQomIzQzOwkJY29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7CiYjNDM7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3R4LSZndDtsb2NrKTsKIAotCXJldHVybiB0eC0mZ3Q7aW5pdCAmYW1wOyZhbXA7ICF0eC0mZ3Q7Y2FsaWJyYXRpbmc7CiYjNDM7CXJldHVybiB0eC0mZ3Q7aW5pdCAmYW1wOyZhbXA7ICF0eC0mZ3Q7Y2FsaWJyYXRpbmcgJmFtcDsmYW1wOyBwdHBfcG9ydC0mZ3Q7bGlua191cDsKIH0KIAogLyoqCkBAIC01NjEsNyAmIzQzOzU2Niw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogCXN0cnVjdCBpY2VfcGYgKnBmOwogCXN0cnVjdCBpY2VfaHcgKmh3OwogCXU2NCB0c3RhbXBfcmVhZHk7Ci0JYm9vbCBsaW5rX3VwOwogCWludCBlcnI7CiAJdTggaWR4OwogCkBAIC01NjksNyAmIzQzOzU3Myw3IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogCXBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpOwogCWh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiAKLQlpZiAoIXR4LSZndDtpbml0KQomIzQzOwlpZiAoIXR4LSZndDtpbml0IHx8IGJpdG1hcF9lbXB0eSh0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKSkKIAkJcmV0dXJuOwogCiAJLyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovCkBAIC01NzksMTQgJiM0Mzs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJCQlyZXR1cm47CiAJfQogCi0JLyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqLwotCWxpbmtfdXAgPSBwdHBfcG9ydC0mZ3Q7bGlua191cDsKLQogCWZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKSB7CiAJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9OwogCQl1OCBwaHlfaWR4ID0gaWR4ICYjNDM7IHR4LSZndDtvZmZzZXQ7CiAJCXU2NCByYXdfdHN0YW1wID0gMCwgdHN0YW1wOwotCQlib29sIGRyb3BfdHMgPSAhbGlua191cDsKJiM0MzsJCWJvb2wgZHJvcF90cyA9IGZhbHNlOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCS8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqLwpAQCAtNjE5LDYgJiM0Mzs2MjAsMTkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJCWlmIChlcnIgJmFtcDsmYW1wOyAhZHJvcF90cykKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKiB2ZXJpZnkgcmVhZHkgYml0IGNsZWFyZWQgKi8KJiM0MzsJCWlmICh0eC0mZ3Q7aGFzX3JlYWR5X2JpdG1hcCkgewomIzQzOwkJCWVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtJmd0O2Jsb2NrLCAmYW1wO3RzdGFtcF9yZWFkeSk7CiYjNDM7CQkJaWYgKGVyciB8fCB0c3RhbXBfcmVhZHkgJmFtcDsgQklUX1VMTChwaHlfaWR4KSkgewomIzQzOwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpZHgsIHR4LSZndDtzdGFsZSkpCiYjNDM7CQkJCQlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCAmIzM0O1BIWSBwb3J0ICV1IGZhaWxlZCB0byBjbGVhciByZWFkeSBiaXQgZm9yIGlkeCAldVxuJiMzNDssCiYjNDM7CQkJCQkJcHRwX3BvcnQtJmd0O3BvcnRfbnVtLCBwaHlfaWR4KTsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKIAkJaWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC0mZ3Q7dHN0YW1wc1tpZHhdLnNrYiwgaWR4KTsKIAogCQkvKiBGb3IgUEhZcyB3aGljaCBkb24mIzM5O3QgaW1wbGVtZW50IGEgcHJvcGVyIHRpbWVzdGFtcCByZWFkeQpAQCAtNjczLDIwICYjNDM7Njg3LDMzIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogCXBmLSZndDtwdHAudHhfaHd0c3RhbXBfZ29vZCAmIzQzOz0gdHN0YW1wX2dvb2Q7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3Uoc3RydWN0IGtyZWYgKnJlZikKJiM0Mzt7CiYjNDM7CXdha2VfdXBfdmFyKHJlZik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCW11dGV4X2xvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7CiAJCXN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9ICZhbXA7cG9ydC0mZ3Q7dHg7CiAKLQkJaWYgKCF0eCB8fCAhdHgtJmd0O2luaXQpCiYjNDM7CQlpZiAoIXR4LSZndDtpbml0KQogCQkJY29udGludWU7CiAKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCWljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJa3JlZl9wdXQoJmFtcDtwb3J0LSZndDtyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7CiAJfQotCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtNzI1LDYgJiM0Mzs3NTIsMzcgQEAgaWNlX3B0cF9hbGxvY190eF90cmFja2VyKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkCiYjNDM7aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDEwKTsKJiM0MzsJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKJiM0MzsJdTY0IHRzdGFtcF9yZWFkeTsKJiM0MzsJYm9vbCBwZW5kaW5nOwomIzQzOwl1OCBpZHg7CiYjNDM7CiYjNDM7CWlmIChody0mZ3Q7cmVzZXRfb25nb2luZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJaWYgKGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtJmd0O2Jsb2NrLCAmYW1wO3RzdGFtcF9yZWFkeSkpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJZm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pIHsKJiM0MzsJCQlpZiAoISh0c3RhbXBfcmVhZHkgJmFtcDsgQklUX1VMTChpZHggJiM0MzsgdHgtJmd0O29mZnNldCkpKQomIzQzOwkJCQlwZW5kaW5nID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWlmICghcGVuZGluZykKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKJiM0MzsKJiM0MzsJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcbiYjMzQ7LAomIzQzOwkJdHgtJmd0O2Jsb2NrKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyCiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC03NDEsNiAmIzQzOzc5OSw4IEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KQogCWludCBlcnI7CiAJdTggaWR4OwogCiYjNDM7CWljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihwZiwgdHgpOwomIzQzOwogCWVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtJmd0O2Jsb2NrLCAmYW1wO3RzdGFtcF9yZWFkeSk7CiAJaWYgKGVycikgewogCQlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCAmIzM0O0ZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcbiYjMzQ7LApAQCAtNzc5LDEyICYjNDM7ODM5LDEwIEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KQogICogaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUgLSBNYXJrIHVuZmluaXNoZWQgdGltZXN0YW1wcyBhcyBzdGFsZQogICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrCiAgKgotICogTWFyayBjdXJyZW50bHkgb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcyBhcyBzdGFsZS4gVGhpcyBwcmV2ZW50cyBzZW5kaW5nCi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nCi0gKiB0aGUgNDBiaXQgaGFyZHdhcmUgdGltZXN0YW1wIGluY29ycmVjdGx5LgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldAotICogdGltZSByZXF1ZXN0LgomIzQzOyAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgdGhlIGRyaXZlcgomIzQzOyAqIGZyb20gcmVwb3J0aW5nIHRoZSB0aW1lc3RhbXAgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIGNhbGxlZCB0byBpbmZvcm0gdGhlCiYjNDM7ICogZHJpdmVyIHRoYXQgYSB0aW1lc3RhbXAgaXMgZXhwZWN0ZWQgdG8gZmFpbCBpZiBpdCB3YXMgaW5pdGlhdGVkIGFzIHRoZSBsaW5rCiYjNDM7ICogd2VudCBkb3duLgogICovCiBzdGF0aWMgdm9pZAogaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KQpAQCAtODA4LDggJiM0Mzs4NjYsMTYgQEAgaWNlX3B0cF9mbHVzaF9hbGxfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cywgbGlzdF9ub2RlKQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewomIzQzOwkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYW1wO3BvcnQtJmd0O3JlZikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHB0cF9wb3J0X3RvX3BmKHBvcnQpLCAmYW1wO3BvcnQtJmd0O3R4KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWtyZWZfcHV0KCZhbXA7cG9ydC0mZ3Q7cmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTk5NCwxMyAmIzQzOzEwNjAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi0mZ3Q7cHRwLmt3b3JrZXIsICZhbXA7cGYtJmd0O3B0cC53b3JrLAogCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7CiAJfQotCi0JLyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlCi0JICogYmVlbiBjYXB0dXJlZCBpbiBoYXJkd2FyZSBiZWZvcmUgdGhlIHRpbWUgdXBkYXRlLiBUaGlzIGNvdWxkIGxlYWQKLQkgKiB0byB1cyBleHRlbmRpbmcgdGhlbSB3aXRoIHRoZSB3cm9uZyBjYWNoZWQgdmFsdWUgcmVzdWx0aW5nIGluCi0JICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuCi0JICovCi0JaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoJmFtcDtwZi0mZ3Q7cHRwLnBvcnQudHgpOwogfQogCiAvKioKQEAgLTExMzMsNiAmIzQzOzExOTIsNyBAQCBzdGF0aWMgaW50IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0KQogc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiB7CiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaWNlX3BmICpwZjsKIAlzdHJ1Y3QgaWNlX2h3ICpodzsKIAlpbnQgdHhfZXJyOwpAQCAtMTE1NSwxMiAmIzQzOzEyMTUsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiAJCXR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LSZndDtwb3J0X251bSk7CiAJcnhfZXJyID0gaWNlX3BoeV9jZmdfcnhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtJmd0O3BvcnRfbnVtKTsKIAlpZiAodHhfZXJyIHx8IHJ4X2VycikgewotCQkvKiBUeCBhbmQvb3IgUnggb2Zmc2V0IG5vdCB5ZXQgY29uZmlndXJlZCwgdHJ5IGFnYWluIGxhdGVyICovCiYjNDM7CQkvKiBUeCBhbmQvb3IgUnggb2Zmc2V0IG5vdCB5ZXQgY29uZmlndXJlZCwgdHJ5IGFnYWluIGxhdGVyLgomIzQzOwkJICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldAomIzQzOwkJICogY2FsaWJyYXRpb24gY2Fubm90IGNvbXBsZXRlIHVudGlsIGF0IGxlYXN0IG9uZSBwYWNrZXQgaGFzCiYjNDM7CQkgKiBiZWVuIHRyYW5zbWl0dGVkLCBzbyB0aGUgZmlyc3QgcmV0cmllcyByb3V0aW5lbHkgbGFuZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCSYjMzQ7UFRQIG9mZnNldCBub3QgeWV0IHZhbGlkIGZvciBwb3J0ICV1ICh0eF9lcnI9JWQgcnhfZXJyPSVkKVxuJiMzNDssCiYjNDM7CQkJcG9ydC0mZ3Q7cG9ydF9udW0sIHR4X2VyciwgcnhfZXJyKTsKIAkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtJmd0O3B0cC5rd29ya2VyLAogCQkJCQkgICAmYW1wO3BvcnQtJmd0O292X3dvcmssCiAJCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiAJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CS8qIFR4IGFuZCBSeCBvZmZzZXRzIGFyZSBub3cgY29uZmlndXJlZCwgZW5hYmxlIFR4IHRpbWVzdGFtcHMgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7CiYjNDM7CXBvcnQtJmd0O3R4LmNhbGlicmF0aW5nID0gZmFsc2U7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkmIzM0O1BUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxuJiMzNDssCiYjNDM7CQlwb3J0LSZndDtwb3J0X251bSk7CiB9CiAKIC8qKgpAQCAtMTI0NiwxMCAmIzQzOzEzMjIsMTMgQEAgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KQogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKLQkJLyogRW5hYmxlIFR4IHRpbWVzdGFtcHMgcmlnaHQgYXdheSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3B0cF9wb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7Ci0JCXB0cF9wb3J0LSZndDt0eC5jYWxpYnJhdGluZyA9IGZhbHNlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHRwX3BvcnQtJmd0O3R4LmxvY2ssIGZsYWdzKTsKJiM0MzsJCS8qIERvIG5vdCBjbGVhciBjYWxpYnJhdGluZyBmbGFnIGhlcmUuIFR4IHRpbWVzdGFtcHMgcmVtYWluCiYjNDM7CQkgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWQKJiM0MzsJCSAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC4KJiM0MzsJCSAqIENsZWFyaW5nIGl0IGhlcmUgd291bGQgYWxsb3cgVHggdGltZXN0YW1wcyB0byBiZSByZXBvcnRlZAomIzQzOwkJICogYmVmb3JlIHRoZSBQSFkgb2Zmc2V0IHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCwgbGVhZGluZwomIzQzOwkJICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuCiYjNDM7CQkgKi8KIAogCQlrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi0mZ3Q7cHRwLmt3b3JrZXIsICZhbXA7cHRwX3BvcnQtJmd0O292X3dvcmssCiAJCQkJCSAgIDApOwpAQCAtMTI4MCwxNyAmIzQzOzEzNTksMjMgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cCkKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDsKIAlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7cGYtJmd0O2h3OwogCi0JaWYgKHBmLSZndDtwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkKLQkJcmV0dXJuOwotCiAJcHRwX3BvcnQgPSAmYW1wO3BmLSZndDtwdHAucG9ydDsKIAomIzQzOwlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7cHRwX3BvcnQtJmd0O3JlZikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogVXBkYXRlIGNhY2hlZCBsaW5rIHN0YXR1cyBmb3IgdGhpcyBwb3J0IGltbWVkaWF0ZWx5ICovCiAJcHRwX3BvcnQtJmd0O2xpbmtfdXAgPSBsaW5rdXA7CiAKJiM0MzsJaWYgKHBmLSZndDtwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkKJiM0MzsJCWdvdG8gZXhpdF9rcmVmX3B1dDsKJiM0MzsKIAkvKiBTa2lwIEhXIHdyaXRlcyBpZiByZXNldCBpcyBpbiBwcm9ncmVzcyAqLwogCWlmIChwZi0mZ3Q7aHcucmVzZXRfb25nb2luZykKLQkJcmV0dXJuOwomIzQzOwkJZ290byBleGl0X2tyZWZfcHV0OwomIzQzOwomIzQzOwlpZiAoIWxpbmt1cCkKJiM0MzsJCWljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKCZhbXA7cHRwX3BvcnQtJmd0O3R4KTsKIAogCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUgJmFtcDsmYW1wOwogCSAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi0mZ3Q7ZmxhZ3MpKSB7CkBAIC0xMzMzLDE3ICYjNDM7MTQxOCwyMCBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKQogCWNhc2UgSUNFX01BQ19FODEwOgogCWNhc2UgSUNFX01BQ19FODMwOgogCQkvKiBEbyBub3QgcmVjb25maWd1cmUgRTgxMCBvciBFODMwIFBIWSAqLwotCQlyZXR1cm47CiYjNDM7CQlnb3RvIGV4aXRfa3JlZl9wdXQ7CiAJY2FzZSBJQ0VfTUFDX0dFTkVSSUM6CiAJCWljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7Ci0JCXJldHVybjsKJiM0MzsJCWdvdG8gZXhpdF9rcmVmX3B1dDsKIAljYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OgogCQlpZiAobGlua3VwKQogCQkJaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHB0cF9wb3J0KTsKLQkJcmV0dXJuOwomIzQzOwkJZ290byBleGl0X2tyZWZfcHV0OwogCWRlZmF1bHQ6CiAJCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCAmIzM0OyVzOiBVbmtub3duIFBIWSB0eXBlXG4mIzM0OywgX19mdW5jX18pOwogCX0KJiM0MzsKJiM0MztleGl0X2tyZWZfcHV0OgomIzQzOwlrcmVmX3B1dCgmYW1wO3B0cF9wb3J0LSZndDtyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7CiB9CiAKIC8qKgpAQCAtMTQyNCwxNiAmIzQzOzE1MTIsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKQogICovCiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2goZW50cnksICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSB7Ci0JCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LAotCQkJCQkJICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsCi0JCQkJCQkgICAgICAgbGlzdF9ub2RlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKHBvcnQtJmd0O2xpbmtfdXApCiAJCQlpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocG9ydCk7CiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTE5MjcsOCAmIzQzOzIwMjAsOSBAQCBpY2VfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIAkvKiBSZWVuYWJsZSBwZXJpb2RpYyBvdXRwdXRzICovCiAJaWNlX3B0cF9lbmFibGVfYWxsX3Blcm91dChwZik7CiAKLQkvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMyAqLwotCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDKQomIzQzOwkvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMy9FODI1LUMgKi8KJiM0MzsJaWYgKGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMgfHwKJiM0MzsJICAgIGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSkKIAkJaWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkocGYpOwogZXhpdDoKIAlpZiAoZXJyKSB7CkBAIC0yNjM4LDExICYjNDM7MjczMiwxMyBAQCBzOCBpY2VfcHRwX3JlcXVlc3RfdHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkgKiBhIHJlZmVyZW5jZSB0byB0aGUgc2tiIGFuZCB0aGUgc3RhcnQgdGltZSB0byBhbGxvdyBkaXNjYXJkaW5nIG9sZAogCQkgKiByZXF1ZXN0cy4KIAkJICovCi0JCXNldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlKTsKLQkJY2xlYXJfYml0KGlkeCwgdHgtJmd0O3N0YWxlKTsKIAkJdHgtJmd0O3RzdGFtcHNbaWR4XS5zdGFydCA9IGppZmZpZXM7CiAJCXR4LSZndDt0c3RhbXBzW2lkeF0uc2tiID0gc2tiX2dldChza2IpOwogCQlza2Jfc2hpbmZvKHNrYiktJmd0O3R4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTOwomIzQzOwkJY2xlYXJfYml0KGlkeCwgdHgtJmd0O3N0YWxlKTsKJiM0MzsJCS8qIEVuc3VyZSBpbmRleCBpcyBzZXR1cCBiZWZvcmUgbWFya2luZyBpdCBhcyB1c2VkICovCiYjNDM7CQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKJiM0MzsJCXNldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlKTsKIAkJaWNlX3RyYWNlKHR4X3RzdGFtcF9yZXF1ZXN0LCBza2IsIGlkeCk7CiAJfQogCkBAIC0yNjc4LDc0ICYjNDM7Mjc3NCw1NiBAQCB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZikKIAl9CiB9CiAKLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKJiM0MztzdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIGJvb2wgaW5faXJxKQogewotCWJvb2wgbW9yZV90aW1lc3RhbXBzOwomIzQzOwlERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307CiAKIAlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDt0eC0mZ3Q7bG9jaykgewogCQlpZiAoIXR4LSZndDtpbml0KQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCW1vcmVfdGltZXN0YW1wcyA9ICFiaXRtYXBfZW1wdHkodHgtJmd0O2luX3VzZSwgdHgtJmd0O2xlbik7Ci0JfQomIzQzOwkJaWYgKGluX2lycSkgewomIzQzOwkJCWlmICghaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHR4KSkKJiM0MzsJCQkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIG1vcmVfdGltZXN0YW1wczsKJiM0MzsJCQlyZXR1cm4gYml0bWFwX2FuZG5vdCh0c3RhbXBzLCB0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7c3RhbGUsIHR4LSZndDtsZW4pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKTsKJiM0MzsJCX0KJiM0MzsJfQogfQogCi1zdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSkKIHsKJiM0MzsJYm9vbCBoYXZlX3RzdGFtcHMgPSBmYWxzZTsKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMsCi0JCQkJICAgIGxpc3Rfbm9kZSkgewotCQkJc3RydWN0IGljZV9wdHBfdHggKnR4ID0gJmFtcDtwb3J0LSZndDt0eDsKLQotCQkJaWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSkKLQkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcygmYW1wO3BvcnQtJmd0O3R4LCBpbl9pcnEpKSB7CiYjNDM7CQkJaGF2ZV90c3RhbXBzID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBoYXZlX3RzdGFtcHM7CiB9CiAKLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7Ym9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpCiB7Ci0Jc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKLQlpbnQgcmV0OwotCi0JLyogQ2hlY2sgc29mdHdhcmUgaW5kaWNhdG9yICovCiAJc3dpdGNoIChwZi0mZ3Q7cHRwLnR4X2ludGVycnVwdF9tb2RlKSB7CiAJY2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9OT05FOgogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOgotCQlpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoJmFtcDtwZi0mZ3Q7cHRwLnBvcnQudHgpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKCZhbXA7cGYtJmd0O3B0cC5wb3J0LnR4LCBpbl9pcnEpOwogCWNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOgotCQlpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKJiM0MzsJCXJldHVybiBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYsIGluX2lycSk7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTkNFKDEsICYjMzQ7VW5leHBlY3RlZCBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG1vZGUgJXVcbiYjMzQ7LAogCQkJICBwZi0mZ3Q7cHRwLnR4X2ludGVycnVwdF9tb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogQ2hlY2sgaGFyZHdhcmUgaW5kaWNhdG9yICovCi0JcmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpOwotCWlmIChyZXQgJmx0OyAwKSB7Ci0JCWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VW5hYmxlIHRvIHJlYWQgUEhZIFR4IHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxuJiMzNDssCi0JCQlyZXQpOwotCQkvKiBTdG9wIHRyaWdnZXJpbmcgSVJRcyBpZiB3ZSYjMzk7cmUgdW5hYmxlIHRvIHJlYWQgUEhZICovCiAJCXJldHVybiBmYWxzZTsKIAl9Ci0KLQkvKiBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeSgpIHJldHVybnMgMSBpZiB0aGVyZSBhcmUgdGltZXN0YW1wcwotCSAqIGF2YWlsYWJsZSwgMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGluZyB0aW1lc3RhbXBzLCBhbmQgYSBuZWdhdGl2ZQotCSAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLgotCSAqLwotCXJldHVybiByZXQgJmd0OyAwOwogfQogCiAvKioKQEAgLTI3OTksNyAmIzQzOzI4NzcsNyBAQCBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZikKIAkJLyogRTgzMCBjYW4gcmVhZCB0aW1lc3RhbXBzIGluIHRoZSB0b3AgaGFsZiB1c2luZyByZDMyKCkgKi8KIAkJaWNlX3B0cF9wcm9jZXNzX3RzKHBmKTsKIAotCQlpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7CiYjNDM7CQlpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7CiAJCQkvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlCiAJCQkgKiBpcyBtb3JlIHdvcmssIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgYWdhaW4uCiAJCQkgKi8KQEAgLTI4MzksOSAmIzQzOzI5MTcsMTMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9tYXliZV90cmlnZ2VyX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZikKIAogCXJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTsKIAlpZiAocmV0ICZsdDsgMCkgewotCQlkZXZfZGJnKGRldiwgJiMzNDtQVFAgcGVyaW9kaWMgdGFzayB1bmFibGUgdG8gcmVhZCBQSFkgdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXG4mIzM0OywKLQkJCXJldCk7Ci0JfSBlbHNlIGlmIChyZXQpIHsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O1VuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKHJldCkpOwomIzQzOwkJLyogRG9uJiMzOTt0IHRyaWdnZXIgYW4gSVJRIGlmIHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHRoZSBQSFkgKi8KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCB8fCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgZmFsc2UpKSB7CiAJCWRldl9kYmcoZGV2LCAmIzM0O1BUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cbiYjMzQ7KTsKIAogCQl3cjMyKGh3LCBQRklOVF9PSUNSLCBQRklOVF9PSUNSX1RTWU5fVFhfTSk7CkBAIC0yODkwLDE0ICYjNDM7Mjk3MiwxNiBAQCB2b2lkIGljZV9wdHBfcXVldWVfd29yayhzdHJ1Y3QgaWNlX3BmICpwZikKIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLAogCQkJCQllbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2goZW50cnksICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSB7Ci0JCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LAotCQkJCQkJICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsCi0JCQkJCQkgICAgICAgbGlzdF9ub2RlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKIAkJc3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpOwogCiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7cG9ydC0mZ3Q7cmVmKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlpZiAoIWljZV9pc19wcmltYXJ5KCZhbXA7cGVlcl9wZi0mZ3Q7aHcpKSB7CiAJCQlpZiAocmVidWlsZCkgewogCQkJCS8qIFRPRE86IFdoZW4gaW1wbGVtZW50aW5nIHJlYnVpbGQ9dHJ1ZToKQEAgLTI5MDksNyAmIzQzOzI5OTMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsCiAJCQkJaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZWVyX3BmLCByZXNldF90eXBlKTsKIAkJCX0KIAkJfQomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJa3JlZl9wdXQoJmFtcDtwb3J0LSZndDtyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyoqCkBAIC0yOTM2LDExICYjNDM7MzAyNCwxNyBAQCB2b2lkIGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKQogCWlmIChyZXNldF90eXBlID09IElDRV9SRVNFVF9QRlIpCiAJCXJldHVybjsKIAomIzQzOwkvKiBDYW5jZWwgdGhlIG9mZnNldCB2ZXJpZmljYXRpb24gd29yayBmb3IgRTgyeCBiZWZvcmUgcmVsZWFzaW5nIHRoZQomIzQzOwkgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWUKJiM0MzsJICogc2lkZWJhbmQgcXVldWUgY29tbWFuZHMgdGhhdCB3aWxsIGZhaWwgb3IgdGltZW91dCwgYW5kIG1heQomIzQzOwkgKiByZWZlcmVuY2Ugc3RhdGUgdGhhdCBpcyBiZWluZyB0b3JuIGRvd24uCiYjNDM7CSAqLwomIzQzOwlpZiAoaHctJmd0O21hY190eXBlID09IElDRV9NQUNfR0VORVJJQykKJiM0MzsJCWt0aHJlYWRfY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cHRwLSZndDtwb3J0Lm92X3dvcmspOwomIzQzOwogCWlmIChpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikgJmFtcDsmYW1wOyBody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpCiAJCWljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhwZiwgZmFsc2UsIHJlc2V0X3R5cGUpOwogCi0JaWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIocGYsICZhbXA7cGYtJmd0O3B0cC5wb3J0LnR4KTsKLQogCS8qIERpc2FibGUgcGVyaW9kaWMgb3V0cHV0cyAqLwogCWljZV9wdHBfZGlzYWJsZV9hbGxfcGVyb3V0KHBmKTsKIApAQCAtMzA4NiwxMSAmIzQzOzMxODAsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cHRwLSZndDtwb3J0Lmxpc3Rfbm9kZSk7Ci0JbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHRwLSZndDtwb3J0LnJlZik7CiAKLQlsaXN0X2FkZCgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsCi0JCSAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CWxpc3RfYWRkX3JjdSgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKIAogCS8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LgogCSAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBFODI1IChvdGhlciBNQUMgdHlwZXMgZG9uJiMzOTt0IGV4cG9zZSB0eC1jbGsKQEAgLTMxMTMsMTIgJiM0MzszMjA3LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwomIzQzOwlzdHJ1Y3Qga3JlZiAqcmVmOwogCi0JaWYgKHBmLSZndDtody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHsKLQkJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKLQkJbGlzdF9kZWwoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwotCX0KJiM0MzsJaWYgKHBmLSZndDtody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmcKJiM0MzsJICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsCiYjNDM7CSAqIGZpcnN0IHJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBsaXN0LCB0aGVuIGRyb3AgdGhlIHByaW1hcnkKJiM0MzsJICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGwKJiM0MzsJICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG8KJiM0MzsJICogZW5zdXJlIHRoYXQgYWxsIFJDVSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IG1pZ2h0IGF0dGVtcHQgdG8KJiM0MzsJICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlsaXN0X2RlbF9yY3UoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CiYjNDM7CXJlZiA9ICZhbXA7cHRwLSZndDtwb3J0LnJlZjsKJiM0MzsJa3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwomIzQzOwlkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLAomIzQzOwkJICAgICAgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuJiMzNDspOwomIzQzOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogLyoqCkBAIC0zMjEwLDkgJiM0MzszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKQogfQogCiAvKioKLSAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayB0aHJlYWRzCiYjNDM7ICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIHRoZSBQVFAga3dvcmtlcgogICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHB0cDogUEYgUFRQIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZQomIzQzOyAqIHBlcmlvZGljIHdvcmsgaXMgbm90IHF1ZXVlZCBoZXJlOyB0aGUgY2FsbGVyIHN0YXJ0cyBpdCBvbmNlIHRoZSBQVFAKJiM0MzsgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLgogICovCiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKQogewpAQCAtMzIzMSw5ICYjNDM7MzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApCiAKIAlwdHAtJmd0O2t3b3JrZXIgPSBrd29ya2VyOwogCi0JLyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqLwotCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC0mZ3Q7a3dvcmtlciwgJmFtcDtwdHAtJmd0O3dvcmssIDApOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNTUsNiAmIzQzOzM0NzAsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKGVycikKIAkJZ290byBlcnJfY2xlYW5fcGY7CiAKJiM0MzsJLyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwCiYjNDM7CSAqIChlLmcuIGFmdGVyIFBYRSBib290KSB3aXRoIG5vIGxpbmstY2hhbmdlIGVkZ2UgdG8gY2F0Y2ggaXQgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocGYtJmd0O2h3LnBvcnRfaW5mbykKJiM0MzsJCXB0cC0mZ3Q7cG9ydC5saW5rX3VwID0KJiM0MzsJCQkhIShwZi0mZ3Q7aHcucG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOwomIzQzOwkJCUlDRV9BUV9MSU5LX1VQKTsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uCiYjNDM7CSAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzCiYjNDM7CSAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMCiYjNDM7CSAqLwomIzQzOwllcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2NsZWFuX3BmOwomIzQzOwogCS8qIFN0YXJ0IHRoZSBQSFkgdGltZXN0YW1waW5nIGJsb2NrICovCiAJaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHBmKTsKIApAQCAtMzM2Myw5ICYjNDM7MzQ5NCwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikKIAogCXB0cC0mZ3Q7c3RhdGUgPSBJQ0VfUFRQX1JFQURZOwogCi0JZXJyID0gaWNlX3B0cF9pbml0X3dvcmsocGYsIHB0cCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZXhpdDsKJiM0MzsJLyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlcgomIzQzOwkgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuCiYjNDM7CSAqLwomIzQzOwlrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtJmd0O2t3b3JrZXIsICZhbXA7cHRwLSZndDt3b3JrLCAwKTsKIAogCWRldl9pbmZvKGljZV9wZl90b19kZXYocGYpLCAmIzM0O1BUUCBpbml0IHN1Y2Nlc3NmdWxcbiYjMzQ7KTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaAppbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogI2RlZmluZSBfSUNFX1BUUF9IXwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VsaXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aWNlX3B0cF9ody5oJiMzNDsKQEAgLTEzMCw2ICYjNDM7MTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHggewogI2RlZmluZSBJTkRFWF9QRVJfUE9SVF9FODJYCQkxNgogI2RlZmluZSBJTkRFWF9QRVJfUE9SVAkJCTY0CiAKJiM0MzsvKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lc3RhbXAgaW5kZXhlcyBhY3Jvc3MgYWxsIGRldmljZXMgKi8KJiM0MzsjZGVmaW5lIElOREVYX1BFUl9QT1JUX01BWCAgICAgICAgICAgICAgSU5ERVhfUEVSX1BPUlQKJiM0MzsKIC8qKgogICogc3RydWN0IGljZV9wdHBfcG9ydCAtIGRhdGEgdXNlZCB0byBpbml0aWFsaXplIGFuIGV4dGVybmFsIHBvcnQgZm9yIFBUUAogICoKQEAgLTEzOCw2ICYjNDM7MTQzLDcgQEAgc3RydWN0IGljZV9wdHBfdHggewogICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0JiMzOTtzIFBIWSBvZmZzZXQgaXMgdmFsaWQuCiAgKgogICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlCiYjNDM7ICogQHJlZjogcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHVzZSB3aXRoIGFkYXB0ZXIgcG9ydHMgbGlzdAogICogQHR4OiBUeCB0aW1lc3RhbXAgdHJhY2tpbmcgZm9yIHRoaXMgcG9ydAogICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWQKICAqIEBwc19sb2NrOiBtdXRleCB1c2VkIHRvIHByb3RlY3QgdGhlIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmUKQEAgLTE0OSw2ICYjNDM7MTU1LDcgQEAgc3RydWN0IGljZV9wdHBfdHggewogICovCiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKJiM0MzsJc3RydWN0IGtyZWYgcmVmOwogCXN0cnVjdCBpY2VfcHRwX3R4IHR4OwogCXN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrOwogCXN0cnVjdCBtdXRleCBwc19sb2NrOyAvKiBwcm90ZWN0cyBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlICovCkBAIC0zMTIsNyAmIzQzOzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7CiB2b2lkIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpOwogdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpOwogaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpOwotYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZik7CiYjNDM7Ym9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpOwogdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAkJCSAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpOwogCkBAIC0zNjAsNyAmIzQzOzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7aWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKQogewogCXJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCmluZGV4IDNhNDFjNzExZTc1MWIuLjY0ZTE4ZmUxMTc2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtNzM3LDI0ICYjNDM7NzM3LDYgQEAgc3RhdGljIGludCBpY2VfcmVhZF9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsCiAJcmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTsKIH0KIAotLyoqCi0gKiBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnIC0gV3JpdGUgYSBQSFkgcG9ydCBtZW1vcnkgbG9jYXRpb24KLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0Ci0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZAotICogQG9mZnNldDogT2Zmc2V0IGZyb20gUEhZIHBvcnQgcmVnaXN0ZXIgYmFzZQotICogQHZhbDogUG9pbnRlciB0byB0aGUgdmFsdWUgdG8gcmVhZCAob3V0IHBhcmFtKQotICoKLSAqIFJldHVybjoKLSAqICogJTAgICAgICAtIHN1Y2Nlc3MKLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZQotICogKiAlb3RoZXIgIC0gZmFpbGVkIHRvIHdyaXRlIHRvIFBIWQotICovCi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsCi0JCQkJICAgICB1MzIgdmFsKQotewotCXJldHVybiBpY2Vfd3JpdGVfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApOwotfQotCiAvKioKICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlcgogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKQEAgLTExMzksOCAmIzQzOzExMjEsOCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsCiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy4KICAqCiAgKiBUbyBkaXJlY3RseSBjbGVhciB0aGUgY29udGVudHMgb2YgdGhlIHRpbWVzdGFtcCBibG9jayBlbnRpcmVseSwgZGlzY2FyZGluZwotICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZQotICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfcXVhZF9ldGg1NmcoKS4KJiM0MzsgKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgcGVyZm9ybSBhIFBIWSBzb2Z0CiYjNDM7ICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuCiAgKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYW4gaWR4IHdob3NlIGJpdCBpcyBzZXQgYWNjb3JkaW5nIHRvCiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS4KQEAgLTExNTIsMjQgJiM0MzsxMTM0LDE2IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCwKIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpCiB7CiAJdTY0IHVudXNlZF90c3RhbXA7Ci0JdTE2IGxvX2FkZHI7CiAJaW50IGVycjsKIAotCS8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzCi0JICogY2xlYXJlZC4KJiM0MzsJLyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0CiYjNDM7CSAqIGNsZWFycyB0aGUgZW50cnkmIzM5O3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KQomIzQzOwkgKiB0c19tZW1vcnlfc3RhdHVzIGJpdC4KIAkgKi8KIAllcnIgPSBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4LCAmYW1wO3VudXNlZF90c3RhbXApOwogCWlmIChlcnIpIHsKIAkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtGYWlsZWQgdG8gcmVhZCB0aGUgUEhZIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcbiYjMzQ7LAogCQkJICBwb3J0LCBpZHgsIGVycik7Ci0JfQotCi0JbG9fYWRkciA9ICh1MTYpUEhZX1RTVEFNUF9MKGlkeCk7Ci0KLQllcnIgPSBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKGh3LCBwb3J0LCBsb19hZGRyLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIGNsZWFyIGxvdyBQVFAgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxuJiMzNDssCi0JCQkgIHBvcnQsIGlkeCwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTExNzcsMTkgJiM0MzsxMTUxLDM2IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpCiB9CiAKIC8qKgotICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnIC0gQ2xlYXIgYWxsIHRpbWVzdGFtcHMgZnJvbSB0aGUgcG9ydCBibG9jawomIzQzOyAqIGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcgLSBSZXNldCBvbmUgcG9ydCYjMzk7cyBUeCB0aW1lc3RhbXAgbWVtb3J5CiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdAomIzQzOyAqIEBwb3J0OiBwb3J0IG51bWJlciB0byBjbGVhcgomIzQzOyAqCiYjNDM7ICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQmIzM5O3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlCiYjNDM7ICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzCiYjNDM7ICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGUKJiM0MzsgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCwKJiM0MzsgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZQomIzQzOyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS4KJiM0MzsgKgomIzQzOyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mCiYjNDM7ICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGUKJiM0MzsgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlcgomIzQzOyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuCiAgKi8KLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodykKJiM0MztzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiB7Ci0JdW5zaWduZWQgaW50IHBvcnQ7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwl1OCBpZHg7CiAKLQlmb3IgKHBvcnQgPSAwOyBwb3J0ICZsdDsgaHctJmd0O3B0cC5udW1fbHBvcnRzOyBwb3J0JiM0MzsmIzQzOykgewotCQlpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLAotCQkJCQkgMCk7Ci0JCWljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsCi0JCQkJCSAwKTsKJiM0MzsJZm9yIChpZHggPSAwOyBpZHggJmx0OyBJTkRFWF9QRVJfUE9SVDsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjExNSwxMCAmIzQzOzIxMDYsNiBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KQogewogCWludCBlcnI7CiAKLQllcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfT0ZGU0VUX1JFQURZLCAwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIxMzMsOSAmIzQzOzIxMjAsMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldCkKICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0CiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0CiAgKgotICogU3RhcnQgdGhlIGNsb2NrIG9mIGEgUEhZIHBvcnQuIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8KLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMKLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLgomIzQzOyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeAomIzQzOyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGluawomIzQzOyAqIHNwZWVkIGNoYW5nZXMuCiAgKgogICogUmV0dXJuOgogICogKiAlMCAgICAgLSBzdWNjZXNzCkBAIC0yMTUxLDYgJiM0MzsyMTQwLDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCkKIAogCXRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpOwogCiYjNDM7CWVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhodywgcG9ydCwgZmFsc2UpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMjk0LDYgJiM0MzsyMjg3LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqCiAgKiBUcmlnZ2VyIGEgc29mdCByZXNldCBvZiB0aGUgRVRINTZHIFBIWSBieSB0b2dnbGluZyB0aGUgc29mdCByZXNldAogICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6CiYjNDM7ICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdAogICogICAxLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQKICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdAogICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW4KQEAgLTIzMDIsNiAmIzQzOzIyOTYsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqIHRvIHNldHRsZS4gVGhpcyBwcm92aWRlcyBhIGNvbnRyb2xsZWQgd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgUEhZCiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LgogICoKJiM0MzsgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUKJiM0MzsgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmcKJiM0MzsgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uCiYjNDM7ICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltZXN0YW1wCiYjNDM7ICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLgomIzQzOyAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgd2hlbgogICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci4KICAqLwpAQCAtMjMxMCw2ICYjNDM7MjMxMCwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiAJdTMyIGdsb2JhbF92YWw7CiAJaW50IGVycjsKIAomIzQzOwllcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSAgcG9ydCwgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsICZhbXA7Z2xvYmFsX3ZhbCk7CiAJaWYgKGVycikgewogCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LApAQCAtNTgwMSw4ICYjNDM7NTgwOCw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpCiAJCWljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpOwogCQlicmVhazsKIAljYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OgotCQlpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpOwotCQlicmVhazsKJiM0MzsJCS8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZgomIzQzOwkJICogdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlLgomIzQzOwkJICovCiAJY2FzZSBJQ0VfTUFDX0U4MTA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElDRSBEcml2ZXIgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCB0YXJnZXRpbmcgdGhlIGBpY2VgIGRyaXZlciB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MsIHJpZ2h0PwoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIGFjcm9zcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeTogYGljZV9hZGFwdGVyLmNgLCBgaWNlX2FkYXB0ZXIuaGAsIGBpY2VfbWFpbi5jYCwgYGljZV9wdHAuY2AsIGBpY2VfcHRwLmhgLCBhbmQgYGljZV9wdHBfaHcuY2AuIEFsbCBpbmRpY2F0aW9ucyBhcmUgdGhhdCB0aGlzIGNvbmNlcm5zIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlciAodGhlIGBpY2VgIGRyaXZlcikuCgpOb3csIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBhcmUgc29tZSAqbmVnYXRpdmUgY3JpdGVyaWEqIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFNwZWNpZmljYWxseSwgSSBtdXN0IGNvbnNpZGVyIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gVGhlIGd1aWRlIGV4cGxpY2l0bHkgbWVudGlvbnMgZHJpdmVycyBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIHNwZWNpYWxpemVkIGhhcmR3YXJlIG5vdCByZWFkaWx5IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGljZWAgZml0cyB0aGlzIHByb2ZpbGUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IGlmIElDRSBpcyBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgTklDcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBLY29uZmlnIGZpbGUgY2FuIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlci4gVGhpcyB3aWxsIGRldGVybWluZSBpZiBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI2OD1jb25maWcgSTQwRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjI5MTpjb25maWcgSUNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5Mi1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMjA6Y29uZmlnIElDRV9IV01PTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXHRib29sIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydCBIV01PTiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzItXHRib29sIFwmIzM0O1N3aXRjaGRldiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjM0NTpjb25maWcgSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBwbGF0Zm9ybXMgd2l0aCBQVE0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlICYjMzk7aWNlJiMzOTsgRHJpdmVyJiMzOTtzIEhhcmR3YXJlIERlcGVuZGVuY3kqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGUgYGljZWAgZHJpdmVyIGlzICpzb2xlbHkqIGZvciB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgTklDcyDigJMgdGhvc2UgRTgxMCwgRTgyMCwgRTgyMiwgRTgyMywgRTgyNSwgYW5kIEU4MzAgbW9kZWxzIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzICpub3QqIGFuIGVtdWxhdGVkIGRldmljZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuCgpJbiBhIHR5cGljYWwgUUVNVSBvciBzeXprYWxsZXIgc2V0dXAsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW11bGF0ZWQgbmV0ZGV2cywgc3R1ZmYgbGlrZSBlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBVU0ItYmFzZWQgbmV0d29ya2luZywgdHVuL3RhcCwgbG9vcGJhY2sgaW50ZXJmYWNlcywgdmV0aCBwYWlycywgYW5kIHNvIG9uLiBCdXQgYGljZWA/IEl0JiMzOTtzIHRoZSBkcml2ZXIgZm9yIEludGVsJiMzOTtzIDEwMEdiRS9FODAwIHBoeXNpY2FsIFBDSWUgTklDLiBJJiMzOTttIGFsbW9zdCBjZXJ0YWluIHRoZXJlJiMzOTtzICpubyogUUVNVSBlbXVsYXRpb24gZm9yIGFuIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgTklDLCBhbmQgdGhhdCB0aGUgYGljZWAgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSBkZXBlbmRlbnQgb24gdGhlICphY3R1YWwqIGhhcmR3YXJlLgoKVG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGFueSB2aXJ0dWFsIGJ1c2VzLCBzb2Z0d2FyZSBtb2Nrcywgb3IgdGVzdCBlbnZpcm9ubWVudHMgbWlnaHQgZXhpc3QgZm9yIGBpY2VgLiBJJiMzOTtsbCBydW4gYSBncmVwIHNlYXJjaCB0byB2ZXJpZnkgZHJpdmVyIHJlZ2lzdHJhdGlvbiBvciBQQ0kgSURzLiBUaGlzIGNoZWNrIHNob3VsZCBkZWZpbml0aXZlbHkgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIHRoYXQgYGljZWAgbWFuZGF0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBJbnRlbCBFODAwIEFTSUMvUENJZSBOSUMgZm9yIGl0IHRvIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXChwY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU3ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTgzNzpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWNlX3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEzOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGljZV9tYWluLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgaWNlX21haW4uY2AgLSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLiBJIHN1c3BlY3QgdGhlIHByb2JsZW0gaXMgZG93bnN0cmVhbSwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGF0IGEgbGlrZWx5IHNwb3QgLSBhcm91bmQgbGluZSA1Nzg0LiBUaGF0IHJlZ2lvbiB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCB5b3VyIHNwZWNpZmljIGtub3dsZWRnZSBvZiB3aGF0IHRoYXQgYXJlYSBvZiB0aGUgY29kZSBpcyByZXNwb25zaWJsZSBmb3IsIGUuZy4sICYjMzQ7dGhlIHByb2Nlc3Npbmcgb2YgaW5jb21pbmcgSUNFIGNhbmRpZGF0ZXMmIzM0OywgJiMzNDt0aGUgYWxsb2NhdGlvbiBvZiBuZXR3b3JrIHJlc291cmNlcyYjMzQ7LCAmIzM0O3RoZSBoYW5kbGluZyBvZiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZmFpbHVyZXMmIzM0OywgZXRjLl0uIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yICp5ZXQqLCBidXQgbXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgZWR1Y2F0ZWQgZ3Vlc3MsIGUuZy4sICYjMzQ7Y2FuZGlkYXRlIHByaW9yaXRpemF0aW9uJiMzNDssICYjMzQ7bmV0d29yayBjb25uZWN0aXZpdHkgaXNzdWVzJiMzNDssICYjMzQ7U1RVTi9UVVJOIGludGVyYWN0aW9uJiMzNDssIGV0Yy5dIGlzIGxpa2VseSBtYW5pZmVzdGluZyB0aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLCBvciBpZiBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1Nzg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3ODQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWNlX3BjaV90YmxbXSA9IHtcbjU3ODU6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfQkFDS1BMQU5FKSB9LFxuNTc4NjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwQ19RU0ZQKSB9LFxuNTc4NzpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwQ19TRlApIH0sXG41Nzg4Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBfWFhWX0JBQ0tQTEFORSkgfSxcbjU3ODk6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMF9YWFZfUVNGUCkgfSxcbjU3OTA6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMF9YWFZfU0ZQKSB9LFxuNTc5MTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzQ19CQUNLUExBTkUpIH0sXG41NzkyOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDX1FTRlApIH0sXG41NzkzOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDX1NGUCkgfSxcbjU3OTQ6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0NfMTBHX0JBU0VfVCkgfSxcbjU3OTU6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0NfU0dNSUkpIH0sXG41Nzk2Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJDX0JBQ0tQTEFORSkgfSxcbjU3OTc6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfUVNGUCkgfSxcbjU3OTg6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfU0ZQKSB9LFxuNTc5OTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyQ18xMEdfQkFTRV9UKSB9LFxuNTgwMDpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyQ19TR01JSSkgfSxcbjU4MDE6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkxfQkFDS1BMQU5FKSB9LFxuNTgwMjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyTF9TRlApIH0sXG41ODAzOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJMXzEwR19CQVNFX1QpIH0sXG41ODA0Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJMX1NHTUlJKSB9LFxuNTgwNTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzTF9CQUNLUExBTkUpIH0sXG41ODA2Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMX1NGUCkgfSxcbjU4MDc6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfMTBHX0JBU0VfVCkgfSxcbjU4MDg6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfMUdCRSkgfSxcbjU4MDk6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfUVNGUCkgfSxcbjU4MTA6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMl9TSV9ERkxUKSB9LFxuNTgxMTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODI1Q19CQUNLUExBTkUpLCB9LFxuNTgxMjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODI1Q19RU0ZQKSwgfSxcbjU4MTM6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfU0ZQKSwgfSxcbjU4MTQ6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfU0dNSUkpLCB9LFxuNTgxNTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfQkFDS1BMQU5FKSB9LFxuNTgxNjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfUVNGUDU2KSB9LFxuNTgxNzpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQKSB9LFxuNTgxODpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQX0REKSB9LFxuNTgxOTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ19CQUNLUExBTkUpLCB9LFxuNTgyMDpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwX1hYVl9CQUNLUExBTkUpLCB9LFxuNTgyMTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ19RU0ZQKSwgfSxcbjU4MjI6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMF9YWFZfUVNGUCksIH0sXG41ODIzOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MzBDX1NGUCksIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NTUKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IE5vdCBTdWl0YWJsZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsOiBJJiMzOTt2ZSBqdXN0IGFzc2Vzc2VkIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBpdCYjMzk7cyBhIGNsZWFyICYjMzQ7bm8tZ28mIzM0OyBmb3IgZnV6emluZy4gVGhlIGtleSBwb2ludHMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4KCkZpcnN0bHksIHRoaXMgZHJpdmVyIGlzICpleGNsdXNpdmVseSogZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBQQ0llIG5ldHdvcmsgYWRhcHRlcnMuIEl0JiMzOTtzIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBvbmx5IGNvZGUgYmVpbmcgdG91Y2hlZCwgd2hpY2ggaGVscHMgZm9jdXMgdGhlIHNjb3BlLgoKU2Vjb25kbHksIGFuZCB0aGlzIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IsIHRoZXNlIGFyZSAqcGh5c2ljYWwqIGhpZ2gtc3BlZWQgTklDcy4gVGhlIHR5cGUgb2YgaGFyZHdhcmUgdGhleSByZWx5IG9uIOKAkyB0aGUgQVNJQ3MsIHRoZSBQQ0llIGNhcmRzIOKAkyBhcmUgdGhpbmdzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIGJ5IHN5emthbGxlci4gVGhhdCBtZWFucyB3ZSBjYW5ub3QgZWFzaWx5IGdldCBhIGZ1enplciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkcml2ZXIgY29kZSBpbiBhIG1lYW5pbmdmdWwgd2F5LiBTZWN0aW9uIDIsIHNwZWNpZmljYWxseSBjYWxscyB0aGlzIG91dCBhcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgdGFyZ2V0cyBoYXJkd2FyZSB0aGF04oCZcyBpbmFjY2Vzc2libGUgaW4gYSBmdXp6aW5nIHNldHVwLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBmdXp6aW5nIGVmZm9ydHMgYXJlIGdvaW5nIHRvIGJlIHdhc3RlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgaXNvbGF0ZWQgdG8gdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7QWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6MTUuMzA5MDYzNTQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzNDUxOTQ3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSBpc29sYXRlZCB0byB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBFODAwIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6MTUuMzA5MDcwNjIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcxODIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ODcyNWYwMjdiMTEwYzFlODI2NDdjNWVhNDgwM2FhNmM1ZTNhZmE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDAxOjAzOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcXG5pbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcXG5AQCAtNjYsMTggKzY2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2YWRhcHRlci1cXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxuIFxcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCk7XFxuIFxcbiBcXHRyZXR1cm4gYWRhcHRlcjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWNlX2FkYXB0ZXJfZnJlZShzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIHtcXG4tXFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpKTtcXG4rXFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCkpO1xcbiBcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYWRhcHRlci1cXHUwMDNlY3BpX3BoeV9sb2NrKTsgaSsrKVxcbiBcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4gXFxuIFxcdGtmcmVlKGFkYXB0ZXIpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG5AQCAtMTksMTMgKzE5LDEzIEBAIHN0cnVjdCBpY2VfcGY7XFxuICAqXFxuICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0c1xcbiAgKlxcbi0gKiBAcG9ydHM6IGxpc3Qgb2YgcG9ydHNcXG4rICogQGxpc3Q6IGxpc3Qgb2YgcG9ydHNcXG4gICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0XFxuICAqL1xcbiBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgcG9ydHM7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gXFx0LyogVG8gc3luY2hyb25pemUgdGhlIHBvcnRzIGxpc3Qgb3BlcmF0aW9ucyAqL1xcbi1cXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBkODg4MzU0ODJkM2FhLi5kMTI5NTIxNzFhOTkxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5AQCAtMzI0OCw3ICszMjQ4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxcbiBcXHRpY2VfaXJxX2R5bmFtaWNfZW5hKGh3LCBOVUxMLCBOVUxMKTtcXG4gXFx0aWNlX2ZsdXNoKGh3KTtcXG4gXFxuLVxcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcXG4rXFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xcbiBcXHRcXHQvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LFxcbiBcXHRcXHQgKiByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGl0IGFnYWluLlxcbiBcXHRcXHQgKi9cXG5AQCAtNjc0NSw3ICs2NzQ1LDYgQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSlcXG4gXFx0XFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSk7XFxuIFxcdFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModnNpLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRuZXRpZl9jYXJyaWVyX29uKHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4tXFx0XFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFBlcmZvcm0gYW4gaW5pdGlhbCByZWFkIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBub3cgdG9cXG5AQCAtNzI3Myw3ICs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcbiBcXHRpZiAodnNpLVxcdTAwM2VuZXRkZXYpIHtcXG4gXFx0XFx0dmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTtcXG4tXFx0XFx0aWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktXFx1MDAzZWJhY2ssIGZhbHNlKTtcXG4gXFx0XFx0bmV0aWZfY2Fycmllcl9vZmYodnNpLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRuZXRpZl90eF9kaXNhYmxlKHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0fVxcbkBAIC03Nzk0LDYgKzc3OTIsMTQgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxcbiBcXG4gXFx0aWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlaHcucG9ydF9pbmZvKSB7XFxuK1xcdFxcdGJvb2wgbGlua191cDtcXG4rXFxuK1xcdFxcdGxpbmtfdXAgPSAhIShwZi1cXHUwMDNlaHcucG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgSUNFX0FRX0xJTktfVVApO1xcbitcXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXFxuIFxcdGVyciA9IGljZV9zZW5kX3ZlcnNpb24ocGYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWFlYzM2YWI2YWUzZi4uYTVlZmIwYTk1OTQxZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xcbkBAIC0xLDYgKzEsOCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV90cmFjZS5oXFxcIlxcbkBAIC0zNjIsOSArMzY0LDEyIEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxcbiBzdGF0aWMgYm9vbFxcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiB7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XFxuK1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ0eC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRyZXR1cm4gdHgtXFx1MDAzZWluaXQgXFx1MDAyNlxcdTAwMjYgIXR4LVxcdTAwM2VjYWxpYnJhdGluZztcXG4rXFx0cmV0dXJuIHR4LVxcdTAwM2Vpbml0IFxcdTAwMjZcXHUwMDI2ICF0eC1cXHUwMDNlY2FsaWJyYXRpbmcgXFx1MDAyNlxcdTAwMjYgcHRwX3BvcnQtXFx1MDAzZWxpbmtfdXA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC01NjEsNyArNTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4gXFx0dTY0IHRzdGFtcF9yZWFkeTtcXG4tXFx0Ym9vbCBsaW5rX3VwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpZHg7XFxuIFxcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbiBcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcbi1cXHRpZiAoIXR4LVxcdTAwM2Vpbml0KVxcbitcXHRpZiAoIXR4LVxcdTAwM2Vpbml0IHx8IGJpdG1hcF9lbXB0eSh0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXFxuQEAgLTU3OSwxNCArNTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdC8qIERyb3AgcGFja2V0cyBpZiB0aGUgbGluayB3ZW50IGRvd24gKi9cXG4tXFx0bGlua191cCA9IHB0cF9wb3J0LVxcdTAwM2VsaW5rX3VwO1xcbi1cXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pIHtcXG4gXFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XFxuIFxcdFxcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHR1NjQgcmF3X3RzdGFtcCA9IDAsIHRzdGFtcDtcXG4tXFx0XFx0Ym9vbCBkcm9wX3RzID0gIWxpbmtfdXA7XFxuK1xcdFxcdGJvb2wgZHJvcF90cyA9IGZhbHNlO1xcbiBcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4gXFx0XFx0LyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovXFxuQEAgLTYxOSw2ICs2MjAsMTkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIWRyb3BfdHMpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0LyogdmVyaWZ5IHJlYWR5IGJpdCBjbGVhcmVkICovXFxuK1xcdFxcdGlmICh0eC1cXHUwMDNlaGFzX3JlYWR5X2JpdG1hcCkge1xcbitcXHRcXHRcXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVxcdTAwM2VibG9jaywgXFx1MDAyNnRzdGFtcF9yZWFkeSk7XFxuK1xcdFxcdFxcdGlmIChlcnIgfHwgdHN0YW1wX3JlYWR5IFxcdTAwMjYgQklUX1VMTChwaHlfaWR4KSkge1xcbitcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KGlkeCwgdHgtXFx1MDAzZXN0YWxlKSlcXG4rXFx0XFx0XFx0XFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlBIWSBwb3J0ICV1IGZhaWxlZCB0byBjbGVhciByZWFkeSBiaXQgZm9yIGlkeCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cHRwX3BvcnQtXFx1MDAzZXBvcnRfbnVtLCBwaHlfaWR4KTtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cXHUwMDNldHN0YW1wc1tpZHhdLnNrYiwgaWR4KTtcXG4gXFxuIFxcdFxcdC8qIEZvciBQSFlzIHdoaWNoIGRvbid0IGltcGxlbWVudCBhIHByb3BlciB0aW1lc3RhbXAgcmVhZHlcXG5AQCAtNjczLDIwICs2ODcsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHBmLVxcdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCArPSB0c3RhbXBfZ29vZDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXFxuK3tcXG4rXFx0d2FrZV91cF92YXIocmVmKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzLCBsaXN0X25vZGUpIHtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcXHUwMDI2cG9ydC1cXHUwMDNldHg7XFxuIFxcbi1cXHRcXHRpZiAoIXR4IHx8ICF0eC1cXHUwMDNlaW5pdClcXG4rXFx0XFx0aWYgKCF0eC1cXHUwMDNlaW5pdClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XFxuK1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzI1LDYgKzc1MiwzNyBAQCBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWRcXG4raWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKTtcXG4rXFx0c3RydWN0IGljZV9odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbitcXHR1NjQgdHN0YW1wX3JlYWR5O1xcbitcXHRib29sIHBlbmRpbmc7XFxuK1xcdHU4IGlkeDtcXG4rXFxuK1xcdGlmIChody1cXHUwMDNlcmVzZXRfb25nb2luZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cXHUwMDNlYmxvY2ssIFxcdTAwMjZ0c3RhbXBfcmVhZHkpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRwZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdGZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKSB7XFxuK1xcdFxcdFxcdGlmICghKHRzdGFtcF9yZWFkeSBcXHUwMDI2IEJJVF9VTEwoaWR4ICsgdHgtXFx1MDAzZW9mZnNldCkpKVxcbitcXHRcXHRcXHRcXHRwZW5kaW5nID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXBlbmRpbmcpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdHVzbGVlcF9yYW5nZSg1MDAsIDEwMDApO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xcbitcXG4rXFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBpbi1mbGlnaHQgVHggdGltZXN0YW1wcyBvbiBibG9jayAldVxcXFxuXFxcIixcXG4rXFx0XFx0dHgtXFx1MDAzZWJsb2NrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyXFxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG5AQCAtNzQxLDYgKzc5OSw4IEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpZHg7XFxuIFxcbitcXHRpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTtcXG4rXFxuIFxcdGVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXFx1MDAzZWJsb2NrLCBcXHUwMDI2dHN0YW1wX3JlYWR5KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcXFwiRmFpbGVkIHRvIGdldCB0aGUgVHggdHN0YW1wIHJlYWR5IGJpdG1hcCBmb3IgYmxvY2sgJXUsIGVyciAlZFxcXFxuXFxcIixcXG5AQCAtNzc5LDEyICs4MzksMTAgQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuICAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGVcXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXFxuICAqXFxuLSAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgc2VuZGluZ1xcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXFxuLSAqIHRoZSA0MGJpdCBoYXJkd2FyZSB0aW1lc3RhbXAgaW5jb3JyZWN0bHkuXFxuLSAqXFxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxcbi0gKiB0aW1lIHJlcXVlc3QuXFxuKyAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgdGhlIGRyaXZlclxcbisgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZVxcbisgKiBkcml2ZXIgdGhhdCBhIHRpbWVzdGFtcCBpcyBleHBlY3RlZCB0byBmYWlsIGlmIGl0IHdhcyBpbml0aWF0ZWQgYXMgdGhlIGxpbmtcXG4rICogd2VudCBkb3duLlxcbiAgKi9cXG4gc3RhdGljIHZvaWRcXG4gaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbkBAIC04MDgsOCArODY2LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKVxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XFxuK1xcdFxcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNnBvcnQtXFx1MDAzZXJlZikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHB0cF9wb3J0X3RvX3BmKHBvcnQpLCBcXHUwMDI2cG9ydC1cXHUwMDNldHgpO1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC05OTQsMTMgKzEwNjAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cXHUwMDNlcHRwLmt3b3JrZXIsIFxcdTAwMjZwZi1cXHUwMDNlcHRwLndvcmssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMoMTApKTtcXG4gXFx0fVxcbi1cXG4tXFx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXFxuLVxcdCAqIGJlZW4gY2FwdHVyZWQgaW4gaGFyZHdhcmUgYmVmb3JlIHRoZSB0aW1lIHVwZGF0ZS4gVGhpcyBjb3VsZCBsZWFkXFxuLVxcdCAqIHRvIHVzIGV4dGVuZGluZyB0aGVtIHdpdGggdGhlIHdyb25nIGNhY2hlZCB2YWx1ZSByZXN1bHRpbmcgaW5cXG4tXFx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXFxuLVxcdCAqL1xcbi1cXHRpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZShcXHUwMDI2cGYtXFx1MDAzZXB0cC5wb3J0LnR4KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExMzMsNiArMTE5Miw3IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cyhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4gXFx0aW50IHR4X2VycjtcXG5AQCAtMTE1NSwxMiArMTIxNSwyOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4gXFx0XFx0dHhfZXJyID0gaWNlX3BoeV9jZmdfdHhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXFx1MDAzZXBvcnRfbnVtKTtcXG4gXFx0cnhfZXJyID0gaWNlX3BoeV9jZmdfcnhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXFx1MDAzZXBvcnRfbnVtKTtcXG4gXFx0aWYgKHR4X2VyciB8fCByeF9lcnIpIHtcXG4tXFx0XFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlciAqL1xcbitcXHRcXHQvKiBUeCBhbmQvb3IgUnggb2Zmc2V0IG5vdCB5ZXQgY29uZmlndXJlZCwgdHJ5IGFnYWluIGxhdGVyLlxcbitcXHRcXHQgKiBUaGlzIGlzIGV4cGVjdGVkIGR1cmluZyBub3JtYWwgbGluay11cDogdGhlIHZlcm5pZXIgb2Zmc2V0XFxuK1xcdFxcdCAqIGNhbGlicmF0aW9uIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCBhdCBsZWFzdCBvbmUgcGFja2V0IGhhc1xcbitcXHRcXHQgKiBiZWVuIHRyYW5zbWl0dGVkLCBzbyB0aGUgZmlyc3QgcmV0cmllcyByb3V0aW5lbHkgbGFuZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcXG4rXFx0XFx0XFx0XFxcIlBUUCBvZmZzZXQgbm90IHlldCB2YWxpZCBmb3IgcG9ydCAldSAodHhfZXJyPSVkIHJ4X2Vycj0lZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQtXFx1MDAzZXBvcnRfbnVtLCB0eF9lcnIsIHJ4X2Vycik7XFxuIFxcdFxcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVxcdTAwM2VwdHAua3dvcmtlcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnBvcnQtXFx1MDAzZW92X3dvcmssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rXFx0LyogVHggYW5kIFJ4IG9mZnNldHMgYXJlIG5vdyBjb25maWd1cmVkLCBlbmFibGUgVHggdGltZXN0YW1wcyAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXHRwb3J0LVxcdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb3J0LVxcdTAwM2V0eC5sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHRcXFwiUFRQIG9mZnNldCB2YWxpZCBmb3IgcG9ydCAldSwgVHggdGltZXN0YW1wcyBlbmFibGVkXFxcXG5cXFwiLFxcbitcXHRcXHRwb3J0LVxcdTAwM2Vwb3J0X251bSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMjQ2LDEwICsxMzIyLDEzIEBAIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydClcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHQvKiBFbmFibGUgVHggdGltZXN0YW1wcyByaWdodCBhd2F5ICovXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRwdHBfcG9ydC1cXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0LyogRG8gbm90IGNsZWFyIGNhbGlicmF0aW5nIGZsYWcgaGVyZS4gVHggdGltZXN0YW1wcyByZW1haW5cXG4rXFx0XFx0ICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkXFxuK1xcdFxcdCAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC5cXG4rXFx0XFx0ICogQ2xlYXJpbmcgaXQgaGVyZSB3b3VsZCBhbGxvdyBUeCB0aW1lc3RhbXBzIHRvIGJlIHJlcG9ydGVkXFxuK1xcdFxcdCAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmdcXG4rXFx0XFx0ICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXFxuK1xcdFxcdCAqL1xcbiBcXG4gXFx0XFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXFx1MDAzZXB0cC5rd29ya2VyLCBcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZW92X3dvcmssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIDApO1xcbkBAIC0xMjgwLDE3ICsxMzU5LDIzIEBAIHZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApXFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRwdHBfcG9ydCA9IFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQ7XFxuIFxcbitcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LyogVXBkYXRlIGNhY2hlZCBsaW5rIHN0YXR1cyBmb3IgdGhpcyBwb3J0IGltbWVkaWF0ZWx5ICovXFxuIFxcdHB0cF9wb3J0LVxcdTAwM2VsaW5rX3VwID0gbGlua3VwO1xcbiBcXG4rXFx0aWYgKHBmLVxcdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSlcXG4rXFx0XFx0Z290byBleGl0X2tyZWZfcHV0O1xcbitcXG4gXFx0LyogU2tpcCBIVyB3cml0ZXMgaWYgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MgKi9cXG4gXFx0aWYgKHBmLVxcdTAwM2Vody5yZXNldF9vbmdvaW5nKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdGdvdG8gZXhpdF9rcmVmX3B1dDtcXG4rXFxuK1xcdGlmICghbGlua3VwKVxcbitcXHRcXHRpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZShcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZXR4KTtcXG4gXFxuIFxcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVxcdTAwM2VmbGFncykpIHtcXG5AQCAtMTMzMywxNyArMTQxOCwyMCBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxcbiBcXHRjYXNlIElDRV9NQUNfRTgxMDpcXG4gXFx0Y2FzZSBJQ0VfTUFDX0U4MzA6XFxuIFxcdFxcdC8qIERvIG5vdCByZWNvbmZpZ3VyZSBFODEwIG9yIEU4MzAgUEhZICovXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0Z290byBleGl0X2tyZWZfcHV0O1xcbiBcXHRjYXNlIElDRV9NQUNfR0VORVJJQzpcXG4gXFx0XFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHB0cF9wb3J0KTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRnb3RvIGV4aXRfa3JlZl9wdXQ7XFxuIFxcdGNhc2UgSUNFX01BQ19HRU5FUklDXzNLX0U4MjU6XFxuIFxcdFxcdGlmIChsaW5rdXApXFxuIFxcdFxcdFxcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0Z290byBleGl0X2tyZWZfcHV0O1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIiVzOiBVbmtub3duIFBIWSB0eXBlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG4rXFxuK2V4aXRfa3JlZl9wdXQ6XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTQyNCwxNiArMTUxMiwyMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcoc3RydWN0IGljZV9wZiAqcGYpXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcXG4rXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2goZW50cnksIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpIHtcXG4tXFx0XFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbGlzdF9ub2RlKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRcXHRpZiAocG9ydC1cXHUwMDNlbGlua191cClcXG4gXFx0XFx0XFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHBvcnQpO1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRrcmVmX3B1dChcXHUwMDI2cG9ydC1cXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTkyNyw4ICsyMDIwLDkgQEAgaWNlX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuIFxcdC8qIFJlZW5hYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cXG4gXFx0aWNlX3B0cF9lbmFibGVfYWxsX3Blcm91dChwZik7XFxuIFxcbi1cXHQvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMyAqL1xcbi1cXHRpZiAoaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQylcXG4rXFx0LyogUmVjYWxpYnJhdGUgYW5kIHJlLWVuYWJsZSB0aW1lc3RhbXAgYmxvY2tzIGZvciBFODIyL0U4MjMvRTgyNS1DICovXFxuK1xcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDIHx8XFxuK1xcdCAgICBody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpXFxuIFxcdFxcdGljZV9wdHBfcmVzdGFydF9hbGxfcGh5KHBmKTtcXG4gZXhpdDpcXG4gXFx0aWYgKGVycikge1xcbkBAIC0yNjM4LDExICsyNzMyLDEzIEBAIHM4IGljZV9wdHBfcmVxdWVzdF90cyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdCAqIGEgcmVmZXJlbmNlIHRvIHRoZSBza2IgYW5kIHRoZSBzdGFydCB0aW1lIHRvIGFsbG93IGRpc2NhcmRpbmcgb2xkXFxuIFxcdFxcdCAqIHJlcXVlc3RzLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0c2V0X2JpdChpZHgsIHR4LVxcdTAwM2Vpbl91c2UpO1xcbi1cXHRcXHRjbGVhcl9iaXQoaWR4LCB0eC1cXHUwMDNlc3RhbGUpO1xcbiBcXHRcXHR0eC1cXHUwMDNldHN0YW1wc1tpZHhdLnN0YXJ0ID0gamlmZmllcztcXG4gXFx0XFx0dHgtXFx1MDAzZXRzdGFtcHNbaWR4XS5za2IgPSBza2JfZ2V0KHNrYik7XFxuIFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7XFxuK1xcdFxcdGNsZWFyX2JpdChpZHgsIHR4LVxcdTAwM2VzdGFsZSk7XFxuK1xcdFxcdC8qIEVuc3VyZSBpbmRleCBpcyBzZXR1cCBiZWZvcmUgbWFya2luZyBpdCBhcyB1c2VkICovXFxuK1xcdFxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbitcXHRcXHRzZXRfYml0KGlkeCwgdHgtXFx1MDAzZWluX3VzZSk7XFxuIFxcdFxcdGljZV90cmFjZSh0eF90c3RhbXBfcmVxdWVzdCwgc2tiLCBpZHgpO1xcbiBcXHR9XFxuIFxcbkBAIC0yNjc4LDc0ICsyNzc0LDU2IEBAIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG4rc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBib29sIGluX2lycSlcXG4ge1xcbi1cXHRib29sIG1vcmVfdGltZXN0YW1wcztcXG4rXFx0REVDTEFSRV9CSVRNQVAodHN0YW1wcywgSU5ERVhfUEVSX1BPUlRfTUFYKSA9IHt9O1xcbiBcXG4gXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZ0eC1cXHUwMDNlbG9jaykge1xcbiBcXHRcXHRpZiAoIXR4LVxcdTAwM2Vpbml0KVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRcXHRtb3JlX3RpbWVzdGFtcHMgPSAhYml0bWFwX2VtcHR5KHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pO1xcbi1cXHR9XFxuK1xcdFxcdGlmIChpbl9pcnEpIHtcXG4rXFx0XFx0XFx0aWYgKCFpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAodHgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gbW9yZV90aW1lc3RhbXBzO1xcbitcXHRcXHRcXHRyZXR1cm4gYml0bWFwX2FuZG5vdCh0c3RhbXBzLCB0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlc3RhbGUsIHR4LVxcdTAwM2VsZW4pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4rc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcXG4ge1xcbitcXHRib29sIGhhdmVfdHN0YW1wcyA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spIHtcXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzLFxcbi1cXHRcXHRcXHRcXHQgICAgbGlzdF9ub2RlKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFxcdTAwMjZwb3J0LVxcdTAwM2V0eDtcXG4tXFxuLVxcdFxcdFxcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyh0eCkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XFxuK1xcdFxcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcXHUwMDI2cG9ydC1cXHUwMDNldHgsIGluX2lycSkpIHtcXG4rXFx0XFx0XFx0aGF2ZV90c3RhbXBzID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuLVxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIGhhdmVfdHN0YW1wcztcXG4gfVxcbiBcXG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4rYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0LyogQ2hlY2sgc29mdHdhcmUgaW5kaWNhdG9yICovXFxuIFxcdHN3aXRjaCAocGYtXFx1MDAzZXB0cC50eF9pbnRlcnJ1cHRfbW9kZSkge1xcbiBcXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOlxcbi1cXHRcXHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCkpXFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0dXJuIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQudHgsIGluX2lycSk7XFxuIFxcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOlxcbi1cXHRcXHRpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXR1cm4gaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmLCBpbl9pcnEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIlVuZXhwZWN0ZWQgVHggdGltZXN0YW1wIGludGVycnVwdCBtb2RlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgIHBmLVxcdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0LyogQ2hlY2sgaGFyZHdhcmUgaW5kaWNhdG9yICovXFxuLVxcdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlVuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCk7XFxuLVxcdFxcdC8qIFN0b3AgdHJpZ2dlcmluZyBJUlFzIGlmIHdlJ3JlIHVuYWJsZSB0byByZWFkIFBIWSAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4tXFxuLVxcdC8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzXFxuLVxcdCAqIGF2YWlsYWJsZSwgMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGluZyB0aW1lc3RhbXBzLCBhbmQgYSBuZWdhdGl2ZVxcbi1cXHQgKiB2YWx1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgKHdoaWNoIHdlIGNoZWNrZWQgZm9yIGFib3ZlKS5cXG4tXFx0ICovXFxuLVxcdHJldHVybiByZXQgXFx1MDAzZSAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjc5OSw3ICsyODc3LDcgQEAgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdC8qIEU4MzAgY2FuIHJlYWQgdGltZXN0YW1wcyBpbiB0aGUgdG9wIGhhbGYgdXNpbmcgcmQzMigpICovXFxuIFxcdFxcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XFxuIFxcbi1cXHRcXHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7XFxuK1xcdFxcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcXG4gXFx0XFx0XFx0LyogUHJvY2VzcyBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLiBJZiB0aGVyZVxcbiBcXHRcXHRcXHQgKiBpcyBtb3JlIHdvcmssIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgYWdhaW4uXFxuIFxcdFxcdFxcdCAqL1xcbkBAIC0yODM5LDkgKzI5MTcsMTMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9tYXliZV90cmlnZ2VyX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFxuIFxcdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJQVFAgcGVyaW9kaWMgdGFzayB1bmFibGUgdG8gcmVhZCBQSFkgdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyZXQpO1xcbi1cXHR9IGVsc2UgaWYgKHJldCkge1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlVuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbitcXHRcXHQvKiBEb24ndCB0cmlnZ2VyIGFuIElSUSBpZiB3ZSBhcmUgdW5hYmxlIHRvIGFjY2VzcyB0aGUgUEhZICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNlIDAgfHwgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIGZhbHNlKSkge1xcbiBcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlBUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0d3IzMihodywgUEZJTlRfT0lDUiwgUEZJTlRfT0lDUl9UU1lOX1RYX00pO1xcbkBAIC0yODkwLDE0ICsyOTcyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpc3Rfbm9kZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xcbiBcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcXHUwMDI2cGVlcl9wZi1cXHUwMDNlaHcpKSB7XFxuIFxcdFxcdFxcdGlmIChyZWJ1aWxkKSB7XFxuIFxcdFxcdFxcdFxcdC8qIFRPRE86IFdoZW4gaW1wbGVtZW50aW5nIHJlYnVpbGQ9dHJ1ZTpcXG5AQCAtMjkwOSw3ICsyOTkzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxcbiBcXHRcXHRcXHRcXHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI5MzYsMTEgKzMwMjQsMTcgQEAgdm9pZCBpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcXG4gXFx0aWYgKHJlc2V0X3R5cGUgPT0gSUNFX1JFU0VUX1BGUilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcXG4rXFx0ICogVHggdHJhY2tlci4gSWYgb3Zfd29yayBpcyBydW5uaW5nIGR1cmluZyByZXNldCwgaXQgbWF5IGlzc3VlXFxuK1xcdCAqIHNpZGViYW5kIHF1ZXVlIGNvbW1hbmRzIHRoYXQgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIGFuZCBtYXlcXG4rXFx0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxcbitcXHQgKi9cXG4rXFx0aWYgKGh3LVxcdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXFxuK1xcdFxcdGt0aHJlYWRfY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQub3Zfd29yayk7XFxuK1xcbiBcXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFxcdTAwMjZcXHUwMDI2IGh3LVxcdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcXG4gXFx0XFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XFxuIFxcbi1cXHRpY2VfcHRwX3JlbGVhc2VfdHhfdHJhY2tlcihwZiwgXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCk7XFxuLVxcbiBcXHQvKiBEaXNhYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cXG4gXFx0aWNlX3B0cF9kaXNhYmxlX2FsbF9wZXJvdXQocGYpO1xcbiBcXG5AQCAtMzA4NiwxMSArMzE4MCwxMSBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUpO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0LnJlZik7XFxuIFxcbi1cXHRsaXN0X2FkZChcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0Lmxpc3Rfbm9kZSxcXG4tXFx0XFx0IFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdGxpc3RfYWRkX3JjdShcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0Lmxpc3Rfbm9kZSwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4gXFxuIFxcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxcbiBcXHQgKiBPbmx5IG1lYW5pbmdmdWwgb24gRTgyNSAob3RoZXIgTUFDIHR5cGVzIGRvbid0IGV4cG9zZSB0eC1jbGtcXG5AQCAtMzExMywxMiArMzIwNywzMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXFx1MDAyNnBmLVxcdTAwM2VwdHA7XFxuK1xcdHN0cnVjdCBrcmVmICpyZWY7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQubGlzdF9ub2RlKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuLVxcdH1cXG4rXFx0aWYgKHBmLVxcdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcXG4rXFx0ICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsXFxuK1xcdCAqIGZpcnN0IHJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBsaXN0LCB0aGVuIGRyb3AgdGhlIHByaW1hcnlcXG4rXFx0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcXG4rXFx0ICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG9cXG4rXFx0ICogZW5zdXJlIHRoYXQgYWxsIFJDVSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IG1pZ2h0IGF0dGVtcHQgdG9cXG4rXFx0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxcbitcXHQgKi9cXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXG4rXFx0cmVmID0gXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5yZWY7XFxuK1xcdGtyZWZfcHV0KHJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4rXFxuK1xcdGRldl9XQVJOX09OQ0UoaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdCAgICAgICF3YWl0X3Zhcl9ldmVudF90aW1lb3V0KHJlZiwgIWtyZWZfcmVhZChyZWYpLCAxNSAqIEhaKSxcXG4rXFx0XFx0ICAgICAgXFxcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwb3J0IHJlZmVyZW5jZXMgdG8gcmVsZWFzZS4gQ29udGludWluZyB0byB1bmxvYWQgYW55d2F5cy5cXFwiKTtcXG4rXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzIxMCw5ICszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB9XFxuIFxcbiAvKipcXG4tICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIFBUUCB3b3JrIHRocmVhZHNcXG4rICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIHRoZSBQVFAga3dvcmtlclxcbiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxcbisgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXFxuKyAqIHN0YXRlIGlzIElDRV9QVFBfUkVBRFkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxcbiB7XFxuQEAgLTMyMzEsOSArMzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXFxuIFxcbiBcXHRwdHAtXFx1MDAzZWt3b3JrZXIgPSBrd29ya2VyO1xcbiBcXG4tXFx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqL1xcbi1cXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXFx1MDAzZWt3b3JrZXIsIFxcdTAwMjZwdHAtXFx1MDAzZXdvcmssIDApO1xcbi1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMzNTUsNiArMzQ3MCwyMiBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfY2xlYW5fcGY7XFxuIFxcbitcXHQvKiBTZWVkIGxpbmtfdXAgZnJvbSBjdXJyZW50IFBIWSBzdGF0dXMsIHNpbmNlIGxpbmsgbWF5IGFscmVhZHkgYmUgdXBcXG4rXFx0ICogKGUuZy4gYWZ0ZXIgUFhFIGJvb3QpIHdpdGggbm8gbGluay1jaGFuZ2UgZWRnZSB0byBjYXRjaCBpdCBsYXRlci5cXG4rXFx0ICovXFxuK1xcdGlmIChwZi1cXHUwMDNlaHcucG9ydF9pbmZvKVxcbitcXHRcXHRwdHAtXFx1MDAzZXBvcnQubGlua191cCA9XFxuK1xcdFxcdFxcdCEhKHBmLVxcdTAwM2Vody5wb3J0X2luZm8tXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjZcXG4rXFx0XFx0XFx0SUNFX0FRX0xJTktfVVApO1xcbitcXG4rXFx0LyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uXFxuK1xcdCAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzXFxuK1xcdCAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfY2xlYW5fcGY7XFxuK1xcbiBcXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVzdGFtcGluZyBibG9jayAqL1xcbiBcXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xcbiBcXG5AQCAtMzM2Myw5ICszNDk0LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXG4gXFx0cHRwLVxcdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XFxuIFxcbi1cXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfZXhpdDtcXG4rXFx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlclxcbitcXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXFxuK1xcdCAqL1xcbitcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXFx1MDAzZWt3b3JrZXIsIFxcdTAwMjZwdHAtXFx1MDAzZXdvcmssIDApO1xcbiBcXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tyZWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpY2VfcHRwX2h3LmhcXFwiXFxuQEAgLTEzMCw2ICsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFxcdFxcdDE2XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcXHRcXHRcXHQ2NFxcbiBcXG4rLyogTWF4aW11bSBudW1iZXIgb2YgdGltZXN0YW1wIGluZGV4ZXMgYWNyb3NzIGFsbCBkZXZpY2VzICovXFxuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcXG4gICpcXG5AQCAtMTM4LDYgKzE0Myw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcXG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cXG4gICpcXG4gICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlXFxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcXG4gICogQHR4OiBUeCB0aW1lc3RhbXAgdHJhY2tpbmcgZm9yIHRoaXMgcG9ydFxcbiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZFxcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXFxuQEAgLTE0OSw2ICsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICAqL1xcbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7XFxuK1xcdHN0cnVjdCBrcmVmIHJlZjtcXG4gXFx0c3RydWN0IGljZV9wdHBfdHggdHg7XFxuIFxcdHN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcHNfbG9jazsgLyogcHJvdGVjdHMgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZSAqL1xcbkBAIC0zMTIsNyArMzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTtcXG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcXG4gdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpO1xcbiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7XFxuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7XFxuIHU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbiBcXG5AQCAtMzYwLDcgKzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbmluZGV4IDNhNDFjNzExZTc1MWIuLjY0ZTE4ZmUxMTc2YjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcXG4gXFx0cmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxcbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZFxcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXFxuLSAqIEB2YWw6IFBvaW50ZXIgdG8gdGhlIHZhbHVlIHRvIHJlYWQgKG91dCBwYXJhbSlcXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAqICUwICAgICAgLSBzdWNjZXNzXFxuLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZVxcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXFxuLSAqL1xcbi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIHZhbClcXG4te1xcbi1cXHRyZXR1cm4gaWNlX3dyaXRlX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlclxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbkBAIC0xMTM5LDggKzExMjEsOCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLlxcbiAgKlxcbiAgKiBUbyBkaXJlY3RseSBjbGVhciB0aGUgY29udGVudHMgb2YgdGhlIHRpbWVzdGFtcCBibG9jayBlbnRpcmVseSwgZGlzY2FyZGluZ1xcbi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlXFxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXFxuKyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnRcXG4rICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGFuIGlkeCB3aG9zZSBiaXQgaXMgc2V0IGFjY29yZGluZyB0b1xcbiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS5cXG5AQCAtMTE1MiwyNCArMTEzNCwxNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpXFxuIHtcXG4gXFx0dTY0IHVudXNlZF90c3RhbXA7XFxuLVxcdHUxNiBsb19hZGRyO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXNcXG4tXFx0ICogY2xlYXJlZC5cXG4rXFx0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XFxuK1xcdCAqIGNsZWFycyB0aGUgZW50cnkncyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpXFxuK1xcdCAqIHRzX21lbW9yeV9zdGF0dXMgYml0LlxcbiBcXHQgKi9cXG4gXFx0ZXJyID0gaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1NmcoaHcsIHBvcnQsIGlkeCwgXFx1MDAyNnVudXNlZF90c3RhbXApO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJGYWlsZWQgdG8gcmVhZCB0aGUgUEhZIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgcG9ydCwgaWR4LCBlcnIpO1xcbi1cXHR9XFxuLVxcbi1cXHRsb19hZGRyID0gKHUxNilQSFlfVFNUQU1QX0woaWR4KTtcXG4tXFxuLVxcdGVyciA9IGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcoaHcsIHBvcnQsIGxvX2FkZHIsIDApO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJGYWlsZWQgdG8gY2xlYXIgbG93IFBUUCB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHBvcnQsIGlkeCwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG5AQCAtMTE3NywxOSArMTE1MSwzNiBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxcbiB9XFxuIFxcbiAvKipcXG4tICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnIC0gQ2xlYXIgYWxsIHRpbWVzdGFtcHMgZnJvbSB0aGUgcG9ydCBibG9ja1xcbisgKiBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnIC0gUmVzZXQgb25lIHBvcnQncyBUeCB0aW1lc3RhbXAgbWVtb3J5XFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XFxuKyAqIEBwb3J0OiBwb3J0IG51bWJlciB0byBjbGVhclxcbisgKlxcbisgKiBGdWxseSByZXNldCBhIHNpbmdsZSBQSFkgcG9ydCdzIFR4IHRpbWVzdGFtcCBtZW1vcnkuIFBlciB0aGUgUEhZIHNwZWMsIHRoZVxcbisgKiBvbmx5IHdheSB0byBjbGVhciBhIHRpbWVzdGFtcCB2YWxpZCBiaXQgKGFuZCBpdHMgcmVhZC1vbmx5IHRzX21lbW9yeV9zdGF0dXNcXG4rICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGVcXG4rICogcG9ydCAodHdvIDMyLWJpdCByZWFkcyBlYWNoKS4gVGhpcyBkaXNjYXJkcyBhbGwgdGltZXN0YW1wIGRhdGEgb24gdGhlIHBvcnQsXFxuKyAqIHNvIGl0IG11c3Qgb25seSBiZSB1c2VkIGZvciBhIGZ1bGwgcmVzZXQ7IGNhbGxlcnMgdGhhdCBtdXN0IHByZXNlcnZlXFxuKyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS5cXG4rICpcXG4rICogRHVlIHRvIGludGVyYWN0aW9ucyB3aXRoIGFuIGludGVybmFsIEhXIGNvdW50ZXIgZm9yIHRoZSBudW1iZXIgb2ZcXG4rICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGVcXG4rICogaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKSBwcm9jZWR1cmUuIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGNvdW50ZXJcXG4rICogbWF5IGJlY29tZSBvdXQgb2Ygc3luYyBhbmQgcHJldmVudCBuZXcgdGltZXN0YW1wIGludGVycnVwdHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgdG8gcmVhZCB0aGUgUEhZLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3KVxcbitzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IHBvcnQ7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXHR1OCBpZHg7XFxuIFxcbi1cXHRmb3IgKHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgaHctXFx1MDAzZXB0cC5udW1fbHBvcnRzOyBwb3J0KyspIHtcXG4tXFx0XFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfTCxcXG4tXFx0XFx0XFx0XFx0XFx0IDApO1xcbi1cXHRcXHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19VLFxcbi1cXHRcXHRcXHRcXHRcXHQgMCk7XFxuK1xcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgSU5ERVhfUEVSX1BPUlQ7IGlkeCsrKSB7XFxuK1xcdFxcdGVyciA9IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMTE1LDEwICsyMTA2LDYgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX09GRlNFVF9SRUFEWSwgMCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcbiBcXHRlcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfUlhfT0ZGU0VUX1JFQURZLCAwKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjEzMyw5ICsyMTIwLDExIEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XFxuICAqIEBwb3J0OiB0aGUgUEhZIHBvcnQgdG8gc3RhcnRcXG4gICpcXG4tICogU3RhcnQgdGhlIGNsb2NrIG9mIGEgUEhZIHBvcnQuIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG9cXG4tICogcmUtY2FsaWJyYXRlIFR4IGFuZCBSeCB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpc1xcbi0gKiBpbml0aWFsaXplZCBvciB3aGVuIGxpbmsgc3BlZWQgY2hhbmdlcy5cXG4rICogUGVyZm9ybSBhIFBIWSBzb2Z0IHJlc2V0IGFuZCB0aGVuIHN0YXJ0IHRoZSBjbG9jayBmb3IgdGhlIFBIWSBwb3J0LlxcbisgKlxcbisgKiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnhcXG4rICogdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMgaW5pdGlhbGl6ZWQgb3Igd2hlbiBsaW5rXFxuKyAqIHNwZWVkIGNoYW5nZXMuXFxuICAqXFxuICAqIFJldHVybjpcXG4gICogKiAlMCAgICAgLSBzdWNjZXNzXFxuQEAgLTIxNTEsNiArMjE0MCwxMCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXFxuIFxcbiBcXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcXG4gXFxuK1xcdGVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuIFxcdGVyciA9IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1NmcoaHcsIHBvcnQsIGZhbHNlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjI5NCw2ICsyMjg3LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcXG4gICpcXG4gICogVHJpZ2dlciBhIHNvZnQgcmVzZXQgb2YgdGhlIEVUSDU2RyBQSFkgYnkgdG9nZ2xpbmcgdGhlIHNvZnQgcmVzZXRcXG4gICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6XFxuKyAqICAgMC4gUmVhZGluZyBldmVyeSB0aW1lc3RhbXAgbWVtb3J5IHJlZ2lzdGVyIHRvIGNsZWFyIGl0cyB2YWxpZCBiaXRcXG4gICogICAxLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXRcXG4gICogICAyLiBBc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQgYml0XFxuICAqICAgMy4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0IGFnYWluXFxuQEAgLTIzMDIsNiArMjI5NiwxMiBAQCBpbnQgaWNlX3B0cF9yZWFkX3R4X2h3dHN0YW1wX3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHUzMiAqdHNfc3RhdHVzKVxcbiAgKiB0byBzZXR0bGUuIFRoaXMgcHJvdmlkZXMgYSBjb250cm9sbGVkIHdheSB0byByZWluaXRpYWxpemUgdGhlIFBIWVxcbiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LlxcbiAgKlxcbisgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGVcXG4rICogUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTLCByZWFkIGV2ZXJ5IHRpbWVzdGFtcCBpbmRleCBwcmlvciB0byBwZXJmb3JtaW5nXFxuKyAqIHRoZSBzb2Z0IHJlc2V0LiBUaGUgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIHJlYWRzIGVuc3VyZSB0aGF0IHRoZSByZWdpb25cXG4rICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltZXN0YW1wXFxuKyAqIGNvdW50ZXIgaXMgcmVzZXQgdG8gemVyby5cXG4rICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIHdoZW5cXG4gICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci5cXG4gICovXFxuQEAgLTIzMTAsNiArMjMxMCwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXFxuIFxcdHUzMiBnbG9iYWxfdmFsO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0ZXJyID0gaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhodywgcG9ydCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBjbGVhciBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMgZm9yIHBvcnQgJWQsIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBwb3J0LCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsIFxcdTAwMjZnbG9iYWxfdmFsKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHJlYWQgUEhZX1JFR19HTE9CQUwgZm9yIHBvcnQgJWQsIGVyciAlZFxcXFxuXFxcIixcXG5AQCAtNTgwMSw4ICs1ODA4LDkgQEAgdm9pZCBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gXFx0XFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZTgyeChodyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1Olxcbi1cXHRcXHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpO1xcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0LyogRTgyNSBoYXJkd2FyZSBtdXN0IG9ubHkgcmVzZXQgdGltZXN0YW1wIG1lbW9yeSBhcyBwYXJ0IG9mXFxuK1xcdFxcdCAqIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZS5cXG4rXFx0XFx0ICovXFxuIFxcdGNhc2UgSUNFX01BQ19FODEwOlxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjAzOjE2LjA1NzM3ODkxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzg1OTY4NjY5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4NzI1ZjAyN2IxMTBjMWU4MjY0N2M1ZWE0ODAzYWE2YzVlM2FmYTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMTowMzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbmluZGV4IDJkYzM2MjlkNmQwZjYuLmQxNjQzYmY4YTFiNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbkBAIC02NiwxOCArNjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZhZGFwdGVyLVx1MDAzZXJlZmNvdW50LCAxKTtcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCk7XG4gXG4gXHRyZXR1cm4gYWRhcHRlcjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWNlX2FkYXB0ZXJfZnJlZShzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXIpXG4ge1xuLVx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSk7XG4rXHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCkpO1xuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2spOyBpKyspXG4gXHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2YWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuIFxuIFx0a2ZyZWUoYWRhcHRlcik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbmluZGV4IDRmNjk1ZjMyZGEzZDguLjM5OTIzZGVkZDUzNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbkBAIC0xOSwxMyArMTksMTMgQEAgc3RydWN0IGljZV9wZjtcbiAgKlxuICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0c1xuICAqXG4tICogQHBvcnRzOiBsaXN0IG9mIHBvcnRzXG4rICogQGxpc3Q6IGxpc3Qgb2YgcG9ydHNcbiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3RcbiAgKi9cbiBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzO1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0LyogVG8gc3luY2hyb25pemUgdGhlIHBvcnRzIGxpc3Qgb3BlcmF0aW9ucyAqL1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4rXHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5kMTI5NTIxNzFhOTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzI0OCw3ICszMjQ4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0aWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7XG4gXHRpY2VfZmx1c2goaHcpO1xuIFxuLVx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xuK1x0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xuIFx0XHQvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LFxuIFx0XHQgKiByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGl0IGFnYWluLlxuIFx0XHQgKi9cbkBAIC02NzQ1LDcgKzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcbiBcdFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXHUwMDNlbmV0ZGV2KTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XG4gXHR9XG4gXG4gXHQvKiBQZXJmb3JtIGFuIGluaXRpYWwgcmVhZCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgbm93IHRvXG5AQCAtNzI3Myw3ICs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXG4gXHRpZiAodnNpLVx1MDAzZW5ldGRldikge1xuIFx0XHR2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpO1xuLVx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS1cdTAwM2ViYWNrLCBmYWxzZSk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRpZl90eF9kaXNhYmxlKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0fVxuQEAgLTc3OTQsNiArNzc5MiwxNCBAQCBzdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXG4gXHRpY2VfdXBkYXRlX3BmX25ldGRldl9saW5rKHBmKTtcbiBcbitcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZWh3LnBvcnRfaW5mbykge1xuK1x0XHRib29sIGxpbmtfdXA7XG4rXG4rXHRcdGxpbmtfdXAgPSAhIShwZi1cdTAwM2Vody5wb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2XG4rXHRcdFx0ICAgICBJQ0VfQVFfTElOS19VUCk7XG4rXHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xuK1x0fVxuK1xuIFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXG4gXHRlcnIgPSBpY2Vfc2VuZF92ZXJzaW9uKHBmKTtcbiBcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uYTVlZmIwYTk1OTQxZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgKzEsOCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpY2UuaFwiXG4gI2luY2x1ZGUgXCJpY2VfbGliLmhcIlxuICNpbmNsdWRlIFwiaWNlX3RyYWNlLmhcIlxuQEAgLTM2Miw5ICszNjQsMTIgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApXG4gc3RhdGljIGJvb2xcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIHtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cbitcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG4rXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnR4LVx1MDAzZWxvY2spO1xuIFxuLVx0cmV0dXJuIHR4LVx1MDAzZWluaXQgXHUwMDI2XHUwMDI2ICF0eC1cdTAwM2VjYWxpYnJhdGluZztcbitcdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmcgXHUwMDI2XHUwMDI2IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4gfVxuIFxuIC8qKlxuQEAgLTU2MSw3ICs1NjYsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHR1NjQgdHN0YW1wX3JlYWR5O1xuLVx0Ym9vbCBsaW5rX3VwO1xuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcbiBcdGh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXG4tXHRpZiAoIXR4LVx1MDAzZWluaXQpXG4rXHRpZiAoIXR4LVx1MDAzZWluaXQgfHwgYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXG5AQCAtNTc5LDE0ICs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqL1xuLVx0bGlua191cCA9IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4tXG4gXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiBcdFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4gXHRcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cdTAwM2VvZmZzZXQ7XG4gXHRcdHU2NCByYXdfdHN0YW1wID0gMCwgdHN0YW1wO1xuLVx0XHRib29sIGRyb3BfdHMgPSAhbGlua191cDtcbitcdFx0Ym9vbCBkcm9wX3RzID0gZmFsc2U7XG4gXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRcdC8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqL1xuQEAgLTYxOSw2ICs2MjAsMTkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFkcm9wX3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKiB2ZXJpZnkgcmVhZHkgYml0IGNsZWFyZWQgKi9cbitcdFx0aWYgKHR4LVx1MDAzZWhhc19yZWFkeV9iaXRtYXApIHtcbitcdFx0XHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuK1x0XHRcdGlmIChlcnIgfHwgdHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKHBoeV9pZHgpKSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSkpXG4rXHRcdFx0XHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwiUEhZIHBvcnQgJXUgZmFpbGVkIHRvIGNsZWFyIHJlYWR5IGJpdCBmb3IgaWR4ICV1XFxuXCIsXG4rXHRcdFx0XHRcdFx0cHRwX3BvcnQtXHUwMDNlcG9ydF9udW0sIHBoeV9pZHgpO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbiBcdFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cdTAwM2V0c3RhbXBzW2lkeF0uc2tiLCBpZHgpO1xuIFxuIFx0XHQvKiBGb3IgUEhZcyB3aGljaCBkb24ndCBpbXBsZW1lbnQgYSBwcm9wZXIgdGltZXN0YW1wIHJlYWR5XG5AQCAtNjczLDIwICs2ODcsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZi1cdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCArPSB0c3RhbXBfZ29vZDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXG4re1xuK1x0d2FrZV91cF92YXIocmVmKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuIFxuLVx0XHRpZiAoIXR4IHx8ICF0eC1cdTAwM2Vpbml0KVxuK1x0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbiBcdFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC03MjUsNiArNzUyLDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWRcbitpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApO1xuK1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbitcdHU2NCB0c3RhbXBfcmVhZHk7XG4rXHRib29sIHBlbmRpbmc7XG4rXHR1OCBpZHg7XG4rXG4rXHRpZiAoaHctXHUwMDNlcmVzZXRfb25nb2luZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdHBlbmRpbmcgPSBmYWxzZTtcbitcdFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSB7XG4rXHRcdFx0aWYgKCEodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKGlkeCArIHR4LVx1MDAzZW9mZnNldCkpKVxuK1x0XHRcdFx0cGVuZGluZyA9IHRydWU7XG4rXHRcdH1cbitcdFx0aWYgKCFwZW5kaW5nKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuK1xuK1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcXG5cIixcbitcdFx0dHgtXHUwMDNlYmxvY2spO1xuK31cbitcbiAvKipcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC03NDEsNiArNzk5LDggQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRpbnQgZXJyO1xuIFx0dTggaWR4O1xuIFxuK1x0aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHBmLCB0eCk7XG4rXG4gXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcIkZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXG5cIixcbkBAIC03NzksMTIgKzgzOSwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXG4gICpcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXG4tICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS5cbi0gKlxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxuLSAqIHRpbWUgcmVxdWVzdC5cbisgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcbisgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZVxuKyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGlua1xuKyAqIHdlbnQgZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbkBAIC04MDgsOCArODY2LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFx1MDAyNnBvcnQtXHUwMDNldHgpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTk5NCwxMyArMTA2MCw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwZi1cdTAwM2VwdHAud29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMCkpO1xuIFx0fVxuLVxuLVx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXG4tXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxuLVx0ICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpblxuLVx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4tXHQgKi9cbi1cdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTEzMyw2ICsxMTkyLDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHRpbnQgdHhfZXJyO1xuQEAgLTExNTUsMTIgKzEyMTUsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4gXHRcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XG4tXHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cbitcdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cbitcdFx0ICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldFxuK1x0XHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcbitcdFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cbitcdFx0ICovXG4rXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdFx0XCJQVFAgb2Zmc2V0IG5vdCB5ZXQgdmFsaWQgZm9yIHBvcnQgJXUgKHR4X2Vycj0lZCByeF9lcnI9JWQpXFxuXCIsXG4rXHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2cG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4rXG4rXHQvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbitcdHBvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXG4rXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLFxuK1x0XHRcIlBUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcblwiLFxuK1x0XHRwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTI0NiwxMCArMTMyMiwxMyBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdC8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi9cbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgubG9jaywgZmxhZ3MpO1xuLVx0XHRwdHBfcG9ydC1cdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbitcdFx0LyogRG8gbm90IGNsZWFyIGNhbGlicmF0aW5nIGZsYWcgaGVyZS4gVHggdGltZXN0YW1wcyByZW1haW5cbitcdFx0ICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkXG4rXHRcdCAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC5cbitcdFx0ICogQ2xlYXJpbmcgaXQgaGVyZSB3b3VsZCBhbGxvdyBUeCB0aW1lc3RhbXBzIHRvIGJlIHJlcG9ydGVkXG4rXHRcdCAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmdcbitcdFx0ICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4rXHRcdCAqL1xuIFxuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlciwgXHUwMDI2cHRwX3BvcnQtXHUwMDNlb3Zfd29yayxcbiBcdFx0XHRcdFx0ICAgMCk7XG5AQCAtMTI4MCwxNyArMTM1OSwyMyBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFxuLVx0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwdHBfcG9ydCA9IFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0O1xuIFxuK1x0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwdHBfcG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi9cbiBcdHB0cF9wb3J0LVx1MDAzZWxpbmtfdXAgPSBsaW5rdXA7XG4gXG4rXHRpZiAocGYtXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXG4rXHRcdGdvdG8gZXhpdF9rcmVmX3B1dDtcbitcbiBcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXG4gXHRpZiAocGYtXHUwMDNlaHcucmVzZXRfb25nb2luZylcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIGV4aXRfa3JlZl9wdXQ7XG4rXG4rXHRpZiAoIWxpbmt1cClcbitcdFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgpO1xuIFxuIFx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1IFx1MDAyNlx1MDAyNlxuIFx0ICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKSkge1xuQEAgLTEzMzMsMTcgKzE0MTgsMjAgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcbiBcdGNhc2UgSUNFX01BQ19FODEwOlxuIFx0Y2FzZSBJQ0VfTUFDX0U4MzA6XG4gXHRcdC8qIERvIG5vdCByZWNvbmZpZ3VyZSBFODEwIG9yIEU4MzAgUEhZICovXG4tXHRcdHJldHVybjtcbitcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUM6XG4gXHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7XG4tXHRcdHJldHVybjtcbitcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbiBcdFx0aWYgKGxpbmt1cClcbiBcdFx0XHRpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocHRwX3BvcnQpO1xuLVx0XHRyZXR1cm47XG4rXHRcdGdvdG8gZXhpdF9rcmVmX3B1dDtcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcIiVzOiBVbmtub3duIFBIWSB0eXBlXFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbitcbitleGl0X2tyZWZfcHV0OlxuK1x0a3JlZl9wdXQoXHUwMDI2cHRwX3BvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuIH1cbiBcbiAvKipcbkBAIC0xNDI0LDE2ICsxNTEyLDIxIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfcGh5X3RpbWVzdGFtcGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiAgKi9cbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRpZiAocG9ydC1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwb3J0KTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTI3LDggKzIwMjAsOSBAQCBpY2VfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiBcdC8qIFJlZW5hYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cbiBcdGljZV9wdHBfZW5hYmxlX2FsbF9wZXJvdXQocGYpO1xuIFxuLVx0LyogUmVjYWxpYnJhdGUgYW5kIHJlLWVuYWJsZSB0aW1lc3RhbXAgYmxvY2tzIGZvciBFODIyL0U4MjMgKi9cbi1cdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXG4rXHQvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMy9FODI1LUMgKi9cbitcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMgfHxcbitcdCAgICBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkocGYpO1xuIGV4aXQ6XG4gXHRpZiAoZXJyKSB7XG5AQCAtMjYzOCwxMSArMjczMiwxMyBAQCBzOCBpY2VfcHRwX3JlcXVlc3RfdHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgc2tiIGFuZCB0aGUgc3RhcnQgdGltZSB0byBhbGxvdyBkaXNjYXJkaW5nIG9sZFxuIFx0XHQgKiByZXF1ZXN0cy5cbiBcdFx0ICovXG4tXHRcdHNldF9iaXQoaWR4LCB0eC1cdTAwM2Vpbl91c2UpO1xuLVx0XHRjbGVhcl9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSk7XG4gXHRcdHR4LVx1MDAzZXRzdGFtcHNbaWR4XS5zdGFydCA9IGppZmZpZXM7XG4gXHRcdHR4LVx1MDAzZXRzdGFtcHNbaWR4XS5za2IgPSBza2JfZ2V0KHNrYik7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUztcbitcdFx0Y2xlYXJfYml0KGlkeCwgdHgtXHUwMDNlc3RhbGUpO1xuK1x0XHQvKiBFbnN1cmUgaW5kZXggaXMgc2V0dXAgYmVmb3JlIG1hcmtpbmcgaXQgYXMgdXNlZCAqL1xuK1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbitcdFx0c2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSk7XG4gXHRcdGljZV90cmFjZSh0eF90c3RhbXBfcmVxdWVzdCwgc2tiLCBpZHgpO1xuIFx0fVxuIFxuQEAgLTI2NzgsNzQgKzI3NzQsNTYgQEAgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbitzdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIGJvb2wgaW5faXJxKVxuIHtcbi1cdGJvb2wgbW9yZV90aW1lc3RhbXBzO1xuK1x0REVDTEFSRV9CSVRNQVAodHN0YW1wcywgSU5ERVhfUEVSX1BPUlRfTUFYKSA9IHt9O1xuIFxuIFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnR4LVx1MDAzZWxvY2spIHtcbiBcdFx0aWYgKCF0eC1cdTAwM2Vpbml0KVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0bW9yZV90aW1lc3RhbXBzID0gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4tXHR9XG4rXHRcdGlmIChpbl9pcnEpIHtcbitcdFx0XHRpZiAoIWljZV9wdHBfaXNfdHhfdHJhY2tlcl91cCh0eCkpXG4rXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gbW9yZV90aW1lc3RhbXBzO1xuK1x0XHRcdHJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlc3RhbGUsIHR4LVx1MDAzZWxlbik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0dXJuICFiaXRtYXBfZW1wdHkodHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pO1xuK1x0XHR9XG4rXHR9XG4gfVxuIFxuLXN0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZilcbitzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbitcdGJvb2wgaGF2ZV90c3RhbXBzID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spIHtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLFxuLVx0XHRcdFx0ICAgIGxpc3Rfbm9kZSkge1xuLVx0XHRcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFx1MDAyNnBvcnQtXHUwMDNldHg7XG4tXG4tXHRcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSlcbi1cdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBvcnQtXHUwMDNldHgsIGluX2lycSkpIHtcbitcdFx0XHRoYXZlX3RzdGFtcHMgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBoYXZlX3RzdGFtcHM7XG4gfVxuIFxuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4rYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2Vodztcbi1cdGludCByZXQ7XG4tXG4tXHQvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi9cbiBcdHN3aXRjaCAocGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKSB7XG4gXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfU0VMRjpcbi1cdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCwgaW5faXJxKTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOlxuLVx0XHRpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYsIGluX2lycSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRXQVJOX09OQ0UoMSwgXCJVbmV4cGVjdGVkIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbW9kZSAldVxcblwiLFxuIFx0XHRcdCAgcGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHQvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi9cbi1cdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJVbmFibGUgdG8gcmVhZCBQSFkgVHggdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXFxuXCIsXG4tXHRcdFx0cmV0KTtcbi1cdFx0LyogU3RvcCB0cmlnZ2VyaW5nIElSUXMgaWYgd2UncmUgdW5hYmxlIHRvIHJlYWQgUEhZICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cbi1cdC8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzXG4tXHQgKiBhdmFpbGFibGUsIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRpbmcgdGltZXN0YW1wcywgYW5kIGEgbmVnYXRpdmVcbi1cdCAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLlxuLVx0ICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzZSAwO1xuIH1cbiBcbiAvKipcbkBAIC0yNzk5LDcgKzI4NzcsNyBAQCBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0LyogRTgzMCBjYW4gcmVhZCB0aW1lc3RhbXBzIGluIHRoZSB0b3AgaGFsZiB1c2luZyByZDMyKCkgKi9cbiBcdFx0aWNlX3B0cF9wcm9jZXNzX3RzKHBmKTtcbiBcbi1cdFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xuK1x0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XG4gXHRcdFx0LyogUHJvY2VzcyBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLiBJZiB0aGVyZVxuIFx0XHRcdCAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi5cbiBcdFx0XHQgKi9cbkBAIC0yODM5LDkgKzI5MTcsMTMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9tYXliZV90cmlnZ2VyX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwiUFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwiLFxuLVx0XHRcdHJldCk7XG4tXHR9IGVsc2UgaWYgKHJldCkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJVbmFibGUgdG8gcmVhZCBQSFkgVHggdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdC8qIERvbid0IHRyaWdnZXIgYW4gSVJRIGlmIHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHRoZSBQSFkgKi9cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHJldCBcdTAwM2UgMCB8fCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgZmFsc2UpKSB7XG4gXHRcdGRldl9kYmcoZGV2LCBcIlBUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXG5cIik7XG4gXG4gXHRcdHdyMzIoaHcsIFBGSU5UX09JQ1IsIFBGSU5UX09JQ1JfVFNZTl9UWF9NKTtcbkBAIC0yODkwLDE0ICsyOTcyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxuIFx0XHRcdFx0XHRlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiBcdFx0c3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xuIFxuK1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRcdGlmICghaWNlX2lzX3ByaW1hcnkoXHUwMDI2cGVlcl9wZi1cdTAwM2VodykpIHtcbiBcdFx0XHRpZiAocmVidWlsZCkge1xuIFx0XHRcdFx0LyogVE9ETzogV2hlbiBpbXBsZW1lbnRpbmcgcmVidWlsZD10cnVlOlxuQEAgLTI5MDksNyArMjk5MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcbiBcdFx0XHRcdGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQocGVlcl9wZiwgcmVzZXRfdHlwZSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjkzNiwxMSArMzAyNCwxNyBAQCB2b2lkIGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFx0aWYgKHJlc2V0X3R5cGUgPT0gSUNFX1JFU0VUX1BGUilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcbitcdCAqIFR4IHRyYWNrZXIuIElmIG92X3dvcmsgaXMgcnVubmluZyBkdXJpbmcgcmVzZXQsIGl0IG1heSBpc3N1ZVxuK1x0ICogc2lkZWJhbmQgcXVldWUgY29tbWFuZHMgdGhhdCB3aWxsIGZhaWwgb3IgdGltZW91dCwgYW5kIG1heVxuK1x0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuK1x0ICovXG4rXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDKVxuK1x0XHRrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwdHAtXHUwMDNlcG9ydC5vdl93b3JrKTtcbitcbiBcdGlmIChpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikgXHUwMDI2XHUwMDI2IGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxuIFx0XHRpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMocGYsIGZhbHNlLCByZXNldF90eXBlKTtcbiBcbi1cdGljZV9wdHBfcmVsZWFzZV90eF90cmFja2VyKHBmLCBcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCk7XG4tXG4gXHQvKiBEaXNhYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cbiBcdGljZV9wdHBfZGlzYWJsZV9hbGxfcGVyb3V0KHBmKTtcbiBcbkBAIC0zMDg2LDExICszMTgwLDExIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0a3JlZl9pbml0KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZik7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsXG4tXHRcdCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4rXHRsaXN0X2FkZF9yY3UoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlLCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxuIFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24ndCBleHBvc2UgdHgtY2xrXG5AQCAtMzExMywxMiArMzIwNywzMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcHRwICpwdHAgPSBcdTAwMjZwZi1cdTAwM2VwdHA7XG4rXHRzdHJ1Y3Qga3JlZiAqcmVmO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0fVxuK1x0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfVU5LTk9XTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogVGhlIFBGIGNhbm5vdCBiZSByZW1vdmVkIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHJlbWFpbmluZ1xuK1x0ICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsXG4rXHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XG4rXHQgKiByZWZlcmVuY2UgdGhpcyBQRiBob2xkcyBvbiB0aGUgcG9ydC4gT25jZSBkb25lLCB3YWl0IHVudGlsIGFsbFxuK1x0ICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG9cbitcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXG4rXHQgKiBkZXJlZmVyZW5jZSB0aGUgcG9ydCBhcmUgZmluaXNoZWQuXG4rXHQgKi9cbitcbitcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0bGlzdF9kZWxfcmN1KFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1xuK1x0cmVmID0gXHUwMDI2cHRwLVx1MDAzZXBvcnQucmVmO1xuK1x0a3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1xuK1x0ZGV2X1dBUk5fT05DRShpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0ICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLFxuK1x0XHQgICAgICBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwb3J0IHJlZmVyZW5jZXMgdG8gcmVsZWFzZS4gQ29udGludWluZyB0byB1bmxvYWQgYW55d2F5cy5cIik7XG4rXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4gLyoqXG5AQCAtMzIxMCw5ICszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgdGhyZWFkc1xuKyAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSB0aGUgUFRQIGt3b3JrZXJcbiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4gICogQHB0cDogUEYgUFRQIHN0cnVjdHVyZVxuKyAqXG4rICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxuKyAqIHBlcmlvZGljIHdvcmsgaXMgbm90IHF1ZXVlZCBoZXJlOyB0aGUgY2FsbGVyIHN0YXJ0cyBpdCBvbmNlIHRoZSBQVFBcbisgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLlxuICAqL1xuIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4ge1xuQEAgLTMyMzEsOSArMzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4gXG4gXHRwdHAtXHUwMDNla3dvcmtlciA9IGt3b3JrZXI7XG4gXG4tXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIGdvaW5nICovXG4tXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMzNTUsNiArMzQ3MCwyMiBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2NsZWFuX3BmO1xuIFxuK1x0LyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwXG4rXHQgKiAoZS5nLiBhZnRlciBQWEUgYm9vdCkgd2l0aCBubyBsaW5rLWNoYW5nZSBlZGdlIHRvIGNhdGNoIGl0IGxhdGVyLlxuK1x0ICovXG4rXHRpZiAocGYtXHUwMDNlaHcucG9ydF9pbmZvKVxuK1x0XHRwdHAtXHUwMDNlcG9ydC5saW5rX3VwID1cbitcdFx0XHQhIShwZi1cdTAwM2Vody5wb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2XG4rXHRcdFx0SUNFX0FRX0xJTktfVVApO1xuK1xuK1x0LyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uXG4rXHQgKiBpdCBpbiB0aGUgRTgyeCByZXN0YXJ0IHBhdGguIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBsaW5rIGV2ZW50c1xuK1x0ICogZnJvbSByZWFjaGluZyBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoKSB3aGlsZSBrd29ya2VyIGlzIHN0aWxsIE5VTExcbitcdCAqL1xuK1x0ZXJyID0gaWNlX3B0cF9pbml0X3dvcmsocGYsIHB0cCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9jbGVhbl9wZjtcbitcbiBcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXN0YW1waW5nIGJsb2NrICovXG4gXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xuIFxuQEAgLTMzNjMsOSArMzQ5NCwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHB0cC1cdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XG4gXG4tXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2V4aXQ7XG4rXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyXG4rXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXG4rXHQgKi9cbitcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC1cdTAwM2Vrd29ya2VyLCBcdTAwMjZwdHAtXHUwMDNld29yaywgMCk7XG4gXG4gXHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxuXCIpO1xuIFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5pbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuQEAgLTUsNiArNSw4IEBAXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaWNlX3B0cF9ody5oXCJcbkBAIC0xMzAsNiArMTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFx0XHQxNlxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcdFx0XHQ2NFxuIFxuKy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqL1xuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxuK1xuIC8qKlxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcbiAgKlxuQEAgLTEzOCw2ICsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cbiAgKlxuICAqIEBsaXN0X25vZGU6IGxpc3QgbWVtYmVyIHN0cnVjdHVyZVxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcbiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0XG4gICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWRcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXG5AQCAtMTQ5LDYgKzE1NSw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcbiAgKi9cbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlO1xuK1x0c3RydWN0IGtyZWYgcmVmO1xuIFx0c3RydWN0IGljZV9wdHBfdHggdHg7XG4gXHRzdHJ1Y3Qga3RocmVhZF9kZWxheWVkX3dvcmsgb3Zfd29yaztcbiBcdHN0cnVjdCBtdXRleCBwc19sb2NrOyAvKiBwcm90ZWN0cyBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlICovXG5AQCAtMzEyLDcgKzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7XG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcbiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpO1xuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xuK2Jvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKTtcbiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuIFxuQEAgLTM2MCw3ICszNjcsOCBAQCBzdGF0aWMgaW5saW5lIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4rc3RhdGljIGlubGluZSBib29sXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbmluZGV4IDNhNDFjNzExZTc1MWIuLjY0ZTE4ZmUxMTc2YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcbiBcdHJldHVybiBpY2VfcmVhZF9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxuLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGJlIHJlYWRcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXG4tICogQHZhbDogUG9pbnRlciB0byB0aGUgdmFsdWUgdG8gcmVhZCAob3V0IHBhcmFtKVxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJTAgICAgICAtIHN1Y2Nlc3Ncbi0gKiAqICVFSU5WQUwgLSBpbnZhbGlkIHBvcnQgbnVtYmVyIG9yIHJlc291cmNlIHR5cGVcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXG4tICovXG4tc3RhdGljIGludCBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LFxuLVx0XHRcdFx0ICAgICB1MzIgdmFsKVxuLXtcbi1cdHJldHVybiBpY2Vfd3JpdGVfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApO1xuLX1cbi1cbiAvKipcbiAgKiBpY2Vfd3JpdGVfcXVhZF9wdHBfcmVnX2V0aDU2ZyAtIFdyaXRlIGEgUEhZIHF1YWQgcmVnaXN0ZXJcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuQEAgLTExMzksOCArMTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy5cbiAgKlxuICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nXG4tICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZVxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXG4rICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHBlcmZvcm0gYSBQSFkgc29mdFxuKyAqIHJlc2V0IHZpYSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYW4gaWR4IHdob3NlIGJpdCBpcyBzZXQgYWNjb3JkaW5nIHRvXG4gICogaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KCkuXG5AQCAtMTE1MiwyNCArMTEzNCwxNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXG4gc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiB7XG4gXHR1NjQgdW51c2VkX3RzdGFtcDtcbi1cdHUxNiBsb19hZGRyO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzXG4tXHQgKiBjbGVhcmVkLlxuK1x0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XG4rXHQgKiBjbGVhcnMgdGhlIGVudHJ5J3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KVxuK1x0ICogdHNfbWVtb3J5X3N0YXR1cyBiaXQuXG4gXHQgKi9cbiBcdGVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsIFx1MDAyNnVudXNlZF90c3RhbXApO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byByZWFkIHRoZSBQSFkgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxcblwiLFxuIFx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0fVxuLVxuLVx0bG9fYWRkciA9ICh1MTYpUEhZX1RTVEFNUF9MKGlkeCk7XG4tXG4tXHRlcnIgPSBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKGh3LCBwb3J0LCBsb19hZGRyLCAwKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gY2xlYXIgbG93IFBUUCB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxuXCIsXG4tXHRcdFx0ICBwb3J0LCBpZHgsIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG5AQCAtMTE3NywxOSArMTE1MSwzNiBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcgLSBDbGVhciBhbGwgdGltZXN0YW1wcyBmcm9tIHRoZSBwb3J0IGJsb2NrXG4rICogaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyAtIFJlc2V0IG9uZSBwb3J0J3MgVHggdGltZXN0YW1wIG1lbW9yeVxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4rICogQHBvcnQ6IHBvcnQgbnVtYmVyIHRvIGNsZWFyXG4rICpcbisgKiBGdWxseSByZXNldCBhIHNpbmdsZSBQSFkgcG9ydCdzIFR4IHRpbWVzdGFtcCBtZW1vcnkuIFBlciB0aGUgUEhZIHNwZWMsIHRoZVxuKyAqIG9ubHkgd2F5IHRvIGNsZWFyIGEgdGltZXN0YW1wIHZhbGlkIGJpdCAoYW5kIGl0cyByZWFkLW9ubHkgdHNfbWVtb3J5X3N0YXR1c1xuKyAqIGJpdCkgaXMgdG8gcmVhZCB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiwgc28gcmVhZCBldmVyeSBlbnRyeSBmb3IgdGhlXG4rICogcG9ydCAodHdvIDMyLWJpdCByZWFkcyBlYWNoKS4gVGhpcyBkaXNjYXJkcyBhbGwgdGltZXN0YW1wIGRhdGEgb24gdGhlIHBvcnQsXG4rICogc28gaXQgbXVzdCBvbmx5IGJlIHVzZWQgZm9yIGEgZnVsbCByZXNldDsgY2FsbGVycyB0aGF0IG11c3QgcHJlc2VydmVcbisgKiBpbi1mbGlnaHQgdGltZXN0YW1wcyBjbGVhciBpbmRpdmlkdWFsIGluZGljZXMgdmlhIGljZV9jbGVhcl9waHlfdHN0YW1wKCkuXG4rICpcbisgKiBEdWUgdG8gaW50ZXJhY3Rpb25zIHdpdGggYW4gaW50ZXJuYWwgSFcgY291bnRlciBmb3IgdGhlIG51bWJlciBvZlxuKyAqIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMsIHRoaXMgKm11c3QqIG9ubHkgYmUgY2FsbGVkIGFzIHBhcnQgb2YgdGhlXG4rICogaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKSBwcm9jZWR1cmUuIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGNvdW50ZXJcbisgKiBtYXkgYmVjb21lIG91dCBvZiBzeW5jIGFuZCBwcmV2ZW50IG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0cy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgdG8gcmVhZCB0aGUgUEhZLlxuICAqL1xuLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodylcbitzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4ge1xuLVx0dW5zaWduZWQgaW50IHBvcnQ7XG4rXHRpbnQgZXJyID0gMDtcbitcdHU4IGlkeDtcbiBcbi1cdGZvciAocG9ydCA9IDA7IHBvcnQgXHUwMDNjIGh3LVx1MDAzZXB0cC5udW1fbHBvcnRzOyBwb3J0KyspIHtcbi1cdFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfTCxcbi1cdFx0XHRcdFx0IDApO1xuLVx0XHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19VLFxuLVx0XHRcdFx0XHQgMCk7XG4rXHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgSU5ERVhfUEVSX1BPUlQ7IGlkeCsrKSB7XG4rXHRcdGVyciA9IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMTUsMTAgKzIxMDYsNiBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfT0ZGU0VUX1JFQURZLCAwKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHRlcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfUlhfT0ZGU0VUX1JFQURZLCAwKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjEzMyw5ICsyMTIwLDExIEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0XG4gICpcbi0gKiBTdGFydCB0aGUgY2xvY2sgb2YgYSBQSFkgcG9ydC4gVGhpcyBtdXN0IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgZmxvdyB0b1xuLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXNcbi0gKiBpbml0aWFsaXplZCBvciB3aGVuIGxpbmsgc3BlZWQgY2hhbmdlcy5cbisgKiBQZXJmb3JtIGEgUEhZIHNvZnQgcmVzZXQgYW5kIHRoZW4gc3RhcnQgdGhlIGNsb2NrIGZvciB0aGUgUEhZIHBvcnQuXG4rICpcbisgKiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnhcbisgKiB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpcyBpbml0aWFsaXplZCBvciB3aGVuIGxpbmtcbisgKiBzcGVlZCBjaGFuZ2VzLlxuICAqXG4gICogUmV0dXJuOlxuICAqICogJTAgICAgIC0gc3VjY2Vzc1xuQEAgLTIxNTEsNiArMjE0MCwxMCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXG4gXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcbiBcbitcdGVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKGh3LCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIyOTQsNiArMjI4Nyw3IEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXG4gICpcbiAgKiBUcmlnZ2VyIGEgc29mdCByZXNldCBvZiB0aGUgRVRINTZHIFBIWSBieSB0b2dnbGluZyB0aGUgc29mdCByZXNldFxuICAqIGJpdCBpbiB0aGUgUEhZIGdsb2JhbCByZWdpc3Rlci4gVGhlIHJlc2V0IHNlcXVlbmNlIGNvbnNpc3RzIG9mOlxuKyAqICAgMC4gUmVhZGluZyBldmVyeSB0aW1lc3RhbXAgbWVtb3J5IHJlZ2lzdGVyIHRvIGNsZWFyIGl0cyB2YWxpZCBiaXRcbiAgKiAgIDEuIENsZWFyaW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMy4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0IGFnYWluXG5AQCAtMjMwMiw2ICsyMjk2LDEyIEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXG4gICogdG8gc2V0dGxlLiBUaGlzIHByb3ZpZGVzIGEgY29udHJvbGxlZCB3YXkgdG8gcmVpbml0aWFsaXplIHRoZSBQSFlcbiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LlxuICAqXG4rICogVG8gZW5zdXJlIHRoYXQgdGhlIGludGVybmFsIGNvdW50ZXIgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgdGhlXG4rICogUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTLCByZWFkIGV2ZXJ5IHRpbWVzdGFtcCBpbmRleCBwcmlvciB0byBwZXJmb3JtaW5nXG4rICogdGhlIHNvZnQgcmVzZXQuIFRoZSBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMgcmVhZHMgZW5zdXJlIHRoYXQgdGhlIHJlZ2lvblxuKyAqIGlzIGNsZWFyZWQsIHdoaWxlIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZSBlbnN1cmVzIHRoYXQgdGhlIHRpbWVzdGFtcFxuKyAqIGNvdW50ZXIgaXMgcmVzZXQgdG8gemVyby5cbisgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB3aGVuXG4gICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci5cbiAgKi9cbkBAIC0yMzEwLDYgKzIzMTAsMTMgQEAgaW50IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxuIFx0dTMyIGdsb2JhbF92YWw7XG4gXHRpbnQgZXJyO1xuIFxuK1x0ZXJyID0gaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhodywgcG9ydCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiRmFpbGVkIHRvIGNsZWFyIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCIsXG4rXHRcdFx0ICBwb3J0LCBlcnIpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0ZXJyID0gaWNlX3JlYWRfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfR0xPQkFMLCBcdTAwMjZnbG9iYWxfdmFsKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcmVhZCBQSFlfUkVHX0dMT0JBTCBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCIsXG5AQCAtNTgwMSw4ICs1ODA4LDkgQEAgdm9pZCBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeShzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZTgyeChodyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbi1cdFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKGh3KTtcbi1cdFx0YnJlYWs7XG4rXHRcdC8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZlxuK1x0XHQgKiB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUuXG4rXHRcdCAqL1xuIFx0Y2FzZSBJQ0VfTUFDX0U4MTA6XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzoxNi4wNTczODEzMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTM5MDQxNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSUNFIERyaXZlciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgdGFyZ2V0aW5nIHRoZSBgaWNlYCBkcml2ZXIgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCByaWdodD9cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIGFjcm9zcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeTogYGljZV9hZGFwdGVyLmNgLCBgaWNlX2FkYXB0ZXIuaGAsIGBpY2VfbWFpbi5jYCwgYGljZV9wdHAuY2AsIGBpY2VfcHRwLmhgLCBhbmQgYGljZV9wdHBfaHcuY2AuIEFsbCBpbmRpY2F0aW9ucyBhcmUgdGhhdCB0aGlzIGNvbmNlcm5zIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlciAodGhlIGBpY2VgIGRyaXZlcikuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIHRoZXJlIGFyZSBzb21lICpuZWdhdGl2ZSBjcml0ZXJpYSogSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gU3BlY2lmaWNhbGx5LCBJIG11c3QgY29uc2lkZXIgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBUaGUgZ3VpZGUgZXhwbGljaXRseSBtZW50aW9ucyBkcml2ZXJzIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgbm90IHJlYWRpbHkgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBpY2VgIGZpdHMgdGhpcyBwcm9maWxlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IGlmIElDRSBpcyBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgTklDcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBzZWUgaWYgdGhlIEtjb25maWcgZmlsZSBjYW4gZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzoxOS45OTY0MjQ3MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzOTE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjAzOjIwLjA0OTgyMDMzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTE3MDgzMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlICdpY2UnIERyaXZlcidzIEhhcmR3YXJlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcyAqc29sZWx5KiBmb3IgdGhlIEludGVsIEU4MDAgc2VyaWVzIE5JQ3Mg4oCTIHRob3NlIEU4MTAsIEU4MjAsIEU4MjIsIEU4MjMsIEU4MjUsIGFuZCBFODMwIG1vZGVscyBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyAqbm90KiBhbiBlbXVsYXRlZCBkZXZpY2Ugd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLlxuXG5JbiBhIHR5cGljYWwgUUVNVSBvciBzeXprYWxsZXIgc2V0dXAsIHdlJ3JlIGRlYWxpbmcgd2l0aCBlbXVsYXRlZCBuZXRkZXZzLCBzdHVmZiBsaWtlIGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHZpcnRpby1uZXQsIFVTQi1iYXNlZCBuZXR3b3JraW5nLCB0dW4vdGFwLCBsb29wYmFjayBpbnRlcmZhY2VzLCB2ZXRoIHBhaXJzLCBhbmQgc28gb24uIEJ1dCBgaWNlYD8gSXQncyB0aGUgZHJpdmVyIGZvciBJbnRlbCdzIDEwMEdiRS9FODAwIHBoeXNpY2FsIFBDSWUgTklDLiBJJ20gYWxtb3N0IGNlcnRhaW4gdGhlcmUncyAqbm8qIFFFTVUgZW11bGF0aW9uIGZvciBhbiBJbnRlbCBFODAwIHNlcmllcyBQQ0llIE5JQywgYW5kIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcyBzdHJ1Y3R1cmFsbHkgZGVwZW5kZW50IG9uIHRoZSAqYWN0dWFsKiBoYXJkd2FyZS5cblxuVG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55IHZpcnR1YWwgYnVzZXMsIHNvZnR3YXJlIG1vY2tzLCBvciB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBleGlzdCBmb3IgYGljZWAuIEknbGwgcnVuIGEgZ3JlcCBzZWFyY2ggdG8gdmVyaWZ5IGRyaXZlciByZWdpc3RyYXRpb24gb3IgUENJIElEcy4gVGhpcyBjaGVjayBzaG91bGQgZGVmaW5pdGl2ZWx5IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyB0aGF0IGBpY2VgIG1hbmRhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgSW50ZWwgRTgwMCBBU0lDL1BDSWUgTklDIGZvciBpdCB0byBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6NDcuMTY2OTA2Mzc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM2NTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNT0RVTEVfREVWSUNFX1RBQkxFXFxcXChwY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01Nzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpY2VfcGNpX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNi19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4Mzc6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGljZV9wY2lfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo0Ny4zNzIyNzcyMDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI5ODcyMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBpY2VfbWFpbi5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGBpY2VfbWFpbi5jYCAtIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUuIEkgc3VzcGVjdCB0aGUgcHJvYmxlbSBpcyBkb3duc3RyZWFtLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbiBhdCBhIGxpa2VseSBzcG90IC0gYXJvdW5kIGxpbmUgNTc4NC4gVGhhdCByZWdpb24gdXN1YWxseSBkZWFscyB3aXRoIFtpbnNlcnQgeW91ciBzcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hhdCB0aGF0IGFyZWEgb2YgdGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yLCBlLmcuLCBcInRoZSBwcm9jZXNzaW5nIG9mIGluY29taW5nIElDRSBjYW5kaWRhdGVzXCIsIFwidGhlIGFsbG9jYXRpb24gb2YgbmV0d29yayByZXNvdXJjZXNcIiwgXCJ0aGUgaGFuZGxpbmcgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZhaWx1cmVzXCIsIGV0Yy5dLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgd2hhdCBJJ20gbG9va2luZyBmb3IgKnlldCosIGJ1dCBteSBleHBlcmllbmNlIHN1Z2dlc3RzIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBzcGVjaWZpYyBlZHVjYXRlZCBndWVzcywgZS5nLiwgXCJjYW5kaWRhdGUgcHJpb3JpdGl6YXRpb25cIiwgXCJuZXR3b3JrIGNvbm5lY3Rpdml0eSBpc3N1ZXNcIiwgXCJTVFVOL1RVUk4gaW50ZXJhY3Rpb25cIiwgZXRjLl0gaXMgbGlrZWx5IG1hbmlmZXN0aW5nIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCwgb3IgaWYgSSBuZWVkIHRvIGFkanVzdCBteSBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo1MC41MDIxNTIxNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3ODQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3ODQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XFxuNTc4NTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBDX0JBQ0tQTEFORSkgfSxcXG41Nzg2OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfUVNGUCkgfSxcXG41Nzg3OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfU0ZQKSB9LFxcbjU3ODg6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwX1hYVl9CQUNLUExBTkUpIH0sXFxuNTc4OTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBfWFhWX1FTRlApIH0sXFxuNTc5MDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBfWFhWX1NGUCkgfSxcXG41NzkxOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0NfQkFDS1BMQU5FKSB9LFxcbjU3OTI6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzQ19RU0ZQKSB9LFxcbjU3OTM6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzQ19TRlApIH0sXFxuNTc5NDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDXzEwR19CQVNFX1QpIH0sXFxuNTc5NTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDX1NHTUlJKSB9LFxcbjU3OTY6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyQ19CQUNLUExBTkUpIH0sXFxuNTc5NzpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJDX1FTRlApIH0sXFxuNTc5ODpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJDX1NGUCkgfSxcXG41Nzk5OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfMTBHX0JBU0VfVCkgfSxcXG41ODAwOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfU0dNSUkpIH0sXFxuNTgwMTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJMX0JBQ0tQTEFORSkgfSxcXG41ODAyOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkxfU0ZQKSB9LFxcbjU4MDM6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyTF8xMEdfQkFTRV9UKSB9LFxcbjU4MDQ6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyTF9TR01JSSkgfSxcXG41ODA1OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfQkFDS1BMQU5FKSB9LFxcbjU4MDY6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzTF9TRlApIH0sXFxuNTgwNzpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMXzEwR19CQVNFX1QpIH0sXFxuNTgwODpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMXzFHQkUpIH0sXFxuNTgwOTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMX1FTRlApIH0sXFxuNTgxMDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJfU0lfREZMVCkgfSxcXG41ODExOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfQkFDS1BMQU5FKSwgfSxcXG41ODEyOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfUVNGUCksIH0sXFxuNTgxMzpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjVDX1NGUCksIH0sXFxuNTgxNDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjVDX1NHTUlJKSwgfSxcXG41ODE1OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX0JBQ0tQTEFORSkgfSxcXG41ODE2OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX1FTRlA1NikgfSxcXG41ODE3OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX1NGUCkgfSxcXG41ODE4OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX1NGUF9ERCkgfSxcXG41ODE5OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENfQkFDS1BMQU5FKSwgfSxcXG41ODIwOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMF9YWFZfQkFDS1BMQU5FKSwgfSxcXG41ODIxOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENfUVNGUCksIH0sXFxuNTgyMjpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MzBfWFhWX1FTRlApLCB9LFxcbjU4MjM6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ19TRlApLCB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo1MC41MDM1OTEzMDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTUwNjI3NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBTdWl0YWJsZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbDogSSd2ZSBqdXN0IGFzc2Vzc2VkIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBpdCdzIGEgY2xlYXIgXCJuby1nb1wiIGZvciBmdXp6aW5nLiBUaGUga2V5IHBvaW50cyBhcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5GaXJzdGx5LCB0aGlzIGRyaXZlciBpcyAqZXhjbHVzaXZlbHkqIGZvciB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBuZXR3b3JrIGFkYXB0ZXJzLiBJdCdzIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIG9ubHkgY29kZSBiZWluZyB0b3VjaGVkLCB3aGljaCBoZWxwcyBmb2N1cyB0aGUgc2NvcGUuXG5cblNlY29uZGx5LCBhbmQgdGhpcyBpcyB0aGUgZGVjaWRpbmcgZmFjdG9yLCB0aGVzZSBhcmUgKnBoeXNpY2FsKiBoaWdoLXNwZWVkIE5JQ3MuIFRoZSB0eXBlIG9mIGhhcmR3YXJlIHRoZXkgcmVseSBvbiDigJMgdGhlIEFTSUNzLCB0aGUgUENJZSBjYXJkcyDigJMgYXJlIHRoaW5ncyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIGJ5IHN5emthbGxlci4gVGhhdCBtZWFucyB3ZSBjYW5ub3QgZWFzaWx5IGdldCBhIGZ1enplciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkcml2ZXIgY29kZSBpbiBhIG1lYW5pbmdmdWwgd2F5LiBTZWN0aW9uIDIsIHNwZWNpZmljYWxseSBjYWxscyB0aGlzIG91dCBhcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciB0YXJnZXRzIGhhcmR3YXJlIHRoYXTigJlzIGluYWNjZXNzaWJsZSBpbiBhIGZ1enppbmcgc2V0dXAsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgZWZmb3J0cyBhcmUgZ29pbmcgdG8gYmUgd2FzdGVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NTUsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6NTQuNjU0MjIyMjM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgaXNvbGF0ZWQgdG8gdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo1NC42NTQyNDc5NDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbdf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 00:41:24 +0000 UTC FinishedAt: 2026-09-11 01:03:56 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgaXNvbGF0ZWQgdG8gdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ODcyNWYwMjdiMTEwYzFlODI2NDdjNWVhNDgwM2FhNmM1ZTNhZmE3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDE6MDM6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuaW5kZXggMmRjMzYyOWQ2ZDBmNi4uZDE2NDNiZjhhMWI1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuQEAgLTY2LDE4ICYjNDM7NjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZhZGFwdGVyLVx1MDAzZXJlZmNvdW50LCAxKTtcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0KTtcbiBcbiBcdHJldHVybiBhZGFwdGVyO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpY2VfYWRhcHRlcl9mcmVlKHN0cnVjdCBpY2VfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4tXHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpKTtcbiYjNDM7XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCkpO1xuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2spOyBpJiM0MzsmIzQzOylcbiBcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZhZGFwdGVyLVx1MDAzZWNwaV9waHlfbG9ja1tpXSk7XG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4gXG4gXHRrZnJlZShhZGFwdGVyKTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuaW5kZXggNGY2OTVmMzJkYTNkOC4uMzk5MjNkZWRkNTM0ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuQEAgLTE5LDEzICYjNDM7MTksMTMgQEAgc3RydWN0IGljZV9wZjtcbiAgKlxuICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0c1xuICAqXG4tICogQHBvcnRzOiBsaXN0IG9mIHBvcnRzXG4mIzQzOyAqIEBsaXN0OiBsaXN0IG9mIHBvcnRzXG4gICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0XG4gICovXG4gc3RydWN0IGljZV9wb3J0X2xpc3Qge1xuLVx0c3RydWN0IGxpc3RfaGVhZCBwb3J0cztcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gXHQvKiBUbyBzeW5jaHJvbml6ZSB0aGUgcG9ydHMgbGlzdCBvcGVyYXRpb25zICovXG4tXHRzdHJ1Y3QgbXV0ZXggbG9jaztcbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5kMTI5NTIxNzFhOTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzI0OCw3ICYjNDM7MzI0OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpY2VfbWlzY19pbnRyX3RocmVhZF9mbihpbnQgX19hbHdheXNfdW51c2VkIGlycSwgdm9pZCAqZGF0YSlcbiBcdGljZV9pcnFfZHluYW1pY19lbmEoaHcsIE5VTEwsIE5VTEwpO1xuIFx0aWNlX2ZsdXNoKGh3KTtcbiBcbi1cdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcbiYjNDM7XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XG4gXHRcdC8qIElmIGFueSBuZXcgVHggdGltZXN0YW1wcyBoYXBwZW5lZCB3aGlsZSBpbiBpbnRlcnJ1cHQsXG4gXHRcdCAqIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgaXQgYWdhaW4uXG4gXHRcdCAqL1xuQEAgLTY3NDUsNyAmIzQzOzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcbiBcdFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXHUwMDNlbmV0ZGV2KTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XG4gXHR9XG4gXG4gXHQvKiBQZXJmb3JtIGFuIGluaXRpYWwgcmVhZCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgbm93IHRvXG5AQCAtNzI3Myw3ICYjNDM7NzI3Miw2IEBAIGludCBpY2VfZG93bihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFxuIFx0aWYgKHZzaS1cdTAwM2VuZXRkZXYpIHtcbiBcdFx0dmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktXHUwMDNlYmFjaywgZmFsc2UpO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZih2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfdHhfZGlzYWJsZSh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdH1cbkBAIC03Nzk0LDYgJiM0Mzs3NzkyLDE0IEBAIHN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbiBcbiBcdGljZV91cGRhdGVfcGZfbmV0ZGV2X2xpbmsocGYpO1xuIFxuJiM0MztcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZWh3LnBvcnRfaW5mbykge1xuJiM0MztcdFx0Ym9vbCBsaW5rX3VwO1xuJiM0MztcbiYjNDM7XHRcdGxpbmtfdXAgPSAhIShwZi1cdTAwM2Vody5wb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgSUNFX0FRX0xJTktfVVApO1xuJiM0MztcdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgbGlua191cCk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHRlbGwgdGhlIGZpcm13YXJlIHdlIGFyZSB1cCAqL1xuIFx0ZXJyID0gaWNlX3NlbmRfdmVyc2lvbihwZik7XG4gXHRpZiAoZXJyKSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbmluZGV4IGVhZWMzNmFiNmFlM2YuLmE1ZWZiMGE5NTk0MWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXG5AQCAtMSw2ICYjNDM7MSw4IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd2FpdF9iaXQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ljZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWNlX2xpYi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWNlX3RyYWNlLmhcJiMzNDtcbkBAIC0zNjIsOSAmIzQzOzM2NCwxMiBAQCBzdGF0aWMgdTY0IGljZV9wdHBfZXh0ZW5kXzQwYl90cyhzdHJ1Y3QgaWNlX3BmICpwZiwgdTY0IGluX3RzdGFtcClcbiBzdGF0aWMgYm9vbFxuIGljZV9wdHBfaXNfdHhfdHJhY2tlcl91cChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4ge1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGljZV9wdHBfcG9ydCwgdHgpO1xuJiM0MztcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2dHgtXHUwMDNlbG9jayk7XG4gXG4tXHRyZXR1cm4gdHgtXHUwMDNlaW5pdCBcdTAwMjZcdTAwMjYgIXR4LVx1MDAzZWNhbGlicmF0aW5nO1xuJiM0MztcdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmcgXHUwMDI2XHUwMDI2IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4gfVxuIFxuIC8qKlxuQEAgLTU2MSw3ICYjNDM7NTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRzdHJ1Y3QgaWNlX3BmICpwZjtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3O1xuIFx0dTY0IHRzdGFtcF9yZWFkeTtcbi1cdGJvb2wgbGlua191cDtcbiBcdGludCBlcnI7XG4gXHR1OCBpZHg7XG4gXG5AQCAtNTY5LDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xuIFx0aHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcbi1cdGlmICghdHgtXHUwMDNlaW5pdClcbiYjNDM7XHRpZiAoIXR4LVx1MDAzZWluaXQgfHwgYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXG5AQCAtNTc5LDE0ICYjNDM7NTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0XHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdC8qIERyb3AgcGFja2V0cyBpZiB0aGUgbGluayB3ZW50IGRvd24gKi9cbi1cdGxpbmtfdXAgPSBwdHBfcG9ydC1cdTAwM2VsaW5rX3VwO1xuLVxuIFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSB7XG4gXHRcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9O1xuIFx0XHR1OCBwaHlfaWR4ID0gaWR4ICYjNDM7IHR4LVx1MDAzZW9mZnNldDtcbiBcdFx0dTY0IHJhd190c3RhbXAgPSAwLCB0c3RhbXA7XG4tXHRcdGJvb2wgZHJvcF90cyA9ICFsaW5rX3VwO1xuJiM0MztcdFx0Ym9vbCBkcm9wX3RzID0gZmFsc2U7XG4gXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRcdC8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqL1xuQEAgLTYxOSw2ICYjNDM7NjIwLDE5IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiAhZHJvcF90cylcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qIHZlcmlmeSByZWFkeSBiaXQgY2xlYXJlZCAqL1xuJiM0MztcdFx0aWYgKHR4LVx1MDAzZWhhc19yZWFkeV9iaXRtYXApIHtcbiYjNDM7XHRcdFx0ZXJyID0gaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KTtcbiYjNDM7XHRcdFx0aWYgKGVyciB8fCB0c3RhbXBfcmVhZHkgXHUwMDI2IEJJVF9VTEwocGh5X2lkeCkpIHtcbiYjNDM7XHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlc3RhbGUpKVxuJiM0MztcdFx0XHRcdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCYjMzQ7UEhZIHBvcnQgJXUgZmFpbGVkIHRvIGNsZWFyIHJlYWR5IGJpdCBmb3IgaWR4ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRwdHBfcG9ydC1cdTAwM2Vwb3J0X251bSwgcGh5X2lkeCk7XG4mIzQzO1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGljZV90cmFjZSh0eF90c3RhbXBfZndfZG9uZSwgdHgtXHUwMDNldHN0YW1wc1tpZHhdLnNrYiwgaWR4KTtcbiBcbiBcdFx0LyogRm9yIFBIWXMgd2hpY2ggZG9uJiMzOTt0IGltcGxlbWVudCBhIHByb3BlciB0aW1lc3RhbXAgcmVhZHlcbkBAIC02NzMsMjAgJiM0Mzs2ODcsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZi1cdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCAmIzQzOz0gdHN0YW1wX2dvb2Q7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3Uoc3RydWN0IGtyZWYgKnJlZilcbiYjNDM7e1xuJiM0MztcdHdha2VfdXBfdmFyKHJlZik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4gXHRcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFx1MDAyNnBvcnQtXHUwMDNldHg7XG4gXG4tXHRcdGlmICghdHggfHwgIXR4LVx1MDAzZWluaXQpXG4mIzQzO1x0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuIFx0XHRpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHR4KTtcbiYjNDM7XG4mIzQzO1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC03MjUsNiAmIzQzOzc1MiwzNyBAQCBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZFxuJiM0MztpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoMTApO1xuJiM0MztcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4mIzQzO1x0dTY0IHRzdGFtcF9yZWFkeTtcbiYjNDM7XHRib29sIHBlbmRpbmc7XG4mIzQzO1x0dTggaWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoaHctXHUwMDNlcmVzZXRfb25nb2luZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0aWYgKGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXHUwMDNlYmxvY2ssIFx1MDAyNnRzdGFtcF9yZWFkeSkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRwZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiYjNDM7XHRcdFx0aWYgKCEodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKGlkeCAmIzQzOyB0eC1cdTAwM2VvZmZzZXQpKSlcbiYjNDM7XHRcdFx0XHRwZW5kaW5nID0gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghcGVuZGluZylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSg1MDAsIDEwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1RpbWVkIG91dCB3YWl0aW5nIGZvciBpbi1mbGlnaHQgVHggdGltZXN0YW1wcyBvbiBibG9jayAldVxcblwmIzM0OyxcbiYjNDM7XHRcdHR4LVx1MDAzZWJsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC03NDEsNiAmIzQzOzc5OSw4IEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbiYjNDM7XHRpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTtcbiYjNDM7XG4gXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHRoZSBUeCB0c3RhbXAgcmVhZHkgYml0bWFwIGZvciBibG9jayAldSwgZXJyICVkXFxuXCYjMzQ7LFxuQEAgLTc3OSwxMiAmIzQzOzgzOSwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXG4gICpcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXG4tICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS5cbi0gKlxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxuLSAqIHRpbWUgcmVxdWVzdC5cbiYjNDM7ICogTWFyayBjdXJyZW50bHkgb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcyBhcyBzdGFsZS4gVGhpcyBwcmV2ZW50cyB0aGUgZHJpdmVyXG4mIzQzOyAqIGZyb20gcmVwb3J0aW5nIHRoZSB0aW1lc3RhbXAgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIGNhbGxlZCB0byBpbmZvcm0gdGhlXG4mIzQzOyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGlua1xuJiM0MzsgKiB3ZW50IGRvd24uXG4gICovXG4gc3RhdGljIHZvaWRcbiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZShzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG5AQCAtODA4LDggJiM0Mzs4NjYsMTYgQEAgaWNlX3B0cF9mbHVzaF9hbGxfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLCBsaXN0X25vZGUpXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdFx0aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHB0cF9wb3J0X3RvX3BmKHBvcnQpLCBcdTAwMjZwb3J0LVx1MDAzZXR4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcdH1cbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtOTk0LDEzICYjNDM7MTA2MCw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwZi1cdTAwM2VwdHAud29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMCkpO1xuIFx0fVxuLVxuLVx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXG4tXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxuLVx0ICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpblxuLVx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4tXHQgKi9cbi1cdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTEzMyw2ICYjNDM7MTE5Miw3IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGljZV9wZiAqcGY7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodztcbiBcdGludCB0eF9lcnI7XG5AQCAtMTE1NSwxMiAmIzQzOzEyMTUsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4gXHRcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XG4tXHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cbiYjNDM7XHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIuXG4mIzQzO1x0XHQgKiBUaGlzIGlzIGV4cGVjdGVkIGR1cmluZyBub3JtYWwgbGluay11cDogdGhlIHZlcm5pZXIgb2Zmc2V0XG4mIzQzO1x0XHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcbiYjNDM7XHRcdCAqIGJlZW4gdHJhbnNtaXR0ZWQsIHNvIHRoZSBmaXJzdCByZXRyaWVzIHJvdXRpbmVseSBsYW5kIGhlcmUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdFwmIzM0O1BUUCBvZmZzZXQgbm90IHlldCB2YWxpZCBmb3IgcG9ydCAldSAodHhfZXJyPSVkIHJ4X2Vycj0lZClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQtXHUwMDNlcG9ydF9udW0sIHR4X2VyciwgcnhfZXJyKTtcbiBcdFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXHUwMDNlcHRwLmt3b3JrZXIsXG4gXHRcdFx0XHRcdCAgIFx1MDAyNnBvcnQtXHUwMDNlb3Zfd29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMDApKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuJiM0MztcbiYjNDM7XHQvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4mIzQzO1x0cG9ydC1cdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcJiMzNDtQVFAgb2Zmc2V0IHZhbGlkIGZvciBwb3J0ICV1LCBUeCB0aW1lc3RhbXBzIGVuYWJsZWRcXG5cJiMzNDssXG4mIzQzO1x0XHRwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTI0NiwxMCAmIzQzOzEzMjIsMTMgQEAgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHQvKiBFbmFibGUgVHggdGltZXN0YW1wcyByaWdodCBhd2F5ICovXG4tXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbi1cdFx0cHRwX3BvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwdHBfcG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHQvKiBEbyBub3QgY2xlYXIgY2FsaWJyYXRpbmcgZmxhZyBoZXJlLiBUeCB0aW1lc3RhbXBzIHJlbWFpblxuJiM0MztcdFx0ICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkXG4mIzQzO1x0XHQgKiB0aGF0IHRoZSBUeCBhbmQgUnggb2Zmc2V0IGNhbGlicmF0aW9uIGhhcyBjb21wbGV0ZWQuXG4mIzQzO1x0XHQgKiBDbGVhcmluZyBpdCBoZXJlIHdvdWxkIGFsbG93IFR4IHRpbWVzdGFtcHMgdG8gYmUgcmVwb3J0ZWRcbiYjNDM7XHRcdCAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmdcbiYjNDM7XHRcdCAqIHRvIGluY29ycmVjdCB0aW1lc3RhbXAgdmFsdWVzLlxuJiM0MztcdFx0ICovXG4gXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwdHBfcG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICAwKTtcbkBAIC0xMjgwLDE3ICYjNDM7MTM1OSwyMyBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFxuLVx0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwdHBfcG9ydCA9IFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0O1xuIFxuJiM0MztcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cHRwX3BvcnQtXHUwMDNlcmVmKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHQvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi9cbiBcdHB0cF9wb3J0LVx1MDAzZWxpbmtfdXAgPSBsaW5rdXA7XG4gXG4mIzQzO1x0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuJiM0MztcbiBcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXG4gXHRpZiAocGYtXHUwMDNlaHcucmVzZXRfb25nb2luZylcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIWxpbmt1cClcbiYjNDM7XHRcdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4KTtcbiBcbiBcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSBcdTAwMjZcdTAwMjZcbiBcdCAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi1cdTAwM2VmbGFncykpIHtcbkBAIC0xMzMzLDE3ICYjNDM7MTQxOCwyMCBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxuIFx0Y2FzZSBJQ0VfTUFDX0U4MTA6XG4gXHRjYXNlIElDRV9NQUNfRTgzMDpcbiBcdFx0LyogRG8gbm90IHJlY29uZmlndXJlIEU4MTAgb3IgRTgzMCBQSFkgKi9cbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUM6XG4gXHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdGdvdG8gZXhpdF9rcmVmX3B1dDtcbiBcdGNhc2UgSUNFX01BQ19HRU5FUklDXzNLX0U4MjU6XG4gXHRcdGlmIChsaW5rdXApXG4gXHRcdFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHB0cF9wb3J0KTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0OyVzOiBVbmtub3duIFBIWSB0eXBlXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHR9XG4mIzQzO1xuJiM0MztleGl0X2tyZWZfcHV0OlxuJiM0MztcdGtyZWZfcHV0KFx1MDAyNnB0cF9wb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTQyNCwxNiAmIzQzOzE1MTIsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxuICAqL1xuIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzdGFydF9hbGxfcGh5KHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbi1cdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuJiM0MztcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuJiM0MztcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRcdGlmIChwb3J0LVx1MDAzZWxpbmtfdXApXG4gXHRcdFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHBvcnQpO1xuJiM0MztcbiYjNDM7XHRcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuIFx0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTI3LDggJiM0MzsyMDIwLDkgQEAgaWNlX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXG4gXHQvKiBSZWVuYWJsZSBwZXJpb2RpYyBvdXRwdXRzICovXG4gXHRpY2VfcHRwX2VuYWJsZV9hbGxfcGVyb3V0KHBmKTtcbiBcbi1cdC8qIFJlY2FsaWJyYXRlIGFuZCByZS1lbmFibGUgdGltZXN0YW1wIGJsb2NrcyBmb3IgRTgyMi9FODIzICovXG4tXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDKVxuJiM0MztcdC8qIFJlY2FsaWJyYXRlIGFuZCByZS1lbmFibGUgdGltZXN0YW1wIGJsb2NrcyBmb3IgRTgyMi9FODIzL0U4MjUtQyAqL1xuJiM0MztcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMgfHxcbiYjNDM7XHQgICAgaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpXG4gXHRcdGljZV9wdHBfcmVzdGFydF9hbGxfcGh5KHBmKTtcbiBleGl0OlxuIFx0aWYgKGVycikge1xuQEAgLTI2MzgsMTEgJiM0MzsyNzMyLDEzIEBAIHM4IGljZV9wdHBfcmVxdWVzdF90cyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIGEgcmVmZXJlbmNlIHRvIHRoZSBza2IgYW5kIHRoZSBzdGFydCB0aW1lIHRvIGFsbG93IGRpc2NhcmRpbmcgb2xkXG4gXHRcdCAqIHJlcXVlc3RzLlxuIFx0XHQgKi9cbi1cdFx0c2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSk7XG4tXHRcdGNsZWFyX2JpdChpZHgsIHR4LVx1MDAzZXN0YWxlKTtcbiBcdFx0dHgtXHUwMDNldHN0YW1wc1tpZHhdLnN0YXJ0ID0gamlmZmllcztcbiBcdFx0dHgtXHUwMDNldHN0YW1wc1tpZHhdLnNrYiA9IHNrYl9nZXQoc2tiKTtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xuJiM0MztcdFx0Y2xlYXJfYml0KGlkeCwgdHgtXHUwMDNlc3RhbGUpO1xuJiM0MztcdFx0LyogRW5zdXJlIGluZGV4IGlzIHNldHVwIGJlZm9yZSBtYXJraW5nIGl0IGFzIHVzZWQgKi9cbiYjNDM7XHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xuJiM0MztcdFx0c2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSk7XG4gXHRcdGljZV90cmFjZSh0eF90c3RhbXBfcmVxdWVzdCwgc2tiLCBpZHgpO1xuIFx0fVxuIFxuQEAgLTI2NzgsNzQgJiM0MzsyNzc0LDU2IEBAIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4mIzQzO3N0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0Ym9vbCBtb3JlX3RpbWVzdGFtcHM7XG4mIzQzO1x0REVDTEFSRV9CSVRNQVAodHN0YW1wcywgSU5ERVhfUEVSX1BPUlRfTUFYKSA9IHt9O1xuIFxuIFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnR4LVx1MDAzZWxvY2spIHtcbiBcdFx0aWYgKCF0eC1cdTAwM2Vpbml0KVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0bW9yZV90aW1lc3RhbXBzID0gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4tXHR9XG4mIzQzO1x0XHRpZiAoaW5faXJxKSB7XG4mIzQzO1x0XHRcdGlmICghaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHR4KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gbW9yZV90aW1lc3RhbXBzO1xuJiM0MztcdFx0XHRyZXR1cm4gYml0bWFwX2FuZG5vdCh0c3RhbXBzLCB0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZXN0YWxlLCB0eC1cdTAwM2VsZW4pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0cmV0dXJuICFiaXRtYXBfZW1wdHkodHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiB9XG4gXG4tc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmKVxuJiM0MztzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiYjNDM7XHRib29sIGhhdmVfdHN0YW1wcyA9IGZhbHNlO1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKSB7XG4tXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cyxcbi1cdFx0XHRcdCAgICBsaXN0X25vZGUpIHtcbi1cdFx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuLVxuLVx0XHRcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyh0eCkpXG4tXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiYjNDM7XHRcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcdTAwMjZwb3J0LVx1MDAzZXR4LCBpbl9pcnEpKSB7XG4mIzQzO1x0XHRcdGhhdmVfdHN0YW1wcyA9IHRydWU7XG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0cmV0dXJuIGhhdmVfdHN0YW1wcztcbiB9XG4gXG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiYjNDM7Ym9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2Vodztcbi1cdGludCByZXQ7XG4tXG4tXHQvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi9cbiBcdHN3aXRjaCAocGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKSB7XG4gXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfU0VMRjpcbi1cdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4mIzQzO1x0XHRyZXR1cm4gaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgsIGluX2lycSk7XG4gXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX0FMTDpcbi1cdFx0aWYgKGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZikpXG4tXHRcdFx0cmV0dXJuIHRydWU7XG4tXHRcdGJyZWFrO1xuJiM0MztcdFx0cmV0dXJuIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhwZiwgaW5faXJxKTtcbiBcdGRlZmF1bHQ6XG4gXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtVbmV4cGVjdGVkIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbW9kZSAldVxcblwmIzM0OyxcbiBcdFx0XHQgIHBmLVx1MDAzZXB0cC50eF9pbnRlcnJ1cHRfbW9kZSk7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0LyogQ2hlY2sgaGFyZHdhcmUgaW5kaWNhdG9yICovXG4tXHRyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1VuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJWRcXG5cJiMzNDssXG4tXHRcdFx0cmV0KTtcbi1cdFx0LyogU3RvcCB0cmlnZ2VyaW5nIElSUXMgaWYgd2UmIzM5O3JlIHVuYWJsZSB0byByZWFkIFBIWSAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4tXG4tXHQvKiBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeSgpIHJldHVybnMgMSBpZiB0aGVyZSBhcmUgdGltZXN0YW1wc1xuLVx0ICogYXZhaWxhYmxlLCAwIGlmIHRoZXJlIGFyZSBubyB3YWl0aW5nIHRpbWVzdGFtcHMsIGFuZCBhIG5lZ2F0aXZlXG4tXHQgKiB2YWx1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgKHdoaWNoIHdlIGNoZWNrZWQgZm9yIGFib3ZlKS5cbi1cdCAqL1xuLVx0cmV0dXJuIHJldCBcdTAwM2UgMDtcbiB9XG4gXG4gLyoqXG5AQCAtMjc5OSw3ICYjNDM7Mjg3Nyw3IEBAIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHQvKiBFODMwIGNhbiByZWFkIHRpbWVzdGFtcHMgaW4gdGhlIHRvcCBoYWxmIHVzaW5nIHJkMzIoKSAqL1xuIFx0XHRpY2VfcHRwX3Byb2Nlc3NfdHMocGYpO1xuIFxuLVx0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7XG4mIzQzO1x0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XG4gXHRcdFx0LyogUHJvY2VzcyBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLiBJZiB0aGVyZVxuIFx0XHRcdCAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi5cbiBcdFx0XHQgKi9cbkBAIC0yODM5LDkgJiM0MzsyOTE3LDEzIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfbWF5YmVfdHJpZ2dlcl90eF9pbnRlcnJ1cHQoc3RydWN0IGljZV9wZiAqcGYpXG4gXG4gXHRyZXQgPSBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeShodyk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tXHRcdGRldl9kYmcoZGV2LCBcJiMzNDtQVFAgcGVyaW9kaWMgdGFzayB1bmFibGUgdG8gcmVhZCBQSFkgdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdHJldCk7XG4tXHR9IGVsc2UgaWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O1VuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0LyogRG9uJiMzOTt0IHRyaWdnZXIgYW4gSVJRIGlmIHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHRoZSBQSFkgKi9cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlIDAgfHwgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIGZhbHNlKSkge1xuIFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7UFRQIHBlcmlvZGljIHRhc2sgZGV0ZWN0ZWQgd2FpdGluZyB0aW1lc3RhbXBzLiBUcmlnZ2VyaW5nIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbm93LlxcblwmIzM0Oyk7XG4gXG4gXHRcdHdyMzIoaHcsIFBGSU5UX09JQ1IsIFBGSU5UX09JQ1JfVFNZTl9UWF9NKTtcbkBAIC0yODkwLDE0ICYjNDM7Mjk3MiwxNiBAQCB2b2lkIGljZV9wdHBfcXVldWVfd29yayhzdHJ1Y3QgaWNlX3BmICpwZilcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcbiBcdFx0XHRcdFx0ZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4ge1xuLVx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4mIzQzO1x0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2goZW50cnksIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpIHtcbi1cdFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksXG4tXHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGxpc3Rfbm9kZSk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XG4gXHRcdHN0cnVjdCBpY2VfcGYgKnBlZXJfcGYgPSBwdHBfcG9ydF90b19wZihwb3J0KTtcbiBcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiBcdFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcdTAwMjZwZWVyX3BmLVx1MDAzZWh3KSkge1xuIFx0XHRcdGlmIChyZWJ1aWxkKSB7XG4gXHRcdFx0XHQvKiBUT0RPOiBXaGVuIGltcGxlbWVudGluZyByZWJ1aWxkPXRydWU6XG5AQCAtMjkwOSw3ICYjNDM7Mjk5MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcbiBcdFx0XHRcdGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQocGVlcl9wZiwgcmVzZXRfdHlwZSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4gXHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTI5MzYsMTEgJiM0MzszMDI0LDE3IEBAIHZvaWQgaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXHRpZiAocmVzZXRfdHlwZSA9PSBJQ0VfUkVTRVRfUEZSKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcbiYjNDM7XHQgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWVcbiYjNDM7XHQgKiBzaWRlYmFuZCBxdWV1ZSBjb21tYW5kcyB0aGF0IHdpbGwgZmFpbCBvciB0aW1lb3V0LCBhbmQgbWF5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXG4mIzQzO1x0XHRrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwdHAtXHUwMDNlcG9ydC5vdl93b3JrKTtcbiYjNDM7XG4gXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFx1MDAyNlx1MDAyNiBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XG4gXG4tXHRpY2VfcHRwX3JlbGVhc2VfdHhfdHJhY2tlcihwZiwgXHUwMDI2cGYtXHUwMDNlcHRwLnBvcnQudHgpO1xuLVxuIFx0LyogRGlzYWJsZSBwZXJpb2RpYyBvdXRwdXRzICovXG4gXHRpY2VfcHRwX2Rpc2FibGVfYWxsX3Blcm91dChwZik7XG4gXG5AQCAtMzA4NiwxMSAmIzQzOzMxODAsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZik7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsXG4tXHRcdCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcdGxpc3RfYWRkX3JjdShcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsIFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxuIFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24mIzM5O3QgZXhwb3NlIHR4LWNsa1xuQEAgLTMxMTMsMTIgJiM0MzszMjA3LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX2NsZWFudXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHAgKnB0cCA9IFx1MDAyNnBmLVx1MDAzZXB0cDtcbiYjNDM7XHRzdHJ1Y3Qga3JlZiAqcmVmO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0fVxuJiM0MztcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcbiYjNDM7XHQgKiBvdXRzdGFuZGluZyByZWZlcmVuY2VzIHRvIHRoZSBQVFAgcG9ydC4gVG8gbWFrZSBzdXJlIHRoaXMgaXMgdHJ1ZSxcbiYjNDM7XHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XG4mIzQzO1x0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcbiYjNDM7XHQgKiBleGlzdGluZyByZWZlcmVuY2VzIGFyZSBkcm9wcGVkLiBGaW5hbGx5LCBzeW5jaHJvbml6ZV9yY3UoKSB0b1xuJiM0MztcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXG4mIzQzO1x0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbF9yY3UoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlKTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuJiM0MztcbiYjNDM7XHRyZWYgPSBcdTAwMjZwdHAtXHUwMDNlcG9ydC5yZWY7XG4mIzQzO1x0a3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuJiM0MztcbiYjNDM7XHRkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLFxuJiM0MztcdFx0ICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLFxuJiM0MztcdFx0ICAgICAgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHBvcnQgcmVmZXJlbmNlcyB0byByZWxlYXNlLiBDb250aW51aW5nIHRvIHVubG9hZCBhbnl3YXlzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHN5bmNocm9uaXplX3JjdSgpO1xuIH1cbiBcbiAvKipcbkBAIC0zMjEwLDkgJiM0MzszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgdGhyZWFkc1xuJiM0MzsgKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgdGhlIFBUUCBrd29ya2VyXG4gICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcbiYjNDM7ICpcbiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxuJiM0MzsgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXG4mIzQzOyAqIHN0YXRlIGlzIElDRV9QVFBfUkVBRFkuXG4gICovXG4gc3RhdGljIGludCBpY2VfcHRwX2luaXRfd29yayhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHAgKnB0cClcbiB7XG5AQCAtMzIzMSw5ICYjNDM7MzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4gXG4gXHRwdHAtXHUwMDNla3dvcmtlciA9IGt3b3JrZXI7XG4gXG4tXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIGdvaW5nICovXG4tXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMzNTUsNiAmIzQzOzM0NzAsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9jbGVhbl9wZjtcbiBcbiYjNDM7XHQvKiBTZWVkIGxpbmtfdXAgZnJvbSBjdXJyZW50IFBIWSBzdGF0dXMsIHNpbmNlIGxpbmsgbWF5IGFscmVhZHkgYmUgdXBcbiYjNDM7XHQgKiAoZS5nLiBhZnRlciBQWEUgYm9vdCkgd2l0aCBubyBsaW5rLWNoYW5nZSBlZGdlIHRvIGNhdGNoIGl0IGxhdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwZi1cdTAwM2Vody5wb3J0X2luZm8pXG4mIzQzO1x0XHRwdHAtXHUwMDNlcG9ydC5saW5rX3VwID1cbiYjNDM7XHRcdFx0ISEocGYtXHUwMDNlaHcucG9ydF9pbmZvLVx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFx1MDAyNlxuJiM0MztcdFx0XHRJQ0VfQVFfTElOS19VUCk7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSB0aGUga3dvcmtlciBiZWZvcmUgcmVzdGFydGluZyB0aGUgUEhZLCB3aGljaCBxdWV1ZXMgd29yayBvblxuJiM0MztcdCAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzXG4mIzQzO1x0ICogZnJvbSByZWFjaGluZyBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoKSB3aGlsZSBrd29ya2VyIGlzIHN0aWxsIE5VTExcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfY2xlYW5fcGY7XG4mIzQzO1xuIFx0LyogU3RhcnQgdGhlIFBIWSB0aW1lc3RhbXBpbmcgYmxvY2sgKi9cbiBcdGljZV9wdHBfcmVzZXRfcGh5X3RpbWVzdGFtcGluZyhwZik7XG4gXG5AQCAtMzM2Myw5ICYjNDM7MzQ5NCwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHB0cC1cdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XG4gXG4tXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2V4aXQ7XG4mIzQzO1x0LyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlclxuJiM0MztcdCAqIHJldHVybnMgd2l0aG91dCByZXNjaGVkdWxpbmcgd2hpbGUgdGhlIHN0YXRlIGlzIG5vdCBSRUFEWS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuIFxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1BUUCBpbml0IHN1Y2Nlc3NmdWxcXG5cJiMzNDspO1xuIFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5pbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuQEAgLTUsNiAmIzQzOzUsOCBAQFxuICNkZWZpbmUgX0lDRV9QVFBfSF9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1bGlzdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O2ljZV9wdHBfaHcuaFwmIzM0O1xuQEAgLTEzMCw2ICYjNDM7MTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFx0XHQxNlxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcdFx0XHQ2NFxuIFxuJiM0MzsvKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lc3RhbXAgaW5kZXhlcyBhY3Jvc3MgYWxsIGRldmljZXMgKi9cbiYjNDM7I2RlZmluZSBJTkRFWF9QRVJfUE9SVF9NQVggICAgICAgICAgICAgIElOREVYX1BFUl9QT1JUXG4mIzQzO1xuIC8qKlxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcbiAgKlxuQEAgLTEzOCw2ICYjNDM7MTQzLDcgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICAqIGFuZCBkZXRlcm1pbmUgd2hlbiB0aGUgcG9ydCYjMzk7cyBQSFkgb2Zmc2V0IGlzIHZhbGlkLlxuICAqXG4gICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlXG4mIzQzOyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcbiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0XG4gICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWRcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXG5AQCAtMTQ5LDYgJiM0MzsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICovXG4gc3RydWN0IGljZV9wdHBfcG9ydCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTtcbiYjNDM7XHRzdHJ1Y3Qga3JlZiByZWY7XG4gXHRzdHJ1Y3QgaWNlX3B0cF90eCB0eDtcbiBcdHN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrO1xuIFx0c3RydWN0IG11dGV4IHBzX2xvY2s7IC8qIHByb3RlY3RzIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmUgKi9cbkBAIC0zMTIsNyAmIzQzOzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7XG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcbiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpO1xuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xuJiM0Mztib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7XG4gdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZixcbiBcdFx0XHQgICAgIHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqc3RzKTtcbiBcbkBAIC0zNjAsNyAmIzQzOzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiYjNDM7c3RhdGljIGlubGluZSBib29sXG4mIzQzO2ljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCAzYTQxYzcxMWU3NTFiLi42NGUxOGZlMTE3NmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTczNywyNCAmIzQzOzczNyw2IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcG9ydF9tZW1fZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LFxuIFx0cmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcbiB9XG4gXG4tLyoqXG4tICogaWNlX3dyaXRlX3BvcnRfbWVtX2V0aDU2ZyAtIFdyaXRlIGEgUEhZIHBvcnQgbWVtb3J5IGxvY2F0aW9uXG4tICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3Rcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZFxuLSAqIEBvZmZzZXQ6IE9mZnNldCBmcm9tIFBIWSBwb3J0IHJlZ2lzdGVyIGJhc2Vcbi0gKiBAdmFsOiBQb2ludGVyIHRvIHRoZSB2YWx1ZSB0byByZWFkIChvdXQgcGFyYW0pXG4tICpcbi0gKiBSZXR1cm46XG4tICogKiAlMCAgICAgIC0gc3VjY2Vzc1xuLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZVxuLSAqICogJW90aGVyICAtIGZhaWxlZCB0byB3cml0ZSB0byBQSFlcbi0gKi9cbi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXG4tXHRcdFx0XHQgICAgIHUzMiB2YWwpXG4te1xuLVx0cmV0dXJuIGljZV93cml0ZV9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7XG4tfVxuLVxuIC8qKlxuICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlclxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG5AQCAtMTEzOSw4ICYjNDM7MTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy5cbiAgKlxuICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nXG4tICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZVxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXG4mIzQzOyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnRcbiYjNDM7ICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhbiBpZHggd2hvc2UgYml0IGlzIHNldCBhY2NvcmRpbmcgdG9cbiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS5cbkBAIC0xMTUyLDI0ICYjNDM7MTEzNCwxNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXG4gc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiB7XG4gXHR1NjQgdW51c2VkX3RzdGFtcDtcbi1cdHUxNiBsb19hZGRyO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzXG4tXHQgKiBjbGVhcmVkLlxuJiM0MztcdC8qIFBlciB0aGUgUEhZIHNwZWMsIHJlYWRpbmcgdGhlIHRpbWVzdGFtcCBtZW1vcnkgbG9jYXRpb24gaXMgd2hhdFxuJiM0MztcdCAqIGNsZWFycyB0aGUgZW50cnkmIzM5O3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KVxuJiM0MztcdCAqIHRzX21lbW9yeV9zdGF0dXMgYml0LlxuIFx0ICovXG4gXHRlcnIgPSBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4LCBcdTAwMjZ1bnVzZWRfdHN0YW1wKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgdGhlIFBIWSB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0fVxuLVxuLVx0bG9fYWRkciA9ICh1MTYpUEhZX1RTVEFNUF9MKGlkeCk7XG4tXG4tXHRlcnIgPSBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKGh3LCBwb3J0LCBsb19hZGRyLCAwKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIGNsZWFyIGxvdyBQVFAgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHQgIHBvcnQsIGlkeCwgZXJyKTtcbiBcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbkBAIC0xMTc3LDE5ICYjNDM7MTE1MSwzNiBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcgLSBDbGVhciBhbGwgdGltZXN0YW1wcyBmcm9tIHRoZSBwb3J0IGJsb2NrXG4mIzQzOyAqIGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcgLSBSZXNldCBvbmUgcG9ydCYjMzk7cyBUeCB0aW1lc3RhbXAgbWVtb3J5XG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbiYjNDM7ICogQHBvcnQ6IHBvcnQgbnVtYmVyIHRvIGNsZWFyXG4mIzQzOyAqXG4mIzQzOyAqIEZ1bGx5IHJlc2V0IGEgc2luZ2xlIFBIWSBwb3J0JiMzOTtzIFR4IHRpbWVzdGFtcCBtZW1vcnkuIFBlciB0aGUgUEhZIHNwZWMsIHRoZVxuJiM0MzsgKiBvbmx5IHdheSB0byBjbGVhciBhIHRpbWVzdGFtcCB2YWxpZCBiaXQgKGFuZCBpdHMgcmVhZC1vbmx5IHRzX21lbW9yeV9zdGF0dXNcbiYjNDM7ICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGVcbiYjNDM7ICogcG9ydCAodHdvIDMyLWJpdCByZWFkcyBlYWNoKS4gVGhpcyBkaXNjYXJkcyBhbGwgdGltZXN0YW1wIGRhdGEgb24gdGhlIHBvcnQsXG4mIzQzOyAqIHNvIGl0IG11c3Qgb25seSBiZSB1c2VkIGZvciBhIGZ1bGwgcmVzZXQ7IGNhbGxlcnMgdGhhdCBtdXN0IHByZXNlcnZlXG4mIzQzOyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS5cbiYjNDM7ICpcbiYjNDM7ICogRHVlIHRvIGludGVyYWN0aW9ucyB3aXRoIGFuIGludGVybmFsIEhXIGNvdW50ZXIgZm9yIHRoZSBudW1iZXIgb2ZcbiYjNDM7ICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGVcbiYjNDM7ICogaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKSBwcm9jZWR1cmUuIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGNvdW50ZXJcbiYjNDM7ICogbWF5IGJlY29tZSBvdXQgb2Ygc3luYyBhbmQgcHJldmVudCBuZXcgdGltZXN0YW1wIGludGVycnVwdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgdG8gcmVhZCB0aGUgUEhZLlxuICAqL1xuLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodylcbiYjNDM7c3RhdGljIGludCBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxuIHtcbi1cdHVuc2lnbmVkIGludCBwb3J0O1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHU4IGlkeDtcbiBcbi1cdGZvciAocG9ydCA9IDA7IHBvcnQgXHUwMDNjIGh3LVx1MDAzZXB0cC5udW1fbHBvcnRzOyBwb3J0JiM0MzsmIzQzOykge1xuLVx0XHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLFxuLVx0XHRcdFx0XHQgMCk7XG4tXHRcdGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsXG4tXHRcdFx0XHRcdCAwKTtcbiYjNDM7XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgSU5ERVhfUEVSX1BPUlQ7IGlkeCYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4KTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTE1LDEwICYjNDM7MjEwNiw2IEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9PRkZTRVRfUkVBRFksIDApO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbi1cbiBcdGVyciA9IGljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19SWF9PRkZTRVRfUkVBRFksIDApO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMTMzLDkgJiM0MzsyMTIwLDExIEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0XG4gICpcbi0gKiBTdGFydCB0aGUgY2xvY2sgb2YgYSBQSFkgcG9ydC4gVGhpcyBtdXN0IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgZmxvdyB0b1xuLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXNcbi0gKiBpbml0aWFsaXplZCBvciB3aGVuIGxpbmsgc3BlZWQgY2hhbmdlcy5cbiYjNDM7ICogUGVyZm9ybSBhIFBIWSBzb2Z0IHJlc2V0IGFuZCB0aGVuIHN0YXJ0IHRoZSBjbG9jayBmb3IgdGhlIFBIWSBwb3J0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnhcbiYjNDM7ICogdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMgaW5pdGlhbGl6ZWQgb3Igd2hlbiBsaW5rXG4mIzQzOyAqIHNwZWVkIGNoYW5nZXMuXG4gICpcbiAgKiBSZXR1cm46XG4gICogKiAlMCAgICAgLSBzdWNjZXNzXG5AQCAtMjE1MSw2ICYjNDM7MjE0MCwxMCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXG4gXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcbiBcbiYjNDM7XHRlcnIgPSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZyhodywgcG9ydCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuIFx0ZXJyID0gaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhodywgcG9ydCwgZmFsc2UpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMjk0LDYgJiM0MzsyMjg3LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcbiAgKlxuICAqIFRyaWdnZXIgYSBzb2Z0IHJlc2V0IG9mIHRoZSBFVEg1NkcgUEhZIGJ5IHRvZ2dsaW5nIHRoZSBzb2Z0IHJlc2V0XG4gICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6XG4mIzQzOyAqICAgMC4gUmVhZGluZyBldmVyeSB0aW1lc3RhbXAgbWVtb3J5IHJlZ2lzdGVyIHRvIGNsZWFyIGl0cyB2YWxpZCBiaXRcbiAgKiAgIDEuIENsZWFyaW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMy4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0IGFnYWluXG5AQCAtMjMwMiw2ICYjNDM7MjI5NiwxMiBAQCBpbnQgaWNlX3B0cF9yZWFkX3R4X2h3dHN0YW1wX3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHUzMiAqdHNfc3RhdHVzKVxuICAqIHRvIHNldHRsZS4gVGhpcyBwcm92aWRlcyBhIGNvbnRyb2xsZWQgd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgUEhZXG4gICogd2l0aG91dCByZXF1aXJpbmcgYSBmdWxsIGRldmljZSByZXNldC5cbiAgKlxuJiM0MzsgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGVcbiYjNDM7ICogUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTLCByZWFkIGV2ZXJ5IHRpbWVzdGFtcCBpbmRleCBwcmlvciB0byBwZXJmb3JtaW5nXG4mIzQzOyAqIHRoZSBzb2Z0IHJlc2V0LiBUaGUgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIHJlYWRzIGVuc3VyZSB0aGF0IHRoZSByZWdpb25cbiYjNDM7ICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltZXN0YW1wXG4mIzQzOyAqIGNvdW50ZXIgaXMgcmVzZXQgdG8gemVyby5cbiYjNDM7ICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgd2hlblxuICAqICAgICAgICAgcmVhZGluZyBvciB3cml0aW5nIHRoZSBQSFkgcmVnaXN0ZXIuXG4gICovXG5AQCAtMjMxMCw2ICYjNDM7MjMxMCwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXHR1MzIgZ2xvYmFsX3ZhbDtcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0ZXJyID0gaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhodywgcG9ydCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIGNsZWFyIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgIHBvcnQsIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsIFx1MDAyNmdsb2JhbF92YWwpO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBQSFlfUkVHX0dMT0JBTCBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCYjMzQ7LFxuQEAgLTU4MDEsOCAmIzQzOzU4MDgsOSBAQCB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5KHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9lODJ4KGh3KTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxuLVx0XHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpO1xuLVx0XHRicmVhaztcbiYjNDM7XHRcdC8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZlxuJiM0MztcdFx0ICogdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlLlxuJiM0MztcdFx0ICovXG4gXHRjYXNlIElDRV9NQUNfRTgxMDpcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O0FsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSBpc29sYXRlZCB0byB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBFODAwIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg4NzI1ZjAyN2IxMTBjMWU4MjY0N2M1ZWE0ODAzYWE2YzVlM2FmYTcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMTowMzoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMKaW5kZXggMmRjMzYyOWQ2ZDBmNi4uZDE2NDNiZjhhMWI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmMKQEAgLTY2LDE4ICYjNDM7NjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7Y3BpX3BoeV9sb2NrW2ldKTsKIAlyZWZjb3VudF9zZXQoJmFtcDthZGFwdGVyLSZndDtyZWZjb3VudCwgMSk7CiAKLQltdXRleF9pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubGlzdCk7CiAKIAlyZXR1cm4gYWRhcHRlcjsKIH0KIAogc3RhdGljIHZvaWQgaWNlX2FkYXB0ZXJfZnJlZShzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JV0FSTl9PTighbGlzdF9lbXB0eSgmYW1wO2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSk7CiYjNDM7CVdBUk5fT04oIWxpc3RfZW1wdHkoJmFtcDthZGFwdGVyLSZndDtwb3J0cy5saXN0KSk7CiAJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGFkYXB0ZXItJmd0O2NwaV9waHlfbG9jayk7IGkmIzQzOyYjNDM7KQogCQltdXRleF9kZXN0cm95KCZhbXA7YWRhcHRlci0mZ3Q7Y3BpX3BoeV9sb2NrW2ldKTsKLQltdXRleF9kZXN0cm95KCZhbXA7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiAKIAlrZnJlZShhZGFwdGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKaW5kZXggNGY2OTVmMzJkYTNkOC4uMzk5MjNkZWRkNTM0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmgKQEAgLTE5LDEzICYjNDM7MTksMTMgQEAgc3RydWN0IGljZV9wZjsKICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBkYXRhIHVzZWQgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIGFkYXB0ZXIgcG9ydHMKICAqCi0gKiBAcG9ydHM6IGxpc3Qgb2YgcG9ydHMKJiM0MzsgKiBAbGlzdDogbGlzdCBvZiBwb3J0cwogICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0CiAgKi8KIHN0cnVjdCBpY2VfcG9ydF9saXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJLyogVG8gc3luY2hyb25pemUgdGhlIHBvcnRzIGxpc3Qgb3BlcmF0aW9ucyAqLwotCXN0cnVjdCBtdXRleCBsb2NrOwomIzQzOwlzcGlubG9ja190IGxvY2s7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKaW5kZXggZDg4ODM1NDgyZDNhYS4uZDEyOTUyMTcxYTk5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMKQEAgLTMyNDgsNyAmIzQzOzMyNDgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21pc2NfaW50cl90aHJlYWRfZm4oaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpCiAJaWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7CiAJaWNlX2ZsdXNoKGh3KTsKIAotCWlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHsKJiM0MzsJaWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkgewogCQkvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LAogCQkgKiByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGl0IGFnYWluLgogCQkgKi8KQEAgLTY3NDUsNyAmIzQzOzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQlpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTsKIAkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktJmd0O25ldGRldik7CiAJCW5ldGlmX2NhcnJpZXJfb24odnNpLSZndDtuZXRkZXYpOwotCQlpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCB0cnVlKTsKIAl9CiAKIAkvKiBQZXJmb3JtIGFuIGluaXRpYWwgcmVhZCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgbm93IHRvCkBAIC03MjczLDcgJiM0Mzs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAKIAlpZiAodnNpLSZndDtuZXRkZXYpIHsKIAkJdmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTsKLQkJaWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktJmd0O2JhY2ssIGZhbHNlKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYodnNpLSZndDtuZXRkZXYpOwogCQluZXRpZl90eF9kaXNhYmxlKHZzaS0mZ3Q7bmV0ZGV2KTsKIAl9CkBAIC03Nzk0LDYgJiM0Mzs3NzkyLDE0IEBAIHN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIAogCWljZV91cGRhdGVfcGZfbmV0ZGV2X2xpbmsocGYpOwogCiYjNDM7CWlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi0mZ3Q7ZmxhZ3MpICZhbXA7JmFtcDsgcGYtJmd0O2h3LnBvcnRfaW5mbykgewomIzQzOwkJYm9vbCBsaW5rX3VwOwomIzQzOwomIzQzOwkJbGlua191cCA9ICEhKHBmLSZndDtody5wb3J0X2luZm8tJmd0O3BoeS5saW5rX2luZm8ubGlua19pbmZvICZhbXA7CiYjNDM7CQkJICAgICBJQ0VfQVFfTElOS19VUCk7CiYjNDM7CQlpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTsKJiM0MzsJfQomIzQzOwogCS8qIHRlbGwgdGhlIGZpcm13YXJlIHdlIGFyZSB1cCAqLwogCWVyciA9IGljZV9zZW5kX3ZlcnNpb24ocGYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jCmluZGV4IGVhZWMzNmFiNmFlM2YuLmE1ZWZiMGE5NTk0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuYwpAQCAtMSw2ICYjNDM7MSw4IEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VsaXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXRfYml0LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ljZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWNlX2xpYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aWNlX3RyYWNlLmgmIzM0OwpAQCAtMzYyLDkgJiM0MzszNjQsMTIgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApCiBzdGF0aWMgYm9vbAogaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIHsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQgPQomIzQzOwkJY29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7CiYjNDM7CiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3R4LSZndDtsb2NrKTsKIAotCXJldHVybiB0eC0mZ3Q7aW5pdCAmYW1wOyZhbXA7ICF0eC0mZ3Q7Y2FsaWJyYXRpbmc7CiYjNDM7CXJldHVybiB0eC0mZ3Q7aW5pdCAmYW1wOyZhbXA7ICF0eC0mZ3Q7Y2FsaWJyYXRpbmcgJmFtcDsmYW1wOyBwdHBfcG9ydC0mZ3Q7bGlua191cDsKIH0KIAogLyoqCkBAIC01NjEsNyAmIzQzOzU2Niw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogCXN0cnVjdCBpY2VfcGYgKnBmOwogCXN0cnVjdCBpY2VfaHcgKmh3OwogCXU2NCB0c3RhbXBfcmVhZHk7Ci0JYm9vbCBsaW5rX3VwOwogCWludCBlcnI7CiAJdTggaWR4OwogCkBAIC01NjksNyAmIzQzOzU3Myw3IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogCXBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpOwogCWh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiAKLQlpZiAoIXR4LSZndDtpbml0KQomIzQzOwlpZiAoIXR4LSZndDtpbml0IHx8IGJpdG1hcF9lbXB0eSh0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKSkKIAkJcmV0dXJuOwogCiAJLyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovCkBAIC01NzksMTQgJiM0Mzs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJCQlyZXR1cm47CiAJfQogCi0JLyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqLwotCWxpbmtfdXAgPSBwdHBfcG9ydC0mZ3Q7bGlua191cDsKLQogCWZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKSB7CiAJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBzaGh3dHN0YW1wcyA9IHt9OwogCQl1OCBwaHlfaWR4ID0gaWR4ICYjNDM7IHR4LSZndDtvZmZzZXQ7CiAJCXU2NCByYXdfdHN0YW1wID0gMCwgdHN0YW1wOwotCQlib29sIGRyb3BfdHMgPSAhbGlua191cDsKJiM0MzsJCWJvb2wgZHJvcF90cyA9IGZhbHNlOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCS8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqLwpAQCAtNjE5LDYgJiM0Mzs2MjAsMTkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiAJCWlmIChlcnIgJmFtcDsmYW1wOyAhZHJvcF90cykKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKiB2ZXJpZnkgcmVhZHkgYml0IGNsZWFyZWQgKi8KJiM0MzsJCWlmICh0eC0mZ3Q7aGFzX3JlYWR5X2JpdG1hcCkgewomIzQzOwkJCWVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtJmd0O2Jsb2NrLCAmYW1wO3RzdGFtcF9yZWFkeSk7CiYjNDM7CQkJaWYgKGVyciB8fCB0c3RhbXBfcmVhZHkgJmFtcDsgQklUX1VMTChwaHlfaWR4KSkgewomIzQzOwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpZHgsIHR4LSZndDtzdGFsZSkpCiYjNDM7CQkJCQlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCAmIzM0O1BIWSBwb3J0ICV1IGZhaWxlZCB0byBjbGVhciByZWFkeSBiaXQgZm9yIGlkeCAldVxuJiMzNDssCiYjNDM7CQkJCQkJcHRwX3BvcnQtJmd0O3BvcnRfbnVtLCBwaHlfaWR4KTsKJiM0MzsJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKIAkJaWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC0mZ3Q7dHN0YW1wc1tpZHhdLnNrYiwgaWR4KTsKIAogCQkvKiBGb3IgUEhZcyB3aGljaCBkb24mIzM5O3QgaW1wbGVtZW50IGEgcHJvcGVyIHRpbWVzdGFtcCByZWFkeQpAQCAtNjczLDIwICYjNDM7Njg3LDMzIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KQogCXBmLSZndDtwdHAudHhfaHd0c3RhbXBfZ29vZCAmIzQzOz0gdHN0YW1wX2dvb2Q7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3Uoc3RydWN0IGtyZWYgKnJlZikKJiM0Mzt7CiYjNDM7CXdha2VfdXBfdmFyKHJlZik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpCiB7CiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCW11dGV4X2xvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7CiAJCXN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9ICZhbXA7cG9ydC0mZ3Q7dHg7CiAKLQkJaWYgKCF0eCB8fCAhdHgtJmd0O2luaXQpCiYjNDM7CQlpZiAoIXR4LSZndDtpbml0KQogCQkJY29udGludWU7CiAKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiAJCWljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAodHgpOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJa3JlZl9wdXQoJmFtcDtwb3J0LSZndDtyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7CiAJfQotCW11dGV4X3VubG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtNzI1LDYgJiM0Mzs3NTIsMzcgQEAgaWNlX3B0cF9hbGxvY190eF90cmFja2VyKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkCiYjNDM7aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDEwKTsKJiM0MzsJc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKJiM0MzsJdTY0IHRzdGFtcF9yZWFkeTsKJiM0MzsJYm9vbCBwZW5kaW5nOwomIzQzOwl1OCBpZHg7CiYjNDM7CiYjNDM7CWlmIChody0mZ3Q7cmVzZXRfb25nb2luZykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJaWYgKGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtJmd0O2Jsb2NrLCAmYW1wO3RzdGFtcF9yZWFkeSkpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJZm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LSZndDtpbl91c2UsIHR4LSZndDtsZW4pIHsKJiM0MzsJCQlpZiAoISh0c3RhbXBfcmVhZHkgJmFtcDsgQklUX1VMTChpZHggJiM0MzsgdHgtJmd0O29mZnNldCkpKQomIzQzOwkJCQlwZW5kaW5nID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsJCWlmICghcGVuZGluZykKJiM0MzsJCQlyZXR1cm47CiYjNDM7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsKJiM0MzsJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTsKJiM0MzsKJiM0MzsJZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcbiYjMzQ7LAomIzQzOwkJdHgtJmd0O2Jsb2NrKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyCiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlCkBAIC03NDEsNiAmIzQzOzc5OSw4IEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KQogCWludCBlcnI7CiAJdTggaWR4OwogCiYjNDM7CWljZV9wdHBfd2FpdF9mb3JfdHJhY2tlcl9kcmFpbihwZiwgdHgpOwomIzQzOwogCWVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtJmd0O2Jsb2NrLCAmYW1wO3RzdGFtcF9yZWFkeSk7CiAJaWYgKGVycikgewogCQlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCAmIzM0O0ZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcbiYjMzQ7LApAQCAtNzc5LDEyICYjNDM7ODM5LDEwIEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KQogICogaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUgLSBNYXJrIHVuZmluaXNoZWQgdGltZXN0YW1wcyBhcyBzdGFsZQogICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrCiAgKgotICogTWFyayBjdXJyZW50bHkgb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcyBhcyBzdGFsZS4gVGhpcyBwcmV2ZW50cyBzZW5kaW5nCi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nCi0gKiB0aGUgNDBiaXQgaGFyZHdhcmUgdGltZXN0YW1wIGluY29ycmVjdGx5LgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldAotICogdGltZSByZXF1ZXN0LgomIzQzOyAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgdGhlIGRyaXZlcgomIzQzOyAqIGZyb20gcmVwb3J0aW5nIHRoZSB0aW1lc3RhbXAgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIGNhbGxlZCB0byBpbmZvcm0gdGhlCiYjNDM7ICogZHJpdmVyIHRoYXQgYSB0aW1lc3RhbXAgaXMgZXhwZWN0ZWQgdG8gZmFpbCBpZiBpdCB3YXMgaW5pdGlhdGVkIGFzIHRoZSBsaW5rCiYjNDM7ICogd2VudCBkb3duLgogICovCiBzdGF0aWMgdm9pZAogaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KQpAQCAtODA4LDggJiM0Mzs4NjYsMTYgQEAgaWNlX3B0cF9mbHVzaF9hbGxfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cywgbGlzdF9ub2RlKQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QsIGxpc3Rfbm9kZSkgewomIzQzOwkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYW1wO3BvcnQtJmd0O3JlZikpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKIAkJaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHB0cF9wb3J0X3RvX3BmKHBvcnQpLCAmYW1wO3BvcnQtJmd0O3R4KTsKJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWtyZWZfcHV0KCZhbXA7cG9ydC0mZ3Q7cmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTk5NCwxMyAmIzQzOzEwNjAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi0mZ3Q7cHRwLmt3b3JrZXIsICZhbXA7cGYtJmd0O3B0cC53b3JrLAogCQkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7CiAJfQotCi0JLyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlCi0JICogYmVlbiBjYXB0dXJlZCBpbiBoYXJkd2FyZSBiZWZvcmUgdGhlIHRpbWUgdXBkYXRlLiBUaGlzIGNvdWxkIGxlYWQKLQkgKiB0byB1cyBleHRlbmRpbmcgdGhlbSB3aXRoIHRoZSB3cm9uZyBjYWNoZWQgdmFsdWUgcmVzdWx0aW5nIGluCi0JICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuCi0JICovCi0JaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoJmFtcDtwZi0mZ3Q7cHRwLnBvcnQudHgpOwogfQogCiAvKioKQEAgLTExMzMsNiAmIzQzOzExOTIsNyBAQCBzdGF0aWMgaW50IGljZV9wdHBfY2hlY2tfdHhfZmlmbyhzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0KQogc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiB7CiAJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaWNlX3BmICpwZjsKIAlzdHJ1Y3QgaWNlX2h3ICpodzsKIAlpbnQgdHhfZXJyOwpAQCAtMTE1NSwxMiAmIzQzOzEyMTUsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspCiAJCXR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LSZndDtwb3J0X251bSk7CiAJcnhfZXJyID0gaWNlX3BoeV9jZmdfcnhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtJmd0O3BvcnRfbnVtKTsKIAlpZiAodHhfZXJyIHx8IHJ4X2VycikgewotCQkvKiBUeCBhbmQvb3IgUnggb2Zmc2V0IG5vdCB5ZXQgY29uZmlndXJlZCwgdHJ5IGFnYWluIGxhdGVyICovCiYjNDM7CQkvKiBUeCBhbmQvb3IgUnggb2Zmc2V0IG5vdCB5ZXQgY29uZmlndXJlZCwgdHJ5IGFnYWluIGxhdGVyLgomIzQzOwkJICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldAomIzQzOwkJICogY2FsaWJyYXRpb24gY2Fubm90IGNvbXBsZXRlIHVudGlsIGF0IGxlYXN0IG9uZSBwYWNrZXQgaGFzCiYjNDM7CQkgKiBiZWVuIHRyYW5zbWl0dGVkLCBzbyB0aGUgZmlyc3QgcmV0cmllcyByb3V0aW5lbHkgbGFuZCBoZXJlLgomIzQzOwkJICovCiYjNDM7CQlkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCSYjMzQ7UFRQIG9mZnNldCBub3QgeWV0IHZhbGlkIGZvciBwb3J0ICV1ICh0eF9lcnI9JWQgcnhfZXJyPSVkKVxuJiMzNDssCiYjNDM7CQkJcG9ydC0mZ3Q7cG9ydF9udW0sIHR4X2VyciwgcnhfZXJyKTsKIAkJa3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtJmd0O3B0cC5rd29ya2VyLAogCQkJCQkgICAmYW1wO3BvcnQtJmd0O292X3dvcmssCiAJCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiAJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CS8qIFR4IGFuZCBSeCBvZmZzZXRzIGFyZSBub3cgY29uZmlndXJlZCwgZW5hYmxlIFR4IHRpbWVzdGFtcHMgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7CiYjNDM7CXBvcnQtJmd0O3R4LmNhbGlicmF0aW5nID0gZmFsc2U7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksCiYjNDM7CQkmIzM0O1BUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxuJiMzNDssCiYjNDM7CQlwb3J0LSZndDtwb3J0X251bSk7CiB9CiAKIC8qKgpAQCAtMTI0NiwxMCAmIzQzOzEzMjIsMTMgQEAgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0KQogCQlpZiAoZXJyKQogCQkJYnJlYWs7CiAKLQkJLyogRW5hYmxlIFR4IHRpbWVzdGFtcHMgcmlnaHQgYXdheSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3B0cF9wb3J0LSZndDt0eC5sb2NrLCBmbGFncyk7Ci0JCXB0cF9wb3J0LSZndDt0eC5jYWxpYnJhdGluZyA9IGZhbHNlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cHRwX3BvcnQtJmd0O3R4LmxvY2ssIGZsYWdzKTsKJiM0MzsJCS8qIERvIG5vdCBjbGVhciBjYWxpYnJhdGluZyBmbGFnIGhlcmUuIFR4IHRpbWVzdGFtcHMgcmVtYWluCiYjNDM7CQkgKiBkaXNhYmxlZCB1bnRpbCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoKSBoYXMgdmVyaWZpZWQKJiM0MzsJCSAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC4KJiM0MzsJCSAqIENsZWFyaW5nIGl0IGhlcmUgd291bGQgYWxsb3cgVHggdGltZXN0YW1wcyB0byBiZSByZXBvcnRlZAomIzQzOwkJICogYmVmb3JlIHRoZSBQSFkgb2Zmc2V0IHJlZ2lzdGVycyBhcmUgY29uZmlndXJlZCwgbGVhZGluZwomIzQzOwkJICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuCiYjNDM7CQkgKi8KIAogCQlrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi0mZ3Q7cHRwLmt3b3JrZXIsICZhbXA7cHRwX3BvcnQtJmd0O292X3dvcmssCiAJCQkJCSAgIDApOwpAQCAtMTI4MCwxNyAmIzQzOzEzNTksMjMgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cCkKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydDsKIAlzdHJ1Y3QgaWNlX2h3ICpodyA9ICZhbXA7cGYtJmd0O2h3OwogCi0JaWYgKHBmLSZndDtwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkKLQkJcmV0dXJuOwotCiAJcHRwX3BvcnQgPSAmYW1wO3BmLSZndDtwdHAucG9ydDsKIAomIzQzOwlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7cHRwX3BvcnQtJmd0O3JlZikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogVXBkYXRlIGNhY2hlZCBsaW5rIHN0YXR1cyBmb3IgdGhpcyBwb3J0IGltbWVkaWF0ZWx5ICovCiAJcHRwX3BvcnQtJmd0O2xpbmtfdXAgPSBsaW5rdXA7CiAKJiM0MzsJaWYgKHBmLSZndDtwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSkKJiM0MzsJCWdvdG8gZXhpdF9rcmVmX3B1dDsKJiM0MzsKIAkvKiBTa2lwIEhXIHdyaXRlcyBpZiByZXNldCBpcyBpbiBwcm9ncmVzcyAqLwogCWlmIChwZi0mZ3Q7aHcucmVzZXRfb25nb2luZykKLQkJcmV0dXJuOwomIzQzOwkJZ290byBleGl0X2tyZWZfcHV0OwomIzQzOwomIzQzOwlpZiAoIWxpbmt1cCkKJiM0MzsJCWljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKCZhbXA7cHRwX3BvcnQtJmd0O3R4KTsKIAogCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUgJmFtcDsmYW1wOwogCSAgICB0ZXN0X2JpdChJQ0VfRkxBR19EUExMLCBwZi0mZ3Q7ZmxhZ3MpKSB7CkBAIC0xMzMzLDE3ICYjNDM7MTQxOCwyMCBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKQogCWNhc2UgSUNFX01BQ19FODEwOgogCWNhc2UgSUNFX01BQ19FODMwOgogCQkvKiBEbyBub3QgcmVjb25maWd1cmUgRTgxMCBvciBFODMwIFBIWSAqLwotCQlyZXR1cm47CiYjNDM7CQlnb3RvIGV4aXRfa3JlZl9wdXQ7CiAJY2FzZSBJQ0VfTUFDX0dFTkVSSUM6CiAJCWljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7Ci0JCXJldHVybjsKJiM0MzsJCWdvdG8gZXhpdF9rcmVmX3B1dDsKIAljYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OgogCQlpZiAobGlua3VwKQogCQkJaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHB0cF9wb3J0KTsKLQkJcmV0dXJuOwomIzQzOwkJZ290byBleGl0X2tyZWZfcHV0OwogCWRlZmF1bHQ6CiAJCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCAmIzM0OyVzOiBVbmtub3duIFBIWSB0eXBlXG4mIzM0OywgX19mdW5jX18pOwogCX0KJiM0MzsKJiM0MztleGl0X2tyZWZfcHV0OgomIzQzOwlrcmVmX3B1dCgmYW1wO3B0cF9wb3J0LSZndDtyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7CiB9CiAKIC8qKgpAQCAtMTQyNCwxNiAmIzQzOzE1MTIsMjEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHN0cnVjdCBpY2VfcGYgKnBmKQogICovCiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2goZW50cnksICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSB7Ci0JCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LAotCQkJCQkJICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsCi0JCQkJCQkgICAgICAgbGlzdF9ub2RlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtwb3J0LSZndDtyZWYpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkJaWYgKHBvcnQtJmd0O2xpbmtfdXApCiAJCQlpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocG9ydCk7CiYjNDM7CiYjNDM7CQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3BvcnQtJmd0O3JlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTsKIAl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKQEAgLTE5MjcsOCAmIzQzOzIwMjAsOSBAQCBpY2VfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKIAkvKiBSZWVuYWJsZSBwZXJpb2RpYyBvdXRwdXRzICovCiAJaWNlX3B0cF9lbmFibGVfYWxsX3Blcm91dChwZik7CiAKLQkvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMyAqLwotCWlmIChody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDKQomIzQzOwkvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMy9FODI1LUMgKi8KJiM0MzsJaWYgKGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMgfHwKJiM0MzsJICAgIGh3LSZndDttYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSkKIAkJaWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkocGYpOwogZXhpdDoKIAlpZiAoZXJyKSB7CkBAIC0yNjM4LDExICYjNDM7MjczMiwxMyBAQCBzOCBpY2VfcHRwX3JlcXVlc3RfdHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQkgKiBhIHJlZmVyZW5jZSB0byB0aGUgc2tiIGFuZCB0aGUgc3RhcnQgdGltZSB0byBhbGxvdyBkaXNjYXJkaW5nIG9sZAogCQkgKiByZXF1ZXN0cy4KIAkJICovCi0JCXNldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlKTsKLQkJY2xlYXJfYml0KGlkeCwgdHgtJmd0O3N0YWxlKTsKIAkJdHgtJmd0O3RzdGFtcHNbaWR4XS5zdGFydCA9IGppZmZpZXM7CiAJCXR4LSZndDt0c3RhbXBzW2lkeF0uc2tiID0gc2tiX2dldChza2IpOwogCQlza2Jfc2hpbmZvKHNrYiktJmd0O3R4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTOwomIzQzOwkJY2xlYXJfYml0KGlkeCwgdHgtJmd0O3N0YWxlKTsKJiM0MzsJCS8qIEVuc3VyZSBpbmRleCBpcyBzZXR1cCBiZWZvcmUgbWFya2luZyBpdCBhcyB1c2VkICovCiYjNDM7CQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKJiM0MzsJCXNldF9iaXQoaWR4LCB0eC0mZ3Q7aW5fdXNlKTsKIAkJaWNlX3RyYWNlKHR4X3RzdGFtcF9yZXF1ZXN0LCBza2IsIGlkeCk7CiAJfQogCkBAIC0yNjc4LDc0ICYjNDM7Mjc3NCw1NiBAQCB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZikKIAl9CiB9CiAKLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCkKJiM0MztzdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIGJvb2wgaW5faXJxKQogewotCWJvb2wgbW9yZV90aW1lc3RhbXBzOwomIzQzOwlERUNMQVJFX0JJVE1BUCh0c3RhbXBzLCBJTkRFWF9QRVJfUE9SVF9NQVgpID0ge307CiAKIAlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJmFtcDt0eC0mZ3Q7bG9jaykgewogCQlpZiAoIXR4LSZndDtpbml0KQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCW1vcmVfdGltZXN0YW1wcyA9ICFiaXRtYXBfZW1wdHkodHgtJmd0O2luX3VzZSwgdHgtJmd0O2xlbik7Ci0JfQomIzQzOwkJaWYgKGluX2lycSkgewomIzQzOwkJCWlmICghaWNlX3B0cF9pc190eF90cmFja2VyX3VwKHR4KSkKJiM0MzsJCQkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIG1vcmVfdGltZXN0YW1wczsKJiM0MzsJCQlyZXR1cm4gYml0bWFwX2FuZG5vdCh0c3RhbXBzLCB0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7c3RhbGUsIHR4LSZndDtsZW4pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC0mZ3Q7aW5fdXNlLCB0eC0mZ3Q7bGVuKTsKJiM0MzsJCX0KJiM0MzsJfQogfQogCi1zdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSkKIHsKJiM0MzsJYm9vbCBoYXZlX3RzdGFtcHMgPSBmYWxzZTsKIAlzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0OwogCi0Jc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMucG9ydHMsCi0JCQkJICAgIGxpc3Rfbm9kZSkgewotCQkJc3RydWN0IGljZV9wdHBfdHggKnR4ID0gJmFtcDtwb3J0LSZndDt0eDsKLQotCQkJaWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSkKLQkJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKJiM0MzsJCWlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcygmYW1wO3BvcnQtJmd0O3R4LCBpbl9pcnEpKSB7CiYjNDM7CQkJaGF2ZV90c3RhbXBzID0gdHJ1ZTsKJiM0MzsJCQlicmVhazsKIAkJfQogCX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlyZXR1cm4gZmFsc2U7CiYjNDM7CXJldHVybiBoYXZlX3RzdGFtcHM7CiB9CiAKLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7Ym9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpCiB7Ci0Jc3RydWN0IGljZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKLQlpbnQgcmV0OwotCi0JLyogQ2hlY2sgc29mdHdhcmUgaW5kaWNhdG9yICovCiAJc3dpdGNoIChwZi0mZ3Q7cHRwLnR4X2ludGVycnVwdF9tb2RlKSB7CiAJY2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9OT05FOgogCQlyZXR1cm4gZmFsc2U7CiAJY2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOgotCQlpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoJmFtcDtwZi0mZ3Q7cHRwLnBvcnQudHgpKQotCQkJcmV0dXJuIHRydWU7Ci0JCWJyZWFrOwomIzQzOwkJcmV0dXJuIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKCZhbXA7cGYtJmd0O3B0cC5wb3J0LnR4LCBpbl9pcnEpOwogCWNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOgotCQlpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKJiM0MzsJCXJldHVybiBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYsIGluX2lycSk7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTkNFKDEsICYjMzQ7VW5leHBlY3RlZCBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG1vZGUgJXVcbiYjMzQ7LAogCQkJICBwZi0mZ3Q7cHRwLnR4X2ludGVycnVwdF9tb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogQ2hlY2sgaGFyZHdhcmUgaW5kaWNhdG9yICovCi0JcmV0ID0gaWNlX2NoZWNrX3BoeV90eF90c3RhbXBfcmVhZHkoaHcpOwotCWlmIChyZXQgJmx0OyAwKSB7Ci0JCWRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksICYjMzQ7VW5hYmxlIHRvIHJlYWQgUEhZIFR4IHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxuJiMzNDssCi0JCQlyZXQpOwotCQkvKiBTdG9wIHRyaWdnZXJpbmcgSVJRcyBpZiB3ZSYjMzk7cmUgdW5hYmxlIHRvIHJlYWQgUEhZICovCiAJCXJldHVybiBmYWxzZTsKIAl9Ci0KLQkvKiBpY2VfY2hlY2tfcGh5X3R4X3RzdGFtcF9yZWFkeSgpIHJldHVybnMgMSBpZiB0aGVyZSBhcmUgdGltZXN0YW1wcwotCSAqIGF2YWlsYWJsZSwgMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGluZyB0aW1lc3RhbXBzLCBhbmQgYSBuZWdhdGl2ZQotCSAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLgotCSAqLwotCXJldHVybiByZXQgJmd0OyAwOwogfQogCiAvKioKQEAgLTI3OTksNyAmIzQzOzI4NzcsNyBAQCBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZikKIAkJLyogRTgzMCBjYW4gcmVhZCB0aW1lc3RhbXBzIGluIHRoZSB0b3AgaGFsZiB1c2luZyByZDMyKCkgKi8KIAkJaWNlX3B0cF9wcm9jZXNzX3RzKHBmKTsKIAotCQlpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7CiYjNDM7CQlpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7CiAJCQkvKiBQcm9jZXNzIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMuIElmIHRoZXJlCiAJCQkgKiBpcyBtb3JlIHdvcmssIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgYWdhaW4uCiAJCQkgKi8KQEAgLTI4MzksOSAmIzQzOzI5MTcsMTMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9tYXliZV90cmlnZ2VyX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZikKIAogCXJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTsKIAlpZiAocmV0ICZsdDsgMCkgewotCQlkZXZfZGJnKGRldiwgJiMzNDtQVFAgcGVyaW9kaWMgdGFzayB1bmFibGUgdG8gcmVhZCBQSFkgdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXG4mIzM0OywKLQkJCXJldCk7Ci0JfSBlbHNlIGlmIChyZXQpIHsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O1VuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKHJldCkpOwomIzQzOwkJLyogRG9uJiMzOTt0IHRyaWdnZXIgYW4gSVJRIGlmIHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHRoZSBQSFkgKi8KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCB8fCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgZmFsc2UpKSB7CiAJCWRldl9kYmcoZGV2LCAmIzM0O1BUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cbiYjMzQ7KTsKIAogCQl3cjMyKGh3LCBQRklOVF9PSUNSLCBQRklOVF9PSUNSX1RTWU5fVFhfTSk7CkBAIC0yODkwLDE0ICYjNDM7Mjk3MiwxNiBAQCB2b2lkIGljZV9wdHBfcXVldWVfd29yayhzdHJ1Y3QgaWNlX3BmICpwZikKIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLAogCQkJCQllbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKJiM0MzsJc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDsKIAotCWxpc3RfZm9yX2VhY2goZW50cnksICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLnBvcnRzKSB7Ci0JCXN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LAotCQkJCQkJICAgICAgIHN0cnVjdCBpY2VfcHRwX3BvcnQsCi0JCQkJCQkgICAgICAgbGlzdF9ub2RlKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5saXN0LCBsaXN0X25vZGUpIHsKIAkJc3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpOwogCiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7cG9ydC0mZ3Q7cmVmKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlpZiAoIWljZV9pc19wcmltYXJ5KCZhbXA7cGVlcl9wZi0mZ3Q7aHcpKSB7CiAJCQlpZiAocmVidWlsZCkgewogCQkJCS8qIFRPRE86IFdoZW4gaW1wbGVtZW50aW5nIHJlYnVpbGQ9dHJ1ZToKQEAgLTI5MDksNyAmIzQzOzI5OTMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIHJlYnVpbGQsCiAJCQkJaWNlX3B0cF9wcmVwYXJlX2Zvcl9yZXNldChwZWVyX3BmLCByZXNldF90eXBlKTsKIAkJCX0KIAkJfQomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJa3JlZl9wdXQoJmFtcDtwb3J0LSZndDtyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7CiAJfQomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyoqCkBAIC0yOTM2LDExICYjNDM7MzAyNCwxNyBAQCB2b2lkIGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKQogCWlmIChyZXNldF90eXBlID09IElDRV9SRVNFVF9QRlIpCiAJCXJldHVybjsKIAomIzQzOwkvKiBDYW5jZWwgdGhlIG9mZnNldCB2ZXJpZmljYXRpb24gd29yayBmb3IgRTgyeCBiZWZvcmUgcmVsZWFzaW5nIHRoZQomIzQzOwkgKiBUeCB0cmFja2VyLiBJZiBvdl93b3JrIGlzIHJ1bm5pbmcgZHVyaW5nIHJlc2V0LCBpdCBtYXkgaXNzdWUKJiM0MzsJICogc2lkZWJhbmQgcXVldWUgY29tbWFuZHMgdGhhdCB3aWxsIGZhaWwgb3IgdGltZW91dCwgYW5kIG1heQomIzQzOwkgKiByZWZlcmVuY2Ugc3RhdGUgdGhhdCBpcyBiZWluZyB0b3JuIGRvd24uCiYjNDM7CSAqLwomIzQzOwlpZiAoaHctJmd0O21hY190eXBlID09IElDRV9NQUNfR0VORVJJQykKJiM0MzsJCWt0aHJlYWRfY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cHRwLSZndDtwb3J0Lm92X3dvcmspOwomIzQzOwogCWlmIChpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikgJmFtcDsmYW1wOyBody0mZ3Q7bWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpCiAJCWljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhwZiwgZmFsc2UsIHJlc2V0X3R5cGUpOwogCi0JaWNlX3B0cF9yZWxlYXNlX3R4X3RyYWNrZXIocGYsICZhbXA7cGYtJmd0O3B0cC5wb3J0LnR4KTsKLQogCS8qIERpc2FibGUgcGVyaW9kaWMgb3V0cHV0cyAqLwogCWljZV9wdHBfZGlzYWJsZV9hbGxfcGVyb3V0KHBmKTsKIApAQCAtMzA4NiwxMSAmIzQzOzMxODAsMTEgQEAgc3RhdGljIGludCBpY2VfcHRwX3NldHVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cHRwLSZndDtwb3J0Lmxpc3Rfbm9kZSk7Ci0JbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHRwLSZndDtwb3J0LnJlZik7CiAKLQlsaXN0X2FkZCgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsCi0JCSAmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5wb3J0cyk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlzcGluX2xvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CWxpc3RfYWRkX3JjdSgmYW1wO3B0cC0mZ3Q7cG9ydC5saXN0X25vZGUsICZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKIAogCS8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LgogCSAqIE9ubHkgbWVhbmluZ2Z1bCBvbiBFODI1IChvdGhlciBNQUMgdHlwZXMgZG9uJiMzOTt0IGV4cG9zZSB0eC1jbGsKQEAgLTMxMTMsMTIgJiM0MzszMjA3LDMyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZikKIHsKIAlzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gJmFtcDtwZi0mZ3Q7cHRwOwomIzQzOwlzdHJ1Y3Qga3JlZiAqcmVmOwogCi0JaWYgKHBmLSZndDtody5tYWNfdHlwZSAhPSBJQ0VfTUFDX1VOS05PV04pIHsKLQkJbXV0ZXhfbG9jaygmYW1wO3BmLSZndDthZGFwdGVyLSZndDtwb3J0cy5sb2NrKTsKLQkJbGlzdF9kZWwoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwotCX0KJiM0MzsJaWYgKHBmLSZndDtody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmcKJiM0MzsJICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsCiYjNDM7CSAqIGZpcnN0IHJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBsaXN0LCB0aGVuIGRyb3AgdGhlIHByaW1hcnkKJiM0MzsJICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGwKJiM0MzsJICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG8KJiM0MzsJICogZW5zdXJlIHRoYXQgYWxsIFJDVSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IG1pZ2h0IGF0dGVtcHQgdG8KJiM0MzsJICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7cGYtJmd0O2FkYXB0ZXItJmd0O3BvcnRzLmxvY2spOwomIzQzOwlsaXN0X2RlbF9yY3UoJmFtcDtwdHAtJmd0O3BvcnQubGlzdF9ub2RlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtwZi0mZ3Q7YWRhcHRlci0mZ3Q7cG9ydHMubG9jayk7CiYjNDM7CiYjNDM7CXJlZiA9ICZhbXA7cHRwLSZndDtwb3J0LnJlZjsKJiM0MzsJa3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpOwomIzQzOwomIzQzOwlkZXZfV0FSTl9PTkNFKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLAomIzQzOwkJICAgICAgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgcG9ydCByZWZlcmVuY2VzIHRvIHJlbGVhc2UuIENvbnRpbnVpbmcgdG8gdW5sb2FkIGFueXdheXMuJiMzNDspOwomIzQzOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogLyoqCkBAIC0zMjEwLDkgJiM0MzszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKQogfQogCiAvKioKLSAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayB0aHJlYWRzCiYjNDM7ICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIHRoZSBQVFAga3dvcmtlcgogICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICogQHB0cDogUEYgUFRQIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZQomIzQzOyAqIHBlcmlvZGljIHdvcmsgaXMgbm90IHF1ZXVlZCBoZXJlOyB0aGUgY2FsbGVyIHN0YXJ0cyBpdCBvbmNlIHRoZSBQVFAKJiM0MzsgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLgogICovCiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKQogewpAQCAtMzIzMSw5ICYjNDM7MzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApCiAKIAlwdHAtJmd0O2t3b3JrZXIgPSBrd29ya2VyOwogCi0JLyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqLwotCWt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC0mZ3Q7a3dvcmtlciwgJmFtcDtwdHAtJmd0O3dvcmssIDApOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzNTUsNiAmIzQzOzM0NzAsMjIgQEAgdm9pZCBpY2VfcHRwX2luaXQoc3RydWN0IGljZV9wZiAqcGYpCiAJaWYgKGVycikKIAkJZ290byBlcnJfY2xlYW5fcGY7CiAKJiM0MzsJLyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwCiYjNDM7CSAqIChlLmcuIGFmdGVyIFBYRSBib290KSB3aXRoIG5vIGxpbmstY2hhbmdlIGVkZ2UgdG8gY2F0Y2ggaXQgbGF0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocGYtJmd0O2h3LnBvcnRfaW5mbykKJiM0MzsJCXB0cC0mZ3Q7cG9ydC5saW5rX3VwID0KJiM0MzsJCQkhIShwZi0mZ3Q7aHcucG9ydF9pbmZvLSZndDtwaHkubGlua19pbmZvLmxpbmtfaW5mbyAmYW1wOwomIzQzOwkJCUlDRV9BUV9MSU5LX1VQKTsKJiM0MzsKJiM0MzsJLyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uCiYjNDM7CSAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzCiYjNDM7CSAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMCiYjNDM7CSAqLwomIzQzOwllcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2NsZWFuX3BmOwomIzQzOwogCS8qIFN0YXJ0IHRoZSBQSFkgdGltZXN0YW1waW5nIGJsb2NrICovCiAJaWNlX3B0cF9yZXNldF9waHlfdGltZXN0YW1waW5nKHBmKTsKIApAQCAtMzM2Myw5ICYjNDM7MzQ5NCwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikKIAogCXB0cC0mZ3Q7c3RhdGUgPSBJQ0VfUFRQX1JFQURZOwogCi0JZXJyID0gaWNlX3B0cF9pbml0X3dvcmsocGYsIHB0cCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZXhpdDsKJiM0MzsJLyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlcgomIzQzOwkgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuCiYjNDM7CSAqLwomIzQzOwlrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtJmd0O2t3b3JrZXIsICZhbXA7cHRwLSZndDt3b3JrLCAwKTsKIAogCWRldl9pbmZvKGljZV9wZl90b19kZXYocGYpLCAmIzM0O1BUUCBpbml0IHN1Y2Nlc3NmdWxcbiYjMzQ7KTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaAppbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogI2RlZmluZSBfSUNFX1BUUF9IXwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VsaXN0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aWNlX3B0cF9ody5oJiMzNDsKQEAgLTEzMCw2ICYjNDM7MTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHggewogI2RlZmluZSBJTkRFWF9QRVJfUE9SVF9FODJYCQkxNgogI2RlZmluZSBJTkRFWF9QRVJfUE9SVAkJCTY0CiAKJiM0MzsvKiBNYXhpbXVtIG51bWJlciBvZiB0aW1lc3RhbXAgaW5kZXhlcyBhY3Jvc3MgYWxsIGRldmljZXMgKi8KJiM0MzsjZGVmaW5lIElOREVYX1BFUl9QT1JUX01BWCAgICAgICAgICAgICAgSU5ERVhfUEVSX1BPUlQKJiM0MzsKIC8qKgogICogc3RydWN0IGljZV9wdHBfcG9ydCAtIGRhdGEgdXNlZCB0byBpbml0aWFsaXplIGFuIGV4dGVybmFsIHBvcnQgZm9yIFBUUAogICoKQEAgLTEzOCw2ICYjNDM7MTQzLDcgQEAgc3RydWN0IGljZV9wdHBfdHggewogICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0JiMzOTtzIFBIWSBvZmZzZXQgaXMgdmFsaWQuCiAgKgogICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlCiYjNDM7ICogQHJlZjogcmVmZXJlbmNlIGNvdW50ZXIgZm9yIHVzZSB3aXRoIGFkYXB0ZXIgcG9ydHMgbGlzdAogICogQHR4OiBUeCB0aW1lc3RhbXAgdHJhY2tpbmcgZm9yIHRoaXMgcG9ydAogICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWQKICAqIEBwc19sb2NrOiBtdXRleCB1c2VkIHRvIHByb3RlY3QgdGhlIG92ZXJhbGwgUFRQIFBIWSBzdGFydCBwcm9jZWR1cmUKQEAgLTE0OSw2ICYjNDM7MTU1LDcgQEAgc3RydWN0IGljZV9wdHBfdHggewogICovCiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Rfbm9kZTsKJiM0MzsJc3RydWN0IGtyZWYgcmVmOwogCXN0cnVjdCBpY2VfcHRwX3R4IHR4OwogCXN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrOwogCXN0cnVjdCBtdXRleCBwc19sb2NrOyAvKiBwcm90ZWN0cyBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlICovCkBAIC0zMTIsNyAmIzQzOzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7CiB2b2lkIGljZV9wdHBfY29tcGxldGVfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpOwogdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpOwogaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpOwotYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZik7CiYjNDM7Ym9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpOwogdTY0IGljZV9wdHBfcmVhZF9zcmNfY2xrX3JlZyhzdHJ1Y3QgaWNlX3BmICpwZiwKIAkJCSAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpOwogCkBAIC0zNjAsNyAmIzQzOzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpCiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7aWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKQogewogCXJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCmluZGV4IDNhNDFjNzExZTc1MWIuLjY0ZTE4ZmUxMTc2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtNzM3LDI0ICYjNDM7NzM3LDYgQEAgc3RhdGljIGludCBpY2VfcmVhZF9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsCiAJcmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTsKIH0KIAotLyoqCi0gKiBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnIC0gV3JpdGUgYSBQSFkgcG9ydCBtZW1vcnkgbG9jYXRpb24KLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0Ci0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZAotICogQG9mZnNldDogT2Zmc2V0IGZyb20gUEhZIHBvcnQgcmVnaXN0ZXIgYmFzZQotICogQHZhbDogUG9pbnRlciB0byB0aGUgdmFsdWUgdG8gcmVhZCAob3V0IHBhcmFtKQotICoKLSAqIFJldHVybjoKLSAqICogJTAgICAgICAtIHN1Y2Nlc3MKLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZQotICogKiAlb3RoZXIgIC0gZmFpbGVkIHRvIHdyaXRlIHRvIFBIWQotICovCi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsCi0JCQkJICAgICB1MzIgdmFsKQotewotCXJldHVybiBpY2Vfd3JpdGVfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApOwotfQotCiAvKioKICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlcgogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3QKQEAgLTExMzksOCAmIzQzOzExMjEsOCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsCiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy4KICAqCiAgKiBUbyBkaXJlY3RseSBjbGVhciB0aGUgY29udGVudHMgb2YgdGhlIHRpbWVzdGFtcCBibG9jayBlbnRpcmVseSwgZGlzY2FyZGluZwotICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZQotICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfcXVhZF9ldGg1NmcoKS4KJiM0MzsgKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgcGVyZm9ybSBhIFBIWSBzb2Z0CiYjNDM7ICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuCiAgKgogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYW4gaWR4IHdob3NlIGJpdCBpcyBzZXQgYWNjb3JkaW5nIHRvCiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS4KQEAgLTExNTIsMjQgJiM0MzsxMTM0LDE2IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCwKIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpCiB7CiAJdTY0IHVudXNlZF90c3RhbXA7Ci0JdTE2IGxvX2FkZHI7CiAJaW50IGVycjsKIAotCS8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzCi0JICogY2xlYXJlZC4KJiM0MzsJLyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0CiYjNDM7CSAqIGNsZWFycyB0aGUgZW50cnkmIzM5O3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KQomIzQzOwkgKiB0c19tZW1vcnlfc3RhdHVzIGJpdC4KIAkgKi8KIAllcnIgPSBpY2VfcmVhZF9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4LCAmYW1wO3VudXNlZF90c3RhbXApOwogCWlmIChlcnIpIHsKIAkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtGYWlsZWQgdG8gcmVhZCB0aGUgUEhZIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcbiYjMzQ7LAogCQkJICBwb3J0LCBpZHgsIGVycik7Ci0JfQotCi0JbG9fYWRkciA9ICh1MTYpUEhZX1RTVEFNUF9MKGlkeCk7Ci0KLQllcnIgPSBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKGh3LCBwb3J0LCBsb19hZGRyLCAwKTsKLQlpZiAoZXJyKSB7Ci0JCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIGNsZWFyIGxvdyBQVFAgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxuJiMzNDssCi0JCQkgIHBvcnQsIGlkeCwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTExNzcsMTkgJiM0MzsxMTUxLDM2IEBAIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpCiB9CiAKIC8qKgotICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnIC0gQ2xlYXIgYWxsIHRpbWVzdGFtcHMgZnJvbSB0aGUgcG9ydCBibG9jawomIzQzOyAqIGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1NmcgLSBSZXNldCBvbmUgcG9ydCYjMzk7cyBUeCB0aW1lc3RhbXAgbWVtb3J5CiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdAomIzQzOyAqIEBwb3J0OiBwb3J0IG51bWJlciB0byBjbGVhcgomIzQzOyAqCiYjNDM7ICogRnVsbHkgcmVzZXQgYSBzaW5nbGUgUEhZIHBvcnQmIzM5O3MgVHggdGltZXN0YW1wIG1lbW9yeS4gUGVyIHRoZSBQSFkgc3BlYywgdGhlCiYjNDM7ICogb25seSB3YXkgdG8gY2xlYXIgYSB0aW1lc3RhbXAgdmFsaWQgYml0IChhbmQgaXRzIHJlYWQtb25seSB0c19tZW1vcnlfc3RhdHVzCiYjNDM7ICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGUKJiM0MzsgKiBwb3J0ICh0d28gMzItYml0IHJlYWRzIGVhY2gpLiBUaGlzIGRpc2NhcmRzIGFsbCB0aW1lc3RhbXAgZGF0YSBvbiB0aGUgcG9ydCwKJiM0MzsgKiBzbyBpdCBtdXN0IG9ubHkgYmUgdXNlZCBmb3IgYSBmdWxsIHJlc2V0OyBjYWxsZXJzIHRoYXQgbXVzdCBwcmVzZXJ2ZQomIzQzOyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS4KJiM0MzsgKgomIzQzOyAqIER1ZSB0byBpbnRlcmFjdGlvbnMgd2l0aCBhbiBpbnRlcm5hbCBIVyBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mCiYjNDM7ICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGUKJiM0MzsgKiBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpIHByb2NlZHVyZS4gT3RoZXJ3aXNlLCB0aGUgaW50ZXJuYWwgY291bnRlcgomIzQzOyAqIG1heSBiZWNvbWUgb3V0IG9mIHN5bmMgYW5kIHByZXZlbnQgbmV3IHRpbWVzdGFtcCBpbnRlcnJ1cHRzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB0byByZWFkIHRoZSBQSFkuCiAgKi8KLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodykKJiM0MztzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiB7Ci0JdW5zaWduZWQgaW50IHBvcnQ7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwl1OCBpZHg7CiAKLQlmb3IgKHBvcnQgPSAwOyBwb3J0ICZsdDsgaHctJmd0O3B0cC5udW1fbHBvcnRzOyBwb3J0JiM0MzsmIzQzOykgewotCQlpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19MLAotCQkJCQkgMCk7Ci0JCWljZV93cml0ZV9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTX1UsCi0JCQkJCSAwKTsKJiM0MzsJZm9yIChpZHggPSAwOyBpZHggJmx0OyBJTkRFWF9QRVJfUE9SVDsgaWR4JiM0MzsmIzQzOykgewomIzQzOwkJZXJyID0gaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjExNSwxMCAmIzQzOzIxMDYsNiBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KQogewogCWludCBlcnI7CiAKLQllcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfT0ZGU0VUX1JFQURZLCAwKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1JYX09GRlNFVF9SRUFEWSwgMCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIxMzMsOSAmIzQzOzIxMjAsMTEgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldCkKICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0CiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0CiAgKgotICogU3RhcnQgdGhlIGNsb2NrIG9mIGEgUEhZIHBvcnQuIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8KLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMKLSAqIGluaXRpYWxpemVkIG9yIHdoZW4gbGluayBzcGVlZCBjaGFuZ2VzLgomIzQzOyAqIFBlcmZvcm0gYSBQSFkgc29mdCByZXNldCBhbmQgdGhlbiBzdGFydCB0aGUgY2xvY2sgZm9yIHRoZSBQSFkgcG9ydC4KJiM0MzsgKgomIzQzOyAqIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG8gcmUtY2FsaWJyYXRlIFR4IGFuZCBSeAomIzQzOyAqIHRpbWVzdGFtcGluZyBvZmZzZXRzIHdoZW5ldmVyIHRoZSBjbG9jayB0aW1lIGlzIGluaXRpYWxpemVkIG9yIHdoZW4gbGluawomIzQzOyAqIHNwZWVkIGNoYW5nZXMuCiAgKgogICogUmV0dXJuOgogICogKiAlMCAgICAgLSBzdWNjZXNzCkBAIC0yMTUxLDYgJiM0MzsyMTQwLDEwIEBAIGludCBpY2Vfc3RhcnRfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCkKIAogCXRtcl9pZHggPSBpY2VfZ2V0X3B0cF9zcmNfY2xvY2tfaW5kZXgoaHcpOwogCiYjNDM7CWVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJZXJyID0gaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhodywgcG9ydCwgZmFsc2UpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMjk0LDYgJiM0MzsyMjg3LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqCiAgKiBUcmlnZ2VyIGEgc29mdCByZXNldCBvZiB0aGUgRVRINTZHIFBIWSBieSB0b2dnbGluZyB0aGUgc29mdCByZXNldAogICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6CiYjNDM7ICogICAwLiBSZWFkaW5nIGV2ZXJ5IHRpbWVzdGFtcCBtZW1vcnkgcmVnaXN0ZXIgdG8gY2xlYXIgaXRzIHZhbGlkIGJpdAogICogICAxLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQKICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdAogICogICAzLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXQgYWdhaW4KQEAgLTIzMDIsNiAmIzQzOzIyOTYsMTIgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cykKICAqIHRvIHNldHRsZS4gVGhpcyBwcm92aWRlcyBhIGNvbnRyb2xsZWQgd2F5IHRvIHJlaW5pdGlhbGl6ZSB0aGUgUEhZCiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LgogICoKJiM0MzsgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGUKJiM0MzsgKiBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMsIHJlYWQgZXZlcnkgdGltZXN0YW1wIGluZGV4IHByaW9yIHRvIHBlcmZvcm1pbmcKJiM0MzsgKiB0aGUgc29mdCByZXNldC4gVGhlIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyByZWFkcyBlbnN1cmUgdGhhdCB0aGUgcmVnaW9uCiYjNDM7ICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltZXN0YW1wCiYjNDM7ICogY291bnRlciBpcyByZXNldCB0byB6ZXJvLgomIzQzOyAqCiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgd2hlbgogICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci4KICAqLwpAQCAtMjMxMCw2ICYjNDM7MjMxMCwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpCiAJdTMyIGdsb2JhbF92YWw7CiAJaW50IGVycjsKIAomIzQzOwllcnIgPSBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnKGh3LCBwb3J0KTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtGYWlsZWQgdG8gY2xlYXIgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJCSAgcG9ydCwgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAllcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsICZhbXA7Z2xvYmFsX3ZhbCk7CiAJaWYgKGVycikgewogCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byByZWFkIFBIWV9SRUdfR0xPQkFMIGZvciBwb3J0ICVkLCBlcnIgJWRcbiYjMzQ7LApAQCAtNTgwMSw4ICYjNDM7NTgwOCw5IEBAIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnkoc3RydWN0IGljZV9odyAqaHcpCiAJCWljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2U4MngoaHcpOwogCQlicmVhazsKIAljYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OgotCQlpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpOwotCQlicmVhazsKJiM0MzsJCS8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZgomIzQzOwkJICogdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlLgomIzQzOwkJICovCiAJY2FzZSBJQ0VfTUFDX0U4MTA6CiAJZGVmYXVsdDoKIAkJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIElDRSBEcml2ZXIgUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzLCB0YXJnZXRpbmcgdGhlIGBpY2VgIGRyaXZlciB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgaXMgd29ydGggZnV6emluZyB3aXRoIHN5emthbGxlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MsIHJpZ2h0PwoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIGFjcm9zcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeTogYGljZV9hZGFwdGVyLmNgLCBgaWNlX2FkYXB0ZXIuaGAsIGBpY2VfbWFpbi5jYCwgYGljZV9wdHAuY2AsIGBpY2VfcHRwLmhgLCBhbmQgYGljZV9wdHBfaHcuY2AuIEFsbCBpbmRpY2F0aW9ucyBhcmUgdGhhdCB0aGlzIGNvbmNlcm5zIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlciAodGhlIGBpY2VgIGRyaXZlcikuCgpOb3csIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGVyZSBhcmUgc29tZSAqbmVnYXRpdmUgY3JpdGVyaWEqIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIFNwZWNpZmljYWxseSwgSSBtdXN0IGNvbnNpZGVyIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZS4gVGhlIGd1aWRlIGV4cGxpY2l0bHkgbWVudGlvbnMgZHJpdmVycyBmb3IgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgdGhhdCBuZWVkIHNwZWNpYWxpemVkIGhhcmR3YXJlIG5vdCByZWFkaWx5IGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYGljZWAgZml0cyB0aGlzIHByb2ZpbGUuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IGlmIElDRSBpcyBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgTklDcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBLY29uZmlnIGZpbGUgY2FuIGdpdmUgbWUgYSBkZWZpbml0aXZlIGFuc3dlci4gVGhpcyB3aWxsIGRldGVybWluZSBpZiBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElDRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnPTI2OD1jb25maWcgSTQwRVZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjI5MTpjb25maWcgSUNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTI5Mi1cdHRyaXN0YXRlIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozMjA6Y29uZmlnIElDRV9IV01PTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXHRib29sIFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IENvbm5lY3Rpb24gRTgwMCBTZXJpZXMgU3VwcG9ydCBIV01PTiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMzItXHRib29sIFwmIzM0O1N3aXRjaGRldiBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjM0NTpjb25maWcgSUNFX0hXVFNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzQ2LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IEhXIGNyb3NzLXRpbWVzdGFtcCBvbiBwbGF0Zm9ybXMgd2l0aCBQVE0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mzk5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlICYjMzk7aWNlJiMzOTsgRHJpdmVyJiMzOTtzIEhhcmR3YXJlIERlcGVuZGVuY3kqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGUgYGljZWAgZHJpdmVyIGlzICpzb2xlbHkqIGZvciB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgTklDcyDigJMgdGhvc2UgRTgxMCwgRTgyMCwgRTgyMiwgRTgyMywgRTgyNSwgYW5kIEU4MzAgbW9kZWxzIHNwZWNpZmljYWxseS4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzICpub3QqIGFuIGVtdWxhdGVkIGRldmljZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuCgpJbiBhIHR5cGljYWwgUUVNVSBvciBzeXprYWxsZXIgc2V0dXAsIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggZW11bGF0ZWQgbmV0ZGV2cywgc3R1ZmYgbGlrZSBlMTAwMCwgZTEwMDBlLCBydGw4MTM5LCB2aXJ0aW8tbmV0LCBVU0ItYmFzZWQgbmV0d29ya2luZywgdHVuL3RhcCwgbG9vcGJhY2sgaW50ZXJmYWNlcywgdmV0aCBwYWlycywgYW5kIHNvIG9uLiBCdXQgYGljZWA/IEl0JiMzOTtzIHRoZSBkcml2ZXIgZm9yIEludGVsJiMzOTtzIDEwMEdiRS9FODAwIHBoeXNpY2FsIFBDSWUgTklDLiBJJiMzOTttIGFsbW9zdCBjZXJ0YWluIHRoZXJlJiMzOTtzICpubyogUUVNVSBlbXVsYXRpb24gZm9yIGFuIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgTklDLCBhbmQgdGhhdCB0aGUgYGljZWAgZHJpdmVyIGlzIHN0cnVjdHVyYWxseSBkZXBlbmRlbnQgb24gdGhlICphY3R1YWwqIGhhcmR3YXJlLgoKVG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgdG8gc2VlIGlmIGFueSB2aXJ0dWFsIGJ1c2VzLCBzb2Z0d2FyZSBtb2Nrcywgb3IgdGVzdCBlbnZpcm9ubWVudHMgbWlnaHQgZXhpc3QgZm9yIGBpY2VgLiBJJiMzOTtsbCBydW4gYSBncmVwIHNlYXJjaCB0byB2ZXJpZnkgZHJpdmVyIHJlZ2lzdHJhdGlvbiBvciBQQ0kgSURzLiBUaGlzIGNoZWNrIHNob3VsZCBkZWZpbml0aXZlbHkgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIHRoYXQgYGljZWAgbWFuZGF0ZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBJbnRlbCBFODAwIEFTSUMvUENJZSBOSUMgZm9yIGl0IHRvIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01PRFVMRV9ERVZJQ0VfVEFCTEVcXChwY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU3ODQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNi19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTgzNzpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWNlX3BjaV90YmwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzOC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODEzOQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGljZV9tYWluLmNgKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBgaWNlX21haW4uY2AgLSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlLiBJIHN1c3BlY3QgdGhlIHByb2JsZW0gaXMgZG93bnN0cmVhbSwgc28gSSYjMzk7bSBnb2luZyB0byBqdW1wIGluIGF0IGEgbGlrZWx5IHNwb3QgLSBhcm91bmQgbGluZSA1Nzg0LiBUaGF0IHJlZ2lvbiB1c3VhbGx5IGRlYWxzIHdpdGggW2luc2VydCB5b3VyIHNwZWNpZmljIGtub3dsZWRnZSBvZiB3aGF0IHRoYXQgYXJlYSBvZiB0aGUgY29kZSBpcyByZXNwb25zaWJsZSBmb3IsIGUuZy4sICYjMzQ7dGhlIHByb2Nlc3Npbmcgb2YgaW5jb21pbmcgSUNFIGNhbmRpZGF0ZXMmIzM0OywgJiMzNDt0aGUgYWxsb2NhdGlvbiBvZiBuZXR3b3JrIHJlc291cmNlcyYjMzQ7LCAmIzM0O3RoZSBoYW5kbGluZyBvZiBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZmFpbHVyZXMmIzM0OywgZXRjLl0uIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yICp5ZXQqLCBidXQgbXkgZXhwZXJpZW5jZSBzdWdnZXN0cyBzb21ldGhpbmcgc3BlY2lmaWMgcmVsYXRlZCB0byBbaW5zZXJ0IHlvdXIgc3BlY2lmaWMgZWR1Y2F0ZWQgZ3Vlc3MsIGUuZy4sICYjMzQ7Y2FuZGlkYXRlIHByaW9yaXRpemF0aW9uJiMzNDssICYjMzQ7bmV0d29yayBjb25uZWN0aXZpdHkgaXNzdWVzJiMzNDssICYjMzQ7U1RVTi9UVVJOIGludGVyYWN0aW9uJiMzNDssIGV0Yy5dIGlzIGxpa2VseSBtYW5pZmVzdGluZyB0aGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgY29kZSBjb25maXJtcyBteSBpbml0aWFsIGh1bmNoLCBvciBpZiBJIG5lZWQgdG8gYWRqdXN0IG15IGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1Nzg0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU3ODQ6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWNlX3BjaV90YmxbXSA9IHtcbjU3ODU6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfQkFDS1BMQU5FKSB9LFxuNTc4NjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwQ19RU0ZQKSB9LFxuNTc4NzpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwQ19TRlApIH0sXG41Nzg4Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBfWFhWX0JBQ0tQTEFORSkgfSxcbjU3ODk6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMF9YWFZfUVNGUCkgfSxcbjU3OTA6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMF9YWFZfU0ZQKSB9LFxuNTc5MTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzQ19CQUNLUExBTkUpIH0sXG41NzkyOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDX1FTRlApIH0sXG41NzkzOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDX1NGUCkgfSxcbjU3OTQ6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0NfMTBHX0JBU0VfVCkgfSxcbjU3OTU6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0NfU0dNSUkpIH0sXG41Nzk2Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJDX0JBQ0tQTEFORSkgfSxcbjU3OTc6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfUVNGUCkgfSxcbjU3OTg6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfU0ZQKSB9LFxuNTc5OTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyQ18xMEdfQkFTRV9UKSB9LFxuNTgwMDpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyQ19TR01JSSkgfSxcbjU4MDE6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkxfQkFDS1BMQU5FKSB9LFxuNTgwMjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyTF9TRlApIH0sXG41ODAzOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJMXzEwR19CQVNFX1QpIH0sXG41ODA0Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJMX1NHTUlJKSB9LFxuNTgwNTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzTF9CQUNLUExBTkUpIH0sXG41ODA2Olx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMX1NGUCkgfSxcbjU4MDc6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfMTBHX0JBU0VfVCkgfSxcbjU4MDg6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfMUdCRSkgfSxcbjU4MDk6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfUVNGUCkgfSxcbjU4MTA6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMl9TSV9ERkxUKSB9LFxuNTgxMTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODI1Q19CQUNLUExBTkUpLCB9LFxuNTgxMjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODI1Q19RU0ZQKSwgfSxcbjU4MTM6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfU0ZQKSwgfSxcbjU4MTQ6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfU0dNSUkpLCB9LFxuNTgxNTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfQkFDS1BMQU5FKSB9LFxuNTgxNjpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfUVNGUDU2KSB9LFxuNTgxNzpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQKSB9LFxuNTgxODpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ0NfU0ZQX0REKSB9LFxuNTgxOTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ19CQUNLUExBTkUpLCB9LFxuNTgyMDpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwX1hYVl9CQUNLUExBTkUpLCB9LFxuNTgyMTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ19RU0ZQKSwgfSxcbjU4MjI6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMF9YWFZfUVNGUCksIH0sXG41ODIzOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MzBDX1NGUCksIH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3NTUKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMjQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IE5vdCBTdWl0YWJsZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBkZWFsOiBJJiMzOTt2ZSBqdXN0IGFzc2Vzc2VkIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBpdCYjMzk7cyBhIGNsZWFyICYjMzQ7bm8tZ28mIzM0OyBmb3IgZnV6emluZy4gVGhlIGtleSBwb2ludHMgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4KCkZpcnN0bHksIHRoaXMgZHJpdmVyIGlzICpleGNsdXNpdmVseSogZm9yIHRoZSBJbnRlbCBFODAwIHNlcmllcyBQQ0llIG5ldHdvcmsgYWRhcHRlcnMuIEl0JiMzOTtzIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHRoZSBvbmx5IGNvZGUgYmVpbmcgdG91Y2hlZCwgd2hpY2ggaGVscHMgZm9jdXMgdGhlIHNjb3BlLgoKU2Vjb25kbHksIGFuZCB0aGlzIGlzIHRoZSBkZWNpZGluZyBmYWN0b3IsIHRoZXNlIGFyZSAqcGh5c2ljYWwqIGhpZ2gtc3BlZWQgTklDcy4gVGhlIHR5cGUgb2YgaGFyZHdhcmUgdGhleSByZWx5IG9uIOKAkyB0aGUgQVNJQ3MsIHRoZSBQQ0llIGNhcmRzIOKAkyBhcmUgdGhpbmdzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIGJ5IHN5emthbGxlci4gVGhhdCBtZWFucyB3ZSBjYW5ub3QgZWFzaWx5IGdldCBhIGZ1enplciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkcml2ZXIgY29kZSBpbiBhIG1lYW5pbmdmdWwgd2F5LiBTZWN0aW9uIDIsIHNwZWNpZmljYWxseSBjYWxscyB0aGlzIG91dCBhcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBkcml2ZXIgdGFyZ2V0cyBoYXJkd2FyZSB0aGF04oCZcyBpbmFjY2Vzc2libGUgaW4gYSBmdXp6aW5nIHNldHVwLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBmdXp6aW5nIGVmZm9ydHMgYXJlIGdvaW5nIHRvIGJlIHdhc3RlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgaXNvbGF0ZWQgdG8gdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7QWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6MTUuMzA5MDYzNTQzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkzNDUxOTQ3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIkFsbCBjaGFuZ2VzIGluIHRoaXMgcGF0Y2ggc2VyaWVzIGFyZSBpc29sYXRlZCB0byB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8pLiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBFODAwIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6MTUuMzA5MDcwNjIzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDcxODIwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ODcyNWYwMjdiMTEwYzFlODI2NDdjNWVhNDgwM2FhNmM1ZTNhZmE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDAxOjAzOjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcXG5pbmRleCAyZGMzNjI5ZDZkMGY2Li5kMTY0M2JmOGExYjU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcXG5AQCAtNjYsMTggKzY2LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmljZV9hZGFwdGVyX25ldyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2YWRhcHRlci1cXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcXG4gXFx0cmVmY291bnRfc2V0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxuIFxcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCk7XFxuIFxcbiBcXHRyZXR1cm4gYWRhcHRlcjtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgaWNlX2FkYXB0ZXJfZnJlZShzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIHtcXG4tXFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpKTtcXG4rXFx0V0FSTl9PTighbGlzdF9lbXB0eShcXHUwMDI2YWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCkpO1xcbiBcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYWRhcHRlci1cXHUwMDNlY3BpX3BoeV9sb2NrKTsgaSsrKVxcbiBcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xcbi1cXHRtdXRleF9kZXN0cm95KFxcdTAwMjZhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4gXFxuIFxcdGtmcmVlKGFkYXB0ZXIpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG5pbmRleCA0ZjY5NWYzMmRhM2Q4Li4zOTkyM2RlZGQ1MzRlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcXG5AQCAtMTksMTMgKzE5LDEzIEBAIHN0cnVjdCBpY2VfcGY7XFxuICAqXFxuICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0c1xcbiAgKlxcbi0gKiBAcG9ydHM6IGxpc3Qgb2YgcG9ydHNcXG4rICogQGxpc3Q6IGxpc3Qgb2YgcG9ydHNcXG4gICogQGxvY2s6IHByb3RlY3QgYWNjZXNzIHRvIHRoZSBwb3J0cyBsaXN0XFxuICAqL1xcbiBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgcG9ydHM7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gXFx0LyogVG8gc3luY2hyb25pemUgdGhlIHBvcnRzIGxpc3Qgb3BlcmF0aW9ucyAqL1xcbi1cXHRzdHJ1Y3QgbXV0ZXggbG9jaztcXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5pbmRleCBkODg4MzU0ODJkM2FhLi5kMTI5NTIxNzFhOTkxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcXG5AQCAtMzI0OCw3ICszMjQ4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxcbiBcXHRpY2VfaXJxX2R5bmFtaWNfZW5hKGh3LCBOVUxMLCBOVUxMKTtcXG4gXFx0aWNlX2ZsdXNoKGh3KTtcXG4gXFxuLVxcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZikpIHtcXG4rXFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xcbiBcXHRcXHQvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LFxcbiBcXHRcXHQgKiByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGl0IGFnYWluLlxcbiBcXHRcXHQgKi9cXG5AQCAtNjc0NSw3ICs2NzQ1LDYgQEAgc3RhdGljIGludCBpY2VfdXBfY29tcGxldGUoc3RydWN0IGljZV92c2kgKnZzaSlcXG4gXFx0XFx0aWNlX3ByaW50X2xpbmtfbXNnKHZzaSwgdHJ1ZSk7XFxuIFxcdFxcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXModnNpLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRuZXRpZl9jYXJyaWVyX29uKHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4tXFx0XFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFBlcmZvcm0gYW4gaW5pdGlhbCByZWFkIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyBub3cgdG9cXG5AQCAtNzI3Myw3ICs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcbiBcXHRpZiAodnNpLVxcdTAwM2VuZXRkZXYpIHtcXG4gXFx0XFx0dmxhbl9lcnIgPSBpY2VfdnNpX2RlbF92bGFuX3plcm8odnNpKTtcXG4tXFx0XFx0aWNlX3B0cF9saW5rX2NoYW5nZSh2c2ktXFx1MDAzZWJhY2ssIGZhbHNlKTtcXG4gXFx0XFx0bmV0aWZfY2Fycmllcl9vZmYodnNpLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRuZXRpZl90eF9kaXNhYmxlKHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4gXFx0fVxcbkBAIC03Nzk0LDYgKzc3OTIsMTQgQEAgc3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxcbiBcXG4gXFx0aWNlX3VwZGF0ZV9wZl9uZXRkZXZfbGluayhwZik7XFxuIFxcbitcXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUFRQX1NVUFBPUlRFRCwgcGYtXFx1MDAzZWZsYWdzKSBcXHUwMDI2XFx1MDAyNiBwZi1cXHUwMDNlaHcucG9ydF9pbmZvKSB7XFxuK1xcdFxcdGJvb2wgbGlua191cDtcXG4rXFxuK1xcdFxcdGxpbmtfdXAgPSAhIShwZi1cXHUwMDNlaHcucG9ydF9pbmZvLVxcdTAwM2VwaHkubGlua19pbmZvLmxpbmtfaW5mbyBcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAgSUNFX0FRX0xJTktfVVApO1xcbitcXHRcXHRpY2VfcHRwX2xpbmtfY2hhbmdlKHBmLCBsaW5rX3VwKTtcXG4rXFx0fVxcbitcXG4gXFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXFxuIFxcdGVyciA9IGljZV9zZW5kX3ZlcnNpb24ocGYpO1xcbiBcXHRpZiAoZXJyKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuaW5kZXggZWFlYzM2YWI2YWUzZi4uYTVlZmIwYTk1OTQxZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xcbkBAIC0xLDYgKzEsOCBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpY2UuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV9saWIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImljZV90cmFjZS5oXFxcIlxcbkBAIC0zNjIsOSArMzY0LDEyIEBAIHN0YXRpYyB1NjQgaWNlX3B0cF9leHRlbmRfNDBiX3RzKHN0cnVjdCBpY2VfcGYgKnBmLCB1NjQgaW5fdHN0YW1wKVxcbiBzdGF0aWMgYm9vbFxcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiB7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XFxuK1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZ0eC1cXHUwMDNlbG9jayk7XFxuIFxcbi1cXHRyZXR1cm4gdHgtXFx1MDAzZWluaXQgXFx1MDAyNlxcdTAwMjYgIXR4LVxcdTAwM2VjYWxpYnJhdGluZztcXG4rXFx0cmV0dXJuIHR4LVxcdTAwM2Vpbml0IFxcdTAwMjZcXHUwMDI2ICF0eC1cXHUwMDNlY2FsaWJyYXRpbmcgXFx1MDAyNlxcdTAwMjYgcHRwX3BvcnQtXFx1MDAzZWxpbmtfdXA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC01NjEsNyArNTY2LDYgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4gXFx0dTY0IHRzdGFtcF9yZWFkeTtcXG4tXFx0Ym9vbCBsaW5rX3VwO1xcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpZHg7XFxuIFxcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHBmID0gcHRwX3BvcnRfdG9fcGYocHRwX3BvcnQpO1xcbiBcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcbi1cXHRpZiAoIXR4LVxcdTAwM2Vpbml0KVxcbitcXHRpZiAoIXR4LVxcdTAwM2Vpbml0IHx8IGJpdG1hcF9lbXB0eSh0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXFxuQEAgLTU3OSwxNCArNTgzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJvY2Vzc190eF90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdC8qIERyb3AgcGFja2V0cyBpZiB0aGUgbGluayB3ZW50IGRvd24gKi9cXG4tXFx0bGlua191cCA9IHB0cF9wb3J0LVxcdTAwM2VsaW5rX3VwO1xcbi1cXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pIHtcXG4gXFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XFxuIFxcdFxcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHR1NjQgcmF3X3RzdGFtcCA9IDAsIHRzdGFtcDtcXG4tXFx0XFx0Ym9vbCBkcm9wX3RzID0gIWxpbmtfdXA7XFxuK1xcdFxcdGJvb2wgZHJvcF90cyA9IGZhbHNlO1xcbiBcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiBcXG4gXFx0XFx0LyogRHJvcCBwYWNrZXRzIHdoaWNoIGhhdmUgd2FpdGVkIGZvciBtb3JlIHRoYW4gMiBzZWNvbmRzICovXFxuQEAgLTYxOSw2ICs2MjAsMTkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdFxcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgIWRyb3BfdHMpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0LyogdmVyaWZ5IHJlYWR5IGJpdCBjbGVhcmVkICovXFxuK1xcdFxcdGlmICh0eC1cXHUwMDNlaGFzX3JlYWR5X2JpdG1hcCkge1xcbitcXHRcXHRcXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVxcdTAwM2VibG9jaywgXFx1MDAyNnRzdGFtcF9yZWFkeSk7XFxuK1xcdFxcdFxcdGlmIChlcnIgfHwgdHN0YW1wX3JlYWR5IFxcdTAwMjYgQklUX1VMTChwaHlfaWR4KSkge1xcbitcXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KGlkeCwgdHgtXFx1MDAzZXN0YWxlKSlcXG4rXFx0XFx0XFx0XFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlBIWSBwb3J0ICV1IGZhaWxlZCB0byBjbGVhciByZWFkeSBiaXQgZm9yIGlkeCAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cHRwX3BvcnQtXFx1MDAzZXBvcnRfbnVtLCBwaHlfaWR4KTtcXG4rXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2dHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cXHUwMDNldHN0YW1wc1tpZHhdLnNrYiwgaWR4KTtcXG4gXFxuIFxcdFxcdC8qIEZvciBQSFlzIHdoaWNoIGRvbid0IGltcGxlbWVudCBhIHByb3BlciB0aW1lc3RhbXAgcmVhZHlcXG5AQCAtNjczLDIwICs2ODcsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuIFxcdHBmLVxcdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCArPSB0c3RhbXBfZ29vZDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXFxuK3tcXG4rXFx0d2FrZV91cF92YXIocmVmKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzLCBsaXN0X25vZGUpIHtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbiBcXHRcXHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcXHUwMDI2cG9ydC1cXHUwMDNldHg7XFxuIFxcbi1cXHRcXHRpZiAoIXR4IHx8ICF0eC1cXHUwMDNlaW5pdClcXG4rXFx0XFx0aWYgKCF0eC1cXHUwMDNlaW5pdClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XFxuK1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzI1LDYgKzc1MiwzNyBAQCBpY2VfcHRwX2FsbG9jX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWRcXG4raWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwKTtcXG4rXFx0c3RydWN0IGljZV9odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbitcXHR1NjQgdHN0YW1wX3JlYWR5O1xcbitcXHRib29sIHBlbmRpbmc7XFxuK1xcdHU4IGlkeDtcXG4rXFxuK1xcdGlmIChody1cXHUwMDNlcmVzZXRfb25nb2luZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cXHUwMDNlYmxvY2ssIFxcdTAwMjZ0c3RhbXBfcmVhZHkpKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRwZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdGZvcl9lYWNoX3NldF9iaXQoaWR4LCB0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKSB7XFxuK1xcdFxcdFxcdGlmICghKHRzdGFtcF9yZWFkeSBcXHUwMDI2IEJJVF9VTEwoaWR4ICsgdHgtXFx1MDAzZW9mZnNldCkpKVxcbitcXHRcXHRcXHRcXHRwZW5kaW5nID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXBlbmRpbmcpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFxuK1xcdFxcdHVzbGVlcF9yYW5nZSg1MDAsIDEwMDApO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xcbitcXG4rXFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBpbi1mbGlnaHQgVHggdGltZXN0YW1wcyBvbiBibG9jayAldVxcXFxuXFxcIixcXG4rXFx0XFx0dHgtXFx1MDAzZWJsb2NrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlciAtIEZsdXNoIGFueSByZW1haW5pbmcgdGltZXN0YW1wcyBmcm9tIHRoZSB0cmFja2VyXFxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG5AQCAtNzQxLDYgKzc5OSw4IEBAIGljZV9wdHBfZmx1c2hfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbiBcXHRpbnQgZXJyO1xcbiBcXHR1OCBpZHg7XFxuIFxcbitcXHRpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4ocGYsIHR4KTtcXG4rXFxuIFxcdGVyciA9IGljZV9nZXRfcGh5X3R4X3RzdGFtcF9yZWFkeShodywgdHgtXFx1MDAzZWJsb2NrLCBcXHUwMDI2dHN0YW1wX3JlYWR5KTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcXFwiRmFpbGVkIHRvIGdldCB0aGUgVHggdHN0YW1wIHJlYWR5IGJpdG1hcCBmb3IgYmxvY2sgJXUsIGVyciAlZFxcXFxuXFxcIixcXG5AQCAtNzc5LDEyICs4MzksMTAgQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXFxuICAqIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlIC0gTWFyayB1bmZpbmlzaGVkIHRpbWVzdGFtcHMgYXMgc3RhbGVcXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXFxuICAqXFxuLSAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgc2VuZGluZ1xcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXFxuLSAqIHRoZSA0MGJpdCBoYXJkd2FyZSB0aW1lc3RhbXAgaW5jb3JyZWN0bHkuXFxuLSAqXFxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxcbi0gKiB0aW1lIHJlcXVlc3QuXFxuKyAqIE1hcmsgY3VycmVudGx5IG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMgYXMgc3RhbGUuIFRoaXMgcHJldmVudHMgdGhlIGRyaXZlclxcbisgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZVxcbisgKiBkcml2ZXIgdGhhdCBhIHRpbWVzdGFtcCBpcyBleHBlY3RlZCB0byBmYWlsIGlmIGl0IHdhcyBpbml0aWF0ZWQgYXMgdGhlIGxpbmtcXG4rICogd2VudCBkb3duLlxcbiAgKi9cXG4gc3RhdGljIHZvaWRcXG4gaWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoc3RydWN0IGljZV9wdHBfdHggKnR4KVxcbkBAIC04MDgsOCArODY2LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXFxuIHtcXG4gXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKVxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XFxuK1xcdFxcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNnBvcnQtXFx1MDAzZXJlZikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0aWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHB0cF9wb3J0X3RvX3BmKHBvcnQpLCBcXHUwMDI2cG9ydC1cXHUwMDNldHgpO1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGtyZWZfcHV0KFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC05OTQsMTMgKzEwNjAsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X2NhY2hlZF9waGN0aW1lKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cXHUwMDNlcHRwLmt3b3JrZXIsIFxcdTAwMjZwZi1cXHUwMDNlcHRwLndvcmssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMoMTApKTtcXG4gXFx0fVxcbi1cXG4tXFx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXFxuLVxcdCAqIGJlZW4gY2FwdHVyZWQgaW4gaGFyZHdhcmUgYmVmb3JlIHRoZSB0aW1lIHVwZGF0ZS4gVGhpcyBjb3VsZCBsZWFkXFxuLVxcdCAqIHRvIHVzIGV4dGVuZGluZyB0aGVtIHdpdGggdGhlIHdyb25nIGNhY2hlZCB2YWx1ZSByZXN1bHRpbmcgaW5cXG4tXFx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXFxuLVxcdCAqL1xcbi1cXHRpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZShcXHUwMDI2cGYtXFx1MDAzZXB0cC5wb3J0LnR4KTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExMzMsNiArMTE5Miw3IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9jaGVja190eF9maWZvKHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQpXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfd2FpdF9mb3Jfb2Zmc2V0cyhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG4gXFx0aW50IHR4X2VycjtcXG5AQCAtMTE1NSwxMiArMTIxNSwyOCBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcXG4gXFx0XFx0dHhfZXJyID0gaWNlX3BoeV9jZmdfdHhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXFx1MDAzZXBvcnRfbnVtKTtcXG4gXFx0cnhfZXJyID0gaWNlX3BoeV9jZmdfcnhfb2Zmc2V0X2U4MngoaHcsIHBvcnQtXFx1MDAzZXBvcnRfbnVtKTtcXG4gXFx0aWYgKHR4X2VyciB8fCByeF9lcnIpIHtcXG4tXFx0XFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlciAqL1xcbitcXHRcXHQvKiBUeCBhbmQvb3IgUnggb2Zmc2V0IG5vdCB5ZXQgY29uZmlndXJlZCwgdHJ5IGFnYWluIGxhdGVyLlxcbitcXHRcXHQgKiBUaGlzIGlzIGV4cGVjdGVkIGR1cmluZyBub3JtYWwgbGluay11cDogdGhlIHZlcm5pZXIgb2Zmc2V0XFxuK1xcdFxcdCAqIGNhbGlicmF0aW9uIGNhbm5vdCBjb21wbGV0ZSB1bnRpbCBhdCBsZWFzdCBvbmUgcGFja2V0IGhhc1xcbitcXHRcXHQgKiBiZWVuIHRyYW5zbWl0dGVkLCBzbyB0aGUgZmlyc3QgcmV0cmllcyByb3V0aW5lbHkgbGFuZCBoZXJlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSxcXG4rXFx0XFx0XFx0XFxcIlBUUCBvZmZzZXQgbm90IHlldCB2YWxpZCBmb3IgcG9ydCAldSAodHhfZXJyPSVkIHJ4X2Vycj0lZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHBvcnQtXFx1MDAzZXBvcnRfbnVtLCB0eF9lcnIsIHJ4X2Vycik7XFxuIFxcdFxcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVxcdTAwM2VwdHAua3dvcmtlcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnBvcnQtXFx1MDAzZW92X3dvcmssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rXFx0LyogVHggYW5kIFJ4IG9mZnNldHMgYXJlIG5vdyBjb25maWd1cmVkLCBlbmFibGUgVHggdGltZXN0YW1wcyAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbitcXHRwb3J0LVxcdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwb3J0LVxcdTAwM2V0eC5sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHRcXFwiUFRQIG9mZnNldCB2YWxpZCBmb3IgcG9ydCAldSwgVHggdGltZXN0YW1wcyBlbmFibGVkXFxcXG5cXFwiLFxcbitcXHRcXHRwb3J0LVxcdTAwM2Vwb3J0X251bSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xMjQ2LDEwICsxMzIyLDEzIEBAIGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwdHBfcG9ydClcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHQvKiBFbmFibGUgVHggdGltZXN0YW1wcyByaWdodCBhd2F5ICovXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNldHgubG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRwdHBfcG9ydC1cXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0LyogRG8gbm90IGNsZWFyIGNhbGlicmF0aW5nIGZsYWcgaGVyZS4gVHggdGltZXN0YW1wcyByZW1haW5cXG4rXFx0XFx0ICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkXFxuK1xcdFxcdCAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC5cXG4rXFx0XFx0ICogQ2xlYXJpbmcgaXQgaGVyZSB3b3VsZCBhbGxvdyBUeCB0aW1lc3RhbXBzIHRvIGJlIHJlcG9ydGVkXFxuK1xcdFxcdCAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmdcXG4rXFx0XFx0ICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXFxuK1xcdFxcdCAqL1xcbiBcXG4gXFx0XFx0a3RocmVhZF9xdWV1ZV9kZWxheWVkX3dvcmsocGYtXFx1MDAzZXB0cC5rd29ya2VyLCBcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZW92X3dvcmssXFxuIFxcdFxcdFxcdFxcdFxcdCAgIDApO1xcbkBAIC0xMjgwLDE3ICsxMzU5LDIzIEBAIHZvaWQgaWNlX3B0cF9saW5rX2NoYW5nZShzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBsaW5rdXApXFxuIFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0O1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRwdHBfcG9ydCA9IFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQ7XFxuIFxcbitcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LyogVXBkYXRlIGNhY2hlZCBsaW5rIHN0YXR1cyBmb3IgdGhpcyBwb3J0IGltbWVkaWF0ZWx5ICovXFxuIFxcdHB0cF9wb3J0LVxcdTAwM2VsaW5rX3VwID0gbGlua3VwO1xcbiBcXG4rXFx0aWYgKHBmLVxcdTAwM2VwdHAuc3RhdGUgIT0gSUNFX1BUUF9SRUFEWSlcXG4rXFx0XFx0Z290byBleGl0X2tyZWZfcHV0O1xcbitcXG4gXFx0LyogU2tpcCBIVyB3cml0ZXMgaWYgcmVzZXQgaXMgaW4gcHJvZ3Jlc3MgKi9cXG4gXFx0aWYgKHBmLVxcdTAwM2Vody5yZXNldF9vbmdvaW5nKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdGdvdG8gZXhpdF9rcmVmX3B1dDtcXG4rXFxuK1xcdGlmICghbGlua3VwKVxcbitcXHRcXHRpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZShcXHUwMDI2cHRwX3BvcnQtXFx1MDAzZXR4KTtcXG4gXFxuIFxcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVxcdTAwM2VmbGFncykpIHtcXG5AQCAtMTMzMywxNyArMTQxOCwyMCBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxcbiBcXHRjYXNlIElDRV9NQUNfRTgxMDpcXG4gXFx0Y2FzZSBJQ0VfTUFDX0U4MzA6XFxuIFxcdFxcdC8qIERvIG5vdCByZWNvbmZpZ3VyZSBFODEwIG9yIEU4MzAgUEhZICovXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0Z290byBleGl0X2tyZWZfcHV0O1xcbiBcXHRjYXNlIElDRV9NQUNfR0VORVJJQzpcXG4gXFx0XFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHB0cF9wb3J0KTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRnb3RvIGV4aXRfa3JlZl9wdXQ7XFxuIFxcdGNhc2UgSUNFX01BQ19HRU5FUklDXzNLX0U4MjU6XFxuIFxcdFxcdGlmIChsaW5rdXApXFxuIFxcdFxcdFxcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0Z290byBleGl0X2tyZWZfcHV0O1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIiVzOiBVbmtub3duIFBIWSB0eXBlXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdH1cXG4rXFxuK2V4aXRfa3JlZl9wdXQ6XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZwdHBfcG9ydC1cXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTQyNCwxNiArMTUxMiwyMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcoc3RydWN0IGljZV9wZiAqcGYpXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcXG4rXFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2goZW50cnksIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpIHtcXG4tXFx0XFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydCA9IGxpc3RfZW50cnkoZW50cnksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbGlzdF9ub2RlKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZwb3J0LVxcdTAwM2VyZWYpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRcXHRpZiAocG9ydC1cXHUwMDNlbGlua191cClcXG4gXFx0XFx0XFx0aWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KHBvcnQpO1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRrcmVmX3B1dChcXHUwMDI2cG9ydC1cXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xcbiBcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTkyNyw4ICsyMDIwLDkgQEAgaWNlX3B0cF9zZXR0aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpXFxuIFxcdC8qIFJlZW5hYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cXG4gXFx0aWNlX3B0cF9lbmFibGVfYWxsX3Blcm91dChwZik7XFxuIFxcbi1cXHQvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMyAqL1xcbi1cXHRpZiAoaHctXFx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQylcXG4rXFx0LyogUmVjYWxpYnJhdGUgYW5kIHJlLWVuYWJsZSB0aW1lc3RhbXAgYmxvY2tzIGZvciBFODIyL0U4MjMvRTgyNS1DICovXFxuK1xcdGlmIChody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDIHx8XFxuK1xcdCAgICBody1cXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDXzNLX0U4MjUpXFxuIFxcdFxcdGljZV9wdHBfcmVzdGFydF9hbGxfcGh5KHBmKTtcXG4gZXhpdDpcXG4gXFx0aWYgKGVycikge1xcbkBAIC0yNjM4LDExICsyNzMyLDEzIEBAIHM4IGljZV9wdHBfcmVxdWVzdF90cyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdCAqIGEgcmVmZXJlbmNlIHRvIHRoZSBza2IgYW5kIHRoZSBzdGFydCB0aW1lIHRvIGFsbG93IGRpc2NhcmRpbmcgb2xkXFxuIFxcdFxcdCAqIHJlcXVlc3RzLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0c2V0X2JpdChpZHgsIHR4LVxcdTAwM2Vpbl91c2UpO1xcbi1cXHRcXHRjbGVhcl9iaXQoaWR4LCB0eC1cXHUwMDNlc3RhbGUpO1xcbiBcXHRcXHR0eC1cXHUwMDNldHN0YW1wc1tpZHhdLnN0YXJ0ID0gamlmZmllcztcXG4gXFx0XFx0dHgtXFx1MDAzZXRzdGFtcHNbaWR4XS5za2IgPSBza2JfZ2V0KHNrYik7XFxuIFxcdFxcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7XFxuK1xcdFxcdGNsZWFyX2JpdChpZHgsIHR4LVxcdTAwM2VzdGFsZSk7XFxuK1xcdFxcdC8qIEVuc3VyZSBpbmRleCBpcyBzZXR1cCBiZWZvcmUgbWFya2luZyBpdCBhcyB1c2VkICovXFxuK1xcdFxcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xcbitcXHRcXHRzZXRfYml0KGlkeCwgdHgtXFx1MDAzZWluX3VzZSk7XFxuIFxcdFxcdGljZV90cmFjZSh0eF90c3RhbXBfcmVxdWVzdCwgc2tiLCBpZHgpO1xcbiBcXHR9XFxuIFxcbkBAIC0yNjc4LDc0ICsyNzc0LDU2IEBAIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3RzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcXG4rc3RhdGljIGJvb2wgaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBib29sIGluX2lycSlcXG4ge1xcbi1cXHRib29sIG1vcmVfdGltZXN0YW1wcztcXG4rXFx0REVDTEFSRV9CSVRNQVAodHN0YW1wcywgSU5ERVhfUEVSX1BPUlRfTUFYKSA9IHt9O1xcbiBcXG4gXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFxcdTAwMjZ0eC1cXHUwMDNlbG9jaykge1xcbiBcXHRcXHRpZiAoIXR4LVxcdTAwM2Vpbml0KVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRcXHRtb3JlX3RpbWVzdGFtcHMgPSAhYml0bWFwX2VtcHR5KHR4LVxcdTAwM2Vpbl91c2UsIHR4LVxcdTAwM2VsZW4pO1xcbi1cXHR9XFxuK1xcdFxcdGlmIChpbl9pcnEpIHtcXG4rXFx0XFx0XFx0aWYgKCFpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAodHgpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gbW9yZV90aW1lc3RhbXBzO1xcbitcXHRcXHRcXHRyZXR1cm4gYml0bWFwX2FuZG5vdCh0c3RhbXBzLCB0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlc3RhbGUsIHR4LVxcdTAwM2VsZW4pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRyZXR1cm4gIWJpdG1hcF9lbXB0eSh0eC1cXHUwMDNlaW5fdXNlLCB0eC1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4rc3RhdGljIGJvb2wgaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSlcXG4ge1xcbitcXHRib29sIGhhdmVfdHN0YW1wcyA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xcbiBcXG4tXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spIHtcXG4tXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzLFxcbi1cXHRcXHRcXHRcXHQgICAgbGlzdF9ub2RlKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFxcdTAwMjZwb3J0LVxcdTAwM2V0eDtcXG4tXFxuLVxcdFxcdFxcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyh0eCkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcnQsIFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubGlzdCwgbGlzdF9ub2RlKSB7XFxuK1xcdFxcdGlmIChpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcXHUwMDI2cG9ydC1cXHUwMDNldHgsIGluX2lycSkpIHtcXG4rXFx0XFx0XFx0aGF2ZV90c3RhbXBzID0gdHJ1ZTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuLVxcdHJldHVybiBmYWxzZTtcXG4rXFx0cmV0dXJuIGhhdmVfdHN0YW1wcztcXG4gfVxcbiBcXG4tYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcXG4rYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXFxuIHtcXG4tXFx0c3RydWN0IGljZV9odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0LyogQ2hlY2sgc29mdHdhcmUgaW5kaWNhdG9yICovXFxuIFxcdHN3aXRjaCAocGYtXFx1MDAzZXB0cC50eF9pbnRlcnJ1cHRfbW9kZSkge1xcbiBcXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6XFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0Y2FzZSBJQ0VfUFRQX1RYX0lOVEVSUlVQVF9TRUxGOlxcbi1cXHRcXHRpZiAoaWNlX3BvcnRfaGFzX3RpbWVzdGFtcHMoXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCkpXFxuLVxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0cmV0dXJuIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFxcdTAwMjZwZi1cXHUwMDNlcHRwLnBvcnQudHgsIGluX2lycSk7XFxuIFxcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOlxcbi1cXHRcXHRpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSlcXG4tXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdFxcdGJyZWFrO1xcbitcXHRcXHRyZXR1cm4gaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmLCBpbl9pcnEpO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIlVuZXhwZWN0ZWQgVHggdGltZXN0YW1wIGludGVycnVwdCBtb2RlICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgIHBmLVxcdTAwM2VwdHAudHhfaW50ZXJydXB0X21vZGUpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0fVxcbi1cXG4tXFx0LyogQ2hlY2sgaGFyZHdhcmUgaW5kaWNhdG9yICovXFxuLVxcdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcXG4tXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXFxcIlVuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCk7XFxuLVxcdFxcdC8qIFN0b3AgdHJpZ2dlcmluZyBJUlFzIGlmIHdlJ3JlIHVuYWJsZSB0byByZWFkIFBIWSAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG4tXFxuLVxcdC8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzXFxuLVxcdCAqIGF2YWlsYWJsZSwgMCBpZiB0aGVyZSBhcmUgbm8gd2FpdGluZyB0aW1lc3RhbXBzLCBhbmQgYSBuZWdhdGl2ZVxcbi1cXHQgKiB2YWx1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgKHdoaWNoIHdlIGNoZWNrZWQgZm9yIGFib3ZlKS5cXG4tXFx0ICovXFxuLVxcdHJldHVybiByZXQgXFx1MDAzZSAwO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMjc5OSw3ICsyODc3LDcgQEAgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdC8qIEU4MzAgY2FuIHJlYWQgdGltZXN0YW1wcyBpbiB0aGUgdG9wIGhhbGYgdXNpbmcgcmQzMigpICovXFxuIFxcdFxcdGljZV9wdHBfcHJvY2Vzc190cyhwZik7XFxuIFxcbi1cXHRcXHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYpKSB7XFxuK1xcdFxcdGlmIChpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgdHJ1ZSkpIHtcXG4gXFx0XFx0XFx0LyogUHJvY2VzcyBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLiBJZiB0aGVyZVxcbiBcXHRcXHRcXHQgKiBpcyBtb3JlIHdvcmssIHJlLWFybSB0aGUgaW50ZXJydXB0IHRvIHRyaWdnZXIgYWdhaW4uXFxuIFxcdFxcdFxcdCAqL1xcbkBAIC0yODM5LDkgKzI5MTcsMTMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9tYXliZV90cmlnZ2VyX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFxuIFxcdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJQVFAgcGVyaW9kaWMgdGFzayB1bmFibGUgdG8gcmVhZCBQSFkgdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyZXQpO1xcbi1cXHR9IGVsc2UgaWYgKHJldCkge1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlVuYWJsZSB0byByZWFkIFBIWSBUeCB0aW1lc3RhbXAgcmVhZHkgYml0bWFwLCBlcnIgJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRFUlJfUFRSKHJldCkpO1xcbitcXHRcXHQvKiBEb24ndCB0cmlnZ2VyIGFuIElSUSBpZiB3ZSBhcmUgdW5hYmxlIHRvIGFjY2VzcyB0aGUgUEhZICovXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCBcXHUwMDNlIDAgfHwgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIGZhbHNlKSkge1xcbiBcXHRcXHRkZXZfZGJnKGRldiwgXFxcIlBUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXFxcblxcXCIpO1xcbiBcXG4gXFx0XFx0d3IzMihodywgUEZJTlRfT0lDUiwgUEZJTlRfT0lDUl9UU1lOX1RYX00pO1xcbkBAIC0yODkwLDE0ICsyOTcyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcXG4gXFx0XFx0XFx0XFx0XFx0ZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XFxuK1xcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLnBvcnRzKSB7XFxuLVxcdFxcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGljZV9wdHBfcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGxpc3Rfbm9kZSk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcXG4gXFx0XFx0c3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xcbiBcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2cG9ydC1cXHUwMDNlcmVmKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0aWYgKCFpY2VfaXNfcHJpbWFyeShcXHUwMDI2cGVlcl9wZi1cXHUwMDNlaHcpKSB7XFxuIFxcdFxcdFxcdGlmIChyZWJ1aWxkKSB7XFxuIFxcdFxcdFxcdFxcdC8qIFRPRE86IFdoZW4gaW1wbGVtZW50aW5nIHJlYnVpbGQ9dHJ1ZTpcXG5AQCAtMjkwOSw3ICsyOTkzLDExIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxcbiBcXHRcXHRcXHRcXHRpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHBlZXJfcGYsIHJlc2V0X3R5cGUpO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0XFx0a3JlZl9wdXQoXFx1MDAyNnBvcnQtXFx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4gXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTI5MzYsMTEgKzMwMjQsMTcgQEAgdm9pZCBpY2VfcHRwX3ByZXBhcmVfZm9yX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcXG4gXFx0aWYgKHJlc2V0X3R5cGUgPT0gSUNFX1JFU0VUX1BGUilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcXG4rXFx0ICogVHggdHJhY2tlci4gSWYgb3Zfd29yayBpcyBydW5uaW5nIGR1cmluZyByZXNldCwgaXQgbWF5IGlzc3VlXFxuK1xcdCAqIHNpZGViYW5kIHF1ZXVlIGNvbW1hbmRzIHRoYXQgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIGFuZCBtYXlcXG4rXFx0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxcbitcXHQgKi9cXG4rXFx0aWYgKGh3LVxcdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXFxuK1xcdFxcdGt0aHJlYWRfY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQub3Zfd29yayk7XFxuK1xcbiBcXHRpZiAoaWNlX3BmX3NyY190bXJfb3duZWQocGYpIFxcdTAwMjZcXHUwMDI2IGh3LVxcdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcXG4gXFx0XFx0aWNlX3B0cF9wcmVwYXJlX3JlYnVpbGRfc2VjKHBmLCBmYWxzZSwgcmVzZXRfdHlwZSk7XFxuIFxcbi1cXHRpY2VfcHRwX3JlbGVhc2VfdHhfdHJhY2tlcihwZiwgXFx1MDAyNnBmLVxcdTAwM2VwdHAucG9ydC50eCk7XFxuLVxcbiBcXHQvKiBEaXNhYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cXG4gXFx0aWNlX3B0cF9kaXNhYmxlX2FsbF9wZXJvdXQocGYpO1xcbiBcXG5AQCAtMzA4NiwxMSArMzE4MCwxMSBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUpO1xcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0LnJlZik7XFxuIFxcbi1cXHRsaXN0X2FkZChcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0Lmxpc3Rfbm9kZSxcXG4tXFx0XFx0IFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMucG9ydHMpO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuK1xcdGxpc3RfYWRkX3JjdShcXHUwMDI2cHRwLVxcdTAwM2Vwb3J0Lmxpc3Rfbm9kZSwgXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5saXN0KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VhZGFwdGVyLVxcdTAwM2Vwb3J0cy5sb2NrKTtcXG4gXFxuIFxcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxcbiBcXHQgKiBPbmx5IG1lYW5pbmdmdWwgb24gRTgyNSAob3RoZXIgTUFDIHR5cGVzIGRvbid0IGV4cG9zZSB0eC1jbGtcXG5AQCAtMzExMywxMiArMzIwNywzMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXFxuIHN0YXRpYyB2b2lkIGljZV9wdHBfY2xlYW51cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3QgaWNlX3B0cCAqcHRwID0gXFx1MDAyNnBmLVxcdTAwM2VwdHA7XFxuK1xcdHN0cnVjdCBrcmVmICpyZWY7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xcbi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuLVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZwdHAtXFx1MDAzZXBvcnQubGlzdF9ub2RlKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZi1cXHUwMDNlYWRhcHRlci1cXHUwMDNlcG9ydHMubG9jayk7XFxuLVxcdH1cXG4rXFx0aWYgKHBmLVxcdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX1VOS05PV04pXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIFRoZSBQRiBjYW5ub3QgYmUgcmVtb3ZlZCB1bnRpbCB0aGVyZSBhcmUgbm8gbW9yZSByZW1haW5pbmdcXG4rXFx0ICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsXFxuK1xcdCAqIGZpcnN0IHJlbW92ZSB0aGUgcG9ydCBmcm9tIHRoZSBsaXN0LCB0aGVuIGRyb3AgdGhlIHByaW1hcnlcXG4rXFx0ICogcmVmZXJlbmNlIHRoaXMgUEYgaG9sZHMgb24gdGhlIHBvcnQuIE9uY2UgZG9uZSwgd2FpdCB1bnRpbCBhbGxcXG4rXFx0ICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG9cXG4rXFx0ICogZW5zdXJlIHRoYXQgYWxsIFJDVSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IG1pZ2h0IGF0dGVtcHQgdG9cXG4rXFx0ICogZGVyZWZlcmVuY2UgdGhlIHBvcnQgYXJlIGZpbmlzaGVkLlxcbitcXHQgKi9cXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXHRsaXN0X2RlbF9yY3UoXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5saXN0X25vZGUpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGYtXFx1MDAzZWFkYXB0ZXItXFx1MDAzZXBvcnRzLmxvY2spO1xcbitcXG4rXFx0cmVmID0gXFx1MDAyNnB0cC1cXHUwMDNlcG9ydC5yZWY7XFxuK1xcdGtyZWZfcHV0KHJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcXG4rXFxuK1xcdGRldl9XQVJOX09OQ0UoaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdCAgICAgICF3YWl0X3Zhcl9ldmVudF90aW1lb3V0KHJlZiwgIWtyZWZfcmVhZChyZWYpLCAxNSAqIEhaKSxcXG4rXFx0XFx0ICAgICAgXFxcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwb3J0IHJlZmVyZW5jZXMgdG8gcmVsZWFzZS4gQ29udGludWluZyB0byB1bmxvYWQgYW55d2F5cy5cXFwiKTtcXG4rXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzIxMCw5ICszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiB9XFxuIFxcbiAvKipcXG4tICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIFBUUCB3b3JrIHRocmVhZHNcXG4rICogaWNlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIHRoZSBQVFAga3dvcmtlclxcbiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuICAqIEBwdHA6IFBGIFBUUCBzdHJ1Y3R1cmVcXG4rICpcXG4rICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxcbisgKiBwZXJpb2RpYyB3b3JrIGlzIG5vdCBxdWV1ZWQgaGVyZTsgdGhlIGNhbGxlciBzdGFydHMgaXQgb25jZSB0aGUgUFRQXFxuKyAqIHN0YXRlIGlzIElDRV9QVFBfUkVBRFkuXFxuICAqL1xcbiBzdGF0aWMgaW50IGljZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cCAqcHRwKVxcbiB7XFxuQEAgLTMyMzEsOSArMzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXFxuIFxcbiBcXHRwdHAtXFx1MDAzZWt3b3JrZXIgPSBrd29ya2VyO1xcbiBcXG4tXFx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBnb2luZyAqL1xcbi1cXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXFx1MDAzZWt3b3JrZXIsIFxcdTAwMjZwdHAtXFx1MDAzZXdvcmssIDApO1xcbi1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTMzNTUsNiArMzQ3MCwyMiBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfY2xlYW5fcGY7XFxuIFxcbitcXHQvKiBTZWVkIGxpbmtfdXAgZnJvbSBjdXJyZW50IFBIWSBzdGF0dXMsIHNpbmNlIGxpbmsgbWF5IGFscmVhZHkgYmUgdXBcXG4rXFx0ICogKGUuZy4gYWZ0ZXIgUFhFIGJvb3QpIHdpdGggbm8gbGluay1jaGFuZ2UgZWRnZSB0byBjYXRjaCBpdCBsYXRlci5cXG4rXFx0ICovXFxuK1xcdGlmIChwZi1cXHUwMDNlaHcucG9ydF9pbmZvKVxcbitcXHRcXHRwdHAtXFx1MDAzZXBvcnQubGlua191cCA9XFxuK1xcdFxcdFxcdCEhKHBmLVxcdTAwM2Vody5wb3J0X2luZm8tXFx1MDAzZXBoeS5saW5rX2luZm8ubGlua19pbmZvIFxcdTAwMjZcXG4rXFx0XFx0XFx0SUNFX0FRX0xJTktfVVApO1xcbitcXG4rXFx0LyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uXFxuK1xcdCAqIGl0IGluIHRoZSBFODJ4IHJlc3RhcnQgcGF0aC4gVGhpcyBwcmV2ZW50cyBjb25jdXJyZW50IGxpbmsgZXZlbnRzXFxuK1xcdCAqIGZyb20gcmVhY2hpbmcgaWNlX3B0cF9wb3J0X3BoeV9yZXN0YXJ0KCkgd2hpbGUga3dvcmtlciBpcyBzdGlsbCBOVUxMXFxuK1xcdCAqL1xcbitcXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfY2xlYW5fcGY7XFxuK1xcbiBcXHQvKiBTdGFydCB0aGUgUEhZIHRpbWVzdGFtcGluZyBibG9jayAqL1xcbiBcXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xcbiBcXG5AQCAtMzM2Myw5ICszNDk0LDEwIEBAIHZvaWQgaWNlX3B0cF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXG4gXFx0cHRwLVxcdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XFxuIFxcbi1cXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBlcnJfZXhpdDtcXG4rXFx0LyogU3RhcnQgcGVyaW9kaWMgd29yayBvbmx5IGFmdGVyIHRoZSBzdGF0ZSBpcyBSRUFEWTsgdGhlIHdvcmtlclxcbitcXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXFxuK1xcdCAqL1xcbitcXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXFx1MDAzZWt3b3JrZXIsIFxcdTAwMjZwdHAtXFx1MDAzZXdvcmssIDApO1xcbiBcXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxcXG5cXFwiKTtcXG4gXFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbmluZGV4IGM0YjBkYTdjZTIwZWQuLjEzMTU4YTkzMTlmYjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdWxpc3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tyZWYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJpY2VfcHRwX2h3LmhcXFwiXFxuQEAgLTEzMCw2ICsxMzIsOSBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFxcdFxcdDE2XFxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcXHRcXHRcXHQ2NFxcbiBcXG4rLyogTWF4aW11bSBudW1iZXIgb2YgdGltZXN0YW1wIGluZGV4ZXMgYWNyb3NzIGFsbCBkZXZpY2VzICovXFxuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxcbitcXG4gLyoqXFxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcXG4gICpcXG5AQCAtMTM4LDYgKzE0Myw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcXG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cXG4gICpcXG4gICogQGxpc3Rfbm9kZTogbGlzdCBtZW1iZXIgc3RydWN0dXJlXFxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcXG4gICogQHR4OiBUeCB0aW1lc3RhbXAgdHJhY2tpbmcgZm9yIHRoaXMgcG9ydFxcbiAgKiBAb3Zfd29yazogZGVsYXllZCB3b3JrIHRhc2sgZm9yIHRyYWNraW5nIHdoZW4gUEhZIG9mZnNldCBpcyB2YWxpZFxcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXFxuQEAgLTE0OSw2ICsxNTUsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XFxuICAqL1xcbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7XFxuK1xcdHN0cnVjdCBrcmVmIHJlZjtcXG4gXFx0c3RydWN0IGljZV9wdHBfdHggdHg7XFxuIFxcdHN0cnVjdCBrdGhyZWFkX2RlbGF5ZWRfd29yayBvdl93b3JrO1xcbiBcXHRzdHJ1Y3QgbXV0ZXggcHNfbG9jazsgLyogcHJvdGVjdHMgb3ZlcmFsbCBQVFAgUEhZIHN0YXJ0IHByb2NlZHVyZSAqL1xcbkBAIC0zMTIsNyArMzE5LDcgQEAgdm9pZCBpY2VfcHRwX3JlcV90eF9zaW5nbGVfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eCwgdTggaWR4KTtcXG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcXG4gdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpO1xcbiBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZik7XFxuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xcbitib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGluX2lycSk7XFxuIHU2NCBpY2VfcHRwX3JlYWRfc3JjX2Nsa19yZWcoc3RydWN0IGljZV9wZiAqcGYsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xcbiBcXG5AQCAtMzYwLDcgKzM2Nyw4IEBAIHN0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHN0cnVjdCBpY2VfcGYgKnBmKVxcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbmluZGV4IDNhNDFjNzExZTc1MWIuLjY0ZTE4ZmUxMTc2YjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcXG4gXFx0cmV0dXJuIGljZV9yZWFkX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxcbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbi0gKiBAcG9ydDogUG9ydCBudW1iZXIgdG8gYmUgcmVhZFxcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXFxuLSAqIEB2YWw6IFBvaW50ZXIgdG8gdGhlIHZhbHVlIHRvIHJlYWQgKG91dCBwYXJhbSlcXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAqICUwICAgICAgLSBzdWNjZXNzXFxuLSAqICogJUVJTlZBTCAtIGludmFsaWQgcG9ydCBudW1iZXIgb3IgcmVzb3VyY2UgdHlwZVxcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXFxuLSAqL1xcbi1zdGF0aWMgaW50IGljZV93cml0ZV9wb3J0X21lbV9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHUxNiBvZmZzZXQsXFxuLVxcdFxcdFxcdFxcdCAgICAgdTMyIHZhbClcXG4te1xcbi1cXHRyZXR1cm4gaWNlX3dyaXRlX3BvcnRfZXRoNTZnKGh3LCBwb3J0LCBvZmZzZXQsIHZhbCwgRVRINTZHX1BIWV9NRU1fUFRQKTtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIGljZV93cml0ZV9xdWFkX3B0cF9yZWdfZXRoNTZnIC0gV3JpdGUgYSBQSFkgcXVhZCByZWdpc3RlclxcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbkBAIC0xMTM5LDggKzExMjEsOCBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuICAqIGludGVybmFsIFBIWXMgb2YgdGhlIDU2RyBkZXZpY2VzLlxcbiAgKlxcbiAgKiBUbyBkaXJlY3RseSBjbGVhciB0aGUgY29udGVudHMgb2YgdGhlIHRpbWVzdGFtcCBibG9jayBlbnRpcmVseSwgZGlzY2FyZGluZ1xcbi0gKiBhbGwgdGltZXN0YW1wIGRhdGEgYXQgb25jZSwgc29mdHdhcmUgc2hvdWxkIGluc3RlYWQgdXNlXFxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXFxuKyAqIGFsbCB0aW1lc3RhbXAgZGF0YSBhdCBvbmNlLCBzb2Z0d2FyZSBzaG91bGQgaW5zdGVhZCBwZXJmb3JtIGEgUEhZIHNvZnRcXG4rICogcmVzZXQgdmlhIGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKCkuXFxuICAqXFxuICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGFuIGlkeCB3aG9zZSBiaXQgaXMgc2V0IGFjY29yZGluZyB0b1xcbiAgKiBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoKS5cXG5AQCAtMTE1MiwyNCArMTEzNCwxNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXFxuIHN0YXRpYyBpbnQgaWNlX2NsZWFyX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgpXFxuIHtcXG4gXFx0dTY0IHVudXNlZF90c3RhbXA7XFxuLVxcdHUxNiBsb19hZGRyO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0LyogUmVhZCB0aGUgdGltZXN0YW1wIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGUgdGltZXN0YW1wIHN0YXR1cyBiaXQgaXNcXG4tXFx0ICogY2xlYXJlZC5cXG4rXFx0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XFxuK1xcdCAqIGNsZWFycyB0aGUgZW50cnkncyB2YWxpZCBiaXQgYW5kIGl0cyBjb3JyZXNwb25kaW5nIChyZWFkLW9ubHkpXFxuK1xcdCAqIHRzX21lbW9yeV9zdGF0dXMgYml0LlxcbiBcXHQgKi9cXG4gXFx0ZXJyID0gaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1NmcoaHcsIHBvcnQsIGlkeCwgXFx1MDAyNnVudXNlZF90c3RhbXApO1xcbiBcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJGYWlsZWQgdG8gcmVhZCB0aGUgUEhZIHRpbWVzdGFtcCByZWdpc3RlciBmb3IgcG9ydCAldSwgaWR4ICV1LCBlcnIgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgcG9ydCwgaWR4LCBlcnIpO1xcbi1cXHR9XFxuLVxcbi1cXHRsb19hZGRyID0gKHUxNilQSFlfVFNUQU1QX0woaWR4KTtcXG4tXFxuLVxcdGVyciA9IGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcoaHcsIHBvcnQsIGxvX2FkZHIsIDApO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJGYWlsZWQgdG8gY2xlYXIgbG93IFBUUCB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgIHBvcnQsIGlkeCwgZXJyKTtcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG5AQCAtMTE3NywxOSArMTE1MSwzNiBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxcbiB9XFxuIFxcbiAvKipcXG4tICogaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnIC0gQ2xlYXIgYWxsIHRpbWVzdGFtcHMgZnJvbSB0aGUgcG9ydCBibG9ja1xcbisgKiBpY2VfcHRwX2NsZWFyX3R4X21lbW9yeV9zdGF0dXNfZXRoNTZnIC0gUmVzZXQgb25lIHBvcnQncyBUeCB0aW1lc3RhbXAgbWVtb3J5XFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XFxuKyAqIEBwb3J0OiBwb3J0IG51bWJlciB0byBjbGVhclxcbisgKlxcbisgKiBGdWxseSByZXNldCBhIHNpbmdsZSBQSFkgcG9ydCdzIFR4IHRpbWVzdGFtcCBtZW1vcnkuIFBlciB0aGUgUEhZIHNwZWMsIHRoZVxcbisgKiBvbmx5IHdheSB0byBjbGVhciBhIHRpbWVzdGFtcCB2YWxpZCBiaXQgKGFuZCBpdHMgcmVhZC1vbmx5IHRzX21lbW9yeV9zdGF0dXNcXG4rICogYml0KSBpcyB0byByZWFkIHRoZSB0aW1lc3RhbXAgbWVtb3J5IGxvY2F0aW9uLCBzbyByZWFkIGV2ZXJ5IGVudHJ5IGZvciB0aGVcXG4rICogcG9ydCAodHdvIDMyLWJpdCByZWFkcyBlYWNoKS4gVGhpcyBkaXNjYXJkcyBhbGwgdGltZXN0YW1wIGRhdGEgb24gdGhlIHBvcnQsXFxuKyAqIHNvIGl0IG11c3Qgb25seSBiZSB1c2VkIGZvciBhIGZ1bGwgcmVzZXQ7IGNhbGxlcnMgdGhhdCBtdXN0IHByZXNlcnZlXFxuKyAqIGluLWZsaWdodCB0aW1lc3RhbXBzIGNsZWFyIGluZGl2aWR1YWwgaW5kaWNlcyB2aWEgaWNlX2NsZWFyX3BoeV90c3RhbXAoKS5cXG4rICpcXG4rICogRHVlIHRvIGludGVyYWN0aW9ucyB3aXRoIGFuIGludGVybmFsIEhXIGNvdW50ZXIgZm9yIHRoZSBudW1iZXIgb2ZcXG4rICogb3V0c3RhbmRpbmcgVHggdGltZXN0YW1wcywgdGhpcyAqbXVzdCogb25seSBiZSBjYWxsZWQgYXMgcGFydCBvZiB0aGVcXG4rICogaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKSBwcm9jZWR1cmUuIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGNvdW50ZXJcXG4rICogbWF5IGJlY29tZSBvdXQgb2Ygc3luYyBhbmQgcHJldmVudCBuZXcgdGltZXN0YW1wIGludGVycnVwdHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgdG8gcmVhZCB0aGUgUEhZLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgaWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3KVxcbitzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IHBvcnQ7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXHR1OCBpZHg7XFxuIFxcbi1cXHRmb3IgKHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgaHctXFx1MDAzZXB0cC5udW1fbHBvcnRzOyBwb3J0KyspIHtcXG4tXFx0XFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfTCxcXG4tXFx0XFx0XFx0XFx0XFx0IDApO1xcbi1cXHRcXHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19VLFxcbi1cXHRcXHRcXHRcXHRcXHQgMCk7XFxuK1xcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgSU5ERVhfUEVSX1BPUlQ7IGlkeCsrKSB7XFxuK1xcdFxcdGVyciA9IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4KTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMTE1LDEwICsyMTA2LDYgQEAgaW50IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIGJvb2wgc29mdF9yZXNldClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0ZXJyID0gaWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX09GRlNFVF9SRUFEWSwgMCk7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcbiBcXHRlcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfUlhfT0ZGU0VUX1JFQURZLCAwKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjEzMyw5ICsyMTIwLDExIEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XFxuICAqIEBwb3J0OiB0aGUgUEhZIHBvcnQgdG8gc3RhcnRcXG4gICpcXG4tICogU3RhcnQgdGhlIGNsb2NrIG9mIGEgUEhZIHBvcnQuIFRoaXMgbXVzdCBiZSBkb25lIGFzIHBhcnQgb2YgdGhlIGZsb3cgdG9cXG4tICogcmUtY2FsaWJyYXRlIFR4IGFuZCBSeCB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpc1xcbi0gKiBpbml0aWFsaXplZCBvciB3aGVuIGxpbmsgc3BlZWQgY2hhbmdlcy5cXG4rICogUGVyZm9ybSBhIFBIWSBzb2Z0IHJlc2V0IGFuZCB0aGVuIHN0YXJ0IHRoZSBjbG9jayBmb3IgdGhlIFBIWSBwb3J0LlxcbisgKlxcbisgKiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnhcXG4rICogdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXMgaW5pdGlhbGl6ZWQgb3Igd2hlbiBsaW5rXFxuKyAqIHNwZWVkIGNoYW5nZXMuXFxuICAqXFxuICAqIFJldHVybjpcXG4gICogKiAlMCAgICAgLSBzdWNjZXNzXFxuQEAgLTIxNTEsNiArMjE0MCwxMCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXFxuIFxcbiBcXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcXG4gXFxuK1xcdGVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuIFxcdGVyciA9IGljZV9zdG9wX3BoeV90aW1lcl9ldGg1NmcoaHcsIHBvcnQsIGZhbHNlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMjI5NCw2ICsyMjg3LDcgQEAgaW50IGljZV9wdHBfcmVhZF90eF9od3RzdGFtcF9zdGF0dXNfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgKnRzX3N0YXR1cylcXG4gICpcXG4gICogVHJpZ2dlciBhIHNvZnQgcmVzZXQgb2YgdGhlIEVUSDU2RyBQSFkgYnkgdG9nZ2xpbmcgdGhlIHNvZnQgcmVzZXRcXG4gICogYml0IGluIHRoZSBQSFkgZ2xvYmFsIHJlZ2lzdGVyLiBUaGUgcmVzZXQgc2VxdWVuY2UgY29uc2lzdHMgb2Y6XFxuKyAqICAgMC4gUmVhZGluZyBldmVyeSB0aW1lc3RhbXAgbWVtb3J5IHJlZ2lzdGVyIHRvIGNsZWFyIGl0cyB2YWxpZCBiaXRcXG4gICogICAxLiBDbGVhcmluZyB0aGUgc29mdCByZXNldCBiaXRcXG4gICogICAyLiBBc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQgYml0XFxuICAqICAgMy4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0IGFnYWluXFxuQEAgLTIzMDIsNiArMjI5NiwxMiBAQCBpbnQgaWNlX3B0cF9yZWFkX3R4X2h3dHN0YW1wX3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHUzMiAqdHNfc3RhdHVzKVxcbiAgKiB0byBzZXR0bGUuIFRoaXMgcHJvdmlkZXMgYSBjb250cm9sbGVkIHdheSB0byByZWluaXRpYWxpemUgdGhlIFBIWVxcbiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LlxcbiAgKlxcbisgKiBUbyBlbnN1cmUgdGhhdCB0aGUgaW50ZXJuYWwgY291bnRlciBtYXRjaGVzIHRoZSBjb250ZW50cyBvZiB0aGVcXG4rICogUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTLCByZWFkIGV2ZXJ5IHRpbWVzdGFtcCBpbmRleCBwcmlvciB0byBwZXJmb3JtaW5nXFxuKyAqIHRoZSBzb2Z0IHJlc2V0LiBUaGUgUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTIHJlYWRzIGVuc3VyZSB0aGF0IHRoZSByZWdpb25cXG4rICogaXMgY2xlYXJlZCwgd2hpbGUgdGhlIHNvZnQgcmVzZXQgcHJvY2VkdXJlIGVuc3VyZXMgdGhhdCB0aGUgdGltZXN0YW1wXFxuKyAqIGNvdW50ZXIgaXMgcmVzZXQgdG8gemVyby5cXG4rICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIHdoZW5cXG4gICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci5cXG4gICovXFxuQEAgLTIzMTAsNiArMjMxMCwxMyBAQCBpbnQgaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXFxuIFxcdHUzMiBnbG9iYWxfdmFsO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0ZXJyID0gaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhodywgcG9ydCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBjbGVhciBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMgZm9yIHBvcnQgJWQsIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICBwb3J0LCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBpY2VfcmVhZF9wdHBfcmVnX2V0aDU2ZyhodywgcG9ydCwgUEhZX1JFR19HTE9CQUwsIFxcdTAwMjZnbG9iYWxfdmFsKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHJlYWQgUEhZX1JFR19HTE9CQUwgZm9yIHBvcnQgJWQsIGVyciAlZFxcXFxuXFxcIixcXG5AQCAtNTgwMSw4ICs1ODA4LDkgQEAgdm9pZCBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gXFx0XFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZTgyeChodyk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1Olxcbi1cXHRcXHRpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcoaHcpO1xcbi1cXHRcXHRicmVhaztcXG4rXFx0XFx0LyogRTgyNSBoYXJkd2FyZSBtdXN0IG9ubHkgcmVzZXQgdGltZXN0YW1wIG1lbW9yeSBhcyBwYXJ0IG9mXFxuK1xcdFxcdCAqIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZS5cXG4rXFx0XFx0ICovXFxuIFxcdGNhc2UgSUNFX01BQ19FODEwOlxcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm47XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjAzOjE2LjA1NzM3ODkxMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzg1OTY4NjY5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4NzI1ZjAyN2IxMTBjMWU4MjY0N2M1ZWE0ODAzYWE2YzVlM2FmYTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMTowMzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbmluZGV4IDJkYzM2MjlkNmQwZjYuLmQxNjQzYmY4YTFiNTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmNcbkBAIC02NiwxOCArNjYsMTcgQEAgc3RhdGljIHN0cnVjdCBpY2VfYWRhcHRlciAqaWNlX2FkYXB0ZXJfbmV3KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlY3BpX3BoeV9sb2NrW2ldKTtcbiBcdHJlZmNvdW50X3NldChcdTAwMjZhZGFwdGVyLVx1MDAzZXJlZmNvdW50LCAxKTtcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMucG9ydHMpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCk7XG4gXG4gXHRyZXR1cm4gYWRhcHRlcjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWNlX2FkYXB0ZXJfZnJlZShzdHJ1Y3QgaWNlX2FkYXB0ZXIgKmFkYXB0ZXIpXG4ge1xuLVx0V0FSTl9PTighbGlzdF9lbXB0eShcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSk7XG4rXHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNmFkYXB0ZXItXHUwMDNlcG9ydHMubGlzdCkpO1xuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2spOyBpKyspXG4gXHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2YWRhcHRlci1cdTAwM2VjcGlfcGh5X2xvY2tbaV0pO1xuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuIFxuIFx0a2ZyZWUoYWRhcHRlcik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbmluZGV4IDRmNjk1ZjMyZGEzZDguLjM5OTIzZGVkZDUzNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2FkYXB0ZXIuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9hZGFwdGVyLmhcbkBAIC0xOSwxMyArMTksMTMgQEAgc3RydWN0IGljZV9wZjtcbiAgKlxuICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGRhdGEgdXNlZCB0byBtYWludGFpbiBhIGxpc3Qgb2YgYWRhcHRlciBwb3J0c1xuICAqXG4tICogQHBvcnRzOiBsaXN0IG9mIHBvcnRzXG4rICogQGxpc3Q6IGxpc3Qgb2YgcG9ydHNcbiAgKiBAbG9jazogcHJvdGVjdCBhY2Nlc3MgdG8gdGhlIHBvcnRzIGxpc3RcbiAgKi9cbiBzdHJ1Y3QgaWNlX3BvcnRfbGlzdCB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIHBvcnRzO1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFx0LyogVG8gc3luY2hyb25pemUgdGhlIHBvcnRzIGxpc3Qgb3BlcmF0aW9ucyAqL1xuLVx0c3RydWN0IG11dGV4IGxvY2s7XG4rXHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5pbmRleCBkODg4MzU0ODJkM2FhLi5kMTI5NTIxNzFhOTkxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXG5AQCAtMzI0OCw3ICszMjQ4LDcgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9taXNjX2ludHJfdGhyZWFkX2ZuKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0aWNlX2lycV9keW5hbWljX2VuYShodywgTlVMTCwgTlVMTCk7XG4gXHRpY2VfZmx1c2goaHcpO1xuIFxuLVx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xuK1x0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmLCB0cnVlKSkge1xuIFx0XHQvKiBJZiBhbnkgbmV3IFR4IHRpbWVzdGFtcHMgaGFwcGVuZWQgd2hpbGUgaW4gaW50ZXJydXB0LFxuIFx0XHQgKiByZS1hcm0gdGhlIGludGVycnVwdCB0byB0cmlnZ2VyIGl0IGFnYWluLlxuIFx0XHQgKi9cbkBAIC02NzQ1LDcgKzY3NDUsNiBAQCBzdGF0aWMgaW50IGljZV91cF9jb21wbGV0ZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRpY2VfcHJpbnRfbGlua19tc2codnNpLCB0cnVlKTtcbiBcdFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyh2c2ktXHUwMDNlbmV0ZGV2KTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbih2c2ktXHUwMDNlbmV0ZGV2KTtcbi1cdFx0aWNlX3B0cF9saW5rX2NoYW5nZShwZiwgdHJ1ZSk7XG4gXHR9XG4gXG4gXHQvKiBQZXJmb3JtIGFuIGluaXRpYWwgcmVhZCBvZiB0aGUgc3RhdGlzdGljcyByZWdpc3RlcnMgbm93IHRvXG5AQCAtNzI3Myw3ICs3MjcyLDYgQEAgaW50IGljZV9kb3duKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXG4gXHRpZiAodnNpLVx1MDAzZW5ldGRldikge1xuIFx0XHR2bGFuX2VyciA9IGljZV92c2lfZGVsX3ZsYW5femVybyh2c2kpO1xuLVx0XHRpY2VfcHRwX2xpbmtfY2hhbmdlKHZzaS1cdTAwM2ViYWNrLCBmYWxzZSk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0XHRuZXRpZl90eF9kaXNhYmxlKHZzaS1cdTAwM2VuZXRkZXYpO1xuIFx0fVxuQEAgLTc3OTQsNiArNzc5MiwxNCBAQCBzdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXG4gXG4gXHRpY2VfdXBkYXRlX3BmX25ldGRldl9saW5rKHBmKTtcbiBcbitcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19QVFBfU1VQUE9SVEVELCBwZi1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2IHBmLVx1MDAzZWh3LnBvcnRfaW5mbykge1xuK1x0XHRib29sIGxpbmtfdXA7XG4rXG4rXHRcdGxpbmtfdXAgPSAhIShwZi1cdTAwM2Vody5wb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2XG4rXHRcdFx0ICAgICBJQ0VfQVFfTElOS19VUCk7XG4rXHRcdGljZV9wdHBfbGlua19jaGFuZ2UocGYsIGxpbmtfdXApO1xuK1x0fVxuK1xuIFx0LyogdGVsbCB0aGUgZmlybXdhcmUgd2UgYXJlIHVwICovXG4gXHRlcnIgPSBpY2Vfc2VuZF92ZXJzaW9uKHBmKTtcbiBcdGlmIChlcnIpIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuY1xuaW5kZXggZWFlYzM2YWI2YWUzZi4uYTVlZmIwYTk1OTQxZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmNcbkBAIC0xLDYgKzEsOCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChDKSAyMDIxLCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi9cbiBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VsaXN0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0X2JpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpY2UuaFwiXG4gI2luY2x1ZGUgXCJpY2VfbGliLmhcIlxuICNpbmNsdWRlIFwiaWNlX3RyYWNlLmhcIlxuQEAgLTM2Miw5ICszNjQsMTIgQEAgc3RhdGljIHU2NCBpY2VfcHRwX2V4dGVuZF80MGJfdHMoc3RydWN0IGljZV9wZiAqcGYsIHU2NCBpbl90c3RhbXApXG4gc3RhdGljIGJvb2xcbiBpY2VfcHRwX2lzX3R4X3RyYWNrZXJfdXAoc3RydWN0IGljZV9wdHBfdHggKnR4KVxuIHtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnB0cF9wb3J0ID1cbitcdFx0Y29udGFpbmVyX29mKHR4LCBzdHJ1Y3QgaWNlX3B0cF9wb3J0LCB0eCk7XG4rXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnR4LVx1MDAzZWxvY2spO1xuIFxuLVx0cmV0dXJuIHR4LVx1MDAzZWluaXQgXHUwMDI2XHUwMDI2ICF0eC1cdTAwM2VjYWxpYnJhdGluZztcbitcdHJldHVybiB0eC1cdTAwM2Vpbml0IFx1MDAyNlx1MDAyNiAhdHgtXHUwMDNlY2FsaWJyYXRpbmcgXHUwMDI2XHUwMDI2IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4gfVxuIFxuIC8qKlxuQEAgLTU2MSw3ICs1NjYsNiBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHhfdHN0YW1wKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHR1NjQgdHN0YW1wX3JlYWR5O1xuLVx0Ym9vbCBsaW5rX3VwO1xuIFx0aW50IGVycjtcbiBcdHU4IGlkeDtcbiBcbkBAIC01NjksNyArNTczLDcgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZiA9IHB0cF9wb3J0X3RvX3BmKHB0cF9wb3J0KTtcbiBcdGh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG4gXG4tXHRpZiAoIXR4LVx1MDAzZWluaXQpXG4rXHRpZiAoIXR4LVx1MDAzZWluaXQgfHwgYml0bWFwX2VtcHR5KHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogUmVhZCB0aGUgVHggcmVhZHkgc3RhdHVzIGZpcnN0ICovXG5AQCAtNTc5LDE0ICs1ODMsMTEgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0LyogRHJvcCBwYWNrZXRzIGlmIHRoZSBsaW5rIHdlbnQgZG93biAqL1xuLVx0bGlua191cCA9IHB0cF9wb3J0LVx1MDAzZWxpbmtfdXA7XG4tXG4gXHRmb3JfZWFjaF9zZXRfYml0KGlkeCwgdHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pIHtcbiBcdFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzID0ge307XG4gXHRcdHU4IHBoeV9pZHggPSBpZHggKyB0eC1cdTAwM2VvZmZzZXQ7XG4gXHRcdHU2NCByYXdfdHN0YW1wID0gMCwgdHN0YW1wO1xuLVx0XHRib29sIGRyb3BfdHMgPSAhbGlua191cDtcbitcdFx0Ym9vbCBkcm9wX3RzID0gZmFsc2U7XG4gXHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4gXHRcdC8qIERyb3AgcGFja2V0cyB3aGljaCBoYXZlIHdhaXRlZCBmb3IgbW9yZSB0aGFuIDIgc2Vjb25kcyAqL1xuQEAgLTYxOSw2ICs2MjAsMTkgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2ICFkcm9wX3RzKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKiB2ZXJpZnkgcmVhZHkgYml0IGNsZWFyZWQgKi9cbitcdFx0aWYgKHR4LVx1MDAzZWhhc19yZWFkeV9iaXRtYXApIHtcbitcdFx0XHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuK1x0XHRcdGlmIChlcnIgfHwgdHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKHBoeV9pZHgpKSB7XG4rXHRcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSkpXG4rXHRcdFx0XHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksIFwiUEhZIHBvcnQgJXUgZmFpbGVkIHRvIGNsZWFyIHJlYWR5IGJpdCBmb3IgaWR4ICV1XFxuXCIsXG4rXHRcdFx0XHRcdFx0cHRwX3BvcnQtXHUwMDNlcG9ydF9udW0sIHBoeV9pZHgpO1xuK1x0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdH1cbitcbiBcdFx0aWNlX3RyYWNlKHR4X3RzdGFtcF9md19kb25lLCB0eC1cdTAwM2V0c3RhbXBzW2lkeF0uc2tiLCBpZHgpO1xuIFxuIFx0XHQvKiBGb3IgUEhZcyB3aGljaCBkb24ndCBpbXBsZW1lbnQgYSBwcm9wZXIgdGltZXN0YW1wIHJlYWR5XG5AQCAtNjczLDIwICs2ODcsMzMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRwZi1cdTAwM2VwdHAudHhfaHd0c3RhbXBfZ29vZCArPSB0c3RhbXBfZ29vZDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KHN0cnVjdCBrcmVmICpyZWYpXG4re1xuK1x0d2FrZV91cF92YXIocmVmKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgaWNlX3B0cF90eF90c3RhbXBfb3duZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKSB7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QsIGxpc3Rfbm9kZSkge1xuIFx0XHRzdHJ1Y3QgaWNlX3B0cF90eCAqdHggPSBcdTAwMjZwb3J0LVx1MDAzZXR4O1xuIFxuLVx0XHRpZiAoIXR4IHx8ICF0eC1cdTAwM2Vpbml0KVxuK1x0XHRpZiAoIXR4LVx1MDAzZWluaXQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2cG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbiBcdFx0aWNlX3B0cF9wcm9jZXNzX3R4X3RzdGFtcCh0eCk7XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC03MjUsNiArNzUyLDM3IEBAIGljZV9wdHBfYWxsb2NfdHhfdHJhY2tlcihzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWRcbitpY2VfcHRwX3dhaXRfZm9yX3RyYWNrZXJfZHJhaW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTApO1xuK1x0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbitcdHU2NCB0c3RhbXBfcmVhZHk7XG4rXHRib29sIHBlbmRpbmc7XG4rXHR1OCBpZHg7XG4rXG4rXHRpZiAoaHctXHUwMDNlcmVzZXRfb25nb2luZylcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZG8ge1xuK1x0XHRpZiAoaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KGh3LCB0eC1cdTAwM2VibG9jaywgXHUwMDI2dHN0YW1wX3JlYWR5KSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdHBlbmRpbmcgPSBmYWxzZTtcbitcdFx0Zm9yX2VhY2hfc2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlbGVuKSB7XG4rXHRcdFx0aWYgKCEodHN0YW1wX3JlYWR5IFx1MDAyNiBCSVRfVUxMKGlkeCArIHR4LVx1MDAzZW9mZnNldCkpKVxuK1x0XHRcdFx0cGVuZGluZyA9IHRydWU7XG4rXHRcdH1cbitcdFx0aWYgKCFwZW5kaW5nKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0dXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuK1xuK1x0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW4tZmxpZ2h0IFR4IHRpbWVzdGFtcHMgb24gYmxvY2sgJXVcXG5cIixcbitcdFx0dHgtXHUwMDNlYmxvY2spO1xuK31cbitcbiAvKipcbiAgKiBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIgLSBGbHVzaCBhbnkgcmVtYWluaW5nIHRpbWVzdGFtcHMgZnJvbSB0aGUgdHJhY2tlclxuICAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbkBAIC03NDEsNiArNzk5LDggQEAgaWNlX3B0cF9mbHVzaF90eF90cmFja2VyKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3B0cF90eCAqdHgpXG4gXHRpbnQgZXJyO1xuIFx0dTggaWR4O1xuIFxuK1x0aWNlX3B0cF93YWl0X2Zvcl90cmFja2VyX2RyYWluKHBmLCB0eCk7XG4rXG4gXHRlcnIgPSBpY2VfZ2V0X3BoeV90eF90c3RhbXBfcmVhZHkoaHcsIHR4LVx1MDAzZWJsb2NrLCBcdTAwMjZ0c3RhbXBfcmVhZHkpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLCBcIkZhaWxlZCB0byBnZXQgdGhlIFR4IHRzdGFtcCByZWFkeSBiaXRtYXAgZm9yIGJsb2NrICV1LCBlcnIgJWRcXG5cIixcbkBAIC03NzksMTIgKzgzOSwxMCBAQCBpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbiAgKiBpY2VfcHRwX21hcmtfdHhfdHJhY2tlcl9zdGFsZSAtIE1hcmsgdW5maW5pc2hlZCB0aW1lc3RhbXBzIGFzIHN0YWxlXG4gICogQHR4OiB0aGUgdHJhY2tlciB0byBtYXJrXG4gICpcbi0gKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHNlbmRpbmdcbi0gKiB0aGVpciB0aW1lc3RhbXAgdmFsdWUgdG8gdGhlIHN0YWNrLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgZXh0ZW5kaW5nXG4tICogdGhlIDQwYml0IGhhcmR3YXJlIHRpbWVzdGFtcCBpbmNvcnJlY3RseS5cbi0gKlxuLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBQVFAgY2xvY2sgaXMgbW9kaWZpZWQgc3VjaCBhcyBhZnRlciBhIHNldFxuLSAqIHRpbWUgcmVxdWVzdC5cbisgKiBNYXJrIGN1cnJlbnRseSBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzIGFzIHN0YWxlLiBUaGlzIHByZXZlbnRzIHRoZSBkcml2ZXJcbisgKiBmcm9tIHJlcG9ydGluZyB0aGUgdGltZXN0YW1wIHRvIHRoZSBzdGFjay4gVGhpcyBpcyBjYWxsZWQgdG8gaW5mb3JtIHRoZVxuKyAqIGRyaXZlciB0aGF0IGEgdGltZXN0YW1wIGlzIGV4cGVjdGVkIHRvIGZhaWwgaWYgaXQgd2FzIGluaXRpYXRlZCBhcyB0aGUgbGlua1xuKyAqIHdlbnQgZG93bi5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuIGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbkBAIC04MDgsOCArODY2LDE2IEBAIGljZV9wdHBfZmx1c2hfYWxsX3R4X3RyYWNrZXIoc3RydWN0IGljZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5wb3J0cywgbGlzdF9ub2RlKVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRpY2VfcHRwX2ZsdXNoX3R4X3RyYWNrZXIocHRwX3BvcnRfdG9fcGYocG9ydCksIFx1MDAyNnBvcnQtXHUwMDNldHgpO1xuK1x0XHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRcdGtyZWZfcHV0KFx1MDAyNnBvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIC8qKlxuQEAgLTk5NCwxMyArMTA2MCw2IEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfY2FjaGVkX3BoY3RpbWUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHBmLVx1MDAzZXB0cC5rd29ya2VyLCBcdTAwMjZwZi1cdTAwM2VwdHAud29yayxcbiBcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcygxMCkpO1xuIFx0fVxuLVxuLVx0LyogTWFyayBhbnkgb3V0c3RhbmRpbmcgdGltZXN0YW1wcyBhcyBzdGFsZSwgc2luY2UgdGhleSBtaWdodCBoYXZlXG4tXHQgKiBiZWVuIGNhcHR1cmVkIGluIGhhcmR3YXJlIGJlZm9yZSB0aGUgdGltZSB1cGRhdGUuIFRoaXMgY291bGQgbGVhZFxuLVx0ICogdG8gdXMgZXh0ZW5kaW5nIHRoZW0gd2l0aCB0aGUgd3JvbmcgY2FjaGVkIHZhbHVlIHJlc3VsdGluZyBpblxuLVx0ICogaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4tXHQgKi9cbi1cdGljZV9wdHBfbWFya190eF90cmFja2VyX3N0YWxlKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KTtcbiB9XG4gXG4gLyoqXG5AQCAtMTEzMyw2ICsxMTkyLDcgQEAgc3RhdGljIGludCBpY2VfcHRwX2NoZWNrX3R4X2ZpZm8oc3RydWN0IGljZV9wdHBfcG9ydCAqcG9ydClcbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3dhaXRfZm9yX29mZnNldHMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBpY2VfcGYgKnBmO1xuIFx0c3RydWN0IGljZV9odyAqaHc7XG4gXHRpbnQgdHhfZXJyO1xuQEAgLTExNTUsMTIgKzEyMTUsMjggQEAgc3RhdGljIHZvaWQgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKHN0cnVjdCBrdGhyZWFkX3dvcmsgKndvcmspXG4gXHRcdHR4X2VyciA9IGljZV9waHlfY2ZnX3R4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdHJ4X2VyciA9IGljZV9waHlfY2ZnX3J4X29mZnNldF9lODJ4KGh3LCBwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiBcdGlmICh0eF9lcnIgfHwgcnhfZXJyKSB7XG4tXHRcdC8qIFR4IGFuZC9vciBSeCBvZmZzZXQgbm90IHlldCBjb25maWd1cmVkLCB0cnkgYWdhaW4gbGF0ZXIgKi9cbitcdFx0LyogVHggYW5kL29yIFJ4IG9mZnNldCBub3QgeWV0IGNvbmZpZ3VyZWQsIHRyeSBhZ2FpbiBsYXRlci5cbitcdFx0ICogVGhpcyBpcyBleHBlY3RlZCBkdXJpbmcgbm9ybWFsIGxpbmstdXA6IHRoZSB2ZXJuaWVyIG9mZnNldFxuK1x0XHQgKiBjYWxpYnJhdGlvbiBjYW5ub3QgY29tcGxldGUgdW50aWwgYXQgbGVhc3Qgb25lIHBhY2tldCBoYXNcbitcdFx0ICogYmVlbiB0cmFuc21pdHRlZCwgc28gdGhlIGZpcnN0IHJldHJpZXMgcm91dGluZWx5IGxhbmQgaGVyZS5cbitcdFx0ICovXG4rXHRcdGRldl9kYmcoaWNlX3BmX3RvX2RldihwZiksXG4rXHRcdFx0XCJQVFAgb2Zmc2V0IG5vdCB5ZXQgdmFsaWQgZm9yIHBvcnQgJXUgKHR4X2Vycj0lZCByeF9lcnI9JWQpXFxuXCIsXG4rXHRcdFx0cG9ydC1cdTAwM2Vwb3J0X251bSwgdHhfZXJyLCByeF9lcnIpO1xuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2cG9ydC1cdTAwM2Vvdl93b3JrLFxuIFx0XHRcdFx0XHQgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4rXG4rXHQvKiBUeCBhbmQgUnggb2Zmc2V0cyBhcmUgbm93IGNvbmZpZ3VyZWQsIGVuYWJsZSBUeCB0aW1lc3RhbXBzICovXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbitcdHBvcnQtXHUwMDNldHguY2FsaWJyYXRpbmcgPSBmYWxzZTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cG9ydC1cdTAwM2V0eC5sb2NrLCBmbGFncyk7XG4rXG4rXHRkZXZfZGJnKGljZV9wZl90b19kZXYocGYpLFxuK1x0XHRcIlBUUCBvZmZzZXQgdmFsaWQgZm9yIHBvcnQgJXUsIFR4IHRpbWVzdGFtcHMgZW5hYmxlZFxcblwiLFxuK1x0XHRwb3J0LVx1MDAzZXBvcnRfbnVtKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTI0NiwxMCArMTMyMiwxMyBAQCBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoc3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQpXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdC8qIEVuYWJsZSBUeCB0aW1lc3RhbXBzIHJpZ2h0IGF3YXkgKi9cbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgubG9jaywgZmxhZ3MpO1xuLVx0XHRwdHBfcG9ydC1cdTAwM2V0eC5jYWxpYnJhdGluZyA9IGZhbHNlO1xuLVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnB0cF9wb3J0LVx1MDAzZXR4LmxvY2ssIGZsYWdzKTtcbitcdFx0LyogRG8gbm90IGNsZWFyIGNhbGlicmF0aW5nIGZsYWcgaGVyZS4gVHggdGltZXN0YW1wcyByZW1haW5cbitcdFx0ICogZGlzYWJsZWQgdW50aWwgaWNlX3B0cF93YWl0X2Zvcl9vZmZzZXRzKCkgaGFzIHZlcmlmaWVkXG4rXHRcdCAqIHRoYXQgdGhlIFR4IGFuZCBSeCBvZmZzZXQgY2FsaWJyYXRpb24gaGFzIGNvbXBsZXRlZC5cbitcdFx0ICogQ2xlYXJpbmcgaXQgaGVyZSB3b3VsZCBhbGxvdyBUeCB0aW1lc3RhbXBzIHRvIGJlIHJlcG9ydGVkXG4rXHRcdCAqIGJlZm9yZSB0aGUgUEhZIG9mZnNldCByZWdpc3RlcnMgYXJlIGNvbmZpZ3VyZWQsIGxlYWRpbmdcbitcdFx0ICogdG8gaW5jb3JyZWN0IHRpbWVzdGFtcCB2YWx1ZXMuXG4rXHRcdCAqL1xuIFxuIFx0XHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwZi1cdTAwM2VwdHAua3dvcmtlciwgXHUwMDI2cHRwX3BvcnQtXHUwMDNlb3Zfd29yayxcbiBcdFx0XHRcdFx0ICAgMCk7XG5AQCAtMTI4MCwxNyArMTM1OSwyMyBAQCB2b2lkIGljZV9wdHBfbGlua19jaGFuZ2Uoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgbGlua3VwKVxuIFx0c3RydWN0IGljZV9wdHBfcG9ydCAqcHRwX3BvcnQ7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFxuLVx0aWYgKHBmLVx1MDAzZXB0cC5zdGF0ZSAhPSBJQ0VfUFRQX1JFQURZKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRwdHBfcG9ydCA9IFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0O1xuIFxuK1x0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwdHBfcG9ydC1cdTAwM2VyZWYpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBVcGRhdGUgY2FjaGVkIGxpbmsgc3RhdHVzIGZvciB0aGlzIHBvcnQgaW1tZWRpYXRlbHkgKi9cbiBcdHB0cF9wb3J0LVx1MDAzZWxpbmtfdXAgPSBsaW5rdXA7XG4gXG4rXHRpZiAocGYtXHUwMDNlcHRwLnN0YXRlICE9IElDRV9QVFBfUkVBRFkpXG4rXHRcdGdvdG8gZXhpdF9rcmVmX3B1dDtcbitcbiBcdC8qIFNraXAgSFcgd3JpdGVzIGlmIHJlc2V0IGlzIGluIHByb2dyZXNzICovXG4gXHRpZiAocGYtXHUwMDNlaHcucmVzZXRfb25nb2luZylcbi1cdFx0cmV0dXJuO1xuK1x0XHRnb3RvIGV4aXRfa3JlZl9wdXQ7XG4rXG4rXHRpZiAoIWxpbmt1cClcbitcdFx0aWNlX3B0cF9tYXJrX3R4X3RyYWNrZXJfc3RhbGUoXHUwMDI2cHRwX3BvcnQtXHUwMDNldHgpO1xuIFxuIFx0aWYgKGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1IFx1MDAyNlx1MDAyNlxuIFx0ICAgIHRlc3RfYml0KElDRV9GTEFHX0RQTEwsIHBmLVx1MDAzZWZsYWdzKSkge1xuQEAgLTEzMzMsMTcgKzE0MTgsMjAgQEAgdm9pZCBpY2VfcHRwX2xpbmtfY2hhbmdlKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGxpbmt1cClcbiBcdGNhc2UgSUNFX01BQ19FODEwOlxuIFx0Y2FzZSBJQ0VfTUFDX0U4MzA6XG4gXHRcdC8qIERvIG5vdCByZWNvbmZpZ3VyZSBFODEwIG9yIEU4MzAgUEhZICovXG4tXHRcdHJldHVybjtcbitcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUM6XG4gXHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwdHBfcG9ydCk7XG4tXHRcdHJldHVybjtcbitcdFx0Z290byBleGl0X2tyZWZfcHV0O1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbiBcdFx0aWYgKGxpbmt1cClcbiBcdFx0XHRpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQocHRwX3BvcnQpO1xuLVx0XHRyZXR1cm47XG4rXHRcdGdvdG8gZXhpdF9rcmVmX3B1dDtcbiBcdGRlZmF1bHQ6XG4gXHRcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLCBcIiVzOiBVbmtub3duIFBIWSB0eXBlXFxuXCIsIF9fZnVuY19fKTtcbiBcdH1cbitcbitleGl0X2tyZWZfcHV0OlxuK1x0a3JlZl9wdXQoXHUwMDI2cHRwX3BvcnQtXHUwMDNlcmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuIH1cbiBcbiAvKipcbkBAIC0xNDI0LDE2ICsxNTEyLDIxIEBAIHN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfcGh5X3RpbWVzdGFtcGluZyhzdHJ1Y3QgaWNlX3BmICpwZilcbiAgKi9cbiBzdGF0aWMgdm9pZCBpY2VfcHRwX3Jlc3RhcnRfYWxsX3BoeShzdHJ1Y3QgaWNlX3BmICpwZilcbiB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZwb3J0LVx1MDAzZXJlZikpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0XHRpZiAocG9ydC1cdTAwM2VsaW5rX3VwKVxuIFx0XHRcdGljZV9wdHBfcG9ydF9waHlfcmVzdGFydChwb3J0KTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRrcmVmX3B1dChcdTAwMjZwb3J0LVx1MDAzZXJlZiwgaWNlX3B0cF9yZWxlYXNlX3BvcnRfcmN1KTtcbiBcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTI3LDggKzIwMjAsOSBAQCBpY2VfcHRwX3NldHRpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiBcdC8qIFJlZW5hYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cbiBcdGljZV9wdHBfZW5hYmxlX2FsbF9wZXJvdXQocGYpO1xuIFxuLVx0LyogUmVjYWxpYnJhdGUgYW5kIHJlLWVuYWJsZSB0aW1lc3RhbXAgYmxvY2tzIGZvciBFODIyL0U4MjMgKi9cbi1cdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMpXG4rXHQvKiBSZWNhbGlicmF0ZSBhbmQgcmUtZW5hYmxlIHRpbWVzdGFtcCBibG9ja3MgZm9yIEU4MjIvRTgyMy9FODI1LUMgKi9cbitcdGlmIChody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUMgfHxcbitcdCAgICBody1cdTAwM2VtYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbiBcdFx0aWNlX3B0cF9yZXN0YXJ0X2FsbF9waHkocGYpO1xuIGV4aXQ6XG4gXHRpZiAoZXJyKSB7XG5AQCAtMjYzOCwxMSArMjczMiwxMyBAQCBzOCBpY2VfcHRwX3JlcXVlc3RfdHMoc3RydWN0IGljZV9wdHBfdHggKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHQgKiBhIHJlZmVyZW5jZSB0byB0aGUgc2tiIGFuZCB0aGUgc3RhcnQgdGltZSB0byBhbGxvdyBkaXNjYXJkaW5nIG9sZFxuIFx0XHQgKiByZXF1ZXN0cy5cbiBcdFx0ICovXG4tXHRcdHNldF9iaXQoaWR4LCB0eC1cdTAwM2Vpbl91c2UpO1xuLVx0XHRjbGVhcl9iaXQoaWR4LCB0eC1cdTAwM2VzdGFsZSk7XG4gXHRcdHR4LVx1MDAzZXRzdGFtcHNbaWR4XS5zdGFydCA9IGppZmZpZXM7XG4gXHRcdHR4LVx1MDAzZXRzdGFtcHNbaWR4XS5za2IgPSBza2JfZ2V0KHNrYik7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUztcbitcdFx0Y2xlYXJfYml0KGlkeCwgdHgtXHUwMDNlc3RhbGUpO1xuK1x0XHQvKiBFbnN1cmUgaW5kZXggaXMgc2V0dXAgYmVmb3JlIG1hcmtpbmcgaXQgYXMgdXNlZCAqL1xuK1x0XHRzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTtcbitcdFx0c2V0X2JpdChpZHgsIHR4LVx1MDAzZWluX3VzZSk7XG4gXHRcdGljZV90cmFjZSh0eF90c3RhbXBfcmVxdWVzdCwgc2tiLCBpZHgpO1xuIFx0fVxuIFxuQEAgLTI2NzgsNzQgKzI3NzQsNTYgQEAgdm9pZCBpY2VfcHRwX3Byb2Nlc3NfdHMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBib29sIGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHN0cnVjdCBpY2VfcHRwX3R4ICp0eClcbitzdGF0aWMgYm9vbCBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIGJvb2wgaW5faXJxKVxuIHtcbi1cdGJvb2wgbW9yZV90aW1lc3RhbXBzO1xuK1x0REVDTEFSRV9CSVRNQVAodHN0YW1wcywgSU5ERVhfUEVSX1BPUlRfTUFYKSA9IHt9O1xuIFxuIFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycXNhdmUsIFx1MDAyNnR4LVx1MDAzZWxvY2spIHtcbiBcdFx0aWYgKCF0eC1cdTAwM2Vpbml0KVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0bW9yZV90aW1lc3RhbXBzID0gIWJpdG1hcF9lbXB0eSh0eC1cdTAwM2Vpbl91c2UsIHR4LVx1MDAzZWxlbik7XG4tXHR9XG4rXHRcdGlmIChpbl9pcnEpIHtcbitcdFx0XHRpZiAoIWljZV9wdHBfaXNfdHhfdHJhY2tlcl91cCh0eCkpXG4rXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gbW9yZV90aW1lc3RhbXBzO1xuK1x0XHRcdHJldHVybiBiaXRtYXBfYW5kbm90KHRzdGFtcHMsIHR4LVx1MDAzZWluX3VzZSwgdHgtXHUwMDNlc3RhbGUsIHR4LVx1MDAzZWxlbik7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0cmV0dXJuICFiaXRtYXBfZW1wdHkodHgtXHUwMDNlaW5fdXNlLCB0eC1cdTAwM2VsZW4pO1xuK1x0XHR9XG4rXHR9XG4gfVxuIFxuLXN0YXRpYyBib29sIGljZV9hbnlfcG9ydF9oYXNfdGltZXN0YW1wcyhzdHJ1Y3QgaWNlX3BmICpwZilcbitzdGF0aWMgYm9vbCBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbitcdGJvb2wgaGF2ZV90c3RhbXBzID0gZmFsc2U7XG4gXHRzdHJ1Y3QgaWNlX3B0cF9wb3J0ICpwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spIHtcbi1cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzLFxuLVx0XHRcdFx0ICAgIGxpc3Rfbm9kZSkge1xuLVx0XHRcdHN0cnVjdCBpY2VfcHRwX3R4ICp0eCA9IFx1MDAyNnBvcnQtXHUwMDNldHg7XG4tXG4tXHRcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKHR4KSlcbi1cdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbitcdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBvcnQtXHUwMDNldHgsIGluX2lycSkpIHtcbitcdFx0XHRoYXZlX3RzdGFtcHMgPSB0cnVlO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdHJldHVybiBmYWxzZTtcbitcdHJldHVybiBoYXZlX3RzdGFtcHM7XG4gfVxuIFxuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4rYm9vbCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbl9pcnEpXG4ge1xuLVx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2Vodztcbi1cdGludCByZXQ7XG4tXG4tXHQvKiBDaGVjayBzb2Z0d2FyZSBpbmRpY2F0b3IgKi9cbiBcdHN3aXRjaCAocGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKSB7XG4gXHRjYXNlIElDRV9QVFBfVFhfSU5URVJSVVBUX05PTkU6XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfU0VMRjpcbi1cdFx0aWYgKGljZV9wb3J0X2hhc190aW1lc3RhbXBzKFx1MDAyNnBmLVx1MDAzZXB0cC5wb3J0LnR4KSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBpY2VfcG9ydF9oYXNfdGltZXN0YW1wcyhcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCwgaW5faXJxKTtcbiBcdGNhc2UgSUNFX1BUUF9UWF9JTlRFUlJVUFRfQUxMOlxuLVx0XHRpZiAoaWNlX2FueV9wb3J0X2hhc190aW1lc3RhbXBzKHBmKSlcbi1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdFx0YnJlYWs7XG4rXHRcdHJldHVybiBpY2VfYW55X3BvcnRfaGFzX3RpbWVzdGFtcHMocGYsIGluX2lycSk7XG4gXHRkZWZhdWx0OlxuIFx0XHRXQVJOX09OQ0UoMSwgXCJVbmV4cGVjdGVkIFR4IHRpbWVzdGFtcCBpbnRlcnJ1cHQgbW9kZSAldVxcblwiLFxuIFx0XHRcdCAgcGYtXHUwMDNlcHRwLnR4X2ludGVycnVwdF9tb2RlKTtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHQvKiBDaGVjayBoYXJkd2FyZSBpbmRpY2F0b3IgKi9cbi1cdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbi1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJVbmFibGUgdG8gcmVhZCBQSFkgVHggdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVkXFxuXCIsXG4tXHRcdFx0cmV0KTtcbi1cdFx0LyogU3RvcCB0cmlnZ2VyaW5nIElSUXMgaWYgd2UncmUgdW5hYmxlIHRvIHJlYWQgUEhZICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbi1cbi1cdC8qIGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KCkgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB0aW1lc3RhbXBzXG4tXHQgKiBhdmFpbGFibGUsIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRpbmcgdGltZXN0YW1wcywgYW5kIGEgbmVnYXRpdmVcbi1cdCAqIHZhbHVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvciAod2hpY2ggd2UgY2hlY2tlZCBmb3IgYWJvdmUpLlxuLVx0ICovXG4tXHRyZXR1cm4gcmV0IFx1MDAzZSAwO1xuIH1cbiBcbiAvKipcbkBAIC0yNzk5LDcgKzI4NzcsNyBAQCBpcnFyZXR1cm5fdCBpY2VfcHRwX3RzX2lycShzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0LyogRTgzMCBjYW4gcmVhZCB0aW1lc3RhbXBzIGluIHRoZSB0b3AgaGFsZiB1c2luZyByZDMyKCkgKi9cbiBcdFx0aWNlX3B0cF9wcm9jZXNzX3RzKHBmKTtcbiBcbi1cdFx0aWYgKGljZV9wdHBfdHhfdHN0YW1wc19wZW5kaW5nKHBmKSkge1xuK1x0XHRpZiAoaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcocGYsIHRydWUpKSB7XG4gXHRcdFx0LyogUHJvY2VzcyBvdXRzdGFuZGluZyBUeCB0aW1lc3RhbXBzLiBJZiB0aGVyZVxuIFx0XHRcdCAqIGlzIG1vcmUgd29yaywgcmUtYXJtIHRoZSBpbnRlcnJ1cHQgdG8gdHJpZ2dlciBhZ2Fpbi5cbiBcdFx0XHQgKi9cbkBAIC0yODM5LDkgKzI5MTcsMTMgQEAgc3RhdGljIHZvaWQgaWNlX3B0cF9tYXliZV90cmlnZ2VyX3R4X2ludGVycnVwdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHJldCA9IGljZV9jaGVja19waHlfdHhfdHN0YW1wX3JlYWR5KGh3KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwiUFRQIHBlcmlvZGljIHRhc2sgdW5hYmxlIHRvIHJlYWQgUEhZIHRpbWVzdGFtcCByZWFkeSBiaXRtYXAsIGVyciAlZFxcblwiLFxuLVx0XHRcdHJldCk7XG4tXHR9IGVsc2UgaWYgKHJldCkge1xuK1x0XHRkZXZfZGJnKGRldiwgXCJVbmFibGUgdG8gcmVhZCBQSFkgVHggdGltZXN0YW1wIHJlYWR5IGJpdG1hcCwgZXJyICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIocmV0KSk7XG4rXHRcdC8qIERvbid0IHRyaWdnZXIgYW4gSVJRIGlmIHdlIGFyZSB1bmFibGUgdG8gYWNjZXNzIHRoZSBQSFkgKi9cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHJldCBcdTAwM2UgMCB8fCBpY2VfcHRwX3R4X3RzdGFtcHNfcGVuZGluZyhwZiwgZmFsc2UpKSB7XG4gXHRcdGRldl9kYmcoZGV2LCBcIlBUUCBwZXJpb2RpYyB0YXNrIGRldGVjdGVkIHdhaXRpbmcgdGltZXN0YW1wcy4gVHJpZ2dlcmluZyBUeCB0aW1lc3RhbXAgaW50ZXJydXB0IG5vdy5cXG5cIik7XG4gXG4gXHRcdHdyMzIoaHcsIFBGSU5UX09JQ1IsIFBGSU5UX09JQ1JfVFNZTl9UWF9NKTtcbkBAIC0yODkwLDE0ICsyOTcyLDE2IEBAIHZvaWQgaWNlX3B0cF9xdWV1ZV93b3JrKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHN0YXRpYyB2b2lkIGljZV9wdHBfcHJlcGFyZV9yZWJ1aWxkX3NlYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCByZWJ1aWxkLFxuIFx0XHRcdFx0XHRlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbiB7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbitcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKSB7XG4tXHRcdHN0cnVjdCBpY2VfcHRwX3BvcnQgKnBvcnQgPSBsaXN0X2VudHJ5KGVudHJ5LFxuLVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWNlX3B0cF9wb3J0LFxuLVx0XHRcdFx0XHRcdCAgICAgICBsaXN0X25vZGUpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5saXN0LCBsaXN0X25vZGUpIHtcbiBcdFx0c3RydWN0IGljZV9wZiAqcGVlcl9wZiA9IHB0cF9wb3J0X3RvX3BmKHBvcnQpO1xuIFxuK1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnBvcnQtXHUwMDNlcmVmKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4gXHRcdGlmICghaWNlX2lzX3ByaW1hcnkoXHUwMDI2cGVlcl9wZi1cdTAwM2VodykpIHtcbiBcdFx0XHRpZiAocmVidWlsZCkge1xuIFx0XHRcdFx0LyogVE9ETzogV2hlbiBpbXBsZW1lbnRpbmcgcmVidWlsZD10cnVlOlxuQEAgLTI5MDksNyArMjk5MywxMSBAQCBzdGF0aWMgdm9pZCBpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgcmVidWlsZCxcbiBcdFx0XHRcdGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQocGVlcl9wZiwgcmVzZXRfdHlwZSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4rXG4rXHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0a3JlZl9wdXQoXHUwMDI2cG9ydC1cdTAwM2VyZWYsIGljZV9wdHBfcmVsZWFzZV9wb3J0X3JjdSk7XG4gXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4gLyoqXG5AQCAtMjkzNiwxMSArMzAyNCwxNyBAQCB2b2lkIGljZV9wdHBfcHJlcGFyZV9mb3JfcmVzZXQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuIFx0aWYgKHJlc2V0X3R5cGUgPT0gSUNFX1JFU0VUX1BGUilcbiBcdFx0cmV0dXJuO1xuIFxuK1x0LyogQ2FuY2VsIHRoZSBvZmZzZXQgdmVyaWZpY2F0aW9uIHdvcmsgZm9yIEU4MnggYmVmb3JlIHJlbGVhc2luZyB0aGVcbitcdCAqIFR4IHRyYWNrZXIuIElmIG92X3dvcmsgaXMgcnVubmluZyBkdXJpbmcgcmVzZXQsIGl0IG1heSBpc3N1ZVxuK1x0ICogc2lkZWJhbmQgcXVldWUgY29tbWFuZHMgdGhhdCB3aWxsIGZhaWwgb3IgdGltZW91dCwgYW5kIG1heVxuK1x0ICogcmVmZXJlbmNlIHN0YXRlIHRoYXQgaXMgYmVpbmcgdG9ybiBkb3duLlxuK1x0ICovXG4rXHRpZiAoaHctXHUwMDNlbWFjX3R5cGUgPT0gSUNFX01BQ19HRU5FUklDKVxuK1x0XHRrdGhyZWFkX2NhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwdHAtXHUwMDNlcG9ydC5vdl93b3JrKTtcbitcbiBcdGlmIChpY2VfcGZfc3JjX3Rtcl9vd25lZChwZikgXHUwMDI2XHUwMDI2IGh3LVx1MDAzZW1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxuIFx0XHRpY2VfcHRwX3ByZXBhcmVfcmVidWlsZF9zZWMocGYsIGZhbHNlLCByZXNldF90eXBlKTtcbiBcbi1cdGljZV9wdHBfcmVsZWFzZV90eF90cmFja2VyKHBmLCBcdTAwMjZwZi1cdTAwM2VwdHAucG9ydC50eCk7XG4tXG4gXHQvKiBEaXNhYmxlIHBlcmlvZGljIG91dHB1dHMgKi9cbiBcdGljZV9wdHBfZGlzYWJsZV9hbGxfcGVyb3V0KHBmKTtcbiBcbkBAIC0zMDg2LDExICszMTgwLDExIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9zZXR1cF9wZihzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUpO1xuLVx0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0a3JlZl9pbml0KFx1MDAyNnB0cC1cdTAwM2Vwb3J0LnJlZik7XG4gXG4tXHRsaXN0X2FkZChcdTAwMjZwdHAtXHUwMDNlcG9ydC5saXN0X25vZGUsXG4tXHRcdCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLnBvcnRzKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4rXHRsaXN0X2FkZF9yY3UoXHUwMDI2cHRwLVx1MDAzZXBvcnQubGlzdF9ub2RlLCBcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGYtXHUwMDNlYWRhcHRlci1cdTAwM2Vwb3J0cy5sb2NrKTtcbiBcbiBcdC8qIFNlZWQgdGhlIHBlci1QSFkgVHggcmVmZXJlbmNlIGNsb2NrIHVzYWdlIG1hcCBmb3IgdGhpcyBwb3J0LlxuIFx0ICogT25seSBtZWFuaW5nZnVsIG9uIEU4MjUgKG90aGVyIE1BQyB0eXBlcyBkb24ndCBleHBvc2UgdHgtY2xrXG5AQCAtMzExMywxMiArMzIwNywzMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfc2V0dXBfcGYoc3RydWN0IGljZV9wZiAqcGYpXG4gc3RhdGljIHZvaWQgaWNlX3B0cF9jbGVhbnVwX3BmKHN0cnVjdCBpY2VfcGYgKnBmKVxuIHtcbiBcdHN0cnVjdCBpY2VfcHRwICpwdHAgPSBcdTAwMjZwZi1cdTAwM2VwdHA7XG4rXHRzdHJ1Y3Qga3JlZiAqcmVmO1xuIFxuLVx0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlICE9IElDRV9NQUNfVU5LTk9XTikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWFkYXB0ZXItXHUwMDNlcG9ydHMubG9jayk7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuLVx0fVxuK1x0aWYgKHBmLVx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfVU5LTk9XTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogVGhlIFBGIGNhbm5vdCBiZSByZW1vdmVkIHVudGlsIHRoZXJlIGFyZSBubyBtb3JlIHJlbWFpbmluZ1xuK1x0ICogb3V0c3RhbmRpbmcgcmVmZXJlbmNlcyB0byB0aGUgUFRQIHBvcnQuIFRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRydWUsXG4rXHQgKiBmaXJzdCByZW1vdmUgdGhlIHBvcnQgZnJvbSB0aGUgbGlzdCwgdGhlbiBkcm9wIHRoZSBwcmltYXJ5XG4rXHQgKiByZWZlcmVuY2UgdGhpcyBQRiBob2xkcyBvbiB0aGUgcG9ydC4gT25jZSBkb25lLCB3YWl0IHVudGlsIGFsbFxuK1x0ICogZXhpc3RpbmcgcmVmZXJlbmNlcyBhcmUgZHJvcHBlZC4gRmluYWxseSwgc3luY2hyb25pemVfcmN1KCkgdG9cbitcdCAqIGVuc3VyZSB0aGF0IGFsbCBSQ1UgY3JpdGljYWwgc2VjdGlvbnMgdGhhdCBtaWdodCBhdHRlbXB0IHRvXG4rXHQgKiBkZXJlZmVyZW5jZSB0aGUgcG9ydCBhcmUgZmluaXNoZWQuXG4rXHQgKi9cbitcbitcdHNwaW5fbG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1x0bGlzdF9kZWxfcmN1KFx1MDAyNnB0cC1cdTAwM2Vwb3J0Lmxpc3Rfbm9kZSk7XG4rXHRzcGluX3VubG9jayhcdTAwMjZwZi1cdTAwM2VhZGFwdGVyLVx1MDAzZXBvcnRzLmxvY2spO1xuK1xuK1x0cmVmID0gXHUwMDI2cHRwLVx1MDAzZXBvcnQucmVmO1xuK1x0a3JlZl9wdXQocmVmLCBpY2VfcHRwX3JlbGVhc2VfcG9ydF9yY3UpO1xuK1xuK1x0ZGV2X1dBUk5fT05DRShpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0ICAgICAgIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQocmVmLCAha3JlZl9yZWFkKHJlZiksIDE1ICogSFopLFxuK1x0XHQgICAgICBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwb3J0IHJlZmVyZW5jZXMgdG8gcmVsZWFzZS4gQ29udGludWluZyB0byB1bmxvYWQgYW55d2F5cy5cIik7XG4rXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4gLyoqXG5AQCAtMzIxMCw5ICszMzI0LDEzIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X293bmVyKHN0cnVjdCBpY2VfcGYgKnBmKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgdGhyZWFkc1xuKyAqIGljZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSB0aGUgUFRQIGt3b3JrZXJcbiAgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4gICogQHB0cDogUEYgUFRQIHN0cnVjdHVyZVxuKyAqXG4rICogQWxsb2NhdGUgdGhlIGt3b3JrZXIgYW5kIGluaXRpYWxpemUgdGhlIHBlcmlvZGljIHdvcmsgZnVuY3Rpb24uIFRoZVxuKyAqIHBlcmlvZGljIHdvcmsgaXMgbm90IHF1ZXVlZCBoZXJlOyB0aGUgY2FsbGVyIHN0YXJ0cyBpdCBvbmNlIHRoZSBQVFBcbisgKiBzdGF0ZSBpcyBJQ0VfUFRQX1JFQURZLlxuICAqL1xuIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4ge1xuQEAgLTMyMzEsOSArMzM0OSw2IEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9pbml0X3dvcmsoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcHRwICpwdHApXG4gXG4gXHRwdHAtXHUwMDNla3dvcmtlciA9IGt3b3JrZXI7XG4gXG4tXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIGdvaW5nICovXG4tXHRrdGhyZWFkX3F1ZXVlX2RlbGF5ZWRfd29yayhwdHAtXHUwMDNla3dvcmtlciwgXHUwMDI2cHRwLVx1MDAzZXdvcmssIDApO1xuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMzNTUsNiArMzQ3MCwyMiBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyX2NsZWFuX3BmO1xuIFxuK1x0LyogU2VlZCBsaW5rX3VwIGZyb20gY3VycmVudCBQSFkgc3RhdHVzLCBzaW5jZSBsaW5rIG1heSBhbHJlYWR5IGJlIHVwXG4rXHQgKiAoZS5nLiBhZnRlciBQWEUgYm9vdCkgd2l0aCBubyBsaW5rLWNoYW5nZSBlZGdlIHRvIGNhdGNoIGl0IGxhdGVyLlxuK1x0ICovXG4rXHRpZiAocGYtXHUwMDNlaHcucG9ydF9pbmZvKVxuK1x0XHRwdHAtXHUwMDNlcG9ydC5saW5rX3VwID1cbitcdFx0XHQhIShwZi1cdTAwM2Vody5wb3J0X2luZm8tXHUwMDNlcGh5LmxpbmtfaW5mby5saW5rX2luZm8gXHUwMDI2XG4rXHRcdFx0SUNFX0FRX0xJTktfVVApO1xuK1xuK1x0LyogQ3JlYXRlIHRoZSBrd29ya2VyIGJlZm9yZSByZXN0YXJ0aW5nIHRoZSBQSFksIHdoaWNoIHF1ZXVlcyB3b3JrIG9uXG4rXHQgKiBpdCBpbiB0aGUgRTgyeCByZXN0YXJ0IHBhdGguIFRoaXMgcHJldmVudHMgY29uY3VycmVudCBsaW5rIGV2ZW50c1xuK1x0ICogZnJvbSByZWFjaGluZyBpY2VfcHRwX3BvcnRfcGh5X3Jlc3RhcnQoKSB3aGlsZSBrd29ya2VyIGlzIHN0aWxsIE5VTExcbitcdCAqL1xuK1x0ZXJyID0gaWNlX3B0cF9pbml0X3dvcmsocGYsIHB0cCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9jbGVhbl9wZjtcbitcbiBcdC8qIFN0YXJ0IHRoZSBQSFkgdGltZXN0YW1waW5nIGJsb2NrICovXG4gXHRpY2VfcHRwX3Jlc2V0X3BoeV90aW1lc3RhbXBpbmcocGYpO1xuIFxuQEAgLTMzNjMsOSArMzQ5NCwxMCBAQCB2b2lkIGljZV9wdHBfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbiBcbiBcdHB0cC1cdTAwM2VzdGF0ZSA9IElDRV9QVFBfUkVBRFk7XG4gXG4tXHRlcnIgPSBpY2VfcHRwX2luaXRfd29yayhwZiwgcHRwKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gZXJyX2V4aXQ7XG4rXHQvKiBTdGFydCBwZXJpb2RpYyB3b3JrIG9ubHkgYWZ0ZXIgdGhlIHN0YXRlIGlzIFJFQURZOyB0aGUgd29ya2VyXG4rXHQgKiByZXR1cm5zIHdpdGhvdXQgcmVzY2hlZHVsaW5nIHdoaWxlIHRoZSBzdGF0ZSBpcyBub3QgUkVBRFkuXG4rXHQgKi9cbitcdGt0aHJlYWRfcXVldWVfZGVsYXllZF93b3JrKHB0cC1cdTAwM2Vrd29ya2VyLCBcdTAwMjZwdHAtXHUwMDNld29yaywgMCk7XG4gXG4gXHRkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgXCJQVFAgaW5pdCBzdWNjZXNzZnVsXFxuXCIpO1xuIFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cC5oXG5pbmRleCBjNGIwZGE3Y2UyMGVkLi4xMzE1OGE5MzE5ZmI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHAuaFxuQEAgLTUsNiArNSw4IEBAXG4gI2RlZmluZSBfSUNFX1BUUF9IX1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdWxpc3QuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaWNlX3B0cF9ody5oXCJcbkBAIC0xMzAsNiArMTMyLDkgQEAgc3RydWN0IGljZV9wdHBfdHgge1xuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfRTgyWFx0XHQxNlxuICNkZWZpbmUgSU5ERVhfUEVSX1BPUlRcdFx0XHQ2NFxuIFxuKy8qIE1heGltdW0gbnVtYmVyIG9mIHRpbWVzdGFtcCBpbmRleGVzIGFjcm9zcyBhbGwgZGV2aWNlcyAqL1xuKyNkZWZpbmUgSU5ERVhfUEVSX1BPUlRfTUFYICAgICAgICAgICAgICBJTkRFWF9QRVJfUE9SVFxuK1xuIC8qKlxuICAqIHN0cnVjdCBpY2VfcHRwX3BvcnQgLSBkYXRhIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBleHRlcm5hbCBwb3J0IGZvciBQVFBcbiAgKlxuQEAgLTEzOCw2ICsxNDMsNyBAQCBzdHJ1Y3QgaWNlX3B0cF90eCB7XG4gICogYW5kIGRldGVybWluZSB3aGVuIHRoZSBwb3J0J3MgUEhZIG9mZnNldCBpcyB2YWxpZC5cbiAgKlxuICAqIEBsaXN0X25vZGU6IGxpc3QgbWVtYmVyIHN0cnVjdHVyZVxuKyAqIEByZWY6IHJlZmVyZW5jZSBjb3VudGVyIGZvciB1c2Ugd2l0aCBhZGFwdGVyIHBvcnRzIGxpc3RcbiAgKiBAdHg6IFR4IHRpbWVzdGFtcCB0cmFja2luZyBmb3IgdGhpcyBwb3J0XG4gICogQG92X3dvcms6IGRlbGF5ZWQgd29yayB0YXNrIGZvciB0cmFja2luZyB3aGVuIFBIWSBvZmZzZXQgaXMgdmFsaWRcbiAgKiBAcHNfbG9jazogbXV0ZXggdXNlZCB0byBwcm90ZWN0IHRoZSBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlXG5AQCAtMTQ5LDYgKzE1NSw3IEBAIHN0cnVjdCBpY2VfcHRwX3R4IHtcbiAgKi9cbiBzdHJ1Y3QgaWNlX3B0cF9wb3J0IHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlO1xuK1x0c3RydWN0IGtyZWYgcmVmO1xuIFx0c3RydWN0IGljZV9wdHBfdHggdHg7XG4gXHRzdHJ1Y3Qga3RocmVhZF9kZWxheWVkX3dvcmsgb3Zfd29yaztcbiBcdHN0cnVjdCBtdXRleCBwc19sb2NrOyAvKiBwcm90ZWN0cyBvdmVyYWxsIFBUUCBQSFkgc3RhcnQgcHJvY2VkdXJlICovXG5AQCAtMzEyLDcgKzMxOSw3IEBAIHZvaWQgaWNlX3B0cF9yZXFfdHhfc2luZ2xlX3RzdGFtcChzdHJ1Y3QgaWNlX3B0cF90eCAqdHgsIHU4IGlkeCk7XG4gdm9pZCBpY2VfcHRwX2NvbXBsZXRlX3R4X3NpbmdsZV90c3RhbXAoc3RydWN0IGljZV9wdHBfdHggKnR4KTtcbiB2b2lkIGljZV9wdHBfcHJvY2Vzc190cyhzdHJ1Y3QgaWNlX3BmICpwZik7XG4gaXJxcmV0dXJuX3QgaWNlX3B0cF90c19pcnEoc3RydWN0IGljZV9wZiAqcGYpO1xuLWJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpO1xuK2Jvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKTtcbiB1NjQgaWNlX3B0cF9yZWFkX3NyY19jbGtfcmVnKHN0cnVjdCBpY2VfcGYgKnBmLFxuIFx0XHRcdCAgICAgc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wICpzdHMpO1xuIFxuQEAgLTM2MCw3ICszNjcsOCBAQCBzdGF0aWMgaW5saW5lIGlycXJldHVybl90IGljZV9wdHBfdHNfaXJxKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgaWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYpXG4rc3RhdGljIGlubGluZSBib29sXG4raWNlX3B0cF90eF90c3RhbXBzX3BlbmRpbmcoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5faXJxKVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbmluZGV4IDNhNDFjNzExZTc1MWIuLjY0ZTE4ZmUxMTc2YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5AQCAtNzM3LDI0ICs3MzcsNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3BvcnRfbWVtX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTE2IG9mZnNldCxcbiBcdHJldHVybiBpY2VfcmVhZF9wb3J0X2V0aDU2ZyhodywgcG9ydCwgb2Zmc2V0LCB2YWwsIEVUSDU2R19QSFlfTUVNX1BUUCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV93cml0ZV9wb3J0X21lbV9ldGg1NmcgLSBXcml0ZSBhIFBIWSBwb3J0IG1lbW9yeSBsb2NhdGlvblxuLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4tICogQHBvcnQ6IFBvcnQgbnVtYmVyIHRvIGJlIHJlYWRcbi0gKiBAb2Zmc2V0OiBPZmZzZXQgZnJvbSBQSFkgcG9ydCByZWdpc3RlciBiYXNlXG4tICogQHZhbDogUG9pbnRlciB0byB0aGUgdmFsdWUgdG8gcmVhZCAob3V0IHBhcmFtKVxuLSAqXG4tICogUmV0dXJuOlxuLSAqICogJTAgICAgICAtIHN1Y2Nlc3Ncbi0gKiAqICVFSU5WQUwgLSBpbnZhbGlkIHBvcnQgbnVtYmVyIG9yIHJlc291cmNlIHR5cGVcbi0gKiAqICVvdGhlciAgLSBmYWlsZWQgdG8gd3JpdGUgdG8gUEhZXG4tICovXG4tc3RhdGljIGludCBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1MTYgb2Zmc2V0LFxuLVx0XHRcdFx0ICAgICB1MzIgdmFsKVxuLXtcbi1cdHJldHVybiBpY2Vfd3JpdGVfcG9ydF9ldGg1NmcoaHcsIHBvcnQsIG9mZnNldCwgdmFsLCBFVEg1NkdfUEhZX01FTV9QVFApO1xuLX1cbi1cbiAvKipcbiAgKiBpY2Vfd3JpdGVfcXVhZF9wdHBfcmVnX2V0aDU2ZyAtIFdyaXRlIGEgUEhZIHF1YWQgcmVnaXN0ZXJcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuQEAgLTExMzksOCArMTEyMSw4IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeCxcbiAgKiBpbnRlcm5hbCBQSFlzIG9mIHRoZSA1NkcgZGV2aWNlcy5cbiAgKlxuICAqIFRvIGRpcmVjdGx5IGNsZWFyIHRoZSBjb250ZW50cyBvZiB0aGUgdGltZXN0YW1wIGJsb2NrIGVudGlyZWx5LCBkaXNjYXJkaW5nXG4tICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHVzZVxuLSAqIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X3F1YWRfZXRoNTZnKCkuXG4rICogYWxsIHRpbWVzdGFtcCBkYXRhIGF0IG9uY2UsIHNvZnR3YXJlIHNob3VsZCBpbnN0ZWFkIHBlcmZvcm0gYSBQSFkgc29mdFxuKyAqIHJlc2V0IHZpYSBpY2VfcHRwX3BoeV9zb2Z0X3Jlc2V0X2V0aDU2ZygpLlxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYW4gaWR4IHdob3NlIGJpdCBpcyBzZXQgYWNjb3JkaW5nIHRvXG4gICogaWNlX2dldF9waHlfdHhfdHN0YW1wX3JlYWR5KCkuXG5AQCAtMTE1MiwyNCArMTEzNCwxNiBAQCBzdGF0aWMgaW50IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCB1OCBpZHgsXG4gc3RhdGljIGludCBpY2VfY2xlYXJfcHRwX3RzdGFtcF9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQsIHU4IGlkeClcbiB7XG4gXHR1NjQgdW51c2VkX3RzdGFtcDtcbi1cdHUxNiBsb19hZGRyO1xuIFx0aW50IGVycjtcbiBcbi1cdC8qIFJlYWQgdGhlIHRpbWVzdGFtcCByZWdpc3RlciB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcCBzdGF0dXMgYml0IGlzXG4tXHQgKiBjbGVhcmVkLlxuK1x0LyogUGVyIHRoZSBQSFkgc3BlYywgcmVhZGluZyB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiBpcyB3aGF0XG4rXHQgKiBjbGVhcnMgdGhlIGVudHJ5J3MgdmFsaWQgYml0IGFuZCBpdHMgY29ycmVzcG9uZGluZyAocmVhZC1vbmx5KVxuK1x0ICogdHNfbWVtb3J5X3N0YXR1cyBiaXQuXG4gXHQgKi9cbiBcdGVyciA9IGljZV9yZWFkX3B0cF90c3RhbXBfZXRoNTZnKGh3LCBwb3J0LCBpZHgsIFx1MDAyNnVudXNlZF90c3RhbXApO1xuIFx0aWYgKGVycikge1xuIFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcIkZhaWxlZCB0byByZWFkIHRoZSBQSFkgdGltZXN0YW1wIHJlZ2lzdGVyIGZvciBwb3J0ICV1LCBpZHggJXUsIGVyciAlZFxcblwiLFxuIFx0XHRcdCAgcG9ydCwgaWR4LCBlcnIpO1xuLVx0fVxuLVxuLVx0bG9fYWRkciA9ICh1MTYpUEhZX1RTVEFNUF9MKGlkeCk7XG4tXG4tXHRlcnIgPSBpY2Vfd3JpdGVfcG9ydF9tZW1fZXRoNTZnKGh3LCBwb3J0LCBsb19hZGRyLCAwKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gY2xlYXIgbG93IFBUUCB0aW1lc3RhbXAgcmVnaXN0ZXIgZm9yIHBvcnQgJXUsIGlkeCAldSwgZXJyICVkXFxuXCIsXG4tXHRcdFx0ICBwb3J0LCBpZHgsIGVycik7XG4gXHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG5AQCAtMTE3NywxOSArMTE1MSwzNiBAQCBzdGF0aWMgaW50IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgdTggaWR4KVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeV9ldGg1NmcgLSBDbGVhciBhbGwgdGltZXN0YW1wcyBmcm9tIHRoZSBwb3J0IGJsb2NrXG4rICogaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyAtIFJlc2V0IG9uZSBwb3J0J3MgVHggdGltZXN0YW1wIG1lbW9yeVxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4rICogQHBvcnQ6IHBvcnQgbnVtYmVyIHRvIGNsZWFyXG4rICpcbisgKiBGdWxseSByZXNldCBhIHNpbmdsZSBQSFkgcG9ydCdzIFR4IHRpbWVzdGFtcCBtZW1vcnkuIFBlciB0aGUgUEhZIHNwZWMsIHRoZVxuKyAqIG9ubHkgd2F5IHRvIGNsZWFyIGEgdGltZXN0YW1wIHZhbGlkIGJpdCAoYW5kIGl0cyByZWFkLW9ubHkgdHNfbWVtb3J5X3N0YXR1c1xuKyAqIGJpdCkgaXMgdG8gcmVhZCB0aGUgdGltZXN0YW1wIG1lbW9yeSBsb2NhdGlvbiwgc28gcmVhZCBldmVyeSBlbnRyeSBmb3IgdGhlXG4rICogcG9ydCAodHdvIDMyLWJpdCByZWFkcyBlYWNoKS4gVGhpcyBkaXNjYXJkcyBhbGwgdGltZXN0YW1wIGRhdGEgb24gdGhlIHBvcnQsXG4rICogc28gaXQgbXVzdCBvbmx5IGJlIHVzZWQgZm9yIGEgZnVsbCByZXNldDsgY2FsbGVycyB0aGF0IG11c3QgcHJlc2VydmVcbisgKiBpbi1mbGlnaHQgdGltZXN0YW1wcyBjbGVhciBpbmRpdmlkdWFsIGluZGljZXMgdmlhIGljZV9jbGVhcl9waHlfdHN0YW1wKCkuXG4rICpcbisgKiBEdWUgdG8gaW50ZXJhY3Rpb25zIHdpdGggYW4gaW50ZXJuYWwgSFcgY291bnRlciBmb3IgdGhlIG51bWJlciBvZlxuKyAqIG91dHN0YW5kaW5nIFR4IHRpbWVzdGFtcHMsIHRoaXMgKm11c3QqIG9ubHkgYmUgY2FsbGVkIGFzIHBhcnQgb2YgdGhlXG4rICogaWNlX3B0cF9waHlfc29mdF9yZXNldF9ldGg1NmcoKSBwcm9jZWR1cmUuIE90aGVyd2lzZSwgdGhlIGludGVybmFsIGNvdW50ZXJcbisgKiBtYXkgYmVjb21lIG91dCBvZiBzeW5jIGFuZCBwcmV2ZW50IG5ldyB0aW1lc3RhbXAgaW50ZXJydXB0cy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgdG8gcmVhZCB0aGUgUEhZLlxuICAqL1xuLXN0YXRpYyB2b2lkIGljZV9wdHBfcmVzZXRfdHNfbWVtb3J5X2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodylcbitzdGF0aWMgaW50IGljZV9wdHBfY2xlYXJfdHhfbWVtb3J5X3N0YXR1c19ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4ge1xuLVx0dW5zaWduZWQgaW50IHBvcnQ7XG4rXHRpbnQgZXJyID0gMDtcbitcdHU4IGlkeDtcbiBcbi1cdGZvciAocG9ydCA9IDA7IHBvcnQgXHUwMDNjIGh3LVx1MDAzZXB0cC5udW1fbHBvcnRzOyBwb3J0KyspIHtcbi1cdFx0aWNlX3dyaXRlX3B0cF9yZWdfZXRoNTZnKGh3LCBwb3J0LCBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVNfTCxcbi1cdFx0XHRcdFx0IDApO1xuLVx0XHRpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVU19VLFxuLVx0XHRcdFx0XHQgMCk7XG4rXHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgSU5ERVhfUEVSX1BPUlQ7IGlkeCsrKSB7XG4rXHRcdGVyciA9IGljZV9jbGVhcl9wdHBfdHN0YW1wX2V0aDU2ZyhodywgcG9ydCwgaWR4KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qKlxuQEAgLTIxMTUsMTAgKzIxMDYsNiBAQCBpbnQgaWNlX3N0b3BfcGh5X3RpbWVyX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9ydCwgYm9vbCBzb2Z0X3Jlc2V0KVxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfVFhfT0ZGU0VUX1JFQURZLCAwKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHRlcnIgPSBpY2Vfd3JpdGVfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfUlhfT0ZGU0VUX1JFQURZLCAwKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjEzMyw5ICsyMTIwLDExIEBAIGludCBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0LCBib29sIHNvZnRfcmVzZXQpXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcbiAgKiBAcG9ydDogdGhlIFBIWSBwb3J0IHRvIHN0YXJ0XG4gICpcbi0gKiBTdGFydCB0aGUgY2xvY2sgb2YgYSBQSFkgcG9ydC4gVGhpcyBtdXN0IGJlIGRvbmUgYXMgcGFydCBvZiB0aGUgZmxvdyB0b1xuLSAqIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnggdGltZXN0YW1waW5nIG9mZnNldHMgd2hlbmV2ZXIgdGhlIGNsb2NrIHRpbWUgaXNcbi0gKiBpbml0aWFsaXplZCBvciB3aGVuIGxpbmsgc3BlZWQgY2hhbmdlcy5cbisgKiBQZXJmb3JtIGEgUEhZIHNvZnQgcmVzZXQgYW5kIHRoZW4gc3RhcnQgdGhlIGNsb2NrIGZvciB0aGUgUEhZIHBvcnQuXG4rICpcbisgKiBUaGlzIG11c3QgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBmbG93IHRvIHJlLWNhbGlicmF0ZSBUeCBhbmQgUnhcbisgKiB0aW1lc3RhbXBpbmcgb2Zmc2V0cyB3aGVuZXZlciB0aGUgY2xvY2sgdGltZSBpcyBpbml0aWFsaXplZCBvciB3aGVuIGxpbmtcbisgKiBzcGVlZCBjaGFuZ2VzLlxuICAqXG4gICogUmV0dXJuOlxuICAqICogJTAgICAgIC0gc3VjY2Vzc1xuQEAgLTIxNTEsNiArMjE0MCwxMCBAQCBpbnQgaWNlX3N0YXJ0X3BoeV90aW1lcl9ldGg1Nmcoc3RydWN0IGljZV9odyAqaHcsIHU4IHBvcnQpXG4gXG4gXHR0bXJfaWR4ID0gaWNlX2dldF9wdHBfc3JjX2Nsb2NrX2luZGV4KGh3KTtcbiBcbitcdGVyciA9IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKGh3LCBwb3J0KTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4gXHRlcnIgPSBpY2Vfc3RvcF9waHlfdGltZXJfZXRoNTZnKGh3LCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIyOTQsNiArMjI4Nyw3IEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXG4gICpcbiAgKiBUcmlnZ2VyIGEgc29mdCByZXNldCBvZiB0aGUgRVRINTZHIFBIWSBieSB0b2dnbGluZyB0aGUgc29mdCByZXNldFxuICAqIGJpdCBpbiB0aGUgUEhZIGdsb2JhbCByZWdpc3Rlci4gVGhlIHJlc2V0IHNlcXVlbmNlIGNvbnNpc3RzIG9mOlxuKyAqICAgMC4gUmVhZGluZyBldmVyeSB0aW1lc3RhbXAgbWVtb3J5IHJlZ2lzdGVyIHRvIGNsZWFyIGl0cyB2YWxpZCBiaXRcbiAgKiAgIDEuIENsZWFyaW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMi4gQXNzZXJ0aW5nIHRoZSBzb2Z0IHJlc2V0IGJpdFxuICAqICAgMy4gQ2xlYXJpbmcgdGhlIHNvZnQgcmVzZXQgYml0IGFnYWluXG5AQCAtMjMwMiw2ICsyMjk2LDEyIEBAIGludCBpY2VfcHRwX3JlYWRfdHhfaHd0c3RhbXBfc3RhdHVzX2V0aDU2ZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTMyICp0c19zdGF0dXMpXG4gICogdG8gc2V0dGxlLiBUaGlzIHByb3ZpZGVzIGEgY29udHJvbGxlZCB3YXkgdG8gcmVpbml0aWFsaXplIHRoZSBQSFlcbiAgKiB3aXRob3V0IHJlcXVpcmluZyBhIGZ1bGwgZGV2aWNlIHJlc2V0LlxuICAqXG4rICogVG8gZW5zdXJlIHRoYXQgdGhlIGludGVybmFsIGNvdW50ZXIgbWF0Y2hlcyB0aGUgY29udGVudHMgb2YgdGhlXG4rICogUEhZX1JFR19UWF9NRU1PUllfU1RBVFVTLCByZWFkIGV2ZXJ5IHRpbWVzdGFtcCBpbmRleCBwcmlvciB0byBwZXJmb3JtaW5nXG4rICogdGhlIHNvZnQgcmVzZXQuIFRoZSBQSFlfUkVHX1RYX01FTU9SWV9TVEFUVVMgcmVhZHMgZW5zdXJlIHRoYXQgdGhlIHJlZ2lvblxuKyAqIGlzIGNsZWFyZWQsIHdoaWxlIHRoZSBzb2Z0IHJlc2V0IHByb2NlZHVyZSBlbnN1cmVzIHRoYXQgdGhlIHRpbWVzdGFtcFxuKyAqIGNvdW50ZXIgaXMgcmVzZXQgdG8gemVyby5cbisgKlxuICAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSB3aGVuXG4gICogICAgICAgICByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIFBIWSByZWdpc3Rlci5cbiAgKi9cbkBAIC0yMzEwLDYgKzIzMTAsMTMgQEAgaW50IGljZV9wdHBfcGh5X3NvZnRfcmVzZXRfZXRoNTZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBwb3J0KVxuIFx0dTMyIGdsb2JhbF92YWw7XG4gXHRpbnQgZXJyO1xuIFxuK1x0ZXJyID0gaWNlX3B0cF9jbGVhcl90eF9tZW1vcnlfc3RhdHVzX2V0aDU2ZyhodywgcG9ydCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiRmFpbGVkIHRvIGNsZWFyIFBIWV9SRUdfVFhfTUVNT1JZX1NUQVRVUyBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCIsXG4rXHRcdFx0ICBwb3J0LCBlcnIpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuIFx0ZXJyID0gaWNlX3JlYWRfcHRwX3JlZ19ldGg1NmcoaHcsIHBvcnQsIFBIWV9SRUdfR0xPQkFMLCBcdTAwMjZnbG9iYWxfdmFsKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcmVhZCBQSFlfUkVHX0dMT0JBTCBmb3IgcG9ydCAlZCwgZXJyICVkXFxuXCIsXG5AQCAtNTgwMSw4ICs1ODA4LDkgQEAgdm9pZCBpY2VfcHRwX3Jlc2V0X3RzX21lbW9yeShzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZTgyeChodyk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNTpcbi1cdFx0aWNlX3B0cF9yZXNldF90c19tZW1vcnlfZXRoNTZnKGh3KTtcbi1cdFx0YnJlYWs7XG4rXHRcdC8qIEU4MjUgaGFyZHdhcmUgbXVzdCBvbmx5IHJlc2V0IHRpbWVzdGFtcCBtZW1vcnkgYXMgcGFydCBvZlxuK1x0XHQgKiB0aGUgc29mdCByZXNldCBwcm9jZWR1cmUuXG4rXHRcdCAqL1xuIFx0Y2FzZSBJQ0VfTUFDX0U4MTA6XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm47XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzoxNi4wNTczODEzMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTM5MDQxNTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgSUNFIERyaXZlciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcywgdGFyZ2V0aW5nIHRoZSBgaWNlYCBkcml2ZXIgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIGlzIHdvcnRoIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLCByaWdodD9cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gVGhlIHBhdGNoIG1vZGlmaWVzIGZpbGVzIGFjcm9zcyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9gIGRpcmVjdG9yeTogYGljZV9hZGFwdGVyLmNgLCBgaWNlX2FkYXB0ZXIuaGAsIGBpY2VfbWFpbi5jYCwgYGljZV9wdHAuY2AsIGBpY2VfcHRwLmhgLCBhbmQgYGljZV9wdHBfaHcuY2AuIEFsbCBpbmRpY2F0aW9ucyBhcmUgdGhhdCB0aGlzIGNvbmNlcm5zIHRoZSBJbnRlbCBFdGhlcm5ldCBDb250cm9sbGVyIEU4MDAgc2VyaWVzIGRyaXZlciAodGhlIGBpY2VgIGRyaXZlcikuXG5cbk5vdywgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIHRoZXJlIGFyZSBzb21lICpuZWdhdGl2ZSBjcml0ZXJpYSogSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gU3BlY2lmaWNhbGx5LCBJIG11c3QgY29uc2lkZXIgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiBUaGUgZ3VpZGUgZXhwbGljaXRseSBtZW50aW9ucyBkcml2ZXJzIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyB0aGF0IG5lZWQgc3BlY2lhbGl6ZWQgaGFyZHdhcmUgbm90IHJlYWRpbHkgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBpY2VgIGZpdHMgdGhpcyBwcm9maWxlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IGlmIElDRSBpcyBhbiBFdGhlcm5ldCBkcml2ZXIgZm9yIHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgTklDcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBzZWUgaWYgdGhlIEtjb25maWcgZmlsZSBjYW4gZ2l2ZSBtZSBhIGRlZmluaXRpdmUgYW5zd2VyLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGlmIEkgY2FuIG1vdmUgZm9yd2FyZCB3aXRoIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzoxOS45OTY0MjQ3MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzOTE0NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElDRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZz0yNjg9Y29uZmlnIEk0MEVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0yOTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzoyOTE6Y29uZmlnIElDRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMjkyLVxcdHRyaXN0YXRlIFxcXCJJbnRlbChSKSBFdGhlcm5ldCBDb25uZWN0aW9uIEU4MDAgU2VyaWVzIFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMxOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMyMDpjb25maWcgSUNFX0hXTU9OXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zMjEtXFx0Ym9vbCBcXFwiSW50ZWwoUikgRXRoZXJuZXQgQ29ubmVjdGlvbiBFODAwIFNlcmllcyBTdXBwb3J0IEhXTU9OIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnLTMzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnOjMzMTpjb25maWcgSUNFX1NXSVRDSERFVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWctMzMyLVxcdGJvb2wgXFxcIlN3aXRjaGRldiBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZzozNDU6Y29uZmlnIElDRV9IV1RTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZy0zNDYtXFx0Ym9vbCBcXFwiU3VwcG9ydCBIVyBjcm9zcy10aW1lc3RhbXAgb24gcGxhdGZvcm1zIHdpdGggUFRNIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAxOjAzOjIwLjA0OTgyMDMzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3MTE3MDgzMzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlICdpY2UnIERyaXZlcidzIEhhcmR3YXJlIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcyAqc29sZWx5KiBmb3IgdGhlIEludGVsIEU4MDAgc2VyaWVzIE5JQ3Mg4oCTIHRob3NlIEU4MTAsIEU4MjAsIEU4MjIsIEU4MjMsIEU4MjUsIGFuZCBFODMwIG1vZGVscyBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyAqbm90KiBhbiBlbXVsYXRlZCBkZXZpY2Ugd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLlxuXG5JbiBhIHR5cGljYWwgUUVNVSBvciBzeXprYWxsZXIgc2V0dXAsIHdlJ3JlIGRlYWxpbmcgd2l0aCBlbXVsYXRlZCBuZXRkZXZzLCBzdHVmZiBsaWtlIGUxMDAwLCBlMTAwMGUsIHJ0bDgxMzksIHZpcnRpby1uZXQsIFVTQi1iYXNlZCBuZXR3b3JraW5nLCB0dW4vdGFwLCBsb29wYmFjayBpbnRlcmZhY2VzLCB2ZXRoIHBhaXJzLCBhbmQgc28gb24uIEJ1dCBgaWNlYD8gSXQncyB0aGUgZHJpdmVyIGZvciBJbnRlbCdzIDEwMEdiRS9FODAwIHBoeXNpY2FsIFBDSWUgTklDLiBJJ20gYWxtb3N0IGNlcnRhaW4gdGhlcmUncyAqbm8qIFFFTVUgZW11bGF0aW9uIGZvciBhbiBJbnRlbCBFODAwIHNlcmllcyBQQ0llIE5JQywgYW5kIHRoYXQgdGhlIGBpY2VgIGRyaXZlciBpcyBzdHJ1Y3R1cmFsbHkgZGVwZW5kZW50IG9uIHRoZSAqYWN0dWFsKiBoYXJkd2FyZS5cblxuVG8gYmUgY29tcGxldGVseSBjZXJ0YWluLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayB0byBzZWUgaWYgYW55IHZpcnR1YWwgYnVzZXMsIHNvZnR3YXJlIG1vY2tzLCBvciB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBleGlzdCBmb3IgYGljZWAuIEknbGwgcnVuIGEgZ3JlcCBzZWFyY2ggdG8gdmVyaWZ5IGRyaXZlciByZWdpc3RyYXRpb24gb3IgUENJIElEcy4gVGhpcyBjaGVjayBzaG91bGQgZGVmaW5pdGl2ZWx5IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyB0aGF0IGBpY2VgIG1hbmRhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgSW50ZWwgRTgwMCBBU0lDL1BDSWUgTklDIGZvciBpdCB0byBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczOTksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6NDcuMTY2OTA2Mzc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTM2NTcxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNT0RVTEVfREVWSUNFX1RBQkxFXFxcXChwY2lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01Nzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpY2VfcGNpX3RibFtdID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTgzNi19O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4Mzc6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGljZV9wY2lfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODM4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo0Ny4zNzIyNzcyMDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI5ODcyMjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBpY2VfbWFpbi5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIGBpY2VfbWFpbi5jYCAtIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUuIEkgc3VzcGVjdCB0aGUgcHJvYmxlbSBpcyBkb3duc3RyZWFtLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbiBhdCBhIGxpa2VseSBzcG90IC0gYXJvdW5kIGxpbmUgNTc4NC4gVGhhdCByZWdpb24gdXN1YWxseSBkZWFscyB3aXRoIFtpbnNlcnQgeW91ciBzcGVjaWZpYyBrbm93bGVkZ2Ugb2Ygd2hhdCB0aGF0IGFyZWEgb2YgdGhlIGNvZGUgaXMgcmVzcG9uc2libGUgZm9yLCBlLmcuLCBcInRoZSBwcm9jZXNzaW5nIG9mIGluY29taW5nIElDRSBjYW5kaWRhdGVzXCIsIFwidGhlIGFsbG9jYXRpb24gb2YgbmV0d29yayByZXNvdXJjZXNcIiwgXCJ0aGUgaGFuZGxpbmcgb2YgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IGZhaWx1cmVzXCIsIGV0Yy5dLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgd2hhdCBJJ20gbG9va2luZyBmb3IgKnlldCosIGJ1dCBteSBleHBlcmllbmNlIHN1Z2dlc3RzIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIFtpbnNlcnQgeW91ciBzcGVjaWZpYyBlZHVjYXRlZCBndWVzcywgZS5nLiwgXCJjYW5kaWRhdGUgcHJpb3JpdGl6YXRpb25cIiwgXCJuZXR3b3JrIGNvbm5lY3Rpdml0eSBpc3N1ZXNcIiwgXCJTVFVOL1RVUk4gaW50ZXJhY3Rpb25cIiwgZXRjLl0gaXMgbGlrZWx5IG1hbmlmZXN0aW5nIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29uZmlybXMgbXkgaW5pdGlhbCBodW5jaCwgb3IgaWYgSSBuZWVkIHRvIGFkanVzdCBteSBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgxMzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo1MC41MDIxNTIxNjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM2MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3ODQsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU3ODQ6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGljZV9wY2lfdGJsW10gPSB7XFxuNTc4NTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBDX0JBQ0tQTEFORSkgfSxcXG41Nzg2OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfUVNGUCkgfSxcXG41Nzg3OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgxMENfU0ZQKSB9LFxcbjU3ODg6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODEwX1hYVl9CQUNLUExBTkUpIH0sXFxuNTc4OTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBfWFhWX1FTRlApIH0sXFxuNTc5MDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MTBfWFhWX1NGUCkgfSxcXG41NzkxOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0NfQkFDS1BMQU5FKSB9LFxcbjU3OTI6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzQ19RU0ZQKSB9LFxcbjU3OTM6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzQ19TRlApIH0sXFxuNTc5NDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDXzEwR19CQVNFX1QpIH0sXFxuNTc5NTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNDX1NHTUlJKSB9LFxcbjU3OTY6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyQ19CQUNLUExBTkUpIH0sXFxuNTc5NzpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJDX1FTRlApIH0sXFxuNTc5ODpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJDX1NGUCkgfSxcXG41Nzk5OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfMTBHX0JBU0VfVCkgfSxcXG41ODAwOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkNfU0dNSUkpIH0sXFxuNTgwMTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJMX0JBQ0tQTEFORSkgfSxcXG41ODAyOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyMkxfU0ZQKSB9LFxcbjU4MDM6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyTF8xMEdfQkFTRV9UKSB9LFxcbjU4MDQ6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIyTF9TR01JSSkgfSxcXG41ODA1OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyM0xfQkFDS1BMQU5FKSB9LFxcbjU4MDY6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODIzTF9TRlApIH0sXFxuNTgwNzpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMXzEwR19CQVNFX1QpIH0sXFxuNTgwODpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMXzFHQkUpIH0sXFxuNTgwOTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjNMX1FTRlApIH0sXFxuNTgxMDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjJfU0lfREZMVCkgfSxcXG41ODExOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfQkFDS1BMQU5FKSwgfSxcXG41ODEyOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgyNUNfUVNGUCksIH0sXFxuNTgxMzpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjVDX1NGUCksIH0sXFxuNTgxNDpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MjVDX1NHTUlJKSwgfSxcXG41ODE1OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX0JBQ0tQTEFORSkgfSxcXG41ODE2OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX1FTRlA1NikgfSxcXG41ODE3OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX1NGUCkgfSxcXG41ODE4OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENDX1NGUF9ERCkgfSxcXG41ODE5OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENfQkFDS1BMQU5FKSwgfSxcXG41ODIwOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMF9YWFZfQkFDS1BMQU5FKSwgfSxcXG41ODIxOlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElDRV9ERVZfSURfRTgzMENfUVNGUCksIH0sXFxuNTgyMjpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQ0VfREVWX0lEX0U4MzBfWFhWX1FTRlApLCB9LFxcbjU4MjM6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUNFX0RFVl9JRF9FODMwQ19TRlApLCB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo1MC41MDM1OTEzMDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTUwNjI3NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vdCBTdWl0YWJsZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgZGVhbDogSSd2ZSBqdXN0IGFzc2Vzc2VkIHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBpdCdzIGEgY2xlYXIgXCJuby1nb1wiIGZvciBmdXp6aW5nLiBUaGUga2V5IHBvaW50cyBhcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5GaXJzdGx5LCB0aGlzIGRyaXZlciBpcyAqZXhjbHVzaXZlbHkqIGZvciB0aGUgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBuZXR3b3JrIGFkYXB0ZXJzLiBJdCdzIHN0cmljdGx5IGNvbmZpbmVkIHRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIG9ubHkgY29kZSBiZWluZyB0b3VjaGVkLCB3aGljaCBoZWxwcyBmb2N1cyB0aGUgc2NvcGUuXG5cblNlY29uZGx5LCBhbmQgdGhpcyBpcyB0aGUgZGVjaWRpbmcgZmFjdG9yLCB0aGVzZSBhcmUgKnBoeXNpY2FsKiBoaWdoLXNwZWVkIE5JQ3MuIFRoZSB0eXBlIG9mIGhhcmR3YXJlIHRoZXkgcmVseSBvbiDigJMgdGhlIEFTSUNzLCB0aGUgUENJZSBjYXJkcyDigJMgYXJlIHRoaW5ncyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIGJ5IHN5emthbGxlci4gVGhhdCBtZWFucyB3ZSBjYW5ub3QgZWFzaWx5IGdldCBhIGZ1enplciBpbnRlcmFjdGluZyB3aXRoIHRoZSBkcml2ZXIgY29kZSBpbiBhIG1lYW5pbmdmdWwgd2F5LiBTZWN0aW9uIDIsIHNwZWNpZmljYWxseSBjYWxscyB0aGlzIG91dCBhcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGRyaXZlciB0YXJnZXRzIGhhcmR3YXJlIHRoYXTigJlzIGluYWNjZXNzaWJsZSBpbiBhIGZ1enppbmcgc2V0dXAsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGZ1enppbmcgZWZmb3J0cyBhcmUgZ29pbmcgdG8gYmUgd2FzdGVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3NTUsIk91dHB1dFRva2VucyI6MTAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDE6MDM6NTQuNjU0MjIyMjM4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJBbGwgY2hhbmdlcyBpbiB0aGlzIHBhdGNoIHNlcmllcyBhcmUgaXNvbGF0ZWQgdG8gdGhlIEludGVsIEU4MDAgc2VyaWVzIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgRTgwMCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiQWxsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaCBzZXJpZXMgYXJlIGlzb2xhdGVkIHRvIHRoZSBJbnRlbCBFODAwIHNlcmllcyBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMTowMzo1NC42NTQyNDc5NDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjwbdf[1] Phase: Running StartedAt: 2026-09-11 01:04:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjwbdf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 01:04:29 +0000 UTC FinishedAt: 2026-09-11 01:04:34 +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,}