Name: series-workflow96hnf Phase: Failed StartedAt: 2026-08-12 00:20:40 +0000 UTC FinishedAt: 2026-08-12 00:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow96hnf[0] Phase: Succeeded StartedAt: 2026-08-12 00:20:40 +0000 UTC FinishedAt: 2026-08-12 00:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow96hnf[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 00:20:40 +0000 UTC FinishedAt: 2026-08-12 00:43:46 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzE0ZTFlZDE4OTNhYmVkYjM3MGUwMjllMTVhY2NkZjVjMjIyOTI4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjQyOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuaW5kZXggMjJiN2Q4ZTZiZDllOC4uOGMyYjYzZWVmODJiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5AQCAtMTg5MCwyNyAmIzQzOzE4OTAsMTggQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ibGtzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgcmVhZF9zeiA9IG1pbl90KHUzMiwgSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwgbGVmdCk7XG4tXG4tXHRcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdFx0aWYgKHN0YXR1cykge1xuLVx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byBhY3F1aXJlIE5WTSBzZW1hcGhvcmVcJiMzNDspO1xuLVx0XHRcdHZmcmVlKG52bV9kYXRhKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0fVxuJiM0MztcdFx0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcbiBcbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNnJlYWRfYXFfZXJyKTtcbiBcdFx0aWYgKHN0YXR1cykge1xuIFx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdHJlYWRfc3osIHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbiYjNDM7XHRcdFx0XHRyZWFkX3N6LCBzdGF0dXMsIHJlYWRfYXFfZXJyKTtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcJiMzNDspO1xuLVx0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdFx0dmZyZWUobnZtX2RhdGEpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdHRtcCAmIzQzOz0gcmVhZF9zejtcbiBcdFx0bGVmdCAtPSByZWFkX3N6O1xuQEAgLTE5NDMsNiAmIzQzOzE5MzQsNyBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuIFx0XHRcdFx0dTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKVxuIHtcbiYjNDM7XHRlbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2VfcGZfdG9fZGV2KHBmKTtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG5AQCAtMTk2NiwyNCAmIzQzOzE5NTgsMTQgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fcmVhZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRpZiAoc3RhdHVzKSB7XG4tXHRcdGRldl9kYmcoZGV2LCBcJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuIFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcdTAwMjZzaXplLCBkYXRhLFxuLVx0XHRcdFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcbiYjNDM7XHRcdFx0XHQgICByZWFkX3NoYWRvd19yYW0sIFx1MDAyNnJlYWRfYXFfZXJyKTtcbiBcdGlmIChzdGF0dXMpIHtcbiBcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdHNpemUsIHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbiYjNDM7XHRcdFx0c2l6ZSwgc3RhdHVzLCByZWFkX2FxX2Vycik7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byByZWFkIE5WTSBjb250ZW50c1wmIzM0Oyk7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5pbmRleCA3ZWIzODBiZTdlZDI3Li5iZjlhODIxYzU0M2I3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5AQCAtODUzLDYgJiM0Mzs4NTMsNyBAQCBzdGF0aWMgaW50XG4gaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4gXHQgICAgICAgdTggKmJ5dGVzKVxuIHtcbiYjNDM7XHRlbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldik7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuQEAgLTg2OSwyNCAmIzQzOzg3MCwxNSBAQCBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXG5cJiMzNDssXG4tXHRcdFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0cmV0ID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGVlcHJvbS1cdTAwM2VvZmZzZXQsIFx1MDAyNmVlcHJvbS1cdTAwM2VsZW4sIGJ1Zixcbi1cdFx0XHRcdGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRmYWxzZSwgXHUwMDI2cmVhZF9hcV9lcnIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCYjMzQ7LFxuLVx0XHRcdHJldCwgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuLVx0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0XHRcdHJldCwgbGliaWVfYXFfc3RyKHJlYWRfYXFfZXJyKSk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdG1lbWNweShieXRlcywgYnVmLCBlZXByb20tXHUwMDNlbGVuKTtcbi1yZWxlYXNlOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBvdXQ6XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5Ny4uOWUwOGRiMzc2ZDNkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0yODcxLDYgJiM0MzsyODcxLDkgQEAgaW50IGljZV92c2lfcmVsZWFzZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdHBmID0gdnNpLVx1MDAzZWJhY2s7XG4gXG4mIzQzO1x0aWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSlcbiYjNDM7XHRcdGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuJiM0MztcbiBcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4gXHRcdGljZV9yc3NfY2xlYW4odnNpKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuaW5kZXggN2UxODdhODA0ZGZhMS4uMjFmM2I2MTVkYmJmMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbkBAIC01MywxNyAmIzQzOzUzLDI3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuICAqIEBsZW5ndGg6IChpbikgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQ7IChvdXQpIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkXG4gICogQGRhdGE6IGJ1ZmZlciB0byByZXR1cm4gZGF0YSBpbiAoc2l6ZWQgdG8gZml0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoKVxuICAqIEByZWFkX3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2YgTlZNXG4mIzQzOyAqIEByZWFkX2FxX2VycjogaWYgbm9uLU5VTEwsIHJlY2VpdmVzIHRoZSBBUSBlcnJvciBzdGF0dXMgb2YgdGhlIGZhaWxpbmcgcmVhZFxuICAqXG4gICogUmVhZHMgYSBwb3J0aW9uIG9mIHRoZSBOVk0sIGFzIGEgZmxhdCBtZW1vcnkgc3BhY2UuIFRoaXMgZnVuY3Rpb24gY29ycmVjdGx5XG4gICogYnJlYWtzIHJlYWQgcmVxdWVzdHMgYWNyb3NzIFNoYWRvdyBSQU0gc2VjdG9ycyBhbmQgZW5zdXJlcyB0aGF0IG5vIHNpbmdsZVxuICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC5cbiAgKlxuJiM0MzsgKiBGVyBjYXBzIHRoZSByZWFkIGxvY2sgYXQgYSBtYXhpbXVtIG9mIDMwMDBtcywgc28gYSByZWFkIHNwYW5uaW5nIG11bHRpcGxlXG4mIzQzOyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0XG4mIzQzOyAqIG1pZC1yZWFkLiBUaGUgTlZNIGxvY2sgaXMgdGhlcmVmb3JlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBhcm91bmQgZWFjaCBBUVxuJiM0MzsgKiByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogU2luY2UgaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCBvdmVyd3JpdGVzXG4mIzQzOyAqIGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cywgY2FsbGVycyB0aGF0IG5lZWQgdGhlIGZhaWxpbmcgcmVhZCYjMzk7cyBBUSBlcnJvclxuJiM0MzsgKiBtdXN0IHVzZSBAcmVhZF9hcV9lcnIgcmF0aGVyIHRoYW4gaW5zcGVjdGluZyBzcV9sYXN0X3N0YXR1cyBhZnRlcndhcmRzLlxuJiM0MzsgKlxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcbiAgKiBwYXJ0aWFsbHkgdXBkYXRlZCBpZiBzb21lIHJlYWRzIHN1Y2NlZWQgYmVmb3JlIGEgZmFpbHVyZS5cbiAgKi9cbiBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuLVx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxuJiM0MztcdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKVxuIHtcbiBcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XG4gXHR1MzIgYnl0ZXNfcmVhZCA9IDA7XG5AQCAtOTIsMTIgJiM0MzsxMDIsMzAgQEAgaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcbiBcbiBcdFx0bGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgJiM0MzsgcmVhZF9zaXplIFx1MDAzYyBpbmxlbik7XG4gXG4mIzQzO1x0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzKSB7XG4mIzQzO1x0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFwmIzM0O0ZhaWxlZCB0byBhY3F1aXJlIE5WTSBsb2NrLCBlcnIgJWQgYXFfZXJyICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgc3RhdHVzLCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3RhdHVzID0gaWNlX2FxX3JlYWRfbnZtKGh3LCBJQ0VfQVFDX05WTV9TVEFSVF9QT0lOVCxcbiBcdFx0XHRcdFx0IG9mZnNldCwgcmVhZF9zaXplLFxuIFx0XHRcdFx0XHQgZGF0YSAmIzQzOyBieXRlc19yZWFkLCBsYXN0X2NtZCxcbiBcdFx0XHRcdFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XG4tXHRcdGlmIChzdGF0dXMpXG4mIzQzO1x0XHRpZiAoc3RhdHVzKSB7XG4mIzQzO1x0XHRcdC8qIENhcHR1cmUgdGhlIHJlYWQmIzM5O3MgQVEgZXJyb3IgYmVmb3JlIGljZV9yZWxlYXNlX252bSgpXG4mIzQzO1x0XHRcdCAqIGlzc3VlcyBpdHMgb3duIEFRIGNvbW1hbmQgYW5kIG92ZXJ3cml0ZXNcbiYjNDM7XHRcdFx0ICogc3FfbGFzdF9zdGF0dXMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAocmVhZF9hcV9lcnIpXG4mIzQzO1x0XHRcdFx0KnJlYWRfYXFfZXJyID0gaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRcdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0XHRieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7XG4gXHRcdG9mZnNldCAmIzQzOz0gcmVhZF9zaXplO1xuQEAgLTE3NywxNCAmIzQzOzIwNSwxOSBAQCBpbnQgaWNlX2FxX2VyYXNlX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcmVhZF9zcl93b3JkX2FxIC0gUmVhZHMgU2hhZG93IFJBTSB2aWEgQVFcbiYjNDM7ICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gICogQG9mZnNldDogb2Zmc2V0IG9mIHRoZSBTaGFkb3cgUkFNIHdvcmQgdG8gcmVhZCAoMHgwMDAwMDAgLSAweDAwMUZGRilcbiAgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU1cbiAgKlxuICAqIFJlYWRzIG9uZSAxNiBiaXQgd29yZCBmcm9tIHRoZSBTaGFkb3cgUkFNIHVzaW5nIGljZV9yZWFkX2ZsYXRfbnZtLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgTlZNIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGludGVybmFsbHkgYnkgaWNlX3JlYWRfZmxhdF9udm0oKVxuJiM0MzsgKiBhcm91bmQgdGhlIEZXIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHplcm8gb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4mIzQzO2ludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4ge1xuIFx0dTMyIGJ5dGVzID0gc2l6ZW9mKHUxNik7XG4gXHRfX2xlMTYgZGF0YV9sb2NhbDtcbkBAIC0xOTQsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfc3Jfd29yZF9hcShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuIFx0ICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLlxuIFx0ICovXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksIFx1MDAyNmJ5dGVzLFxuLVx0XHRcdFx0ICAgKF9fZm9yY2UgdTggKilcdTAwMjZkYXRhX2xvY2FsLCB0cnVlKTtcbiYjNDM7XHRcdFx0XHQgICAoX19mb3JjZSB1OCAqKVx1MDAyNmRhdGFfbG9jYWwsIHRydWUsIE5VTEwpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0cmV0dXJuIHN0YXR1cztcbiBcbkBAIC0zMzAsMTMgJiM0MzszNjMsOCBAQCBpY2VfcmVhZF9mbGFzaF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUxNiBtb2R1bGUsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbi1cbi1cdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCAmIzQzOyBvZmZzZXQsIFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xuLVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiYjNDM7XHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgc3RhcnQgJiM0Mzsgb2Zmc2V0LCBcdTAwMjZsZW5ndGgsIGRhdGEsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgIE5VTEwpO1xuIFxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDE4LDI3ICYjNDM7NDQ2LDYgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXRcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxuLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tICogQG9mZnNldDogb2Zmc2V0IG9mIHRoZSBTaGFkb3cgUkFNIHdvcmQgdG8gcmVhZCAoMHgwMDAwMDAgLSAweDAwMUZGRilcbi0gKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU1cbi0gKlxuLSAqIFJlYWRzIG9uZSAxNiBiaXQgd29yZCBmcm9tIHRoZSBTaGFkb3cgUkFNIHVzaW5nIHRoZSBpY2VfcmVhZF9zcl93b3JkX2FxLlxuLSAqL1xuLWludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4te1xuLVx0aW50IHN0YXR1cztcbi1cbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmICghc3RhdHVzKSB7XG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc3RhdHVzO1xuLX1cbi1cbiAvKipcbiAgKiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2IC0gUmVhZHMgc3ViIG1vZHVsZSBUTFYgZnJvbSBOVk0gUEZBXG4gICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTg1NiwyMCAmIzQzOzg2MywxOCBAQCBpbnQgaWNlX2dldF9pbmFjdGl2ZV9uZXRsaXN0X3ZlcihzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9uZXRsaXN0X2luZm8gKm5ldFxuIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXG4ge1xuIFx0dTMyIG1pbl9zaXplID0gMCwgbWF4X3NpemUgPSBJQ0VfQVFDX05WTV9NQVhfT0ZGU0VUICYjNDM7IDE7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbiYjNDM7XHRpbnQgc3RhdHVzID0gMDtcbiBcbiBcdHdoaWxlICgobWF4X3NpemUgLSBtaW5fc2l6ZSkgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XG4gXHRcdHUzMiBvZmZzZXQgPSAobWF4X3NpemUgJiM0MzsgbWluX3NpemUpIC8gMjtcbiBcdFx0dTMyIGxlbiA9IDE7XG4gXHRcdHU4IGRhdGE7XG4gXG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFx1MDAyNmxlbiwgXHUwMDI2ZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIG9mZnNldCwgXHUwMDI2bGVuLCBcdTAwMjZkYXRhLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNnJlYWRfYXFfZXJyKTtcbiBcdFx0aWYgKHN0YXR1cyA9PSAtRUlPIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xuJiM0MztcdFx0ICAgIHJlYWRfYXFfZXJyID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xuIFx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFwmIzM0OyVzOiBOZXcgdXBwZXIgYm91bmQgb2YgJXUgYnl0ZXNcXG5cJiMzNDssXG4gXHRcdFx0XHQgIF9fZnVuY19fLCBvZmZzZXQpO1xuIFx0XHRcdHN0YXR1cyA9IDA7XG5AQCAtODgwLDcgJiM0Mzs4ODUsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdG1pbl9zaXplID0gb2Zmc2V0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cbi1cdFx0XHRnb3RvIGVycl9yZWFkX2ZsYXRfbnZtO1xuJiM0MztcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODg4LDkgJiM0Mzs4OTMsNiBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFxuIFx0aHctXHUwMDNlZmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplO1xuIFxuLWVycl9yZWFkX2ZsYXRfbnZtOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oXG5pbmRleCA2M2NkYzZiZGFjNTg5Li5lMWQxYTExZjVjYTQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxuQEAgLTE5LDcgJiM0MzsxOSw3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuIFx0XHQgICAgYm9vbCByZWFkX3NoYWRvd19yYW0sIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTtcbiBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuLVx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKTtcbiYjNDM7XHRcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0sIGVudW0gbGliaWVfYXFfZXJyICpyZWFkX2FxX2Vycik7XG4gaW50XG4gaWNlX2dldF9wZmFfbW9kdWxlX3RsdihzdHJ1Y3QgaWNlX2h3ICpodywgdTE2ICptb2R1bGVfdGx2LCB1MTYgKm1vZHVsZV90bHZfbGVuLFxuIFx0XHQgICAgICAgdTE2IG1vZHVsZV90eXBlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggOGU1Zjk3ODM1OTU0Yy4uM2E0MWM3MTFlNzUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbkBAIC00ODA4LDE1ICYjNDM7NDgwOCwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfYWRqX2xsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHMzMiBhZGopXG4gXHRcdFx0XHQgICAgICAgIUZJRUxEX0dFVChSRUdfTExfUFJPWFlfSF9FWEVDLCB2YWwpLFxuIFx0XHRcdFx0ICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsXG4gXHRcdFx0XHQgICAgICAgUkVHX0xMX1BST1hZX0gpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgYWRqdXN0bWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXG5cJiMzNDspO1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cGFyYW1zLVx1MDAzZWF0cWJhbF93cS5sb2NrKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwYXJhbXMtXHUwMDNlYXRxYmFsX3dxLmxvY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0ZhaWxlZCB0byBwcmVwYXJlIFBIWSB0aW1lciBhZGp1c3RtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTQ4MzcsOCAmIzQzOzQ4MzQsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxuIFx0dTggdG1yX2lkeDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoaHctXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpXG4tXHRcdHJldHVybiBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopO1xuJiM0MztcdGlmIChody1cdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkge1xuJiM0MztcdFx0ZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9hZGpfbGxfZTgxMChodywgYWRqKTtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVUSU1FRE9VVClcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0xMIGFkaiB0aW1lZCBvdXQsIGZhbGxpbmcgYmFjayB0byBTQlFcXG5cJiMzNDspO1xuJiM0MztcdH1cbiBcbiBcdHRtcl9pZHggPSBody1cdTAwM2VmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDtcbiBcbkBAIC00OTAxLDE1ICYjNDM7NDkwMiwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2xsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHU2NCBpbmN2YWwpXG4gXHRcdFx0XHQgICAgICAgIUZJRUxEX0dFVChSRUdfTExfUFJPWFlfSF9FWEVDLCB2YWwpLFxuIFx0XHRcdFx0ICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsXG4gXHRcdFx0XHQgICAgICAgUkVHX0xMX1BST1hZX0gpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgaW5jcmVtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwmIzM0Oyk7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwYXJhbXMtXHUwMDNlYXRxYmFsX3dxLmxvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBhcmFtcy1cdTAwM2VhdHFiYWxfd3EubG9jayk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC00OTI3LDggJiM0Mzs0OTI1LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTY0IGluY3ZhbClcbiBcdHU4IHRtcl9pZHg7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGh3LVx1MDAzZWRldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKVxuLVx0XHRyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTtcbiYjNDM7XHRpZiAoaHctXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpIHtcbiYjNDM7XHRcdGVyciA9IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2xsX2U4MTAoaHcsIGluY3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyICE9IC1FVElNRURPVVQpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtMTCBpbmN2YWwgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4gXG4gXHR0bXJfaWR4ID0gaHctXHUwMDNlZnVuY19jYXBzLnRzX2Z1bmNfaW5mby50bXJfaW5kZXhfb3duZWQ7XG4gXHRsb3cgPSBsb3dlcl8zMl9iaXRzKGluY3ZhbCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbmluZGV4IGM3MjRkNDI5YTdhYTkuLjkxY2E3NWU0NTQ2MzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5AQCAtMjQwOCw3ICYjNDM7MjQwOCw3IEBAIHZvaWQgaWRwZl90eF9zcGxpdHFfYnVpbGRfZmxvd19kZXNjKHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjICpkZXNjLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcyxcbiBcdFx0XHRcdCAgICB1MTYgdGRfY21kLCB1MTYgc2l6ZSlcbiB7XG4tXHQqKHUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpO1xuJiM0MztcdCooX19sZTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XG4gXHRkZXNjLVx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cdTAwM2Vjb21wbF90YWcpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzE0ZTFlZDE4OTNhYmVkYjM3MGUwMjllMTVhY2NkZjVjMjIyOTI4OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDAwOjQyOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jCmluZGV4IDIyYjdkOGU2YmQ5ZTguLjhjMmI2M2VlZjgyYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMKQEAgLTE4OTAsMjcgJiM0MzsxODkwLDE4IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fYmxrczsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHJlYWRfc3ogPSBtaW5fdCh1MzIsIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsIGxlZnQpOwotCi0JCXN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZGV2X2RiZyhkZXYsICYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxuJiMzNDssCi0JCQkJc3RhdHVzLCBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTsKLQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZSYjMzQ7KTsKLQkJCXZmcmVlKG52bV9kYXRhKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CiYjNDM7CQllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCiAJCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBpICogSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwKLQkJCQkJICAgJmFtcDtyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7CiYjNDM7CQkJCQkgICAmYW1wO3JlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtLAomIzQzOwkJCQkJICAgJmFtcDtyZWFkX2FxX2Vycik7CiAJCWlmIChzdGF0dXMpIHsKIAkJCWRldl9kYmcoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCQlyZWFkX3N6LCBzdGF0dXMsIGh3LSZndDthZG1pbnEuc3FfbGFzdF9zdGF0dXMpOwomIzQzOwkJCQlyZWFkX3N6LCBzdGF0dXMsIHJlYWRfYXFfZXJyKTsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAkJCXZmcmVlKG52bV9kYXRhKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWljZV9yZWxlYXNlX252bShodyk7CiAKIAkJdG1wICYjNDM7PSByZWFkX3N6OwogCQlsZWZ0IC09IHJlYWRfc3o7CkBAIC0xOTQzLDYgJiM0MzsxOTM0LDcgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fcmVhZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKIAkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiAJCQkJdTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKQogewomIzQzOwllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gZGV2bGlua19wcml2KGRldmxpbmspOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpOwogCXN0cnVjdCBpY2VfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CkBAIC0xOTY2LDI0ICYjNDM7MTk1OCwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCXN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7Ci0JCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZSYjMzQ7KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJc3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCAmYW1wO3NpemUsIGRhdGEsCi0JCQkJICAgcmVhZF9zaGFkb3dfcmFtKTsKJiM0MzsJCQkJICAgcmVhZF9zaGFkb3dfcmFtLCAmYW1wO3JlYWRfYXFfZXJyKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9kYmcoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCXNpemUsIHN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7CiYjNDM7CQkJc2l6ZSwgc3RhdHVzLCByZWFkX2FxX2Vycik7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQlpY2VfcmVsZWFzZV9udm0oaHcpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwppbmRleCA3ZWIzODBiZTdlZDI3Li5iZjlhODIxYzU0M2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwpAQCAtODUzLDYgJiM0Mzs4NTMsNyBAQCBzdGF0aWMgaW50CiBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKIAkgICAgICAgdTggKmJ5dGVzKQogewomIzQzOwllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihuZXRkZXYpOwogCXN0cnVjdCBpY2VfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwpAQCAtODY5LDI0ICYjNDM7ODcwLDE1IEBAIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAmIzM0O2ljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcbiYjMzQ7LAotCQkJcmV0LCBsaWJpZV9hcV9zdHIoaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cykpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlyZXQgPSBpY2VfcmVhZF9mbGF0X252bShodywgZWVwcm9tLSZndDtvZmZzZXQsICZhbXA7ZWVwcm9tLSZndDtsZW4sIGJ1ZiwKLQkJCQlmYWxzZSk7CiYjNDM7CQkJCWZhbHNlLCAmYW1wO3JlYWRfYXFfZXJyKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCi0JCQlyZXQsIGxpYmllX2FxX3N0cihody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7Ci0JCWdvdG8gcmVsZWFzZTsKJiM0MzsJCQlyZXQsIGxpYmllX2FxX3N0cihyZWFkX2FxX2VycikpOwomIzQzOwkJZ290byBvdXQ7CiAJfQogCiAJbWVtY3B5KGJ5dGVzLCBidWYsIGVlcHJvbS0mZ3Q7bGVuKTsKLXJlbGVhc2U6Ci0JaWNlX3JlbGVhc2VfbnZtKGh3KTsKIG91dDoKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwppbmRleCA4Y2RjNGZkYTg5ZTk3Li45ZTA4ZGIzNzZkM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKQEAgLTI4NzEsNiAmIzQzOzI4NzEsOSBAQCBpbnQgaWNlX3ZzaV9yZWxlYXNlKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCXJldHVybiAtRU5PREVWOwogCXBmID0gdnNpLSZndDtiYWNrOwogCiYjNDM7CWlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpCiYjNDM7CQlpY2VfY2xlYXJfZGZsdF92c2kodnNpKTsKJiM0MzsKIAlpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtJmd0O2ZsYWdzKSkKIAkJaWNlX3Jzc19jbGVhbih2c2kpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYwppbmRleCA3ZTE4N2E4MDRkZmExLi4yMWYzYjYxNWRiYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMKQEAgLTUzLDE3ICYjNDM7NTMsMjcgQEAgaW50IGljZV9hcV9yZWFkX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHUzMiBvZmZzZXQsCiAgKiBAbGVuZ3RoOiAoaW4pIG51bWJlciBvZiBieXRlcyB0byByZWFkOyAob3V0KSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZAogICogQGRhdGE6IGJ1ZmZlciB0byByZXR1cm4gZGF0YSBpbiAoc2l6ZWQgdG8gZml0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoKQogICogQHJlYWRfc2hhZG93X3JhbTogaWYgdHJ1ZSwgcmVhZCBmcm9tIHNoYWRvdyBSQU0gaW5zdGVhZCBvZiBOVk0KJiM0MzsgKiBAcmVhZF9hcV9lcnI6IGlmIG5vbi1OVUxMLCByZWNlaXZlcyB0aGUgQVEgZXJyb3Igc3RhdHVzIG9mIHRoZSBmYWlsaW5nIHJlYWQKICAqCiAgKiBSZWFkcyBhIHBvcnRpb24gb2YgdGhlIE5WTSwgYXMgYSBmbGF0IG1lbW9yeSBzcGFjZS4gVGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkKICAqIGJyZWFrcyByZWFkIHJlcXVlc3RzIGFjcm9zcyBTaGFkb3cgUkFNIHNlY3RvcnMgYW5kIGVuc3VyZXMgdGhhdCBubyBzaW5nbGUKICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC4KICAqCiYjNDM7ICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZQomIzQzOyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0CiYjNDM7ICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRCiYjNDM7ICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuCiYjNDM7ICoKJiM0MzsgKiBTaW5jZSBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXMKJiM0MzsgKiBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzLCBjYWxsZXJzIHRoYXQgbmVlZCB0aGUgZmFpbGluZyByZWFkJiMzOTtzIEFRIGVycm9yCiYjNDM7ICogbXVzdCB1c2UgQHJlYWRfYXFfZXJyIHJhdGhlciB0aGFuIGluc3BlY3Rpbmcgc3FfbGFzdF9zdGF0dXMgYWZ0ZXJ3YXJkcy4KJiM0MzsgKgogICogUmV0dXJucyBhIHN0YXR1cyBjb2RlIG9uIGZhaWx1cmUuIE5vdGUgdGhhdCB0aGUgZGF0YSBwb2ludGVyIG1heSBiZQogICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuCiAgKi8KIGludAogaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSwKLQkJICBib29sIHJlYWRfc2hhZG93X3JhbSkKJiM0MzsJCSAgYm9vbCByZWFkX3NoYWRvd19yYW0sIGVudW0gbGliaWVfYXFfZXJyICpyZWFkX2FxX2VycikKIHsKIAl1MzIgaW5sZW4gPSAqbGVuZ3RoOwogCXUzMiBieXRlc19yZWFkID0gMDsKQEAgLTkyLDEyICYjNDM7MTAyLDMwIEBAIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsCiAKIAkJbGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgJiM0MzsgcmVhZF9zaXplICZsdDsgaW5sZW4pOwogCiYjNDM7CQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7CiYjNDM7CQlpZiAoc3RhdHVzKSB7CiYjNDM7CQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwgJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gbG9jaywgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCiYjNDM7CQkJCSAgc3RhdHVzLCBsaWJpZV9hcV9zdHIoaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cykpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwogCQlzdGF0dXMgPSBpY2VfYXFfcmVhZF9udm0oaHcsIElDRV9BUUNfTlZNX1NUQVJUX1BPSU5ULAogCQkJCQkgb2Zmc2V0LCByZWFkX3NpemUsCiAJCQkJCSBkYXRhICYjNDM7IGJ5dGVzX3JlYWQsIGxhc3RfY21kLAogCQkJCQkgcmVhZF9zaGFkb3dfcmFtLCBOVUxMKTsKLQkJaWYgKHN0YXR1cykKJiM0MzsJCWlmIChzdGF0dXMpIHsKJiM0MzsJCQkvKiBDYXB0dXJlIHRoZSByZWFkJiMzOTtzIEFRIGVycm9yIGJlZm9yZSBpY2VfcmVsZWFzZV9udm0oKQomIzQzOwkJCSAqIGlzc3VlcyBpdHMgb3duIEFRIGNvbW1hbmQgYW5kIG92ZXJ3cml0ZXMKJiM0MzsJCQkgKiBzcV9sYXN0X3N0YXR1cy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAocmVhZF9hcV9lcnIpCiYjNDM7CQkJCSpyZWFkX2FxX2VyciA9IGh3LSZndDthZG1pbnEuc3FfbGFzdF9zdGF0dXM7CiYjNDM7CiYjNDM7CQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCQlieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7CiAJCW9mZnNldCAmIzQzOz0gcmVhZF9zaXplOwpAQCAtMTc3LDE0ICYjNDM7MjA1LDE5IEBAIGludCBpY2VfYXFfZXJhc2VfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgc3RydWN0IGljZV9zcV9jZCAqY2QpCiB9CiAKIC8qKgotICogaWNlX3JlYWRfc3Jfd29yZF9hcSAtIFJlYWRzIFNoYWRvdyBSQU0gdmlhIEFRCiYjNDM7ICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZAogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpCiAgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU0KICAqCiAgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS4KJiM0MzsgKgomIzQzOyAqIFRoZSBOVk0gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW50ZXJuYWxseSBieSBpY2VfcmVhZF9mbGF0X252bSgpCiYjNDM7ICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCiYjNDM7aW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKIAl1MzIgYnl0ZXMgPSBzaXplb2YodTE2KTsKIAlfX2xlMTYgZGF0YV9sb2NhbDsKQEAgLTE5NCw3ICYjNDM7MjI3LDcgQEAgc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCiAJICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLgogCSAqLwogCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQgKiBzaXplb2YodTE2KSwgJmFtcDtieXRlcywKLQkJCQkgICAoX19mb3JjZSB1OCAqKSZhbXA7ZGF0YV9sb2NhbCwgdHJ1ZSk7CiYjNDM7CQkJCSAgIChfX2ZvcmNlIHU4ICopJmFtcDtkYXRhX2xvY2FsLCB0cnVlLCBOVUxMKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCkBAIC0zMzAsMTMgJiM0MzszNjMsOCBAQCBpY2VfcmVhZF9mbGFzaF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUxNiBtb2R1bGUsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwotCi0Jc3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICYjNDM7IG9mZnNldCwgJmFtcDtsZW5ndGgsIGRhdGEsIGZhbHNlKTsKLQotCWljZV9yZWxlYXNlX252bShodyk7CiYjNDM7CXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCAmIzQzOyBvZmZzZXQsICZhbXA7bGVuZ3RoLCBkYXRhLCBmYWxzZSwKJiM0MzsJCQkJICAgTlVMTCk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDE4LDI3ICYjNDM7NDQ2LDYgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXQKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKioKLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeQotICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpCi0gKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU0KLSAqCi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS4KLSAqLwotaW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7Ci0JCWljZV9yZWxlYXNlX252bShodyk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQogLyoqCiAgKiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2IC0gUmVhZHMgc3ViIG1vZHVsZSBUTFYgZnJvbSBOVk0gUEZBCiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC04NTYsMjAgJiM0Mzs4NjMsMTggQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXQKIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpCiB7CiAJdTMyIG1pbl9zaXplID0gMCwgbWF4X3NpemUgPSBJQ0VfQVFDX05WTV9NQVhfT0ZGU0VUICYjNDM7IDE7Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwomIzQzOwlpbnQgc3RhdHVzID0gMDsKIAogCXdoaWxlICgobWF4X3NpemUgLSBtaW5fc2l6ZSkgJmd0OyAxKSB7CiYjNDM7CQllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCQl1MzIgb2Zmc2V0ID0gKG1heF9zaXplICYjNDM7IG1pbl9zaXplKSAvIDI7CiAJCXUzMiBsZW4gPSAxOwogCQl1OCBkYXRhOwogCi0JCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsICZhbXA7bGVuLCAmYW1wO2RhdGEsIGZhbHNlKTsKJiM0MzsJCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsICZhbXA7bGVuLCAmYW1wO2RhdGEsIGZhbHNlLAomIzQzOwkJCQkJICAgJmFtcDtyZWFkX2FxX2Vycik7CiAJCWlmIChzdGF0dXMgPT0gLUVJTyAmYW1wOyZhbXA7Ci0JCSAgICBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzID09IExJQklFX0FRX1JDX0VJTlZBTCkgewomIzQzOwkJICAgIHJlYWRfYXFfZXJyID09IExJQklFX0FRX1JDX0VJTlZBTCkgewogCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwgJiMzNDslczogTmV3IHVwcGVyIGJvdW5kIG9mICV1IGJ5dGVzXG4mIzM0OywKIAkJCQkgIF9fZnVuY19fLCBvZmZzZXQpOwogCQkJc3RhdHVzID0gMDsKQEAgLTg4MCw3ICYjNDM7ODg1LDcgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodykKIAkJCW1pbl9zaXplID0gb2Zmc2V0OwogCQl9IGVsc2UgewogCQkJLyogYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCAqLwotCQkJZ290byBlcnJfcmVhZF9mbGF0X252bTsKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQogCkBAIC04ODgsOSAmIzQzOzg5Myw2IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpCiAKIAlody0mZ3Q7Zmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplOwogCi1lcnJfcmVhZF9mbGF0X252bToKLQlpY2VfcmVsZWFzZV9udm0oaHcpOwotCiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmgKaW5kZXggNjNjZGM2YmRhYzU4OS4uZTFkMWExMWY1Y2E0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oCkBAIC0xOSw3ICYjNDM7MTksNyBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCwKIAkJICAgIGJvb2wgcmVhZF9zaGFkb3dfcmFtLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZCk7CiBpbnQKIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsCi0JCSAgYm9vbCByZWFkX3NoYWRvd19yYW0pOwomIzQzOwkJICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKTsKIGludAogaWNlX2dldF9wZmFfbW9kdWxlX3RsdihzdHJ1Y3QgaWNlX2h3ICpodywgdTE2ICptb2R1bGVfdGx2LCB1MTYgKm1vZHVsZV90bHZfbGVuLAogCQkgICAgICAgdTE2IG1vZHVsZV90eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCmluZGV4IDhlNWY5NzgzNTk1NGMuLjNhNDFjNzExZTc1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtNDgwOCwxNSAmIzQzOzQ4MDgsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKQogCQkJCSAgICAgICAhRklFTERfR0VUKFJFR19MTF9QUk9YWV9IX0VYRUMsIHZhbCksCiAJCQkJICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsCiAJCQkJICAgICAgIFJFR19MTF9QUk9YWV9IKTsKLQlpZiAoZXJyKSB7Ci0JCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXG4mIzM0Oyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BhcmFtcy0mZ3Q7YXRxYmFsX3dxLmxvY2spOwotCQlyZXR1cm4gZXJyOwotCX0KLQogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BhcmFtcy0mZ3Q7YXRxYmFsX3dxLmxvY2spOwogCi0JcmV0dXJuIDA7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byBwcmVwYXJlIFBIWSB0aW1lciBhZGp1c3RtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTQ4MzcsOCAmIzQzOzQ4MzQsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKQogCXU4IHRtcl9pZHg7CiAJaW50IGVycjsKIAotCWlmIChody0mZ3Q7ZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpCi0JCXJldHVybiBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopOwomIzQzOwlpZiAoaHctJmd0O2Rldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKSB7CiYjNDM7CQllcnIgPSBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopOwomIzQzOwkJaWYgKGVyciAhPSAtRVRJTUVET1VUKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0xMIGFkaiB0aW1lZCBvdXQsIGZhbGxpbmcgYmFjayB0byBTQlFcbiYjMzQ7KTsKJiM0MzsJfQogCiAJdG1yX2lkeCA9IGh3LSZndDtmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDsKIApAQCAtNDkwMSwxNSAmIzQzOzQ5MDIsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2luY3ZhbF9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCB1NjQgaW5jdmFsKQogCQkJCSAgICAgICAhRklFTERfR0VUKFJFR19MTF9QUk9YWV9IX0VYRUMsIHZhbCksCiAJCQkJICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsCiAJCQkJICAgICAgIFJFR19MTF9QUk9YWV9IKTsKLQlpZiAoZXJyKSB7Ci0JCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcbiYjMzQ7KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cGFyYW1zLSZndDthdHFiYWxfd3EubG9jayk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cGFyYW1zLSZndDthdHFiYWxfd3EubG9jayk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC00OTI3LDggJiM0Mzs0OTI1LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTY0IGluY3ZhbCkKIAl1OCB0bXJfaWR4OwogCWludCBlcnI7CiAKLQlpZiAoaHctJmd0O2Rldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKQotCQlyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTsKJiM0MzsJaWYgKGh3LSZndDtkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkgewomIzQzOwkJZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTsKJiM0MzsJCWlmIChlcnIgIT0gLUVUSU1FRE9VVCkKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtMTCBpbmN2YWwgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXG4mIzM0Oyk7CiYjNDM7CX0KIAogCXRtcl9pZHggPSBody0mZ3Q7ZnVuY19jYXBzLnRzX2Z1bmNfaW5mby50bXJfaW5kZXhfb3duZWQ7CiAJbG93ID0gbG93ZXJfMzJfYml0cyhpbmN2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKaW5kZXggYzcyNGQ0MjlhN2FhOS4uOTFjYTc1ZTQ1NDYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jCkBAIC0yNDA4LDcgJiM0MzsyNDA4LDcgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsCiAJCQkJICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcywKIAkJCQkgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpCiB7Ci0JKih1MzIgKikmYW1wO2Rlc2MtJmd0O2Zsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLSZndDtkdHlwZSB8IHRkX2NtZCk7CiYjNDM7CSooX19sZTMyICopJmFtcDtkZXNjLSZndDtmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy0mZ3Q7ZHR5cGUgfCB0ZF9jbWQpKTsKIAlkZXNjLSZndDtmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7CiAJZGVzYy0mZ3Q7Zmxvdy5xdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYocGFyYW1zLSZndDtjb21wbF90YWcpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2ggYW5kIEZ1enphYmlsaXR5IG9mIEludGVsIE5ldHdvcmsgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRob3NlIGxvY2F0ZWQgaW4gdGhlIEludGVsIEV0aGVybmV0IGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkaXJlY3Rvcmllcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlaXIgcmVsZXZhbmNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VLiBUaGUgYGljZWAgZHJpdmVyLCBJIGtub3csIGhhbmRsZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHBoeXNpY2FsIFBDSWUgY2FyZHMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBldmVuIGVtdWxhdGVzIHRob3NlPwoKUmlnaHQsIHRoZSBwcm9tcHQgaXRzZWxmIGlzIGEgY2x1ZS4gSXQgZXhwbGljaXRseSBtZW50aW9ucyB0aGF0IGNlcnRhaW4gZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhcmVuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuLi4gdGhleSYjMzk7cmUgb3V0LiBTbywgZG9lcyB0aGF0IGFwcGx5IHRvIGBpY2VgPyBOb3BlLiBTdGFuZGFyZCBRRU1VLCBhcyBJIHJlY2FsbCwgc3RpY2tzIHRvIGVtdWxhdGluZyB0aGUgbW9yZSBjb21tb24gYWRhcHRlcnMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGBydGw4MTM5YCwgYHBjbmV0YCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBOb3csIGBpZ2JgIGlzIGVtdWxhdGVkOyB0aGF0JiMzOTtzIGEgZGF0YSBwb2ludC4gQnV0IGlzIGBpY2VgPyBOby4gQW5kIGBpZHBmYD8gTm8sIHRoYXQmIzM5O3Mgbm90IGVtdWxhdGVkIGVpdGhlci4KCk9rYXksIG5leHQgcXVlc3Rpb246IGFyZSB0aGVzZSBkcml2ZXJzICpmdXp6YWJsZSo/IEdlbmVyYWxseSwgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlcnMgd2l0aG91dCBlbXVsYXRpb24gYXJlIGEgbm8tZ28gZm9yIGZ1enppbmcsIHVubGVzcyB0aGV5IG9wZXJhdGUgb3ZlciBVU0Igb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNpbmNlIGBpY2VgIGlzIGEgUENJIGRyaXZlciwgdGhhdCYjMzk7cyBhbm90aGVyIHN0cmlrZSBhZ2FpbnN0IGl0LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IHRoZSBjb2RlIGl0c2VsZi4gTGV0IG1lIGNoZWNrIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY2AgdG8gY29uZmlybSBpdCYjMzk7cyBQQ0ktYmFzZWQgYW5kIHRoZXJlZm9yZSB1bmxpa2VseSB0byBiZSBmdXp6YWJsZSBpbiB0aGUgYWJzZW5jZSBvZiBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODY4PXN0YXRpYyBpbnQgX19pbml0IGljZV9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4OTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODkxOlx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpY2VfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4OTItXHRpZiAoc3RhdHVzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBQQ0kgRHJpdmVyIElkZW50aWZpY2F0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCAmIzM0O2ljZSwmIzM0OyB0aGF0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0JiMzOTtzIGtub3duIHRvIGJlIGEgUENJIGRyaXZlci4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0LCBpcyB0byBjaGVjayBgaWRwZmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRpZXMgaW4uIEnigJlsbCBzZWUgaWYgdGhpcyBpcyByZWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBOYXR1cmUgb2YgYGlkcGZgKioKCk9rYXksIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBpZHBmYCB0aGluZy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBpdCB3YXMgbGlrZWx5IHNvbWV0aGluZyBzcGVjaWZpYywgbWF5YmUgYSB1c2VyLWxldmVsIHRvb2wuIEJ1dCB0aGVuIGl0IGhpdCBtZSDigJMgaGFuZyBvbiBhIHNlY29uZC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSB3YXkgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYGlkcGZgICpjb3VsZCogdmVyeSB3ZWxsIGJlIGFub3RoZXIgUENJIGRyaXZlciwgb3IgYXQgbGVhc3Qgc29tZSBraW5kIG9mIGF1eGlsaWFyeSBkcml2ZXIgY29tcG9uZW50IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBidXMuIEl0IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBjb25maXJtIGl0cyByb2xlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zIHdpdGhvdXQgcHJvcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpZHBmYCBSZWdpc3RyeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHRoZSBgaWRwZmAgaWRlbnRpZmllciBjdXJyZW50bHkgcmVwcmVzZW50cyB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgZXN0YWJsaXNoZWQgc3RhbmRhcmQgb3IgY29tcG9uZW50LCBsaWtlbHkgaW4gYSBmaWVsZCBsaWtlIGRpZ2l0YWwgcHVibGlzaGluZywgYWNjZXNzaWJpbGl0eSwgb3IgcGVyaGFwcyBhIG1vcmUgb2JzY3VyZSBhcmVhIEkgaGF2ZW4mIzM5O3QgaW1tZWRpYXRlbHkgY2F0ZWdvcml6ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBjb25uZWN0ZWQgd2l0aCB0aGUgSW50ZXJuYXRpb25hbCBEaWdpdGFsIFB1Ymxpc2hpbmcgRm9ydW0gKElEUEYpLCBnaXZlbiB0aGUgYWNyb255beKAmXMgY29tcG9zaXRpb24sIGJ1dCBJIHNob3VsZG4mIzM5O3QgcmVseSBvbiBhc3N1bXB0aW9ucywgYW5kIEkgbmVlZCB0byBjb25maXJtIGl0cyBjdXJyZW50IGFzc29jaWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCByZWdpc3RyaWVzLCBkYXRhYmFzZXMsIG9yIGRvY3VtZW50YXRpb24gdG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRoaXMgY291bGQgaW52b2x2ZSBjaGVja2luZyBvbmxpbmUgc291cmNlcywgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIHBlcmhhcHMgZXZlbiBxdWVyeWluZyB0aGUgcmVsZXZhbnQgQVBJIGlmIG9uZSBleGlzdHMuIERldGVybWluaW5nIHRoZSBzcGVjaWZpYyBtYXBwaW5nIG9mIGBpZHBmYCBpcyB0aGUgaW1tZWRpYXRlIG9iamVjdGl2ZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zODI9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcGZfcGNpX3RibCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM6Mzg0OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzg1LVx0Lm5hbWVcdFx0XHQ9IEtCVUlMRF9NT0ROQU1FLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzkxLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM5Mjptb2R1bGVfcGNpX2RyaXZlcihpZHBmX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDkKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVW5mdXp6YWJsZSBDb2RlIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYGljZWAgYW5kIGBpZHBmYCBkcml2ZXJzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgSW50ZWwmIzM5O3MgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMsIHRob3NlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycy4mIzM0OyBBbmQgdGhlbiBpdCBjbGlja3M6IHRoZXNlIGRyaXZlcnMgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGV5JiMzOTtyZSBub3QgZ29pbmcgdG8gZnVuY3Rpb24gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhcmUsIGluIHByYWN0aWNhbCB0ZXJtcywgdW5yZWFjaGFibGUgZm9yIGFueSBraW5kIG9mIGZ1enppbmcgd2l0aGluIGEgdHlwaWNhbCB2aXJ0dWFsIHNldHVwLiBJ4oCZbSBnb2luZyB0byBoYXZlIHRvIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9ZmFsc2UuIEl0JiMzOTtzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIGV2ZW4gY29uc2lkZXIgaXQuIFRoZSBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgdG8gZXZlbiB0ZXN0IHRoaXMgaXMgdmVyeSBuaWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGljZWAgYW5kIGBpZHBmYCBkcml2ZXJzLCB3aGljaCBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXJzIGZvciBJbnRlbCBFODAwIHNlcmllcyBhbmQgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBDZW50ZXIgRnVuY3Rpb24gZGV2aWNlcy4gVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWNlYCBhbmQgYGlkcGZgIGRyaXZlcnMsIHdoaWNoIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlcnMgZm9yIEludGVsIEU4MDAgc2VyaWVzIGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkZXZpY2VzLiBUaGVzZSByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjAwLjM0NjA1NjMzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjAyMjAzMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzowMC4zNDYwNjMwMDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDA3NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcxNGUxZWQxODkzYWJlZGIzNzBlMDI5ZTE1YWNjZGY1YzIyMjkyODlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDA6NDI6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXFxuaW5kZXggMjJiN2Q4ZTZiZDllOC4uOGMyYjYzZWVmODJiZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcXG5AQCAtMTg5MCwyNyArMTg5MCwxOCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9zbmFwc2hvdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fYmxrczsgaSsrKSB7XFxuIFxcdFxcdHUzMiByZWFkX3N6ID0gbWluX3QodTMyLCBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLCBsZWZ0KTtcXG4tXFxuLVxcdFxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0XFx0aWYgKHN0YXR1cykge1xcbi1cXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcImljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHN0YXR1cywgaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXFxcIik7XFxuLVxcdFxcdFxcdHZmcmVlKG52bV9kYXRhKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdFxcdH1cXG4rXFx0XFx0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcXG4gXFxuIFxcdFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBpICogSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cmVhZF9hcV9lcnIpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIFxcdFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiaWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHJlYWRfc3osIHN0YXR1cywgaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XFxuK1xcdFxcdFxcdFxcdHJlYWRfc3osIHN0YXR1cywgcmVhZF9hcV9lcnIpO1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXFxcIik7XFxuLVxcdFxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcdFxcdFxcdHZmcmVlKG52bV9kYXRhKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4gXFxuIFxcdFxcdHRtcCArPSByZWFkX3N6O1xcbiBcXHRcXHRsZWZ0IC09IHJlYWRfc3o7XFxuQEAgLTE5NDMsNiArMTkzNCw3IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4gXFx0XFx0XFx0XFx0dTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKVxcbiB7XFxuK1xcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gZGV2bGlua19wcml2KGRldmxpbmspO1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2VfcGZfdG9fZGV2KHBmKTtcXG4gXFx0c3RydWN0IGljZV9odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbkBAIC0xOTY2LDI0ICsxOTU4LDE0IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcbi1cXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdGlmIChzdGF0dXMpIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcXHUwMDI2c2l6ZSwgZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcXG4rXFx0XFx0XFx0XFx0ICAgcmVhZF9zaGFkb3dfcmFtLCBcXHUwMDI2cmVhZF9hcV9lcnIpO1xcbiBcXHRpZiAoc3RhdHVzKSB7XFxuIFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiaWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHNpemUsIHN0YXR1cywgaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XFxuK1xcdFxcdFxcdHNpemUsIHN0YXR1cywgcmVhZF9hcV9lcnIpO1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXFxcIik7XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuLVxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuaW5kZXggN2ViMzgwYmU3ZWQyNy4uYmY5YTgyMWM1NDNiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuQEAgLTg1Myw2ICs4NTMsNyBAQCBzdGF0aWMgaW50XFxuIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxcbiBcXHQgICAgICAgdTggKmJ5dGVzKVxcbiB7XFxuK1xcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG5AQCAtODY5LDI0ICs4NzAsMTUgQEAgaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCwgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tXFx1MDAzZW9mZnNldCwgXFx1MDAyNmVlcHJvbS1cXHUwMDNlbGVuLCBidWYsXFxuLVxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0ZmFsc2UsIFxcdTAwMjZyZWFkX2FxX2Vycik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCwgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4tXFx0XFx0Z290byByZWxlYXNlO1xcbitcXHRcXHRcXHRyZXQsIGxpYmllX2FxX3N0cihyZWFkX2FxX2VycikpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0bWVtY3B5KGJ5dGVzLCBidWYsIGVlcHJvbS1cXHUwMDNlbGVuKTtcXG4tcmVsZWFzZTpcXG4tXFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4gb3V0OlxcbiBcXHRrZnJlZShidWYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbmluZGV4IDhjZGM0ZmRhODllOTcuLjllMDhkYjM3NmQzZDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5AQCAtMjg3MSw2ICsyODcxLDkgQEAgaW50IGljZV92c2lfcmVsZWFzZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0cGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuIFxcbitcXHRpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKVxcbitcXHRcXHRpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcXG4rXFxuIFxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRpY2VfcnNzX2NsZWFuKHZzaSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xcbmluZGV4IDdlMTg3YTgwNGRmYTEuLjIxZjNiNjE1ZGJiZjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcXG5AQCAtNTMsMTcgKzUzLDI3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxcbiAgKiBAbGVuZ3RoOiAoaW4pIG51bWJlciBvZiBieXRlcyB0byByZWFkOyAob3V0KSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZFxcbiAgKiBAZGF0YTogYnVmZmVyIHRvIHJldHVybiBkYXRhIGluIChzaXplZCB0byBmaXQgdGhlIHNwZWNpZmllZCBsZW5ndGgpXFxuICAqIEByZWFkX3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2YgTlZNXFxuKyAqIEByZWFkX2FxX2VycjogaWYgbm9uLU5VTEwsIHJlY2VpdmVzIHRoZSBBUSBlcnJvciBzdGF0dXMgb2YgdGhlIGZhaWxpbmcgcmVhZFxcbiAgKlxcbiAgKiBSZWFkcyBhIHBvcnRpb24gb2YgdGhlIE5WTSwgYXMgYSBmbGF0IG1lbW9yeSBzcGFjZS4gVGhpcyBmdW5jdGlvbiBjb3JyZWN0bHlcXG4gICogYnJlYWtzIHJlYWQgcmVxdWVzdHMgYWNyb3NzIFNoYWRvdyBSQU0gc2VjdG9ycyBhbmQgZW5zdXJlcyB0aGF0IG5vIHNpbmdsZVxcbiAgKiByZWFkIHJlcXVlc3QgZXhjZWVkcyB0aGUgbWF4aW11bSA0S0IgcmVhZCBmb3IgYSBzaW5nbGUgQWRtaW5RIGNvbW1hbmQuXFxuICAqXFxuKyAqIEZXIGNhcHMgdGhlIHJlYWQgbG9jayBhdCBhIG1heGltdW0gb2YgMzAwMG1zLCBzbyBhIHJlYWQgc3Bhbm5pbmcgbXVsdGlwbGVcXG4rICogNEtCIHNlY3RvcnMgY2Fubm90IGJlIGRvbmUgdW5kZXIgYSBzaW5nbGUgbG9jayB3aXRob3V0IEZXIHJlY2xhaW1pbmcgaXRcXG4rICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXFxuKyAqIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxcbisgKlxcbisgKiBTaW5jZSBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXNcXG4rICogaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cywgY2FsbGVycyB0aGF0IG5lZWQgdGhlIGZhaWxpbmcgcmVhZCdzIEFRIGVycm9yXFxuKyAqIG11c3QgdXNlIEByZWFkX2FxX2VyciByYXRoZXIgdGhhbiBpbnNwZWN0aW5nIHNxX2xhc3Rfc3RhdHVzIGFmdGVyd2FyZHMuXFxuKyAqXFxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXFxuICAqL1xcbiBpbnRcXG4gaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG4tXFx0XFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSlcXG4rXFx0XFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKVxcbiB7XFxuIFxcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XFxuIFxcdHUzMiBieXRlc19yZWFkID0gMDtcXG5AQCAtOTIsMTIgKzEwMiwzMCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxcbiBcXG4gXFx0XFx0bGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgKyByZWFkX3NpemUgXFx1MDAzYyBpbmxlbik7XFxuIFxcbitcXHRcXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwgXFxcIkZhaWxlZCB0byBhY3F1aXJlIE5WTSBsb2NrLCBlcnIgJWQgYXFfZXJyICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgIHN0YXR1cywgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXFxuIFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcXG4gXFx0XFx0XFx0XFx0XFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0LyogQ2FwdHVyZSB0aGUgcmVhZCdzIEFRIGVycm9yIGJlZm9yZSBpY2VfcmVsZWFzZV9udm0oKVxcbitcXHRcXHRcXHQgKiBpc3N1ZXMgaXRzIG93biBBUSBjb21tYW5kIGFuZCBvdmVyd3JpdGVzXFxuK1xcdFxcdFxcdCAqIHNxX2xhc3Rfc3RhdHVzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHJlYWRfYXFfZXJyKVxcbitcXHRcXHRcXHRcXHQqcmVhZF9hcV9lcnIgPSBody1cXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzO1xcbitcXG4rXFx0XFx0XFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRcXHRieXRlc19yZWFkICs9IHJlYWRfc2l6ZTtcXG4gXFx0XFx0b2Zmc2V0ICs9IHJlYWRfc2l6ZTtcXG5AQCAtMTc3LDE0ICsyMDUsMTkgQEAgaW50IGljZV9hcV9lcmFzZV9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZClcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9yZWFkX3NyX3dvcmRfYXEgLSBSZWFkcyBTaGFkb3cgUkFNIHZpYSBBUVxcbisgKiBpY2VfcmVhZF9zcl93b3JkIC0gUmVhZHMgU2hhZG93IFJBTSB3b3JkXFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXFxuICAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxcbiAgKlxcbiAgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS5cXG4rICpcXG4rICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKClcXG4rICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cXG4rICpcXG4rICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgKi9cXG4tc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuK2ludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuIHtcXG4gXFx0dTMyIGJ5dGVzID0gc2l6ZW9mKHUxNik7XFxuIFxcdF9fbGUxNiBkYXRhX2xvY2FsO1xcbkBAIC0xOTQsNyArMjI3LDcgQEAgc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuIFxcdCAqIFNoYWRvdyBSQU0gc2VjdG9yIHJlc3RyaWN0aW9ucyBuZWNlc3Nhcnkgd2hlbiByZWFkaW5nIGZyb20gdGhlIE5WTS5cXG4gXFx0ICovXFxuIFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQgKiBzaXplb2YodTE2KSwgXFx1MDAyNmJ5dGVzLFxcbi1cXHRcXHRcXHRcXHQgICAoX19mb3JjZSB1OCAqKVxcdTAwMjZkYXRhX2xvY2FsLCB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0ICAgKF9fZm9yY2UgdTggKilcXHUwMDI2ZGF0YV9sb2NhbCwgdHJ1ZSwgTlVMTCk7XFxuIFxcdGlmIChzdGF0dXMpXFxuIFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcbkBAIC0zMzAsMTMgKzM2Myw4IEBAIGljZV9yZWFkX2ZsYXNoX21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSxcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4tXFxuLVxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCArIG9mZnNldCwgXFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xcbi1cXG4tXFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4rXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICsgb2Zmc2V0LCBcXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuIFxcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuQEAgLTQxOCwyNyArNDQ2LDYgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXRcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxcbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbi0gKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIFNoYWRvdyBSQU0gd29yZCB0byByZWFkICgweDAwMDAwMCAtIDB4MDAxRkZGKVxcbi0gKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU1cXG4tICpcXG4tICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgdGhlIGljZV9yZWFkX3NyX3dvcmRfYXEuXFxuLSAqL1xcbi1pbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxcbi17XFxuLVxcdGludCBzdGF0dXM7XFxuLVxcbi1cXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdGlmICghc3RhdHVzKSB7XFxuLVxcdFxcdHN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBzdGF0dXM7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2IC0gUmVhZHMgc3ViIG1vZHVsZSBUTFYgZnJvbSBOVk0gUEZBXFxuICAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtODU2LDIwICs4NjMsMTggQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXRcXG4gc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG4ge1xcbiBcXHR1MzIgbWluX3NpemUgPSAwLCBtYXhfc2l6ZSA9IElDRV9BUUNfTlZNX01BWF9PRkZTRVQgKyAxO1xcbi1cXHRpbnQgc3RhdHVzO1xcbi1cXG4tXFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbi1cXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRyZXR1cm4gc3RhdHVzO1xcbitcXHRpbnQgc3RhdHVzID0gMDtcXG4gXFxuIFxcdHdoaWxlICgobWF4X3NpemUgLSBtaW5fc2l6ZSkgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XFxuIFxcdFxcdHUzMiBvZmZzZXQgPSAobWF4X3NpemUgKyBtaW5fc2l6ZSkgLyAyO1xcbiBcXHRcXHR1MzIgbGVuID0gMTtcXG4gXFx0XFx0dTggZGF0YTtcXG4gXFxuLVxcdFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFxcdTAwMjZsZW4sIFxcdTAwMjZkYXRhLCBmYWxzZSk7XFxuK1xcdFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFxcdTAwMjZsZW4sIFxcdTAwMjZkYXRhLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlYWRfYXFfZXJyKTtcXG4gXFx0XFx0aWYgKHN0YXR1cyA9PSAtRUlPIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBody1cXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xcbitcXHRcXHQgICAgcmVhZF9hcV9lcnIgPT0gTElCSUVfQVFfUkNfRUlOVkFMKSB7XFxuIFxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFxcXCIlczogTmV3IHVwcGVyIGJvdW5kIG9mICV1IGJ5dGVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgIF9fZnVuY19fLCBvZmZzZXQpO1xcbiBcXHRcXHRcXHRzdGF0dXMgPSAwO1xcbkBAIC04ODAsNyArODg1LDcgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gXFx0XFx0XFx0bWluX3NpemUgPSBvZmZzZXQ7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cXG4tXFx0XFx0XFx0Z290byBlcnJfcmVhZF9mbGF0X252bTtcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC04ODgsOSArODkzLDYgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gXFxuIFxcdGh3LVxcdTAwM2VmbGFzaC5mbGFzaF9zaXplID0gbWF4X3NpemU7XFxuIFxcbi1lcnJfcmVhZF9mbGF0X252bTpcXG4tXFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4tXFxuIFxcdHJldHVybiBzdGF0dXM7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oXFxuaW5kZXggNjNjZGM2YmRhYzU4OS4uZTFkMWExMWY1Y2E0MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxcbkBAIC0xOSw3ICsxOSw3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxcbiBcXHRcXHQgICAgYm9vbCByZWFkX3NoYWRvd19yYW0sIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTtcXG4gaW50XFxuIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsXFxuLVxcdFxcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0pO1xcbitcXHRcXHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtLCBlbnVtIGxpYmllX2FxX2VyciAqcmVhZF9hcV9lcnIpO1xcbiBpbnRcXG4gaWNlX2dldF9wZmFfbW9kdWxlX3RsdihzdHJ1Y3QgaWNlX2h3ICpodywgdTE2ICptb2R1bGVfdGx2LCB1MTYgKm1vZHVsZV90bHZfbGVuLFxcbiBcXHRcXHQgICAgICAgdTE2IG1vZHVsZV90eXBlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5pbmRleCA4ZTVmOTc4MzU5NTRjLi4zYTQxYzcxMWU3NTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuQEAgLTQ4MDgsMTUgKzQ4MDgsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxcbiBcXHRcXHRcXHRcXHQgICAgICAgIUZJRUxEX0dFVChSRUdfTExfUFJPWFlfSF9FWEVDLCB2YWwpLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgMTAsIFJFR19MTF9QUk9YWV9IX1RJTUVPVVRfVVMsIGZhbHNlLCBodyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIFJFR19MTF9QUk9YWV9IKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbi1cXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00ODM3LDggKzQ4MzQsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxcbiBcXHR1OCB0bXJfaWR4O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKGh3LVxcdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSlcXG4tXFx0XFx0cmV0dXJuIGljZV9wdHBfcHJlcF9waHlfYWRqX2xsX2U4MTAoaHcsIGFkaik7XFxuK1xcdGlmIChody1cXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpIHtcXG4rXFx0XFx0ZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9hZGpfbGxfZTgxMChodywgYWRqKTtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiTEwgYWRqIHRpbWVkIG91dCwgZmFsbGluZyBiYWNrIHRvIFNCUVxcXFxuXFxcIik7XFxuK1xcdH1cXG4gXFxuIFxcdHRtcl9pZHggPSBody1cXHUwMDNlZnVuY19jYXBzLnRzX2Z1bmNfaW5mby50bXJfaW5kZXhfb3duZWQ7XFxuIFxcbkBAIC00OTAxLDE1ICs0OTAyLDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTY0IGluY3ZhbClcXG4gXFx0XFx0XFx0XFx0ICAgICAgICFGSUVMRF9HRVQoUkVHX0xMX1BST1hZX0hfRVhFQywgdmFsKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBSRUdfTExfUFJPWFlfSCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBwcmVwYXJlIFBIWSB0aW1lciBpbmNyZW1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbi1cXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ5MjcsOCArNDkyNSwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHU2NCBpbmN2YWwpXFxuIFxcdHU4IHRtcl9pZHg7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoaHctXFx1MDAzZWRldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKVxcbi1cXHRcXHRyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTtcXG4rXFx0aWYgKGh3LVxcdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkge1xcbitcXHRcXHRlcnIgPSBpY2VfcHRwX3ByZXBfcGh5X2luY3ZhbF9sbF9lODEwKGh3LCBpbmN2YWwpO1xcbitcXHRcXHRpZiAoZXJyICE9IC1FVElNRURPVVQpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJMTCBpbmN2YWwgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXFxcXG5cXFwiKTtcXG4rXFx0fVxcbiBcXG4gXFx0dG1yX2lkeCA9IGh3LVxcdTAwM2VmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDtcXG4gXFx0bG93ID0gbG93ZXJfMzJfYml0cyhpbmN2YWwpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xcbmluZGV4IGM3MjRkNDI5YTdhYTkuLjkxY2E3NWU0NTQ2MzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5AQCAtMjQwOCw3ICsyNDA4LDcgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICpwYXJhbXMsXFxuIFxcdFxcdFxcdFxcdCAgICB1MTYgdGRfY21kLCB1MTYgc2l6ZSlcXG4ge1xcbi1cXHQqKHUzMiAqKVxcdTAwMjZkZXNjLVxcdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cXHUwMDNlZHR5cGUgfCB0ZF9jbWQpO1xcbitcXHQqKF9fbGUzMiAqKVxcdTAwMjZkZXNjLVxcdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy1cXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcXG4gXFx0ZGVzYy1cXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xcbiBcXHRkZXNjLVxcdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXFx1MDAzZWNvbXBsX3RhZyk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NDM6MDAuODQwOTM1ODQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI3MDczMDk0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWNlYCBhbmQgYGlkcGZgIGRyaXZlcnMsIHdoaWNoIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlcnMgZm9yIEludGVsIEU4MDAgc2VyaWVzIGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkZXZpY2VzLiBUaGVzZSByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzE0ZTFlZDE4OTNhYmVkYjM3MGUwMjllMTVhY2NkZjVjMjIyOTI4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjQyOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5pbmRleCAyMmI3ZDhlNmJkOWU4Li44YzJiNjNlZWY4MmJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcbkBAIC0xODkwLDI3ICsxODkwLDE4IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYmxrczsgaSsrKSB7XG4gXHRcdHUzMiByZWFkX3N6ID0gbWluX3QodTMyLCBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLCBsZWZ0KTtcbi1cbi1cdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0XHRpZiAoc3RhdHVzKSB7XG4tXHRcdFx0ZGV2X2RiZyhkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVwiKTtcbi1cdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbitcdFx0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcbiBcbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4rXHRcdFx0XHRcdCAgIFx1MDAyNnJlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZyZWFkX2FxX2Vycik7XG4gXHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRkZXZfZGJnKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdFx0cmVhZF9zeiwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuK1x0XHRcdFx0cmVhZF9zeiwgc3RhdHVzLCByZWFkX2FxX2Vycik7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcIik7XG4tXHRcdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcbiBcdFx0dG1wICs9IHJlYWRfc3o7XG4gXHRcdGxlZnQgLT0gcmVhZF9zejtcbkBAIC0xOTQzLDYgKzE5MzQsNyBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuIFx0XHRcdFx0dTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKVxuIHtcbitcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbkBAIC0xOTY2LDI0ICsxOTU4LDE0IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cykge1xuLVx0XHRkZXZfZGJnKGRldiwgXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxuXCIsXG4tXHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIkZhaWxlZCB0byBhY3F1aXJlIE5WTSBzZW1hcGhvcmVcIik7XG4tXHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuIFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcdTAwMjZzaXplLCBkYXRhLFxuLVx0XHRcdFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcbitcdFx0XHRcdCAgIHJlYWRfc2hhZG93X3JhbSwgXHUwMDI2cmVhZF9hcV9lcnIpO1xuIFx0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZGJnKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdHNpemUsIHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbitcdFx0XHRzaXplLCBzdGF0dXMsIHJlYWRfYXFfZXJyKTtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcIik7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5pbmRleCA3ZWIzODBiZTdlZDI3Li5iZjlhODIxYzU0M2I3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5AQCAtODUzLDYgKzg1Myw3IEBAIHN0YXRpYyBpbnRcbiBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiBcdCAgICAgICB1OCAqYnl0ZXMpXG4ge1xuK1x0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihuZXRkZXYpO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbkBAIC04NjksMjQgKzg3MCwxNSBAQCBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xcblwiLFxuLVx0XHRcdHJldCwgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tXHUwMDNlb2Zmc2V0LCBcdTAwMjZlZXByb20tXHUwMDNlbGVuLCBidWYsXG4tXHRcdFx0XHRmYWxzZSk7XG4rXHRcdFx0XHRmYWxzZSwgXHUwMDI2cmVhZF9hcV9lcnIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXG5cIixcbi1cdFx0XHRyZXQsIGxpYmllX2FxX3N0cihody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcbi1cdFx0Z290byByZWxlYXNlO1xuK1x0XHRcdHJldCwgbGliaWVfYXFfc3RyKHJlYWRfYXFfZXJyKSk7XG4rXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0bWVtY3B5KGJ5dGVzLCBidWYsIGVlcHJvbS1cdTAwM2VsZW4pO1xuLXJlbGVhc2U6XG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIG91dDpcbiBcdGtmcmVlKGJ1Zik7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5pbmRleCA4Y2RjNGZkYTg5ZTk3Li45ZTA4ZGIzNzZkM2QwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuQEAgLTI4NzEsNiArMjg3MSw5IEBAIGludCBpY2VfdnNpX3JlbGVhc2Uoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHRwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFxuK1x0aWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSlcbitcdFx0aWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7XG4rXG4gXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRpY2VfcnNzX2NsZWFuKHZzaSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbmluZGV4IDdlMTg3YTgwNGRmYTEuLjIxZjNiNjE1ZGJiZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXG5AQCAtNTMsMTcgKzUzLDI3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuICAqIEBsZW5ndGg6IChpbikgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQ7IChvdXQpIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkXG4gICogQGRhdGE6IGJ1ZmZlciB0byByZXR1cm4gZGF0YSBpbiAoc2l6ZWQgdG8gZml0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoKVxuICAqIEByZWFkX3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2YgTlZNXG4rICogQHJlYWRfYXFfZXJyOiBpZiBub24tTlVMTCwgcmVjZWl2ZXMgdGhlIEFRIGVycm9yIHN0YXR1cyBvZiB0aGUgZmFpbGluZyByZWFkXG4gICpcbiAgKiBSZWFkcyBhIHBvcnRpb24gb2YgdGhlIE5WTSwgYXMgYSBmbGF0IG1lbW9yeSBzcGFjZS4gVGhpcyBmdW5jdGlvbiBjb3JyZWN0bHlcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXG4gICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtCIHJlYWQgZm9yIGEgc2luZ2xlIEFkbWluUSBjb21tYW5kLlxuICAqXG4rICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZVxuKyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0XG4rICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXG4rICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXG4rICpcbisgKiBTaW5jZSBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXNcbisgKiBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMsIGNhbGxlcnMgdGhhdCBuZWVkIHRoZSBmYWlsaW5nIHJlYWQncyBBUSBlcnJvclxuKyAqIG11c3QgdXNlIEByZWFkX2FxX2VyciByYXRoZXIgdGhhbiBpbnNwZWN0aW5nIHNxX2xhc3Rfc3RhdHVzIGFmdGVyd2FyZHMuXG4rICpcbiAgKiBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgb24gZmFpbHVyZS4gTm90ZSB0aGF0IHRoZSBkYXRhIHBvaW50ZXIgbWF5IGJlXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXG4gICovXG4gaW50XG4gaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcbi1cdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSlcbitcdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKVxuIHtcbiBcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XG4gXHR1MzIgYnl0ZXNfcmVhZCA9IDA7XG5AQCAtOTIsMTIgKzEwMiwzMCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFxuIFx0XHRsYXN0X2NtZCA9ICEoYnl0ZXNfcmVhZCArIHJlYWRfc2l6ZSBcdTAwM2MgaW5sZW4pO1xuIFxuK1x0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfTlZNLCBcIkZhaWxlZCB0byBhY3F1aXJlIE5WTSBsb2NrLCBlcnIgJWQgYXFfZXJyICVzXFxuXCIsXG4rXHRcdFx0XHQgIHN0YXR1cywgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4gXHRcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXG4gXHRcdFx0XHRcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcbiBcdFx0XHRcdFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcbiBcdFx0XHRcdFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XG4tXHRcdGlmIChzdGF0dXMpXG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHQvKiBDYXB0dXJlIHRoZSByZWFkJ3MgQVEgZXJyb3IgYmVmb3JlIGljZV9yZWxlYXNlX252bSgpXG4rXHRcdFx0ICogaXNzdWVzIGl0cyBvd24gQVEgY29tbWFuZCBhbmQgb3ZlcndyaXRlc1xuK1x0XHRcdCAqIHNxX2xhc3Rfc3RhdHVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChyZWFkX2FxX2VycilcbitcdFx0XHRcdCpyZWFkX2FxX2VyciA9IGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cztcbitcbitcdFx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdGJ5dGVzX3JlYWQgKz0gcmVhZF9zaXplO1xuIFx0XHRvZmZzZXQgKz0gcmVhZF9zaXplO1xuQEAgLTE3NywxNCArMjA1LDE5IEBAIGludCBpY2VfYXFfZXJhc2VfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgc3RydWN0IGljZV9zcV9jZCAqY2QpXG4gfVxuIFxuIC8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmRfYXEgLSBSZWFkcyBTaGFkb3cgUkFNIHZpYSBBUVxuKyAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmRcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXG4gICogQGRhdGE6IHdvcmQgcmVhZCBmcm9tIHRoZSBTaGFkb3cgUkFNXG4gICpcbiAgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS5cbisgKlxuKyAqIFRoZSBOVk0gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW50ZXJuYWxseSBieSBpY2VfcmVhZF9mbGF0X252bSgpXG4rICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cbisgKlxuKyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGljZV9yZWFkX3NyX3dvcmRfYXEoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcbitpbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuIHtcbiBcdHUzMiBieXRlcyA9IHNpemVvZih1MTYpO1xuIFx0X19sZTE2IGRhdGFfbG9jYWw7XG5AQCAtMTk0LDcgKzIyNyw3IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfc3Jfd29yZF9hcShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuIFx0ICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLlxuIFx0ICovXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksIFx1MDAyNmJ5dGVzLFxuLVx0XHRcdFx0ICAgKF9fZm9yY2UgdTggKilcdTAwMjZkYXRhX2xvY2FsLCB0cnVlKTtcbitcdFx0XHRcdCAgIChfX2ZvcmNlIHU4ICopXHUwMDI2ZGF0YV9sb2NhbCwgdHJ1ZSwgTlVMTCk7XG4gXHRpZiAoc3RhdHVzKVxuIFx0XHRyZXR1cm4gc3RhdHVzO1xuIFxuQEAgLTMzMCwxMyArMzYzLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpXG4tXHRcdHJldHVybiBzdGF0dXM7XG4tXG4tXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgc3RhcnQgKyBvZmZzZXQsIFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xuLVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbitcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCArIG9mZnNldCwgXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSxcbitcdFx0XHRcdCAgIE5VTEwpO1xuIFxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDE4LDI3ICs0NDYsNiBAQCBpY2VfcmVhZF9uZXRsaXN0X21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTMyIG9mZnNldFxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4tLyoqXG4tICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZCBhbmQgYWNxdWlyZSBOVk0gaWYgbmVjZXNzYXJ5XG4tICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbi0gKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIFNoYWRvdyBSQU0gd29yZCB0byByZWFkICgweDAwMDAwMCAtIDB4MDAxRkZGKVxuLSAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxuLSAqXG4tICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgdGhlIGljZV9yZWFkX3NyX3dvcmRfYXEuXG4tICovXG4taW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcbi17XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKCFzdGF0dXMpIHtcbi1cdFx0c3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTtcbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cdH1cbi1cbi1cdHJldHVybiBzdGF0dXM7XG4tfVxuLVxuIC8qKlxuICAqIGljZV9nZXRfcGZhX21vZHVsZV90bHYgLSBSZWFkcyBzdWIgbW9kdWxlIFRMViBmcm9tIE5WTSBQRkFcbiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtODU2LDIwICs4NjMsMTggQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXRcbiBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIHtcbiBcdHUzMiBtaW5fc2l6ZSA9IDAsIG1heF9zaXplID0gSUNFX0FRQ19OVk1fTUFYX09GRlNFVCArIDE7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbitcdGludCBzdGF0dXMgPSAwO1xuIFxuIFx0d2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSBcdTAwM2UgMSkge1xuK1x0XHRlbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LO1xuIFx0XHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICsgbWluX3NpemUpIC8gMjtcbiBcdFx0dTMyIGxlbiA9IDE7XG4gXHRcdHU4IGRhdGE7XG4gXG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFx1MDAyNmxlbiwgXHUwMDI2ZGF0YSwgZmFsc2UpO1xuK1x0XHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0LCBcdTAwMjZsZW4sIFx1MDAyNmRhdGEsIGZhbHNlLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZyZWFkX2FxX2Vycik7XG4gXHRcdGlmIChzdGF0dXMgPT0gLUVJTyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyA9PSBMSUJJRV9BUV9SQ19FSU5WQUwpIHtcbitcdFx0ICAgIHJlYWRfYXFfZXJyID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xuIFx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFwiJXM6IE5ldyB1cHBlciBib3VuZCBvZiAldSBieXRlc1xcblwiLFxuIFx0XHRcdFx0ICBfX2Z1bmNfXywgb2Zmc2V0KTtcbiBcdFx0XHRzdGF0dXMgPSAwO1xuQEAgLTg4MCw3ICs4ODUsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdG1pbl9zaXplID0gb2Zmc2V0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cbi1cdFx0XHRnb3RvIGVycl9yZWFkX2ZsYXRfbnZtO1xuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC04ODgsOSArODkzLDYgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcbiBcbiBcdGh3LVx1MDAzZWZsYXNoLmZsYXNoX3NpemUgPSBtYXhfc2l6ZTtcbiBcbi1lcnJfcmVhZF9mbGF0X252bTpcbi1cdGljZV9yZWxlYXNlX252bShodyk7XG4tXG4gXHRyZXR1cm4gc3RhdHVzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxuaW5kZXggNjNjZGM2YmRhYzU4OS4uZTFkMWExMWY1Y2E0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmhcbkBAIC0xOSw3ICsxOSw3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuIFx0XHQgICAgYm9vbCByZWFkX3NoYWRvd19yYW0sIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTtcbiBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuLVx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKTtcbitcdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKTtcbiBpbnRcbiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2KHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgKm1vZHVsZV90bHYsIHUxNiAqbW9kdWxlX3Rsdl9sZW4sXG4gXHRcdCAgICAgICB1MTYgbW9kdWxlX3R5cGUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCA4ZTVmOTc4MzU5NTRjLi4zYTQxYzcxMWU3NTFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTQ4MDgsMTUgKzQ4MDgsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxuIFx0XHRcdFx0ICAgICAgICFGSUVMRF9HRVQoUkVHX0xMX1BST1hZX0hfRVhFQywgdmFsKSxcbiBcdFx0XHRcdCAgICAgICAxMCwgUkVHX0xMX1BST1hZX0hfVElNRU9VVF9VUywgZmFsc2UsIGh3LFxuIFx0XHRcdFx0ICAgICAgIFJFR19MTF9QUk9YWV9IKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgYWRqdXN0bWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXG5cIik7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwYXJhbXMtXHUwMDNlYXRxYmFsX3dxLmxvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBhcmFtcy1cdTAwM2VhdHFiYWxfd3EubG9jayk7XG4gXG4tXHRyZXR1cm4gMDtcbitcdGlmIChlcnIpXG4rXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxuXCIpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gLyoqXG5AQCAtNDgzNyw4ICs0ODM0LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9hZGpfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgczMyIGFkailcbiBcdHU4IHRtcl9pZHg7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGh3LVx1MDAzZWRldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKVxuLVx0XHRyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9hZGpfbGxfZTgxMChodywgYWRqKTtcbitcdGlmIChody1cdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkge1xuK1x0XHRlcnIgPSBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopO1xuK1x0XHRpZiAoZXJyICE9IC1FVElNRURPVVQpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJMTCBhZGogdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXFxuXCIpO1xuK1x0fVxuIFxuIFx0dG1yX2lkeCA9IGh3LVx1MDAzZWZ1bmNfY2Fwcy50c19mdW5jX2luZm8udG1yX2luZGV4X293bmVkO1xuIFxuQEAgLTQ5MDEsMTUgKzQ5MDIsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2luY3ZhbF9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCB1NjQgaW5jdmFsKVxuIFx0XHRcdFx0ICAgICAgICFGSUVMRF9HRVQoUkVHX0xMX1BST1hZX0hfRVhFQywgdmFsKSxcbiBcdFx0XHRcdCAgICAgICAxMCwgUkVHX0xMX1BST1hZX0hfVElNRU9VVF9VUywgZmFsc2UsIGh3LFxuIFx0XHRcdFx0ICAgICAgIFJFR19MTF9QUk9YWV9IKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgaW5jcmVtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwiKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBhcmFtcy1cdTAwM2VhdHFiYWxfd3EubG9jayk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4tXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cGFyYW1zLVx1MDAzZWF0cWJhbF93cS5sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0aWYgKGVycilcbitcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgaW5jcmVtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwiKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTQ5MjcsOCArNDkyNSwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHU2NCBpbmN2YWwpXG4gXHR1OCB0bXJfaWR4O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChody1cdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSlcbi1cdFx0cmV0dXJuIGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2xsX2U4MTAoaHcsIGluY3ZhbCk7XG4rXHRpZiAoaHctXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpIHtcbitcdFx0ZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTtcbitcdFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiTEwgaW5jdmFsIHRpbWVkIG91dCwgZmFsbGluZyBiYWNrIHRvIFNCUVxcblwiKTtcbitcdH1cbiBcbiBcdHRtcl9pZHggPSBody1cdTAwM2VmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDtcbiBcdGxvdyA9IGxvd2VyXzMyX2JpdHMoaW5jdmFsKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggYzcyNGQ0MjlhN2FhOS4uOTFjYTc1ZTQ1NDYzMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbkBAIC0yNDA4LDcgKzI0MDgsNyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICpwYXJhbXMsXG4gXHRcdFx0XHQgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpXG4ge1xuLVx0Kih1MzIgKilcdTAwMjZkZXNjLVx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVx1MDAzZWR0eXBlIHwgdGRfY21kKTtcbitcdCooX19sZTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XG4gXHRkZXNjLVx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cdTAwM2Vjb21wbF90YWcpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjAwLjg0MDkzNzQ5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjM1MTc5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaCBhbmQgRnV6emFiaWxpdHkgb2YgSW50ZWwgTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRob3NlIGxvY2F0ZWQgaW4gdGhlIEludGVsIEV0aGVybmV0IGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkaXJlY3Rvcmllcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlaXIgcmVsZXZhbmNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VLiBUaGUgYGljZWAgZHJpdmVyLCBJIGtub3csIGhhbmRsZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHBoeXNpY2FsIFBDSWUgY2FyZHMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBldmVuIGVtdWxhdGVzIHRob3NlP1xuXG5SaWdodCwgdGhlIHByb21wdCBpdHNlbGYgaXMgYSBjbHVlLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoYXQgY2VydGFpbiBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGluZ3MgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLi4uIHRoZXkncmUgb3V0LiBTbywgZG9lcyB0aGF0IGFwcGx5IHRvIGBpY2VgPyBOb3BlLiBTdGFuZGFyZCBRRU1VLCBhcyBJIHJlY2FsbCwgc3RpY2tzIHRvIGVtdWxhdGluZyB0aGUgbW9yZSBjb21tb24gYWRhcHRlcnMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGBydGw4MTM5YCwgYHBjbmV0YCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBOb3csIGBpZ2JgIGlzIGVtdWxhdGVkOyB0aGF0J3MgYSBkYXRhIHBvaW50LiBCdXQgaXMgYGljZWA/IE5vLiBBbmQgYGlkcGZgPyBObywgdGhhdCdzIG5vdCBlbXVsYXRlZCBlaXRoZXIuXG5cbk9rYXksIG5leHQgcXVlc3Rpb246IGFyZSB0aGVzZSBkcml2ZXJzICpmdXp6YWJsZSo/IEdlbmVyYWxseSwgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlcnMgd2l0aG91dCBlbXVsYXRpb24gYXJlIGEgbm8tZ28gZm9yIGZ1enppbmcsIHVubGVzcyB0aGV5IG9wZXJhdGUgb3ZlciBVU0Igb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNpbmNlIGBpY2VgIGlzIGEgUENJIGRyaXZlciwgdGhhdCdzIGFub3RoZXIgc3RyaWtlIGFnYWluc3QgaXQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUgaXRzZWxmLiBMZXQgbWUgY2hlY2sgc29tZXRoaW5nIGxpa2UgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byBjb25maXJtIGl0J3MgUENJLWJhc2VkIGFuZCB0aGVyZWZvcmUgdW5saWtlbHkgdG8gYmUgZnV6emFibGUgaW4gdGhlIGFic2VuY2Ugb2YgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzowOC44NjQ0NTc0NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4Njg9c3RhdGljIGludCBfX2luaXQgaWNlX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4OTE6XFx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWNlX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg5Mi1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjA4LjkxNzM4NzM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzY3ODAwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQQ0kgRHJpdmVyIElkZW50aWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggXCJpY2UsXCIgdGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0J3Mga25vd24gdG8gYmUgYSBQQ0kgZHJpdmVyLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQsIGlzIHRvIGNoZWNrIGBpZHBmYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGllcyBpbi4gSeKAmWxsIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxMi4yOTQxNzAwNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MjQ3ODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjEyLjMzNzYwMDM4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzU4MDA1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipDb25zaWRlcmluZyB0aGUgTmF0dXJlIG9mIGBpZHBmYCoqXG5cbk9rYXksIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGlkcGZgIHRoaW5nLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGl0IHdhcyBsaWtlbHkgc29tZXRoaW5nIHNwZWNpZmljLCBtYXliZSBhIHVzZXItbGV2ZWwgdG9vbC4gQnV0IHRoZW4gaXQgaGl0IG1lIOKAkyBoYW5nIG9uIGEgc2Vjb25kLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIHdheSBpdCdzIGJlaW5nIHVzZWQsIGBpZHBmYCAqY291bGQqIHZlcnkgd2VsbCBiZSBhbm90aGVyIFBDSSBkcml2ZXIsIG9yIGF0IGxlYXN0IHNvbWUga2luZCBvZiBhdXhpbGlhcnkgZHJpdmVyIGNvbXBvbmVudCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBQQ0kgYnVzLiBJdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gY29uZmlybSBpdHMgcm9sZS4gSXQncyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zIHdpdGhvdXQgcHJvcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NDM6MTUuNDczNDAzMTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNTc5MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxNS41MTc1NjY1NDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5ODQxMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaWRwZmAgUmVnaXN0cnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgdGhlIGBpZHBmYCBpZGVudGlmaWVyIGN1cnJlbnRseSByZXByZXNlbnRzIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIHNvbWUgZXN0YWJsaXNoZWQgc3RhbmRhcmQgb3IgY29tcG9uZW50LCBsaWtlbHkgaW4gYSBmaWVsZCBsaWtlIGRpZ2l0YWwgcHVibGlzaGluZywgYWNjZXNzaWJpbGl0eSwgb3IgcGVyaGFwcyBhIG1vcmUgb2JzY3VyZSBhcmVhIEkgaGF2ZW4ndCBpbW1lZGlhdGVseSBjYXRlZ29yaXplZC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgY29ubmVjdGVkIHdpdGggdGhlIEludGVybmF0aW9uYWwgRGlnaXRhbCBQdWJsaXNoaW5nIEZvcnVtIChJRFBGKSwgZ2l2ZW4gdGhlIGFjcm9ueW3igJlzIGNvbXBvc2l0aW9uLCBidXQgSSBzaG91bGRuJ3QgcmVseSBvbiBhc3N1bXB0aW9ucywgYW5kIEkgbmVlZCB0byBjb25maXJtIGl0cyBjdXJyZW50IGFzc29jaWF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IHJlZ2lzdHJpZXMsIGRhdGFiYXNlcywgb3IgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBkZWZpbml0aXZlIGFuc3dlci4gVGhpcyBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIG9ubGluZSBzb3VyY2VzLCBzeXN0ZW0gY29uZmlndXJhdGlvbiBmaWxlcywgb3IgcGVyaGFwcyBldmVuIHF1ZXJ5aW5nIHRoZSByZWxldmFudCBBUEkgaWYgb25lIGV4aXN0cy4gRGV0ZXJtaW5pbmcgdGhlIHNwZWNpZmljIG1hcHBpbmcgb2YgYGlkcGZgIGlzIHRoZSBpbW1lZGlhdGUgb2JqZWN0aXZlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxOS4xMzc0MDk3NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzMxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zODI9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcGZfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODQ6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlkcGZfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzg1LVxcdC5uYW1lXFx0XFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzkxLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozOTI6bW9kdWxlX3BjaV9kcml2ZXIoaWRwZl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxOS4xODAxNDQ0MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODA3MzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBVbmZ1enphYmxlIENvZGUgUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2ggYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBgaWNlYCBhbmQgYGlkcGZgIGRyaXZlcnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBJbnRlbCdzIEU4MDAgc2VyaWVzIGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkZXZpY2VzLCB0aG9zZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlcnMuXCIgQW5kIHRoZW4gaXQgY2xpY2tzOiB0aGVzZSBkcml2ZXJzICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZS4gVGhleSdyZSBub3QgZ29pbmcgdG8gZnVuY3Rpb24gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoIGFyZSwgaW4gcHJhY3RpY2FsIHRlcm1zLCB1bnJlYWNoYWJsZSBmb3IgYW55IGtpbmQgb2YgZnV6emluZyB3aXRoaW4gYSB0eXBpY2FsIHZpcnR1YWwgc2V0dXAuIEnigJltIGdvaW5nIHRvIGhhdmUgdG8gbWFyayB0aGlzIGFzIFdvcnRoRnV6emluZz1mYWxzZS4gSXQncyBhIHdhc3RlIG9mIHJlc291cmNlcyB0byBldmVuIGNvbnNpZGVyIGl0LiBUaGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIHRvIGV2ZW4gdGVzdCB0aGlzIGlzIHZlcnkgbmljaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NDM6MjMuNTQ4MjIwMjQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGljZWAgYW5kIGBpZHBmYCBkcml2ZXJzLCB3aGljaCBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXJzIGZvciBJbnRlbCBFODAwIHNlcmllcyBhbmQgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBDZW50ZXIgRnVuY3Rpb24gZGV2aWNlcy4gVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjIzLjU0ODI0NzE3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow96hnf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 00:20:40 +0000 UTC FinishedAt: 2026-08-12 00:43:25 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzE0ZTFlZDE4OTNhYmVkYjM3MGUwMjllMTVhY2NkZjVjMjIyOTI4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjQyOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuaW5kZXggMjJiN2Q4ZTZiZDllOC4uOGMyYjYzZWVmODJiZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5AQCAtMTg5MCwyNyAmIzQzOzE4OTAsMTggQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHQgKi9cbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9ibGtzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgcmVhZF9zeiA9IG1pbl90KHUzMiwgSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwgbGVmdCk7XG4tXG4tXHRcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdFx0aWYgKHN0YXR1cykge1xuLVx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byBhY3F1aXJlIE5WTSBzZW1hcGhvcmVcJiMzNDspO1xuLVx0XHRcdHZmcmVlKG52bV9kYXRhKTtcbi1cdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0fVxuJiM0MztcdFx0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcbiBcbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4mIzQzO1x0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNnJlYWRfYXFfZXJyKTtcbiBcdFx0aWYgKHN0YXR1cykge1xuIFx0XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdHJlYWRfc3osIHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbiYjNDM7XHRcdFx0XHRyZWFkX3N6LCBzdGF0dXMsIHJlYWRfYXFfZXJyKTtcbiBcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcJiMzNDspO1xuLVx0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdFx0dmZyZWUobnZtX2RhdGEpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdHRtcCAmIzQzOz0gcmVhZF9zejtcbiBcdFx0bGVmdCAtPSByZWFkX3N6O1xuQEAgLTE5NDMsNiAmIzQzOzE5MzQsNyBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuIFx0XHRcdFx0dTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKVxuIHtcbiYjNDM7XHRlbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBkZXZsaW5rX3ByaXYoZGV2bGluayk7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2VfcGZfdG9fZGV2KHBmKTtcbiBcdHN0cnVjdCBpY2VfaHcgKmh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG5AQCAtMTk2NiwyNCAmIzQzOzE5NTgsMTQgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fcmVhZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcbiBcdFx0cmV0dXJuIC1FUkFOR0U7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRpZiAoc3RhdHVzKSB7XG4tXHRcdGRldl9kYmcoZGV2LCBcJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuIFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcdTAwMjZzaXplLCBkYXRhLFxuLVx0XHRcdFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcbiYjNDM7XHRcdFx0XHQgICByZWFkX3NoYWRvd19yYW0sIFx1MDAyNnJlYWRfYXFfZXJyKTtcbiBcdGlmIChzdGF0dXMpIHtcbiBcdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXFxuXCYjMzQ7LFxuLVx0XHRcdHNpemUsIHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbiYjNDM7XHRcdFx0c2l6ZSwgc3RhdHVzLCByZWFkX2FxX2Vycik7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0ZhaWxlZCB0byByZWFkIE5WTSBjb250ZW50c1wmIzM0Oyk7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5pbmRleCA3ZWIzODBiZTdlZDI3Li5iZjlhODIxYzU0M2I3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5AQCAtODUzLDYgJiM0Mzs4NTMsNyBAQCBzdGF0aWMgaW50XG4gaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXG4gXHQgICAgICAgdTggKmJ5dGVzKVxuIHtcbiYjNDM7XHRlbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LO1xuIFx0c3RydWN0IGljZV9wZiAqcGYgPSBpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldik7XG4gXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuIFx0c3RydWN0IGRldmljZSAqZGV2O1xuQEAgLTg2OSwyNCAmIzQzOzg3MCwxNSBAQCBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXG5cJiMzNDssXG4tXHRcdFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0cmV0ID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGVlcHJvbS1cdTAwM2VvZmZzZXQsIFx1MDAyNmVlcHJvbS1cdTAwM2VsZW4sIGJ1Zixcbi1cdFx0XHRcdGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRmYWxzZSwgXHUwMDI2cmVhZF9hcV9lcnIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCYjMzQ7LFxuLVx0XHRcdHJldCwgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuLVx0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0XHRcdHJldCwgbGliaWVfYXFfc3RyKHJlYWRfYXFfZXJyKSk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdG1lbWNweShieXRlcywgYnVmLCBlZXByb20tXHUwMDNlbGVuKTtcbi1yZWxlYXNlOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBvdXQ6XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuaW5kZXggOGNkYzRmZGE4OWU5Ny4uOWUwOGRiMzc2ZDNkMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbkBAIC0yODcxLDYgJiM0MzsyODcxLDkgQEAgaW50IGljZV92c2lfcmVsZWFzZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdHBmID0gdnNpLVx1MDAzZWJhY2s7XG4gXG4mIzQzO1x0aWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSlcbiYjNDM7XHRcdGljZV9jbGVhcl9kZmx0X3ZzaSh2c2kpO1xuJiM0MztcbiBcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4gXHRcdGljZV9yc3NfY2xlYW4odnNpKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuaW5kZXggN2UxODdhODA0ZGZhMS4uMjFmM2I2MTVkYmJmMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbkBAIC01MywxNyAmIzQzOzUzLDI3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuICAqIEBsZW5ndGg6IChpbikgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQ7IChvdXQpIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkXG4gICogQGRhdGE6IGJ1ZmZlciB0byByZXR1cm4gZGF0YSBpbiAoc2l6ZWQgdG8gZml0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoKVxuICAqIEByZWFkX3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2YgTlZNXG4mIzQzOyAqIEByZWFkX2FxX2VycjogaWYgbm9uLU5VTEwsIHJlY2VpdmVzIHRoZSBBUSBlcnJvciBzdGF0dXMgb2YgdGhlIGZhaWxpbmcgcmVhZFxuICAqXG4gICogUmVhZHMgYSBwb3J0aW9uIG9mIHRoZSBOVk0sIGFzIGEgZmxhdCBtZW1vcnkgc3BhY2UuIFRoaXMgZnVuY3Rpb24gY29ycmVjdGx5XG4gICogYnJlYWtzIHJlYWQgcmVxdWVzdHMgYWNyb3NzIFNoYWRvdyBSQU0gc2VjdG9ycyBhbmQgZW5zdXJlcyB0aGF0IG5vIHNpbmdsZVxuICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC5cbiAgKlxuJiM0MzsgKiBGVyBjYXBzIHRoZSByZWFkIGxvY2sgYXQgYSBtYXhpbXVtIG9mIDMwMDBtcywgc28gYSByZWFkIHNwYW5uaW5nIG11bHRpcGxlXG4mIzQzOyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0XG4mIzQzOyAqIG1pZC1yZWFkLiBUaGUgTlZNIGxvY2sgaXMgdGhlcmVmb3JlIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBhcm91bmQgZWFjaCBBUVxuJiM0MzsgKiByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogU2luY2UgaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCBvdmVyd3JpdGVzXG4mIzQzOyAqIGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cywgY2FsbGVycyB0aGF0IG5lZWQgdGhlIGZhaWxpbmcgcmVhZCYjMzk7cyBBUSBlcnJvclxuJiM0MzsgKiBtdXN0IHVzZSBAcmVhZF9hcV9lcnIgcmF0aGVyIHRoYW4gaW5zcGVjdGluZyBzcV9sYXN0X3N0YXR1cyBhZnRlcndhcmRzLlxuJiM0MzsgKlxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcbiAgKiBwYXJ0aWFsbHkgdXBkYXRlZCBpZiBzb21lIHJlYWRzIHN1Y2NlZWQgYmVmb3JlIGEgZmFpbHVyZS5cbiAgKi9cbiBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuLVx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxuJiM0MztcdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKVxuIHtcbiBcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XG4gXHR1MzIgYnl0ZXNfcmVhZCA9IDA7XG5AQCAtOTIsMTIgJiM0MzsxMDIsMzAgQEAgaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcbiBcbiBcdFx0bGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgJiM0MzsgcmVhZF9zaXplIFx1MDAzYyBpbmxlbik7XG4gXG4mIzQzO1x0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzKSB7XG4mIzQzO1x0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFwmIzM0O0ZhaWxlZCB0byBhY3F1aXJlIE5WTSBsb2NrLCBlcnIgJWQgYXFfZXJyICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgc3RhdHVzLCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0c3RhdHVzID0gaWNlX2FxX3JlYWRfbnZtKGh3LCBJQ0VfQVFDX05WTV9TVEFSVF9QT0lOVCxcbiBcdFx0XHRcdFx0IG9mZnNldCwgcmVhZF9zaXplLFxuIFx0XHRcdFx0XHQgZGF0YSAmIzQzOyBieXRlc19yZWFkLCBsYXN0X2NtZCxcbiBcdFx0XHRcdFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XG4tXHRcdGlmIChzdGF0dXMpXG4mIzQzO1x0XHRpZiAoc3RhdHVzKSB7XG4mIzQzO1x0XHRcdC8qIENhcHR1cmUgdGhlIHJlYWQmIzM5O3MgQVEgZXJyb3IgYmVmb3JlIGljZV9yZWxlYXNlX252bSgpXG4mIzQzO1x0XHRcdCAqIGlzc3VlcyBpdHMgb3duIEFRIGNvbW1hbmQgYW5kIG92ZXJ3cml0ZXNcbiYjNDM7XHRcdFx0ICogc3FfbGFzdF9zdGF0dXMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAocmVhZF9hcV9lcnIpXG4mIzQzO1x0XHRcdFx0KnJlYWRfYXFfZXJyID0gaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzO1xuJiM0MztcbiYjNDM7XHRcdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0XHRieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7XG4gXHRcdG9mZnNldCAmIzQzOz0gcmVhZF9zaXplO1xuQEAgLTE3NywxNCAmIzQzOzIwNSwxOSBAQCBpbnQgaWNlX2FxX2VyYXNlX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKVxuIH1cbiBcbiAvKipcbi0gKiBpY2VfcmVhZF9zcl93b3JkX2FxIC0gUmVhZHMgU2hhZG93IFJBTSB2aWEgQVFcbiYjNDM7ICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gICogQG9mZnNldDogb2Zmc2V0IG9mIHRoZSBTaGFkb3cgUkFNIHdvcmQgdG8gcmVhZCAoMHgwMDAwMDAgLSAweDAwMUZGRilcbiAgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU1cbiAgKlxuICAqIFJlYWRzIG9uZSAxNiBiaXQgd29yZCBmcm9tIHRoZSBTaGFkb3cgUkFNIHVzaW5nIGljZV9yZWFkX2ZsYXRfbnZtLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgTlZNIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGludGVybmFsbHkgYnkgaWNlX3JlYWRfZmxhdF9udm0oKVxuJiM0MzsgKiBhcm91bmQgdGhlIEZXIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHplcm8gb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gICovXG4tc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4mIzQzO2ludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4ge1xuIFx0dTMyIGJ5dGVzID0gc2l6ZW9mKHUxNik7XG4gXHRfX2xlMTYgZGF0YV9sb2NhbDtcbkBAIC0xOTQsNyAmIzQzOzIyNyw3IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfc3Jfd29yZF9hcShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuIFx0ICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLlxuIFx0ICovXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksIFx1MDAyNmJ5dGVzLFxuLVx0XHRcdFx0ICAgKF9fZm9yY2UgdTggKilcdTAwMjZkYXRhX2xvY2FsLCB0cnVlKTtcbiYjNDM7XHRcdFx0XHQgICAoX19mb3JjZSB1OCAqKVx1MDAyNmRhdGFfbG9jYWwsIHRydWUsIE5VTEwpO1xuIFx0aWYgKHN0YXR1cylcbiBcdFx0cmV0dXJuIHN0YXR1cztcbiBcbkBAIC0zMzAsMTMgJiM0MzszNjMsOCBAQCBpY2VfcmVhZF9mbGFzaF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUxNiBtb2R1bGUsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbi1cbi1cdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCAmIzQzOyBvZmZzZXQsIFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xuLVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiYjNDM7XHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgc3RhcnQgJiM0Mzsgb2Zmc2V0LCBcdTAwMjZsZW5ndGgsIGRhdGEsIGZhbHNlLFxuJiM0MztcdFx0XHRcdCAgIE5VTEwpO1xuIFxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDE4LDI3ICYjNDM7NDQ2LDYgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXRcbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxuLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tICogQG9mZnNldDogb2Zmc2V0IG9mIHRoZSBTaGFkb3cgUkFNIHdvcmQgdG8gcmVhZCAoMHgwMDAwMDAgLSAweDAwMUZGRilcbi0gKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU1cbi0gKlxuLSAqIFJlYWRzIG9uZSAxNiBiaXQgd29yZCBmcm9tIHRoZSBTaGFkb3cgUkFNIHVzaW5nIHRoZSBpY2VfcmVhZF9zcl93b3JkX2FxLlxuLSAqL1xuLWludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4te1xuLVx0aW50IHN0YXR1cztcbi1cbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmICghc3RhdHVzKSB7XG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc3RhdHVzO1xuLX1cbi1cbiAvKipcbiAgKiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2IC0gUmVhZHMgc3ViIG1vZHVsZSBUTFYgZnJvbSBOVk0gUEZBXG4gICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZVxuQEAgLTg1NiwyMCAmIzQzOzg2MywxOCBAQCBpbnQgaWNlX2dldF9pbmFjdGl2ZV9uZXRsaXN0X3ZlcihzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9uZXRsaXN0X2luZm8gKm5ldFxuIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXG4ge1xuIFx0dTMyIG1pbl9zaXplID0gMCwgbWF4X3NpemUgPSBJQ0VfQVFDX05WTV9NQVhfT0ZGU0VUICYjNDM7IDE7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbiYjNDM7XHRpbnQgc3RhdHVzID0gMDtcbiBcbiBcdHdoaWxlICgobWF4X3NpemUgLSBtaW5fc2l6ZSkgXHUwMDNlIDEpIHtcbiYjNDM7XHRcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XG4gXHRcdHUzMiBvZmZzZXQgPSAobWF4X3NpemUgJiM0MzsgbWluX3NpemUpIC8gMjtcbiBcdFx0dTMyIGxlbiA9IDE7XG4gXHRcdHU4IGRhdGE7XG4gXG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFx1MDAyNmxlbiwgXHUwMDI2ZGF0YSwgZmFsc2UpO1xuJiM0MztcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIG9mZnNldCwgXHUwMDI2bGVuLCBcdTAwMjZkYXRhLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdCAgIFx1MDAyNnJlYWRfYXFfZXJyKTtcbiBcdFx0aWYgKHN0YXR1cyA9PSAtRUlPIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xuJiM0MztcdFx0ICAgIHJlYWRfYXFfZXJyID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xuIFx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFwmIzM0OyVzOiBOZXcgdXBwZXIgYm91bmQgb2YgJXUgYnl0ZXNcXG5cJiMzNDssXG4gXHRcdFx0XHQgIF9fZnVuY19fLCBvZmZzZXQpO1xuIFx0XHRcdHN0YXR1cyA9IDA7XG5AQCAtODgwLDcgJiM0Mzs4ODUsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdG1pbl9zaXplID0gb2Zmc2V0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cbi1cdFx0XHRnb3RvIGVycl9yZWFkX2ZsYXRfbnZtO1xuJiM0MztcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODg4LDkgJiM0Mzs4OTMsNiBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFxuIFx0aHctXHUwMDNlZmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplO1xuIFxuLWVycl9yZWFkX2ZsYXRfbnZtOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oXG5pbmRleCA2M2NkYzZiZGFjNTg5Li5lMWQxYTExZjVjYTQxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxuQEAgLTE5LDcgJiM0MzsxOSw3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuIFx0XHQgICAgYm9vbCByZWFkX3NoYWRvd19yYW0sIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTtcbiBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuLVx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKTtcbiYjNDM7XHRcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0sIGVudW0gbGliaWVfYXFfZXJyICpyZWFkX2FxX2Vycik7XG4gaW50XG4gaWNlX2dldF9wZmFfbW9kdWxlX3RsdihzdHJ1Y3QgaWNlX2h3ICpodywgdTE2ICptb2R1bGVfdGx2LCB1MTYgKm1vZHVsZV90bHZfbGVuLFxuIFx0XHQgICAgICAgdTE2IG1vZHVsZV90eXBlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuaW5kZXggOGU1Zjk3ODM1OTU0Yy4uM2E0MWM3MTFlNzUxYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcbkBAIC00ODA4LDE1ICYjNDM7NDgwOCwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfYWRqX2xsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHMzMiBhZGopXG4gXHRcdFx0XHQgICAgICAgIUZJRUxEX0dFVChSRUdfTExfUFJPWFlfSF9FWEVDLCB2YWwpLFxuIFx0XHRcdFx0ICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsXG4gXHRcdFx0XHQgICAgICAgUkVHX0xMX1BST1hZX0gpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgYWRqdXN0bWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXG5cJiMzNDspO1xuLVx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2cGFyYW1zLVx1MDAzZWF0cWJhbF93cS5sb2NrKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwYXJhbXMtXHUwMDNlYXRxYmFsX3dxLmxvY2spO1xuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0ZhaWxlZCB0byBwcmVwYXJlIFBIWSB0aW1lciBhZGp1c3RtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTQ4MzcsOCAmIzQzOzQ4MzQsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxuIFx0dTggdG1yX2lkeDtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoaHctXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpXG4tXHRcdHJldHVybiBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopO1xuJiM0MztcdGlmIChody1cdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkge1xuJiM0MztcdFx0ZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9hZGpfbGxfZTgxMChodywgYWRqKTtcbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVUSU1FRE9VVClcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwmIzM0O0xMIGFkaiB0aW1lZCBvdXQsIGZhbGxpbmcgYmFjayB0byBTQlFcXG5cJiMzNDspO1xuJiM0MztcdH1cbiBcbiBcdHRtcl9pZHggPSBody1cdTAwM2VmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDtcbiBcbkBAIC00OTAxLDE1ICYjNDM7NDkwMiwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2xsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHU2NCBpbmN2YWwpXG4gXHRcdFx0XHQgICAgICAgIUZJRUxEX0dFVChSRUdfTExfUFJPWFlfSF9FWEVDLCB2YWwpLFxuIFx0XHRcdFx0ICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsXG4gXHRcdFx0XHQgICAgICAgUkVHX0xMX1BST1hZX0gpO1xuLVx0aWYgKGVycikge1xuLVx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgaW5jcmVtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwmIzM0Oyk7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwYXJhbXMtXHUwMDNlYXRxYmFsX3dxLmxvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBhcmFtcy1cdTAwM2VhdHFiYWxfd3EubG9jayk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC00OTI3LDggJiM0Mzs0OTI1LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTY0IGluY3ZhbClcbiBcdHU4IHRtcl9pZHg7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGh3LVx1MDAzZWRldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKVxuLVx0XHRyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTtcbiYjNDM7XHRpZiAoaHctXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpIHtcbiYjNDM7XHRcdGVyciA9IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2xsX2U4MTAoaHcsIGluY3ZhbCk7XG4mIzQzO1x0XHRpZiAoZXJyICE9IC1FVElNRURPVVQpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcJiMzNDtMTCBpbmN2YWwgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4gXG4gXHR0bXJfaWR4ID0gaHctXHUwMDNlZnVuY19jYXBzLnRzX2Z1bmNfaW5mby50bXJfaW5kZXhfb3duZWQ7XG4gXHRsb3cgPSBsb3dlcl8zMl9iaXRzKGluY3ZhbCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbmluZGV4IGM3MjRkNDI5YTdhYTkuLjkxY2E3NWU0NTQ2MzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jXG5AQCAtMjQwOCw3ICYjNDM7MjQwOCw3IEBAIHZvaWQgaWRwZl90eF9zcGxpdHFfYnVpbGRfZmxvd19kZXNjKHVuaW9uIGlkcGZfdHhfZmxleF9kZXNjICpkZXNjLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcyxcbiBcdFx0XHRcdCAgICB1MTYgdGRfY21kLCB1MTYgc2l6ZSlcbiB7XG4tXHQqKHUzMiAqKVx1MDAyNmRlc2MtXHUwMDNlZmxvdy5xdzEuY21kX2R0eXBlID0gKHU4KShwYXJhbXMtXHUwMDNlZHR5cGUgfCB0ZF9jbWQpO1xuJiM0MztcdCooX19sZTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XG4gXHRkZXNjLVx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cdTAwM2Vjb21wbF90YWcpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzE0ZTFlZDE4OTNhYmVkYjM3MGUwMjllMTVhY2NkZjVjMjIyOTI4OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDAwOjQyOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jCmluZGV4IDIyYjdkOGU2YmQ5ZTguLjhjMmI2M2VlZjgyYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMKQEAgLTE4OTAsMjcgJiM0MzsxODkwLDE4IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCSAqLwogCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fYmxrczsgaSYjNDM7JiM0MzspIHsKIAkJdTMyIHJlYWRfc3ogPSBtaW5fdCh1MzIsIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsIGxlZnQpOwotCi0JCXN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZGV2X2RiZyhkZXYsICYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxuJiMzNDssCi0JCQkJc3RhdHVzLCBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTsKLQkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZSYjMzQ7KTsKLQkJCXZmcmVlKG52bV9kYXRhKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CiYjNDM7CQllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCiAJCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBpICogSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwKLQkJCQkJICAgJmFtcDtyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7CiYjNDM7CQkJCQkgICAmYW1wO3JlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtLAomIzQzOwkJCQkJICAgJmFtcDtyZWFkX2FxX2Vycik7CiAJCWlmIChzdGF0dXMpIHsKIAkJCWRldl9kYmcoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCQlyZWFkX3N6LCBzdGF0dXMsIGh3LSZndDthZG1pbnEuc3FfbGFzdF9zdGF0dXMpOwomIzQzOwkJCQlyZWFkX3N6LCBzdGF0dXMsIHJlYWRfYXFfZXJyKTsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAkJCXZmcmVlKG52bV9kYXRhKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWljZV9yZWxlYXNlX252bShodyk7CiAKIAkJdG1wICYjNDM7PSByZWFkX3N6OwogCQlsZWZ0IC09IHJlYWRfc3o7CkBAIC0xOTQzLDYgJiM0MzsxOTM0LDcgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fcmVhZChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywKIAkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssCiAJCQkJdTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKQogewomIzQzOwllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gZGV2bGlua19wcml2KGRldmxpbmspOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpOwogCXN0cnVjdCBpY2VfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CkBAIC0xOTY2LDI0ICYjNDM7MTk1OCwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCXN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7Ci0JCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZSYjMzQ7KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJc3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCAmYW1wO3NpemUsIGRhdGEsCi0JCQkJICAgcmVhZF9zaGFkb3dfcmFtKTsKJiM0MzsJCQkJICAgcmVhZF9zaGFkb3dfcmFtLCAmYW1wO3JlYWRfYXFfZXJyKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9kYmcoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCXNpemUsIHN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7CiYjNDM7CQkJc2l6ZSwgc3RhdHVzLCByZWFkX2FxX2Vycik7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQlpY2VfcmVsZWFzZV9udm0oaHcpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwppbmRleCA3ZWIzODBiZTdlZDI3Li5iZjlhODIxYzU0M2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwpAQCAtODUzLDYgJiM0Mzs4NTMsNyBAQCBzdGF0aWMgaW50CiBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKIAkgICAgICAgdTggKmJ5dGVzKQogewomIzQzOwllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCXN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihuZXRkZXYpOwogCXN0cnVjdCBpY2VfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwpAQCAtODY5LDI0ICYjNDM7ODcwLDE1IEBAIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAmIzM0O2ljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcbiYjMzQ7LAotCQkJcmV0LCBsaWJpZV9hcV9zdHIoaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cykpOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlyZXQgPSBpY2VfcmVhZF9mbGF0X252bShodywgZWVwcm9tLSZndDtvZmZzZXQsICZhbXA7ZWVwcm9tLSZndDtsZW4sIGJ1ZiwKLQkJCQlmYWxzZSk7CiYjNDM7CQkJCWZhbHNlLCAmYW1wO3JlYWRfYXFfZXJyKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCi0JCQlyZXQsIGxpYmllX2FxX3N0cihody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7Ci0JCWdvdG8gcmVsZWFzZTsKJiM0MzsJCQlyZXQsIGxpYmllX2FxX3N0cihyZWFkX2FxX2VycikpOwomIzQzOwkJZ290byBvdXQ7CiAJfQogCiAJbWVtY3B5KGJ5dGVzLCBidWYsIGVlcHJvbS0mZ3Q7bGVuKTsKLXJlbGVhc2U6Ci0JaWNlX3JlbGVhc2VfbnZtKGh3KTsKIG91dDoKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwppbmRleCA4Y2RjNGZkYTg5ZTk3Li45ZTA4ZGIzNzZkM2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKQEAgLTI4NzEsNiAmIzQzOzI4NzEsOSBAQCBpbnQgaWNlX3ZzaV9yZWxlYXNlKHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJCXJldHVybiAtRU5PREVWOwogCXBmID0gdnNpLSZndDtiYWNrOwogCiYjNDM7CWlmIChpY2VfaXNfdnNpX2RmbHRfdnNpKHZzaSkpCiYjNDM7CQlpY2VfY2xlYXJfZGZsdF92c2kodnNpKTsKJiM0MzsKIAlpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtJmd0O2ZsYWdzKSkKIAkJaWNlX3Jzc19jbGVhbih2c2kpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYwppbmRleCA3ZTE4N2E4MDRkZmExLi4yMWYzYjYxNWRiYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMKQEAgLTUzLDE3ICYjNDM7NTMsMjcgQEAgaW50IGljZV9hcV9yZWFkX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHUzMiBvZmZzZXQsCiAgKiBAbGVuZ3RoOiAoaW4pIG51bWJlciBvZiBieXRlcyB0byByZWFkOyAob3V0KSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZAogICogQGRhdGE6IGJ1ZmZlciB0byByZXR1cm4gZGF0YSBpbiAoc2l6ZWQgdG8gZml0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoKQogICogQHJlYWRfc2hhZG93X3JhbTogaWYgdHJ1ZSwgcmVhZCBmcm9tIHNoYWRvdyBSQU0gaW5zdGVhZCBvZiBOVk0KJiM0MzsgKiBAcmVhZF9hcV9lcnI6IGlmIG5vbi1OVUxMLCByZWNlaXZlcyB0aGUgQVEgZXJyb3Igc3RhdHVzIG9mIHRoZSBmYWlsaW5nIHJlYWQKICAqCiAgKiBSZWFkcyBhIHBvcnRpb24gb2YgdGhlIE5WTSwgYXMgYSBmbGF0IG1lbW9yeSBzcGFjZS4gVGhpcyBmdW5jdGlvbiBjb3JyZWN0bHkKICAqIGJyZWFrcyByZWFkIHJlcXVlc3RzIGFjcm9zcyBTaGFkb3cgUkFNIHNlY3RvcnMgYW5kIGVuc3VyZXMgdGhhdCBubyBzaW5nbGUKICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC4KICAqCiYjNDM7ICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZQomIzQzOyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0CiYjNDM7ICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRCiYjNDM7ICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuCiYjNDM7ICoKJiM0MzsgKiBTaW5jZSBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXMKJiM0MzsgKiBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzLCBjYWxsZXJzIHRoYXQgbmVlZCB0aGUgZmFpbGluZyByZWFkJiMzOTtzIEFRIGVycm9yCiYjNDM7ICogbXVzdCB1c2UgQHJlYWRfYXFfZXJyIHJhdGhlciB0aGFuIGluc3BlY3Rpbmcgc3FfbGFzdF9zdGF0dXMgYWZ0ZXJ3YXJkcy4KJiM0MzsgKgogICogUmV0dXJucyBhIHN0YXR1cyBjb2RlIG9uIGZhaWx1cmUuIE5vdGUgdGhhdCB0aGUgZGF0YSBwb2ludGVyIG1heSBiZQogICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuCiAgKi8KIGludAogaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSwKLQkJICBib29sIHJlYWRfc2hhZG93X3JhbSkKJiM0MzsJCSAgYm9vbCByZWFkX3NoYWRvd19yYW0sIGVudW0gbGliaWVfYXFfZXJyICpyZWFkX2FxX2VycikKIHsKIAl1MzIgaW5sZW4gPSAqbGVuZ3RoOwogCXUzMiBieXRlc19yZWFkID0gMDsKQEAgLTkyLDEyICYjNDM7MTAyLDMwIEBAIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsCiAKIAkJbGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgJiM0MzsgcmVhZF9zaXplICZsdDsgaW5sZW4pOwogCiYjNDM7CQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7CiYjNDM7CQlpZiAoc3RhdHVzKSB7CiYjNDM7CQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwgJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gbG9jaywgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCiYjNDM7CQkJCSAgc3RhdHVzLCBsaWJpZV9hcV9zdHIoaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cykpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwogCQlzdGF0dXMgPSBpY2VfYXFfcmVhZF9udm0oaHcsIElDRV9BUUNfTlZNX1NUQVJUX1BPSU5ULAogCQkJCQkgb2Zmc2V0LCByZWFkX3NpemUsCiAJCQkJCSBkYXRhICYjNDM7IGJ5dGVzX3JlYWQsIGxhc3RfY21kLAogCQkJCQkgcmVhZF9zaGFkb3dfcmFtLCBOVUxMKTsKLQkJaWYgKHN0YXR1cykKJiM0MzsJCWlmIChzdGF0dXMpIHsKJiM0MzsJCQkvKiBDYXB0dXJlIHRoZSByZWFkJiMzOTtzIEFRIGVycm9yIGJlZm9yZSBpY2VfcmVsZWFzZV9udm0oKQomIzQzOwkJCSAqIGlzc3VlcyBpdHMgb3duIEFRIGNvbW1hbmQgYW5kIG92ZXJ3cml0ZXMKJiM0MzsJCQkgKiBzcV9sYXN0X3N0YXR1cy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAocmVhZF9hcV9lcnIpCiYjNDM7CQkJCSpyZWFkX2FxX2VyciA9IGh3LSZndDthZG1pbnEuc3FfbGFzdF9zdGF0dXM7CiYjNDM7CiYjNDM7CQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCQlieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7CiAJCW9mZnNldCAmIzQzOz0gcmVhZF9zaXplOwpAQCAtMTc3LDE0ICYjNDM7MjA1LDE5IEBAIGludCBpY2VfYXFfZXJhc2VfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgc3RydWN0IGljZV9zcV9jZCAqY2QpCiB9CiAKIC8qKgotICogaWNlX3JlYWRfc3Jfd29yZF9hcSAtIFJlYWRzIFNoYWRvdyBSQU0gdmlhIEFRCiYjNDM7ICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZAogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpCiAgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU0KICAqCiAgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS4KJiM0MzsgKgomIzQzOyAqIFRoZSBOVk0gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW50ZXJuYWxseSBieSBpY2VfcmVhZF9mbGF0X252bSgpCiYjNDM7ICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCiYjNDM7aW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKIHsKIAl1MzIgYnl0ZXMgPSBzaXplb2YodTE2KTsKIAlfX2xlMTYgZGF0YV9sb2NhbDsKQEAgLTE5NCw3ICYjNDM7MjI3LDcgQEAgc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCiAJICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLgogCSAqLwogCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQgKiBzaXplb2YodTE2KSwgJmFtcDtieXRlcywKLQkJCQkgICAoX19mb3JjZSB1OCAqKSZhbXA7ZGF0YV9sb2NhbCwgdHJ1ZSk7CiYjNDM7CQkJCSAgIChfX2ZvcmNlIHU4ICopJmFtcDtkYXRhX2xvY2FsLCB0cnVlLCBOVUxMKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCkBAIC0zMzAsMTMgJiM0MzszNjMsOCBAQCBpY2VfcmVhZF9mbGFzaF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUxNiBtb2R1bGUsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwotCi0Jc3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICYjNDM7IG9mZnNldCwgJmFtcDtsZW5ndGgsIGRhdGEsIGZhbHNlKTsKLQotCWljZV9yZWxlYXNlX252bShodyk7CiYjNDM7CXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCAmIzQzOyBvZmZzZXQsICZhbXA7bGVuZ3RoLCBkYXRhLCBmYWxzZSwKJiM0MzsJCQkJICAgTlVMTCk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDE4LDI3ICYjNDM7NDQ2LDYgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXQKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKioKLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeQotICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpCi0gKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU0KLSAqCi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS4KLSAqLwotaW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSkKLXsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCWlmICghc3RhdHVzKSB7Ci0JCXN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7Ci0JCWljZV9yZWxlYXNlX252bShodyk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQogLyoqCiAgKiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2IC0gUmVhZHMgc3ViIG1vZHVsZSBUTFYgZnJvbSBOVk0gUEZBCiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCkBAIC04NTYsMjAgJiM0Mzs4NjMsMTggQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXQKIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpCiB7CiAJdTMyIG1pbl9zaXplID0gMCwgbWF4X3NpemUgPSBJQ0VfQVFDX05WTV9NQVhfT0ZGU0VUICYjNDM7IDE7Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwomIzQzOwlpbnQgc3RhdHVzID0gMDsKIAogCXdoaWxlICgobWF4X3NpemUgLSBtaW5fc2l6ZSkgJmd0OyAxKSB7CiYjNDM7CQllbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LOwogCQl1MzIgb2Zmc2V0ID0gKG1heF9zaXplICYjNDM7IG1pbl9zaXplKSAvIDI7CiAJCXUzMiBsZW4gPSAxOwogCQl1OCBkYXRhOwogCi0JCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsICZhbXA7bGVuLCAmYW1wO2RhdGEsIGZhbHNlKTsKJiM0MzsJCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsICZhbXA7bGVuLCAmYW1wO2RhdGEsIGZhbHNlLAomIzQzOwkJCQkJICAgJmFtcDtyZWFkX2FxX2Vycik7CiAJCWlmIChzdGF0dXMgPT0gLUVJTyAmYW1wOyZhbXA7Ci0JCSAgICBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzID09IExJQklFX0FRX1JDX0VJTlZBTCkgewomIzQzOwkJICAgIHJlYWRfYXFfZXJyID09IExJQklFX0FRX1JDX0VJTlZBTCkgewogCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwgJiMzNDslczogTmV3IHVwcGVyIGJvdW5kIG9mICV1IGJ5dGVzXG4mIzM0OywKIAkJCQkgIF9fZnVuY19fLCBvZmZzZXQpOwogCQkJc3RhdHVzID0gMDsKQEAgLTg4MCw3ICYjNDM7ODg1LDcgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodykKIAkJCW1pbl9zaXplID0gb2Zmc2V0OwogCQl9IGVsc2UgewogCQkJLyogYW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCAqLwotCQkJZ290byBlcnJfcmVhZF9mbGF0X252bTsKJiM0MzsJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQogCkBAIC04ODgsOSAmIzQzOzg5Myw2IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpCiAKIAlody0mZ3Q7Zmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplOwogCi1lcnJfcmVhZF9mbGF0X252bToKLQlpY2VfcmVsZWFzZV9udm0oaHcpOwotCiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmgKaW5kZXggNjNjZGM2YmRhYzU4OS4uZTFkMWExMWY1Y2E0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oCkBAIC0xOSw3ICYjNDM7MTksNyBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCwKIAkJICAgIGJvb2wgcmVhZF9zaGFkb3dfcmFtLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZCk7CiBpbnQKIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsCi0JCSAgYm9vbCByZWFkX3NoYWRvd19yYW0pOwomIzQzOwkJICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKTsKIGludAogaWNlX2dldF9wZmFfbW9kdWxlX3RsdihzdHJ1Y3QgaWNlX2h3ICpodywgdTE2ICptb2R1bGVfdGx2LCB1MTYgKm1vZHVsZV90bHZfbGVuLAogCQkgICAgICAgdTE2IG1vZHVsZV90eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jCmluZGV4IDhlNWY5NzgzNTk1NGMuLjNhNDFjNzExZTc1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYwpAQCAtNDgwOCwxNSAmIzQzOzQ4MDgsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKQogCQkJCSAgICAgICAhRklFTERfR0VUKFJFR19MTF9QUk9YWV9IX0VYRUMsIHZhbCksCiAJCQkJICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsCiAJCQkJICAgICAgIFJFR19MTF9QUk9YWV9IKTsKLQlpZiAoZXJyKSB7Ci0JCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXG4mIzM0Oyk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BhcmFtcy0mZ3Q7YXRxYmFsX3dxLmxvY2spOwotCQlyZXR1cm4gZXJyOwotCX0KLQogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3BhcmFtcy0mZ3Q7YXRxYmFsX3dxLmxvY2spOwogCi0JcmV0dXJuIDA7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0ZhaWxlZCB0byBwcmVwYXJlIFBIWSB0aW1lciBhZGp1c3RtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxuJiMzNDspOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiAvKioKQEAgLTQ4MzcsOCAmIzQzOzQ4MzQsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKQogCXU4IHRtcl9pZHg7CiAJaW50IGVycjsKIAotCWlmIChody0mZ3Q7ZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpCi0JCXJldHVybiBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopOwomIzQzOwlpZiAoaHctJmd0O2Rldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKSB7CiYjNDM7CQllcnIgPSBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopOwomIzQzOwkJaWYgKGVyciAhPSAtRVRJTUVET1VUKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCAmIzM0O0xMIGFkaiB0aW1lZCBvdXQsIGZhbGxpbmcgYmFjayB0byBTQlFcbiYjMzQ7KTsKJiM0MzsJfQogCiAJdG1yX2lkeCA9IGh3LSZndDtmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDsKIApAQCAtNDkwMSwxNSAmIzQzOzQ5MDIsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2luY3ZhbF9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCB1NjQgaW5jdmFsKQogCQkJCSAgICAgICAhRklFTERfR0VUKFJFR19MTF9QUk9YWV9IX0VYRUMsIHZhbCksCiAJCQkJICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsCiAJCQkJICAgICAgIFJFR19MTF9QUk9YWV9IKTsKLQlpZiAoZXJyKSB7Ci0JCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcbiYjMzQ7KTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cGFyYW1zLSZndDthdHFiYWxfd3EubG9jayk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7cGFyYW1zLSZndDthdHFiYWxfd3EubG9jayk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsICYjMzQ7RmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC00OTI3LDggJiM0Mzs0OTI1LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTY0IGluY3ZhbCkKIAl1OCB0bXJfaWR4OwogCWludCBlcnI7CiAKLQlpZiAoaHctJmd0O2Rldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKQotCQlyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTsKJiM0MzsJaWYgKGh3LSZndDtkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkgewomIzQzOwkJZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTsKJiM0MzsJCWlmIChlcnIgIT0gLUVUSU1FRE9VVCkKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgJiMzNDtMTCBpbmN2YWwgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXG4mIzM0Oyk7CiYjNDM7CX0KIAogCXRtcl9pZHggPSBody0mZ3Q7ZnVuY19jYXBzLnRzX2Z1bmNfaW5mby50bXJfaW5kZXhfb3duZWQ7CiAJbG93ID0gbG93ZXJfMzJfYml0cyhpbmN2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmMKaW5kZXggYzcyNGQ0MjlhN2FhOS4uOTFjYTc1ZTQ1NDYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jCkBAIC0yNDA4LDcgJiM0MzsyNDA4LDcgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsCiAJCQkJICAgIHN0cnVjdCBpZHBmX3R4X3NwbGl0cV9wYXJhbXMgKnBhcmFtcywKIAkJCQkgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpCiB7Ci0JKih1MzIgKikmYW1wO2Rlc2MtJmd0O2Zsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLSZndDtkdHlwZSB8IHRkX2NtZCk7CiYjNDM7CSooX19sZTMyICopJmFtcDtkZXNjLSZndDtmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy0mZ3Q7ZHR5cGUgfCB0ZF9jbWQpKTsKIAlkZXNjLSZndDtmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7CiAJZGVzYy0mZ3Q7Zmxvdy5xdzEuY29tcGxfdGFnID0gY3B1X3RvX2xlMTYocGFyYW1zLSZndDtjb21wbF90YWcpOwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDQ2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2ggYW5kIEZ1enphYmlsaXR5IG9mIEludGVsIE5ldHdvcmsgRHJpdmVycyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRob3NlIGxvY2F0ZWQgaW4gdGhlIEludGVsIEV0aGVybmV0IGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkaXJlY3Rvcmllcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlaXIgcmVsZXZhbmNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VLiBUaGUgYGljZWAgZHJpdmVyLCBJIGtub3csIGhhbmRsZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHBoeXNpY2FsIFBDSWUgY2FyZHMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBldmVuIGVtdWxhdGVzIHRob3NlPwoKUmlnaHQsIHRoZSBwcm9tcHQgaXRzZWxmIGlzIGEgY2x1ZS4gSXQgZXhwbGljaXRseSBtZW50aW9ucyB0aGF0IGNlcnRhaW4gZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhcmVuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuLi4gdGhleSYjMzk7cmUgb3V0LiBTbywgZG9lcyB0aGF0IGFwcGx5IHRvIGBpY2VgPyBOb3BlLiBTdGFuZGFyZCBRRU1VLCBhcyBJIHJlY2FsbCwgc3RpY2tzIHRvIGVtdWxhdGluZyB0aGUgbW9yZSBjb21tb24gYWRhcHRlcnMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGBydGw4MTM5YCwgYHBjbmV0YCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBOb3csIGBpZ2JgIGlzIGVtdWxhdGVkOyB0aGF0JiMzOTtzIGEgZGF0YSBwb2ludC4gQnV0IGlzIGBpY2VgPyBOby4gQW5kIGBpZHBmYD8gTm8sIHRoYXQmIzM5O3Mgbm90IGVtdWxhdGVkIGVpdGhlci4KCk9rYXksIG5leHQgcXVlc3Rpb246IGFyZSB0aGVzZSBkcml2ZXJzICpmdXp6YWJsZSo/IEdlbmVyYWxseSwgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlcnMgd2l0aG91dCBlbXVsYXRpb24gYXJlIGEgbm8tZ28gZm9yIGZ1enppbmcsIHVubGVzcyB0aGV5IG9wZXJhdGUgb3ZlciBVU0Igb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNpbmNlIGBpY2VgIGlzIGEgUENJIGRyaXZlciwgdGhhdCYjMzk7cyBhbm90aGVyIHN0cmlrZSBhZ2FpbnN0IGl0LiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhhdCBieSBsb29raW5nIGF0IHRoZSBjb2RlIGl0c2VsZi4gTGV0IG1lIGNoZWNrIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uY2AgdG8gY29uZmlybSBpdCYjMzk7cyBQQ0ktYmFzZWQgYW5kIHRoZXJlZm9yZSB1bmxpa2VseSB0byBiZSBmdXp6YWJsZSBpbiB0aGUgYWJzZW5jZSBvZiBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODY4PXN0YXRpYyBpbnQgX19pbml0IGljZV9tb2R1bGVfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4OTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODkxOlx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpY2VfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4OTItXHRpZiAoc3RhdHVzKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk4OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBQQ0kgRHJpdmVyIElkZW50aWZpY2F0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgc3RhcnRpbmcgd2l0aCAmIzM0O2ljZSwmIzM0OyB0aGF0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0JiMzOTtzIGtub3duIHRvIGJlIGEgUENJIGRyaXZlci4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBwYXJ0LCBpcyB0byBjaGVjayBgaWRwZmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRpZXMgaW4uIEnigJlsbCBzZWUgaWYgdGhpcyBpcyByZWxhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQ2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkNvbnNpZGVyaW5nIHRoZSBOYXR1cmUgb2YgYGlkcGZgKioKCk9rYXksIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBpZHBmYCB0aGluZy4gSW5pdGlhbGx5LCBJIHdhcyB0aGlua2luZyBpdCB3YXMgbGlrZWx5IHNvbWV0aGluZyBzcGVjaWZpYywgbWF5YmUgYSB1c2VyLWxldmVsIHRvb2wuIEJ1dCB0aGVuIGl0IGhpdCBtZSDigJMgaGFuZyBvbiBhIHNlY29uZC4gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSB3YXkgaXQmIzM5O3MgYmVpbmcgdXNlZCwgYGlkcGZgICpjb3VsZCogdmVyeSB3ZWxsIGJlIGFub3RoZXIgUENJIGRyaXZlciwgb3IgYXQgbGVhc3Qgc29tZSBraW5kIG9mIGF1eGlsaWFyeSBkcml2ZXIgY29tcG9uZW50IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIFBDSSBidXMuIEl0IHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byBjb25maXJtIGl0cyByb2xlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zIHdpdGhvdXQgcHJvcGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpZHBmYCBSZWdpc3RyeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB3aGF0IHRoZSBgaWRwZmAgaWRlbnRpZmllciBjdXJyZW50bHkgcmVwcmVzZW50cyB3aXRoaW4gdGhlIHN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZWxhdGVkIHRvIHNvbWUgZXN0YWJsaXNoZWQgc3RhbmRhcmQgb3IgY29tcG9uZW50LCBsaWtlbHkgaW4gYSBmaWVsZCBsaWtlIGRpZ2l0YWwgcHVibGlzaGluZywgYWNjZXNzaWJpbGl0eSwgb3IgcGVyaGFwcyBhIG1vcmUgb2JzY3VyZSBhcmVhIEkgaGF2ZW4mIzM5O3QgaW1tZWRpYXRlbHkgY2F0ZWdvcml6ZWQuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSBjb25uZWN0ZWQgd2l0aCB0aGUgSW50ZXJuYXRpb25hbCBEaWdpdGFsIFB1Ymxpc2hpbmcgRm9ydW0gKElEUEYpLCBnaXZlbiB0aGUgYWNyb255beKAmXMgY29tcG9zaXRpb24sIGJ1dCBJIHNob3VsZG4mIzM5O3QgcmVseSBvbiBhc3N1bXB0aW9ucywgYW5kIEkgbmVlZCB0byBjb25maXJtIGl0cyBjdXJyZW50IGFzc29jaWF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCByZWdpc3RyaWVzLCBkYXRhYmFzZXMsIG9yIGRvY3VtZW50YXRpb24gdG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIFRoaXMgY291bGQgaW52b2x2ZSBjaGVja2luZyBvbmxpbmUgc291cmNlcywgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIHBlcmhhcHMgZXZlbiBxdWVyeWluZyB0aGUgcmVsZXZhbnQgQVBJIGlmIG9uZSBleGlzdHMuIERldGVybWluaW5nIHRoZSBzcGVjaWZpYyBtYXBwaW5nIG9mIGBpZHBmYCBpcyB0aGUgaW1tZWRpYXRlIG9iamVjdGl2ZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAwMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zODI9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcGZfcGNpX3RibCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jLTM4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmM6Mzg0OnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpZHBmX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzg1LVx0Lm5hbWVcdFx0XHQ9IEtCVUlMRF9NT0ROQU1FLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzkxLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfbWFpbi5jOjM5Mjptb2R1bGVfcGNpX2RyaXZlcihpZHBmX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDAwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MDkKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVW5mdXp6YWJsZSBDb2RlIFBhdGhzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYGljZWAgYW5kIGBpZHBmYCBkcml2ZXJzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtBaCwgSW50ZWwmIzM5O3MgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMsIHRob3NlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycy4mIzM0OyBBbmQgdGhlbiBpdCBjbGlja3M6IHRoZXNlIGRyaXZlcnMgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlLiBUaGV5JiMzOTtyZSBub3QgZ29pbmcgdG8gZnVuY3Rpb24gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuCgpUaGVyZWZvcmUsIHRoZSBjb2RlIHBhdGhzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaCBhcmUsIGluIHByYWN0aWNhbCB0ZXJtcywgdW5yZWFjaGFibGUgZm9yIGFueSBraW5kIG9mIGZ1enppbmcgd2l0aGluIGEgdHlwaWNhbCB2aXJ0dWFsIHNldHVwLiBJ4oCZbSBnb2luZyB0byBoYXZlIHRvIG1hcmsgdGhpcyBhcyBXb3J0aEZ1enppbmc9ZmFsc2UuIEl0JiMzOTtzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIGV2ZW4gY29uc2lkZXIgaXQuIFRoZSBpbmZyYXN0cnVjdHVyZSBuZWVkZWQgdG8gZXZlbiB0ZXN0IHRoaXMgaXMgdmVyeSBuaWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGljZWAgYW5kIGBpZHBmYCBkcml2ZXJzLCB3aGljaCBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXJzIGZvciBJbnRlbCBFODAwIHNlcmllcyBhbmQgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBDZW50ZXIgRnVuY3Rpb24gZGV2aWNlcy4gVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWNlYCBhbmQgYGlkcGZgIGRyaXZlcnMsIHdoaWNoIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlcnMgZm9yIEludGVsIEU4MDAgc2VyaWVzIGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkZXZpY2VzLiBUaGVzZSByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMDA6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjAwLjM0NjA1NjMzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjAyMjAzMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzowMC4zNDYwNjMwMDZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDA3NzM4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcxNGUxZWQxODkzYWJlZGIzNzBlMDI5ZTE1YWNjZGY1YzIyMjkyODlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMTIgMDA6NDI6NTkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXFxuaW5kZXggMjJiN2Q4ZTZiZDllOC4uOGMyYjYzZWVmODJiZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcXG5AQCAtMTg5MCwyNyArMTg5MCwxOCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9zbmFwc2hvdChzdHJ1Y3QgZGV2bGluayAqZGV2bGluayxcXG4gXFx0ICovXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fYmxrczsgaSsrKSB7XFxuIFxcdFxcdHUzMiByZWFkX3N6ID0gbWluX3QodTMyLCBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLCBsZWZ0KTtcXG4tXFxuLVxcdFxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0XFx0aWYgKHN0YXR1cykge1xcbi1cXHRcXHRcXHRkZXZfZGJnKGRldiwgXFxcImljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHN0YXR1cywgaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XFxuLVxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXFxcIik7XFxuLVxcdFxcdFxcdHZmcmVlKG52bV9kYXRhKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdFxcdH1cXG4rXFx0XFx0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcXG4gXFxuIFxcdFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBpICogSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cmVhZF9hcV9lcnIpO1xcbiBcXHRcXHRpZiAoc3RhdHVzKSB7XFxuIFxcdFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiaWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHJlYWRfc3osIHN0YXR1cywgaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XFxuK1xcdFxcdFxcdFxcdHJlYWRfc3osIHN0YXR1cywgcmVhZF9hcV9lcnIpO1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXFxcIik7XFxuLVxcdFxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcdFxcdFxcdHZmcmVlKG52bV9kYXRhKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4gXFxuIFxcdFxcdHRtcCArPSByZWFkX3N6O1xcbiBcXHRcXHRsZWZ0IC09IHJlYWRfc3o7XFxuQEAgLTE5NDMsNiArMTkzNCw3IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4gXFx0XFx0XFx0XFx0dTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKVxcbiB7XFxuK1xcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gZGV2bGlua19wcml2KGRldmxpbmspO1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY2VfcGZfdG9fZGV2KHBmKTtcXG4gXFx0c3RydWN0IGljZV9odyAqaHcgPSBcXHUwMDI2cGYtXFx1MDAzZWh3O1xcbkBAIC0xOTY2LDI0ICsxOTU4LDE0IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcbi1cXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdGlmIChzdGF0dXMpIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcXHUwMDI2c2l6ZSwgZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcXG4rXFx0XFx0XFx0XFx0ICAgcmVhZF9zaGFkb3dfcmFtLCBcXHUwMDI2cmVhZF9hcV9lcnIpO1xcbiBcXHRpZiAoc3RhdHVzKSB7XFxuIFxcdFxcdGRldl9kYmcoZGV2LCBcXFwiaWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHNpemUsIHN0YXR1cywgaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XFxuK1xcdFxcdFxcdHNpemUsIHN0YXR1cywgcmVhZF9hcV9lcnIpO1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXFxcIik7XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuLVxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuaW5kZXggN2ViMzgwYmU3ZWQyNy4uYmY5YTgyMWM1NDNiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuQEAgLTg1Myw2ICs4NTMsNyBAQCBzdGF0aWMgaW50XFxuIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxcbiBcXHQgICAgICAgdTggKmJ5dGVzKVxcbiB7XFxuK1xcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XFxuIFxcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgaWNlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG5AQCAtODY5LDI0ICs4NzAsMTUgQEAgaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCwgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tXFx1MDAzZW9mZnNldCwgXFx1MDAyNmVlcHJvbS1cXHUwMDNlbGVuLCBidWYsXFxuLVxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0ZmFsc2UsIFxcdTAwMjZyZWFkX2FxX2Vycik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCwgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4tXFx0XFx0Z290byByZWxlYXNlO1xcbitcXHRcXHRcXHRyZXQsIGxpYmllX2FxX3N0cihyZWFkX2FxX2VycikpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4gXFx0bWVtY3B5KGJ5dGVzLCBidWYsIGVlcHJvbS1cXHUwMDNlbGVuKTtcXG4tcmVsZWFzZTpcXG4tXFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4gb3V0OlxcbiBcXHRrZnJlZShidWYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbmluZGV4IDhjZGM0ZmRhODllOTcuLjllMDhkYjM3NmQzZDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5AQCAtMjg3MSw2ICsyODcxLDkgQEAgaW50IGljZV92c2lfcmVsZWFzZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0cGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuIFxcbitcXHRpZiAoaWNlX2lzX3ZzaV9kZmx0X3ZzaSh2c2kpKVxcbitcXHRcXHRpY2VfY2xlYXJfZGZsdF92c2kodnNpKTtcXG4rXFxuIFxcdGlmICh0ZXN0X2JpdChJQ0VfRkxBR19SU1NfRU5BLCBwZi1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRpY2VfcnNzX2NsZWFuKHZzaSk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xcbmluZGV4IDdlMTg3YTgwNGRmYTEuLjIxZjNiNjE1ZGJiZjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcXG5AQCAtNTMsMTcgKzUzLDI3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxcbiAgKiBAbGVuZ3RoOiAoaW4pIG51bWJlciBvZiBieXRlcyB0byByZWFkOyAob3V0KSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZFxcbiAgKiBAZGF0YTogYnVmZmVyIHRvIHJldHVybiBkYXRhIGluIChzaXplZCB0byBmaXQgdGhlIHNwZWNpZmllZCBsZW5ndGgpXFxuICAqIEByZWFkX3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2YgTlZNXFxuKyAqIEByZWFkX2FxX2VycjogaWYgbm9uLU5VTEwsIHJlY2VpdmVzIHRoZSBBUSBlcnJvciBzdGF0dXMgb2YgdGhlIGZhaWxpbmcgcmVhZFxcbiAgKlxcbiAgKiBSZWFkcyBhIHBvcnRpb24gb2YgdGhlIE5WTSwgYXMgYSBmbGF0IG1lbW9yeSBzcGFjZS4gVGhpcyBmdW5jdGlvbiBjb3JyZWN0bHlcXG4gICogYnJlYWtzIHJlYWQgcmVxdWVzdHMgYWNyb3NzIFNoYWRvdyBSQU0gc2VjdG9ycyBhbmQgZW5zdXJlcyB0aGF0IG5vIHNpbmdsZVxcbiAgKiByZWFkIHJlcXVlc3QgZXhjZWVkcyB0aGUgbWF4aW11bSA0S0IgcmVhZCBmb3IgYSBzaW5nbGUgQWRtaW5RIGNvbW1hbmQuXFxuICAqXFxuKyAqIEZXIGNhcHMgdGhlIHJlYWQgbG9jayBhdCBhIG1heGltdW0gb2YgMzAwMG1zLCBzbyBhIHJlYWQgc3Bhbm5pbmcgbXVsdGlwbGVcXG4rICogNEtCIHNlY3RvcnMgY2Fubm90IGJlIGRvbmUgdW5kZXIgYSBzaW5nbGUgbG9jayB3aXRob3V0IEZXIHJlY2xhaW1pbmcgaXRcXG4rICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXFxuKyAqIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxcbisgKlxcbisgKiBTaW5jZSBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXNcXG4rICogaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cywgY2FsbGVycyB0aGF0IG5lZWQgdGhlIGZhaWxpbmcgcmVhZCdzIEFRIGVycm9yXFxuKyAqIG11c3QgdXNlIEByZWFkX2FxX2VyciByYXRoZXIgdGhhbiBpbnNwZWN0aW5nIHNxX2xhc3Rfc3RhdHVzIGFmdGVyd2FyZHMuXFxuKyAqXFxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXFxuICAqL1xcbiBpbnRcXG4gaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG4tXFx0XFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSlcXG4rXFx0XFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKVxcbiB7XFxuIFxcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XFxuIFxcdHUzMiBieXRlc19yZWFkID0gMDtcXG5AQCAtOTIsMTIgKzEwMiwzMCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxcbiBcXG4gXFx0XFx0bGFzdF9jbWQgPSAhKGJ5dGVzX3JlYWQgKyByZWFkX3NpemUgXFx1MDAzYyBpbmxlbik7XFxuIFxcbitcXHRcXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX05WTSwgXFxcIkZhaWxlZCB0byBhY3F1aXJlIE5WTSBsb2NrLCBlcnIgJWQgYXFfZXJyICVzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgIHN0YXR1cywgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXFxuIFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcXG4gXFx0XFx0XFx0XFx0XFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0LyogQ2FwdHVyZSB0aGUgcmVhZCdzIEFRIGVycm9yIGJlZm9yZSBpY2VfcmVsZWFzZV9udm0oKVxcbitcXHRcXHRcXHQgKiBpc3N1ZXMgaXRzIG93biBBUSBjb21tYW5kIGFuZCBvdmVyd3JpdGVzXFxuK1xcdFxcdFxcdCAqIHNxX2xhc3Rfc3RhdHVzLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKHJlYWRfYXFfZXJyKVxcbitcXHRcXHRcXHRcXHQqcmVhZF9hcV9lcnIgPSBody1cXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzO1xcbitcXG4rXFx0XFx0XFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRcXHRieXRlc19yZWFkICs9IHJlYWRfc2l6ZTtcXG4gXFx0XFx0b2Zmc2V0ICs9IHJlYWRfc2l6ZTtcXG5AQCAtMTc3LDE0ICsyMDUsMTkgQEAgaW50IGljZV9hcV9lcmFzZV9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZClcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9yZWFkX3NyX3dvcmRfYXEgLSBSZWFkcyBTaGFkb3cgUkFNIHZpYSBBUVxcbisgKiBpY2VfcmVhZF9zcl93b3JkIC0gUmVhZHMgU2hhZG93IFJBTSB3b3JkXFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXFxuICAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxcbiAgKlxcbiAgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS5cXG4rICpcXG4rICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKClcXG4rICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cXG4rICpcXG4rICogUmV0dXJuOiB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAgKi9cXG4tc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuK2ludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuIHtcXG4gXFx0dTMyIGJ5dGVzID0gc2l6ZW9mKHUxNik7XFxuIFxcdF9fbGUxNiBkYXRhX2xvY2FsO1xcbkBAIC0xOTQsNyArMjI3LDcgQEAgc3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuIFxcdCAqIFNoYWRvdyBSQU0gc2VjdG9yIHJlc3RyaWN0aW9ucyBuZWNlc3Nhcnkgd2hlbiByZWFkaW5nIGZyb20gdGhlIE5WTS5cXG4gXFx0ICovXFxuIFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQgKiBzaXplb2YodTE2KSwgXFx1MDAyNmJ5dGVzLFxcbi1cXHRcXHRcXHRcXHQgICAoX19mb3JjZSB1OCAqKVxcdTAwMjZkYXRhX2xvY2FsLCB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0ICAgKF9fZm9yY2UgdTggKilcXHUwMDI2ZGF0YV9sb2NhbCwgdHJ1ZSwgTlVMTCk7XFxuIFxcdGlmIChzdGF0dXMpXFxuIFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcbkBAIC0zMzAsMTMgKzM2Myw4IEBAIGljZV9yZWFkX2ZsYXNoX21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSxcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4tXFxuLVxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCArIG9mZnNldCwgXFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xcbi1cXG4tXFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4rXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICsgb2Zmc2V0LCBcXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCk7XFxuIFxcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuQEAgLTQxOCwyNyArNDQ2LDYgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXRcXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxcbi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbi0gKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIFNoYWRvdyBSQU0gd29yZCB0byByZWFkICgweDAwMDAwMCAtIDB4MDAxRkZGKVxcbi0gKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU1cXG4tICpcXG4tICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgdGhlIGljZV9yZWFkX3NyX3dvcmRfYXEuXFxuLSAqL1xcbi1pbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxcbi17XFxuLVxcdGludCBzdGF0dXM7XFxuLVxcbi1cXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdGlmICghc3RhdHVzKSB7XFxuLVxcdFxcdHN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiBzdGF0dXM7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2IC0gUmVhZHMgc3ViIG1vZHVsZSBUTFYgZnJvbSBOVk0gUEZBXFxuICAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtODU2LDIwICs4NjMsMTggQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXRcXG4gc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG4ge1xcbiBcXHR1MzIgbWluX3NpemUgPSAwLCBtYXhfc2l6ZSA9IElDRV9BUUNfTlZNX01BWF9PRkZTRVQgKyAxO1xcbi1cXHRpbnQgc3RhdHVzO1xcbi1cXG4tXFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbi1cXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRyZXR1cm4gc3RhdHVzO1xcbitcXHRpbnQgc3RhdHVzID0gMDtcXG4gXFxuIFxcdHdoaWxlICgobWF4X3NpemUgLSBtaW5fc2l6ZSkgXFx1MDAzZSAxKSB7XFxuK1xcdFxcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XFxuIFxcdFxcdHUzMiBvZmZzZXQgPSAobWF4X3NpemUgKyBtaW5fc2l6ZSkgLyAyO1xcbiBcXHRcXHR1MzIgbGVuID0gMTtcXG4gXFx0XFx0dTggZGF0YTtcXG4gXFxuLVxcdFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFxcdTAwMjZsZW4sIFxcdTAwMjZkYXRhLCBmYWxzZSk7XFxuK1xcdFxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFxcdTAwMjZsZW4sIFxcdTAwMjZkYXRhLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnJlYWRfYXFfZXJyKTtcXG4gXFx0XFx0aWYgKHN0YXR1cyA9PSAtRUlPIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBody1cXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xcbitcXHRcXHQgICAgcmVhZF9hcV9lcnIgPT0gTElCSUVfQVFfUkNfRUlOVkFMKSB7XFxuIFxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFxcXCIlczogTmV3IHVwcGVyIGJvdW5kIG9mICV1IGJ5dGVzXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgIF9fZnVuY19fLCBvZmZzZXQpO1xcbiBcXHRcXHRcXHRzdGF0dXMgPSAwO1xcbkBAIC04ODAsNyArODg1LDcgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gXFx0XFx0XFx0bWluX3NpemUgPSBvZmZzZXQ7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cXG4tXFx0XFx0XFx0Z290byBlcnJfcmVhZF9mbGF0X252bTtcXG4rXFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC04ODgsOSArODkzLDYgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gXFxuIFxcdGh3LVxcdTAwM2VmbGFzaC5mbGFzaF9zaXplID0gbWF4X3NpemU7XFxuIFxcbi1lcnJfcmVhZF9mbGF0X252bTpcXG4tXFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4tXFxuIFxcdHJldHVybiBzdGF0dXM7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oXFxuaW5kZXggNjNjZGM2YmRhYzU4OS4uZTFkMWExMWY1Y2E0MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxcbkBAIC0xOSw3ICsxOSw3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxcbiBcXHRcXHQgICAgYm9vbCByZWFkX3NoYWRvd19yYW0sIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTtcXG4gaW50XFxuIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsXFxuLVxcdFxcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0pO1xcbitcXHRcXHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtLCBlbnVtIGxpYmllX2FxX2VyciAqcmVhZF9hcV9lcnIpO1xcbiBpbnRcXG4gaWNlX2dldF9wZmFfbW9kdWxlX3RsdihzdHJ1Y3QgaWNlX2h3ICpodywgdTE2ICptb2R1bGVfdGx2LCB1MTYgKm1vZHVsZV90bHZfbGVuLFxcbiBcXHRcXHQgICAgICAgdTE2IG1vZHVsZV90eXBlKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG5pbmRleCA4ZTVmOTc4MzU5NTRjLi4zYTQxYzcxMWU3NTFiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXFxuQEAgLTQ4MDgsMTUgKzQ4MDgsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxcbiBcXHRcXHRcXHRcXHQgICAgICAgIUZJRUxEX0dFVChSRUdfTExfUFJPWFlfSF9FWEVDLCB2YWwpLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgMTAsIFJFR19MTF9QUk9YWV9IX1RJTUVPVVRfVVMsIGZhbHNlLCBodyxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIFJFR19MTF9QUk9YWV9IKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbi1cXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC00ODM3LDggKzQ4MzQsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxcbiBcXHR1OCB0bXJfaWR4O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKGh3LVxcdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSlcXG4tXFx0XFx0cmV0dXJuIGljZV9wdHBfcHJlcF9waHlfYWRqX2xsX2U4MTAoaHcsIGFkaik7XFxuK1xcdGlmIChody1cXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpIHtcXG4rXFx0XFx0ZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9hZGpfbGxfZTgxMChodywgYWRqKTtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiTEwgYWRqIHRpbWVkIG91dCwgZmFsbGluZyBiYWNrIHRvIFNCUVxcXFxuXFxcIik7XFxuK1xcdH1cXG4gXFxuIFxcdHRtcl9pZHggPSBody1cXHUwMDNlZnVuY19jYXBzLnRzX2Z1bmNfaW5mby50bXJfaW5kZXhfb3duZWQ7XFxuIFxcbkBAIC00OTAxLDE1ICs0OTAyLDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgdTY0IGluY3ZhbClcXG4gXFx0XFx0XFx0XFx0ICAgICAgICFGSUVMRF9HRVQoUkVHX0xMX1BST1hZX0hfRVhFQywgdmFsKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIDEwLCBSRUdfTExfUFJPWFlfSF9USU1FT1VUX1VTLCBmYWxzZSwgaHcsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBSRUdfTExfUFJPWFlfSCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXFxcIkZhaWxlZCB0byBwcmVwYXJlIFBIWSB0aW1lciBpbmNyZW1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxcXG5cXFwiKTtcXG4tXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbi1cXG4gXFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZwYXJhbXMtXFx1MDAzZWF0cWJhbF93cS5sb2NrKTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUFRQLCBcXFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGluY3JlbWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXFxcblxcXCIpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQ5MjcsOCArNDkyNSwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHU2NCBpbmN2YWwpXFxuIFxcdHU4IHRtcl9pZHg7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRpZiAoaHctXFx1MDAzZWRldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKVxcbi1cXHRcXHRyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTtcXG4rXFx0aWYgKGh3LVxcdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkge1xcbitcXHRcXHRlcnIgPSBpY2VfcHRwX3ByZXBfcGh5X2luY3ZhbF9sbF9lODEwKGh3LCBpbmN2YWwpO1xcbitcXHRcXHRpZiAoZXJyICE9IC1FVElNRURPVVQpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFxcXCJMTCBpbmN2YWwgdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXFxcXG5cXFwiKTtcXG4rXFx0fVxcbiBcXG4gXFx0dG1yX2lkeCA9IGh3LVxcdTAwM2VmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDtcXG4gXFx0bG93ID0gbG93ZXJfMzJfYml0cyhpbmN2YWwpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xcbmluZGV4IGM3MjRkNDI5YTdhYTkuLjkxY2E3NWU0NTQ2MzAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcXG5AQCAtMjQwOCw3ICsyNDA4LDcgQEAgdm9pZCBpZHBmX3R4X3NwbGl0cV9idWlsZF9mbG93X2Rlc2ModW5pb24gaWRwZl90eF9mbGV4X2Rlc2MgKmRlc2MsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICpwYXJhbXMsXFxuIFxcdFxcdFxcdFxcdCAgICB1MTYgdGRfY21kLCB1MTYgc2l6ZSlcXG4ge1xcbi1cXHQqKHUzMiAqKVxcdTAwMjZkZXNjLVxcdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSAodTgpKHBhcmFtcy1cXHUwMDNlZHR5cGUgfCB0ZF9jbWQpO1xcbitcXHQqKF9fbGUzMiAqKVxcdTAwMjZkZXNjLVxcdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy1cXHUwMDNlZHR5cGUgfCB0ZF9jbWQpKTtcXG4gXFx0ZGVzYy1cXHUwMDNlZmxvdy5xdzEucnhyX2J1ZnNpemUgPSBjcHVfdG9fbGUxNigodTE2KXNpemUpO1xcbiBcXHRkZXNjLVxcdTAwM2VmbG93LnF3MS5jb21wbF90YWcgPSBjcHVfdG9fbGUxNihwYXJhbXMtXFx1MDAzZWNvbXBsX3RhZyk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NDM6MDAuODQwOTM1ODQyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjI3MDczMDk0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBgaWNlYCBhbmQgYGlkcGZgIGRyaXZlcnMsIHdoaWNoIGFyZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlcnMgZm9yIEludGVsIEU4MDAgc2VyaWVzIGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkZXZpY2VzLiBUaGVzZSByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgbWFraW5nIHRoZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzE0ZTFlZDE4OTNhYmVkYjM3MGUwMjllMTVhY2NkZjVjMjIyOTI4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDAwOjQyOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5pbmRleCAyMmI3ZDhlNmJkOWU4Li44YzJiNjNlZWY4MmJkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcbkBAIC0xODkwLDI3ICsxODkwLDE4IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0ICovXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYmxrczsgaSsrKSB7XG4gXHRcdHUzMiByZWFkX3N6ID0gbWluX3QodTMyLCBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLCBsZWZ0KTtcbi1cbi1cdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0XHRpZiAoc3RhdHVzKSB7XG4tXHRcdFx0ZGV2X2RiZyhkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVwiKTtcbi1cdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbitcdFx0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcbiBcbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuLVx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4rXHRcdFx0XHRcdCAgIFx1MDAyNnJlYWRfc3osIHRtcCwgcmVhZF9zaGFkb3dfcmFtLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZyZWFkX2FxX2Vycik7XG4gXHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRkZXZfZGJnKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdFx0cmVhZF9zeiwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuK1x0XHRcdFx0cmVhZF9zeiwgc3RhdHVzLCByZWFkX2FxX2Vycik7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcIik7XG4tXHRcdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcbiBcdFx0dG1wICs9IHJlYWRfc3o7XG4gXHRcdGxlZnQgLT0gcmVhZF9zejtcbkBAIC0xOTQzLDYgKzE5MzQsNyBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuIFx0XHRcdFx0dTY0IG9mZnNldCwgdTMyIHNpemUsIHU4ICpkYXRhKVxuIHtcbitcdGVudW0gbGliaWVfYXFfZXJyIHJlYWRfYXFfZXJyID0gTElCSUVfQVFfUkNfT0s7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IGRldmxpbmtfcHJpdihkZXZsaW5rKTtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGljZV9wZl90b19kZXYocGYpO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbkBAIC0xOTY2LDI0ICsxOTU4LDE0IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRcdHJldHVybiAtRVJBTkdFO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cykge1xuLVx0XHRkZXZfZGJnKGRldiwgXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxuXCIsXG4tXHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIkZhaWxlZCB0byBhY3F1aXJlIE5WTSBzZW1hcGhvcmVcIik7XG4tXHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuIFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcdTAwMjZzaXplLCBkYXRhLFxuLVx0XHRcdFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcbitcdFx0XHRcdCAgIHJlYWRfc2hhZG93X3JhbSwgXHUwMDI2cmVhZF9hcV9lcnIpO1xuIFx0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZGJnKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdHNpemUsIHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbitcdFx0XHRzaXplLCBzdGF0dXMsIHJlYWRfYXFfZXJyKTtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcIik7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdHJldHVybiAtRUlPO1xuIFx0fVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5pbmRleCA3ZWIzODBiZTdlZDI3Li5iZjlhODIxYzU0M2I3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5AQCAtODUzLDYgKzg1Myw3IEBAIHN0YXRpYyBpbnRcbiBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiBcdCAgICAgICB1OCAqYnl0ZXMpXG4ge1xuK1x0ZW51bSBsaWJpZV9hcV9lcnIgcmVhZF9hcV9lcnIgPSBMSUJJRV9BUV9SQ19PSztcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gaWNlX25ldGRldl90b19wZihuZXRkZXYpO1xuIFx0c3RydWN0IGljZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbkBAIC04NjksMjQgKzg3MCwxNSBAQCBpY2VfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSxcbiBcdGlmICghYnVmKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChyZXQpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xcblwiLFxuLVx0XHRcdHJldCwgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tXHUwMDNlb2Zmc2V0LCBcdTAwMjZlZXByb20tXHUwMDNlbGVuLCBidWYsXG4tXHRcdFx0XHRmYWxzZSk7XG4rXHRcdFx0XHRmYWxzZSwgXHUwMDI2cmVhZF9hcV9lcnIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXG5cIixcbi1cdFx0XHRyZXQsIGxpYmllX2FxX3N0cihody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcbi1cdFx0Z290byByZWxlYXNlO1xuK1x0XHRcdHJldCwgbGliaWVfYXFfc3RyKHJlYWRfYXFfZXJyKSk7XG4rXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuIFx0bWVtY3B5KGJ5dGVzLCBidWYsIGVlcHJvbS1cdTAwM2VsZW4pO1xuLXJlbGVhc2U6XG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIG91dDpcbiBcdGtmcmVlKGJ1Zik7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5pbmRleCA4Y2RjNGZkYTg5ZTk3Li45ZTA4ZGIzNzZkM2QwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuQEAgLTI4NzEsNiArMjg3MSw5IEBAIGludCBpY2VfdnNpX3JlbGVhc2Uoc3RydWN0IGljZV92c2kgKnZzaSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHRwZiA9IHZzaS1cdTAwM2ViYWNrO1xuIFxuK1x0aWYgKGljZV9pc192c2lfZGZsdF92c2kodnNpKSlcbitcdFx0aWNlX2NsZWFyX2RmbHRfdnNpKHZzaSk7XG4rXG4gXHRpZiAodGVzdF9iaXQoSUNFX0ZMQUdfUlNTX0VOQSwgcGYtXHUwMDNlZmxhZ3MpKVxuIFx0XHRpY2VfcnNzX2NsZWFuKHZzaSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbmluZGV4IDdlMTg3YTgwNGRmYTEuLjIxZjNiNjE1ZGJiZjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXG5AQCAtNTMsMTcgKzUzLDI3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuICAqIEBsZW5ndGg6IChpbikgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQ7IChvdXQpIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkXG4gICogQGRhdGE6IGJ1ZmZlciB0byByZXR1cm4gZGF0YSBpbiAoc2l6ZWQgdG8gZml0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoKVxuICAqIEByZWFkX3NoYWRvd19yYW06IGlmIHRydWUsIHJlYWQgZnJvbSBzaGFkb3cgUkFNIGluc3RlYWQgb2YgTlZNXG4rICogQHJlYWRfYXFfZXJyOiBpZiBub24tTlVMTCwgcmVjZWl2ZXMgdGhlIEFRIGVycm9yIHN0YXR1cyBvZiB0aGUgZmFpbGluZyByZWFkXG4gICpcbiAgKiBSZWFkcyBhIHBvcnRpb24gb2YgdGhlIE5WTSwgYXMgYSBmbGF0IG1lbW9yeSBzcGFjZS4gVGhpcyBmdW5jdGlvbiBjb3JyZWN0bHlcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXG4gICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtCIHJlYWQgZm9yIGEgc2luZ2xlIEFkbWluUSBjb21tYW5kLlxuICAqXG4rICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZVxuKyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0XG4rICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXG4rICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXG4rICpcbisgKiBTaW5jZSBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IG92ZXJ3cml0ZXNcbisgKiBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMsIGNhbGxlcnMgdGhhdCBuZWVkIHRoZSBmYWlsaW5nIHJlYWQncyBBUSBlcnJvclxuKyAqIG11c3QgdXNlIEByZWFkX2FxX2VyciByYXRoZXIgdGhhbiBpbnNwZWN0aW5nIHNxX2xhc3Rfc3RhdHVzIGFmdGVyd2FyZHMuXG4rICpcbiAgKiBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgb24gZmFpbHVyZS4gTm90ZSB0aGF0IHRoZSBkYXRhIHBvaW50ZXIgbWF5IGJlXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXG4gICovXG4gaW50XG4gaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcbi1cdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSlcbitcdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKVxuIHtcbiBcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XG4gXHR1MzIgYnl0ZXNfcmVhZCA9IDA7XG5AQCAtOTIsMTIgKzEwMiwzMCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFxuIFx0XHRsYXN0X2NtZCA9ICEoYnl0ZXNfcmVhZCArIHJlYWRfc2l6ZSBcdTAwM2MgaW5sZW4pO1xuIFxuK1x0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfTlZNLCBcIkZhaWxlZCB0byBhY3F1aXJlIE5WTSBsb2NrLCBlcnIgJWQgYXFfZXJyICVzXFxuXCIsXG4rXHRcdFx0XHQgIHN0YXR1cywgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4gXHRcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXG4gXHRcdFx0XHRcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcbiBcdFx0XHRcdFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcbiBcdFx0XHRcdFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XG4tXHRcdGlmIChzdGF0dXMpXG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHQvKiBDYXB0dXJlIHRoZSByZWFkJ3MgQVEgZXJyb3IgYmVmb3JlIGljZV9yZWxlYXNlX252bSgpXG4rXHRcdFx0ICogaXNzdWVzIGl0cyBvd24gQVEgY29tbWFuZCBhbmQgb3ZlcndyaXRlc1xuK1x0XHRcdCAqIHNxX2xhc3Rfc3RhdHVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChyZWFkX2FxX2VycilcbitcdFx0XHRcdCpyZWFkX2FxX2VyciA9IGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cztcbitcbitcdFx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdGJ5dGVzX3JlYWQgKz0gcmVhZF9zaXplO1xuIFx0XHRvZmZzZXQgKz0gcmVhZF9zaXplO1xuQEAgLTE3NywxNCArMjA1LDE5IEBAIGludCBpY2VfYXFfZXJhc2VfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgc3RydWN0IGljZV9zcV9jZCAqY2QpXG4gfVxuIFxuIC8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmRfYXEgLSBSZWFkcyBTaGFkb3cgUkFNIHZpYSBBUVxuKyAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmRcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXG4gICogQGRhdGE6IHdvcmQgcmVhZCBmcm9tIHRoZSBTaGFkb3cgUkFNXG4gICpcbiAgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS5cbisgKlxuKyAqIFRoZSBOVk0gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW50ZXJuYWxseSBieSBpY2VfcmVhZF9mbGF0X252bSgpXG4rICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cbisgKlxuKyAqIFJldHVybjogemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiAgKi9cbi1zdGF0aWMgaW50IGljZV9yZWFkX3NyX3dvcmRfYXEoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcbitpbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuIHtcbiBcdHUzMiBieXRlcyA9IHNpemVvZih1MTYpO1xuIFx0X19sZTE2IGRhdGFfbG9jYWw7XG5AQCAtMTk0LDcgKzIyNyw3IEBAIHN0YXRpYyBpbnQgaWNlX3JlYWRfc3Jfd29yZF9hcShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuIFx0ICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLlxuIFx0ICovXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksIFx1MDAyNmJ5dGVzLFxuLVx0XHRcdFx0ICAgKF9fZm9yY2UgdTggKilcdTAwMjZkYXRhX2xvY2FsLCB0cnVlKTtcbitcdFx0XHRcdCAgIChfX2ZvcmNlIHU4ICopXHUwMDI2ZGF0YV9sb2NhbCwgdHJ1ZSwgTlVMTCk7XG4gXHRpZiAoc3RhdHVzKVxuIFx0XHRyZXR1cm4gc3RhdHVzO1xuIFxuQEAgLTMzMCwxMyArMzYzLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpXG4tXHRcdHJldHVybiBzdGF0dXM7XG4tXG4tXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgc3RhcnQgKyBvZmZzZXQsIFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xuLVxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbitcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCArIG9mZnNldCwgXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSxcbitcdFx0XHRcdCAgIE5VTEwpO1xuIFxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG5AQCAtNDE4LDI3ICs0NDYsNiBAQCBpY2VfcmVhZF9uZXRsaXN0X21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTMyIG9mZnNldFxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4tLyoqXG4tICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZCBhbmQgYWNxdWlyZSBOVk0gaWYgbmVjZXNzYXJ5XG4tICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbi0gKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIFNoYWRvdyBSQU0gd29yZCB0byByZWFkICgweDAwMDAwMCAtIDB4MDAxRkZGKVxuLSAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxuLSAqXG4tICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgdGhlIGljZV9yZWFkX3NyX3dvcmRfYXEuXG4tICovXG4taW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcbi17XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKCFzdGF0dXMpIHtcbi1cdFx0c3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTtcbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cdH1cbi1cbi1cdHJldHVybiBzdGF0dXM7XG4tfVxuLVxuIC8qKlxuICAqIGljZV9nZXRfcGZhX21vZHVsZV90bHYgLSBSZWFkcyBzdWIgbW9kdWxlIFRMViBmcm9tIE5WTSBQRkFcbiAgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtODU2LDIwICs4NjMsMTggQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXRcbiBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIHtcbiBcdHUzMiBtaW5fc2l6ZSA9IDAsIG1heF9zaXplID0gSUNFX0FRQ19OVk1fTUFYX09GRlNFVCArIDE7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbitcdGludCBzdGF0dXMgPSAwO1xuIFxuIFx0d2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSBcdTAwM2UgMSkge1xuK1x0XHRlbnVtIGxpYmllX2FxX2VyciByZWFkX2FxX2VyciA9IExJQklFX0FRX1JDX09LO1xuIFx0XHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICsgbWluX3NpemUpIC8gMjtcbiBcdFx0dTMyIGxlbiA9IDE7XG4gXHRcdHU4IGRhdGE7XG4gXG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFx1MDAyNmxlbiwgXHUwMDI2ZGF0YSwgZmFsc2UpO1xuK1x0XHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0LCBcdTAwMjZsZW4sIFx1MDAyNmRhdGEsIGZhbHNlLFxuK1x0XHRcdFx0XHQgICBcdTAwMjZyZWFkX2FxX2Vycik7XG4gXHRcdGlmIChzdGF0dXMgPT0gLUVJTyBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyA9PSBMSUJJRV9BUV9SQ19FSU5WQUwpIHtcbitcdFx0ICAgIHJlYWRfYXFfZXJyID09IExJQklFX0FRX1JDX0VJTlZBTCkge1xuIFx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19OVk0sIFwiJXM6IE5ldyB1cHBlciBib3VuZCBvZiAldSBieXRlc1xcblwiLFxuIFx0XHRcdFx0ICBfX2Z1bmNfXywgb2Zmc2V0KTtcbiBcdFx0XHRzdGF0dXMgPSAwO1xuQEAgLTg4MCw3ICs4ODUsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdG1pbl9zaXplID0gb2Zmc2V0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cbi1cdFx0XHRnb3RvIGVycl9yZWFkX2ZsYXRfbnZtO1xuK1x0XHRcdHJldHVybiBzdGF0dXM7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC04ODgsOSArODkzLDYgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcbiBcbiBcdGh3LVx1MDAzZWZsYXNoLmZsYXNoX3NpemUgPSBtYXhfc2l6ZTtcbiBcbi1lcnJfcmVhZF9mbGF0X252bTpcbi1cdGljZV9yZWxlYXNlX252bShodyk7XG4tXG4gXHRyZXR1cm4gc3RhdHVzO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaFxuaW5kZXggNjNjZGM2YmRhYzU4OS4uZTFkMWExMWY1Y2E0MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmhcbkBAIC0xOSw3ICsxOSw3IEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxuIFx0XHQgICAgYm9vbCByZWFkX3NoYWRvd19yYW0sIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTtcbiBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuLVx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKTtcbitcdFx0ICBib29sIHJlYWRfc2hhZG93X3JhbSwgZW51bSBsaWJpZV9hcV9lcnIgKnJlYWRfYXFfZXJyKTtcbiBpbnRcbiBpY2VfZ2V0X3BmYV9tb2R1bGVfdGx2KHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgKm1vZHVsZV90bHYsIHUxNiAqbW9kdWxlX3Rsdl9sZW4sXG4gXHRcdCAgICAgICB1MTYgbW9kdWxlX3R5cGUpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfcHRwX2h3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3B0cF9ody5jXG5pbmRleCA4ZTVmOTc4MzU5NTRjLi4zYTQxYzcxMWU3NTFiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9wdHBfaHcuY1xuQEAgLTQ4MDgsMTUgKzQ4MDgsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCBzMzIgYWRqKVxuIFx0XHRcdFx0ICAgICAgICFGSUVMRF9HRVQoUkVHX0xMX1BST1hZX0hfRVhFQywgdmFsKSxcbiBcdFx0XHRcdCAgICAgICAxMCwgUkVHX0xMX1BST1hZX0hfVElNRU9VVF9VUywgZmFsc2UsIGh3LFxuIFx0XHRcdFx0ICAgICAgIFJFR19MTF9QUk9YWV9IKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgYWRqdXN0bWVudCB1c2luZyBsb3cgbGF0ZW5jeSBpbnRlcmZhY2VcXG5cIik7XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZwYXJhbXMtXHUwMDNlYXRxYmFsX3dxLmxvY2spO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBhcmFtcy1cdTAwM2VhdHFiYWxfd3EubG9jayk7XG4gXG4tXHRyZXR1cm4gMDtcbitcdGlmIChlcnIpXG4rXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiRmFpbGVkIHRvIHByZXBhcmUgUEhZIHRpbWVyIGFkanVzdG1lbnQgdXNpbmcgbG93IGxhdGVuY3kgaW50ZXJmYWNlXFxuXCIpO1xuK1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gLyoqXG5AQCAtNDgzNyw4ICs0ODM0LDEyIEBAIHN0YXRpYyBpbnQgaWNlX3B0cF9wcmVwX3BoeV9hZGpfZTgxMChzdHJ1Y3QgaWNlX2h3ICpodywgczMyIGFkailcbiBcdHU4IHRtcl9pZHg7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKGh3LVx1MDAzZWRldl9jYXBzLnRzX2Rldl9pbmZvLmxsX3BoeV90bXJfdXBkYXRlKVxuLVx0XHRyZXR1cm4gaWNlX3B0cF9wcmVwX3BoeV9hZGpfbGxfZTgxMChodywgYWRqKTtcbitcdGlmIChody1cdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSkge1xuK1x0XHRlcnIgPSBpY2VfcHRwX3ByZXBfcGh5X2Fkal9sbF9lODEwKGh3LCBhZGopO1xuK1x0XHRpZiAoZXJyICE9IC1FVElNRURPVVQpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJMTCBhZGogdGltZWQgb3V0LCBmYWxsaW5nIGJhY2sgdG8gU0JRXFxuXCIpO1xuK1x0fVxuIFxuIFx0dG1yX2lkeCA9IGh3LVx1MDAzZWZ1bmNfY2Fwcy50c19mdW5jX2luZm8udG1yX2luZGV4X293bmVkO1xuIFxuQEAgLTQ5MDEsMTUgKzQ5MDIsMTIgQEAgc3RhdGljIGludCBpY2VfcHRwX3ByZXBfcGh5X2luY3ZhbF9sbF9lODEwKHN0cnVjdCBpY2VfaHcgKmh3LCB1NjQgaW5jdmFsKVxuIFx0XHRcdFx0ICAgICAgICFGSUVMRF9HRVQoUkVHX0xMX1BST1hZX0hfRVhFQywgdmFsKSxcbiBcdFx0XHRcdCAgICAgICAxMCwgUkVHX0xMX1BST1hZX0hfVElNRU9VVF9VUywgZmFsc2UsIGh3LFxuIFx0XHRcdFx0ICAgICAgIFJFR19MTF9QUk9YWV9IKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgaW5jcmVtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwiKTtcbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnBhcmFtcy1cdTAwM2VhdHFiYWxfd3EubG9jayk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4tXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2cGFyYW1zLVx1MDAzZWF0cWJhbF93cS5sb2NrKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0aWYgKGVycilcbitcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1BUUCwgXCJGYWlsZWQgdG8gcHJlcGFyZSBQSFkgdGltZXIgaW5jcmVtZW50IHVzaW5nIGxvdyBsYXRlbmN5IGludGVyZmFjZVxcblwiKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTQ5MjcsOCArNDkyNSwxMiBAQCBzdGF0aWMgaW50IGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2U4MTAoc3RydWN0IGljZV9odyAqaHcsIHU2NCBpbmN2YWwpXG4gXHR1OCB0bXJfaWR4O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChody1cdTAwM2VkZXZfY2Fwcy50c19kZXZfaW5mby5sbF9waHlfdG1yX3VwZGF0ZSlcbi1cdFx0cmV0dXJuIGljZV9wdHBfcHJlcF9waHlfaW5jdmFsX2xsX2U4MTAoaHcsIGluY3ZhbCk7XG4rXHRpZiAoaHctXHUwMDNlZGV2X2NhcHMudHNfZGV2X2luZm8ubGxfcGh5X3Rtcl91cGRhdGUpIHtcbitcdFx0ZXJyID0gaWNlX3B0cF9wcmVwX3BoeV9pbmN2YWxfbGxfZTgxMChodywgaW5jdmFsKTtcbitcdFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19QVFAsIFwiTEwgaW5jdmFsIHRpbWVkIG91dCwgZmFsbGluZyBiYWNrIHRvIFNCUVxcblwiKTtcbitcdH1cbiBcbiBcdHRtcl9pZHggPSBody1cdTAwM2VmdW5jX2NhcHMudHNfZnVuY19pbmZvLnRtcl9pbmRleF9vd25lZDtcbiBcdGxvdyA9IGxvd2VyXzMyX2JpdHMoaW5jdmFsKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZHBmL2lkcGZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX3R4cnguY1xuaW5kZXggYzcyNGQ0MjlhN2FhOS4uOTFjYTc1ZTQ1NDYzMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl90eHJ4LmNcbkBAIC0yNDA4LDcgKzI0MDgsNyBAQCB2b2lkIGlkcGZfdHhfc3BsaXRxX2J1aWxkX2Zsb3dfZGVzYyh1bmlvbiBpZHBmX3R4X2ZsZXhfZGVzYyAqZGVzYyxcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgaWRwZl90eF9zcGxpdHFfcGFyYW1zICpwYXJhbXMsXG4gXHRcdFx0XHQgICAgdTE2IHRkX2NtZCwgdTE2IHNpemUpXG4ge1xuLVx0Kih1MzIgKilcdTAwMjZkZXNjLVx1MDAzZWZsb3cucXcxLmNtZF9kdHlwZSA9ICh1OCkocGFyYW1zLVx1MDAzZWR0eXBlIHwgdGRfY21kKTtcbitcdCooX19sZTMyICopXHUwMDI2ZGVzYy1cdTAwM2VmbG93LnF3MS5jbWRfZHR5cGUgPSBjcHVfdG9fbGUzMigodTgpKHBhcmFtcy1cdTAwM2VkdHlwZSB8IHRkX2NtZCkpO1xuIFx0ZGVzYy1cdTAwM2VmbG93LnF3MS5yeHJfYnVmc2l6ZSA9IGNwdV90b19sZTE2KCh1MTYpc2l6ZSk7XG4gXHRkZXNjLVx1MDAzZWZsb3cucXcxLmNvbXBsX3RhZyA9IGNwdV90b19sZTE2KHBhcmFtcy1cdTAwM2Vjb21wbF90YWcpO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjAwLjg0MDkzNzQ5MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMjM1MTc5NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaCBhbmQgRnV6emFiaWxpdHkgb2YgSW50ZWwgTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgc3BlY2lmaWNhbGx5IHRob3NlIGxvY2F0ZWQgaW4gdGhlIEludGVsIEV0aGVybmV0IGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkaXJlY3Rvcmllcy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBhc3Nlc3MgdGhlaXIgcmVsZXZhbmNlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSBRRU1VLiBUaGUgYGljZWAgZHJpdmVyLCBJIGtub3csIGhhbmRsZXMgdGhlIEludGVsIEU4MDAgc2VyaWVzLCB3aGljaCBhcmUgdHlwaWNhbGx5IHBoeXNpY2FsIFBDSWUgY2FyZHMuIE5vdywgdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgUUVNVSBldmVuIGVtdWxhdGVzIHRob3NlP1xuXG5SaWdodCwgdGhlIHByb21wdCBpdHNlbGYgaXMgYSBjbHVlLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoYXQgY2VydGFpbiBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGluZ3MgbGlrZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgLi4uIHRoZXkncmUgb3V0LiBTbywgZG9lcyB0aGF0IGFwcGx5IHRvIGBpY2VgPyBOb3BlLiBTdGFuZGFyZCBRRU1VLCBhcyBJIHJlY2FsbCwgc3RpY2tzIHRvIGVtdWxhdGluZyB0aGUgbW9yZSBjb21tb24gYWRhcHRlcnMgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGBydGw4MTM5YCwgYHBjbmV0YCwgYHZteG5ldDNgLCBhbmQgYHZpcnRpby1uZXRgLiBOb3csIGBpZ2JgIGlzIGVtdWxhdGVkOyB0aGF0J3MgYSBkYXRhIHBvaW50LiBCdXQgaXMgYGljZWA/IE5vLiBBbmQgYGlkcGZgPyBObywgdGhhdCdzIG5vdCBlbXVsYXRlZCBlaXRoZXIuXG5cbk9rYXksIG5leHQgcXVlc3Rpb246IGFyZSB0aGVzZSBkcml2ZXJzICpmdXp6YWJsZSo/IEdlbmVyYWxseSwgcGh5c2ljYWwgbmV0d29yayBjYXJkIGRyaXZlcnMgd2l0aG91dCBlbXVsYXRpb24gYXJlIGEgbm8tZ28gZm9yIGZ1enppbmcsIHVubGVzcyB0aGV5IG9wZXJhdGUgb3ZlciBVU0Igb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNpbmNlIGBpY2VgIGlzIGEgUENJIGRyaXZlciwgdGhhdCdzIGFub3RoZXIgc3RyaWtlIGFnYWluc3QgaXQuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUgaXRzZWxmLiBMZXQgbWUgY2hlY2sgc29tZXRoaW5nIGxpa2UgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jYCB0byBjb25maXJtIGl0J3MgUENJLWJhc2VkIGFuZCB0aGVyZWZvcmUgdW5saWtlbHkgdG8gYmUgZnV6emFibGUgaW4gdGhlIGFic2VuY2Ugb2YgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNDYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzowOC44NjQ0NTc0NjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjY5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTU4Njg9c3RhdGljIGludCBfX2luaXQgaWNlX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODkwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4OTE6XFx0c3RhdHVzID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWNlX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg5Mi1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjA4LjkxNzM4NzM5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzY3ODAwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQQ0kgRHJpdmVyIElkZW50aWZpY2F0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggXCJpY2UsXCIgdGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGl0J3Mga25vd24gdG8gYmUgYSBQQ0kgZHJpdmVyLiBOb3csIHRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQsIGlzIHRvIGNoZWNrIGBpZHBmYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGllcyBpbi4gSeKAmWxsIHNlZSBpZiB0aGlzIGlzIHJlbGF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5ODksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxMi4yOTQxNzAwNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0MjQ3ODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjEyLjMzNzYwMDM4NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzU4MDA1NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipDb25zaWRlcmluZyB0aGUgTmF0dXJlIG9mIGBpZHBmYCoqXG5cbk9rYXksIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGlkcGZgIHRoaW5nLiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGl0IHdhcyBsaWtlbHkgc29tZXRoaW5nIHNwZWNpZmljLCBtYXliZSBhIHVzZXItbGV2ZWwgdG9vbC4gQnV0IHRoZW4gaXQgaGl0IG1lIOKAkyBoYW5nIG9uIGEgc2Vjb25kLiBHaXZlbiB0aGUgY29udGV4dCwgdGhlIHdheSBpdCdzIGJlaW5nIHVzZWQsIGBpZHBmYCAqY291bGQqIHZlcnkgd2VsbCBiZSBhbm90aGVyIFBDSSBkcml2ZXIsIG9yIGF0IGxlYXN0IHNvbWUga2luZCBvZiBhdXhpbGlhcnkgZHJpdmVyIGNvbXBvbmVudCB0aGF0IGludGVyYWN0cyB3aXRoIHRoZSBQQ0kgYnVzLiBJdCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24gdG8gY29uZmlybSBpdHMgcm9sZS4gSXQncyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmlsaXRpZXMgYW5kIG5vdCBqdW1wIHRvIGNvbmNsdXNpb25zIHdpdGhvdXQgcHJvcGVyIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NDM6MTUuNDczNDAzMTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNTc5MzgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxNS41MTc1NjY1NDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjE5ODQxMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgaWRwZmAgUmVnaXN0cnkqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHdoYXQgdGhlIGBpZHBmYCBpZGVudGlmaWVyIGN1cnJlbnRseSByZXByZXNlbnRzIHdpdGhpbiB0aGUgc3lzdGVtLiBJJ20gYXNzdW1pbmcgaXQncyByZWxhdGVkIHRvIHNvbWUgZXN0YWJsaXNoZWQgc3RhbmRhcmQgb3IgY29tcG9uZW50LCBsaWtlbHkgaW4gYSBmaWVsZCBsaWtlIGRpZ2l0YWwgcHVibGlzaGluZywgYWNjZXNzaWJpbGl0eSwgb3IgcGVyaGFwcyBhIG1vcmUgb2JzY3VyZSBhcmVhIEkgaGF2ZW4ndCBpbW1lZGlhdGVseSBjYXRlZ29yaXplZC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0J3MgcHJvYmFibHkgY29ubmVjdGVkIHdpdGggdGhlIEludGVybmF0aW9uYWwgRGlnaXRhbCBQdWJsaXNoaW5nIEZvcnVtIChJRFBGKSwgZ2l2ZW4gdGhlIGFjcm9ueW3igJlzIGNvbXBvc2l0aW9uLCBidXQgSSBzaG91bGRuJ3QgcmVseSBvbiBhc3N1bXB0aW9ucywgYW5kIEkgbmVlZCB0byBjb25maXJtIGl0cyBjdXJyZW50IGFzc29jaWF0aW9uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IHJlZ2lzdHJpZXMsIGRhdGFiYXNlcywgb3IgZG9jdW1lbnRhdGlvbiB0byBnZXQgYSBkZWZpbml0aXZlIGFuc3dlci4gVGhpcyBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIG9ubGluZSBzb3VyY2VzLCBzeXN0ZW0gY29uZmlndXJhdGlvbiBmaWxlcywgb3IgcGVyaGFwcyBldmVuIHF1ZXJ5aW5nIHRoZSByZWxldmFudCBBUEkgaWYgb25lIGV4aXN0cy4gRGV0ZXJtaW5pbmcgdGhlIHNwZWNpZmljIG1hcHBpbmcgb2YgYGlkcGZgIGlzIHRoZSBpbW1lZGlhdGUgb2JqZWN0aXZlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzNTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxOS4xMzc0MDk3NTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzMxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYz0zODI9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcGZfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYy0zODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozODQ6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlkcGZfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzg1LVxcdC5uYW1lXFx0XFx0XFx0PSBLQlVJTERfTU9ETkFNRSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lkcGYvaWRwZl9tYWluLmMtMzkxLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWRwZi9pZHBmX21haW4uYzozOTI6bW9kdWxlX3BjaV9kcml2ZXIoaWRwZl9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQwMDo0MzoxOS4xODAxNDQ0MDhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODA3MzgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBVbmZ1enphYmxlIENvZGUgUGF0aHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2ggYW5kIGl0J3MgbW9kaWZ5aW5nIHRoZSBgaWNlYCBhbmQgYGlkcGZgIGRyaXZlcnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkFoLCBJbnRlbCdzIEU4MDAgc2VyaWVzIGFuZCBJbmZyYXN0cnVjdHVyZSBEYXRhIENlbnRlciBGdW5jdGlvbiBkZXZpY2VzLCB0aG9zZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGRyaXZlcnMuXCIgQW5kIHRoZW4gaXQgY2xpY2tzOiB0aGVzZSBkcml2ZXJzICpyZXF1aXJlKiBwaHlzaWNhbCBoYXJkd2FyZS4gVGhleSdyZSBub3QgZ29pbmcgdG8gZnVuY3Rpb24gaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgcGF0aHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoIGFyZSwgaW4gcHJhY3RpY2FsIHRlcm1zLCB1bnJlYWNoYWJsZSBmb3IgYW55IGtpbmQgb2YgZnV6emluZyB3aXRoaW4gYSB0eXBpY2FsIHZpcnR1YWwgc2V0dXAuIEnigJltIGdvaW5nIHRvIGhhdmUgdG8gbWFyayB0aGlzIGFzIFdvcnRoRnV6emluZz1mYWxzZS4gSXQncyBhIHdhc3RlIG9mIHJlc291cmNlcyB0byBldmVuIGNvbnNpZGVyIGl0LiBUaGUgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIHRvIGV2ZW4gdGVzdCB0aGlzIGlzIHZlcnkgbmljaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MDksIk91dHB1dFRva2VucyI6OTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMDA6NDM6MjMuNTQ4MjIwMjQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGBpY2VgIGFuZCBgaWRwZmAgZHJpdmVycywgd2hpY2ggYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgZHJpdmVycyBmb3IgSW50ZWwgRTgwMCBzZXJpZXMgYW5kIEluZnJhc3RydWN0dXJlIERhdGEgQ2VudGVyIEZ1bmN0aW9uIGRldmljZXMuIFRoZXNlIHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBtYWtpbmcgdGhlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYGljZWAgYW5kIGBpZHBmYCBkcml2ZXJzLCB3aGljaCBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBkcml2ZXJzIGZvciBJbnRlbCBFODAwIHNlcmllcyBhbmQgSW5mcmFzdHJ1Y3R1cmUgRGF0YSBDZW50ZXIgRnVuY3Rpb24gZGV2aWNlcy4gVGhlc2UgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIG1ha2luZyB0aGUgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDAwOjQzOjIzLjU0ODI0NzE3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow96hnf[1] Phase: Running StartedAt: 2026-08-12 00:43:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow96hnf[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-12 00:43:46 +0000 UTC FinishedAt: 2026-08-12 00:43:51 +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,}