Name: series-workflowqfzsd Phase: Failed StartedAt: 2026-07-31 23:14:37 +0000 UTC FinishedAt: 2026-08-01 00:04:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqfzsd[0] Phase: Succeeded StartedAt: 2026-07-31 23:14:37 +0000 UTC FinishedAt: 2026-08-01 00:04:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqfzsd[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 23:14:37 +0000 UTC FinishedAt: 2026-08-01 00:04:32 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIGZyb20gYHN0cnVjdCBwcHBgIGFuZCByZXBsYWNlcyBpdCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBTaW5jZSBgc3RydWN0IHBwcGAgaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCwgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmEyZWM3YTNkNDEzY2I1YzBkMjBlN2VlNDI1ZjA2OTNiMjVhZjAzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMDhiYjg5NzY1NDg3Zi4uZTEwMTM2MjFlYjFkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTEzOSw3ICYjNDM7MTM5LDYgQEAgc3RydWN0IHBwcCB7XG4gXHR2b2lkXHRcdCpyY19zdGF0ZTtcdC8qIGl0cyBpbnRlcm5hbCBzdGF0ZSA5OCAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0bGFzdF94bWl0O1x0LyogamlmZmllcyB3aGVuIGxhc3QgcGt0IHNlbnQgOWMgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdGxhc3RfcmVjdjtcdC8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCByY3ZkIGEwICovXG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1x0XHQvKiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2UgYTQgKi9cbiBcdGludFx0XHRjbG9zaW5nO1x0LyogaXMgZGV2aWNlIGNsb3NpbmcgZG93bj8gYTggKi9cbiAjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTktcbiBcdGludFx0XHRueGNoYW47XHRcdC8qIG5leHQgY2hhbm5lbCB0byBzZW5kIHNvbWV0aGluZyBvbiAqL1xuQEAgLTQxMiw3ICYjNDM7NDExLDcgQEAgc3RhdGljIGludCBwcHBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcbiBcdFx0XHRydG5sX2xvY2soKTtcbiBcdFx0XHRpZiAoZmlsZSA9PSBwcHAtXHUwMDNlb3duZXIpXG4tXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpO1xuIFx0XHRcdHJ0bmxfdW5sb2NrKCk7XG4gXHRcdFx0cHBwX3JlbGVhc2VfaW50ZXJmYWNlKHBwcCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtOTIxLDcgJiM0Mzs5MjAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFdSSVRFX09OQ0UocHBwLVx1MDAzZW5wbW9kZVtpXSwgbnBpLm1vZGUpO1xuIFx0XHRcdC8qIHdlIG1heSBiZSBhYmxlIHRvIHRyYW5zbWl0IG1vcmUgcGFja2V0cyBub3cgKD8/KSAqL1xuLVx0XHRcdG5ldGlmX3dha2VfcXVldWUocHBwLVx1MDAzZWRldik7XG4mIzQzO1x0XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiBcdFx0fVxuIFx0XHRlcnIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0xMTQ3LDcgJiM0MzsxMTQ2LDcgQEAgc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpbnQgaWQ7XG4gXG4gXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2cG4tXHUwMDNldW5pdHNfaWRyLCBwcHAsIGlkKVxuLVx0XHRwcHBfbmxfZGVsbGluayhwcHAtXHUwMDNlZGV2LCBkZXZfdG9fa2lsbCk7XG4mIzQzO1x0XHRwcHBfbmxfZGVsbGluayhuZXRkZXZfZnJvbV9wcml2KHBwcCksIGRldl90b19raWxsKTtcbiB9XG4gXG4gc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuQEAgLTExNzAsNiAmIzQzOzExNjksNyBAQCBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcF9uZXRfb3BzID0ge1xuIFxuIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHBwcF9uZXQgKnBuID0gcHBwX3Blcm5ldChwcHAtXHUwMDNlcHBwX25ldCk7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTExODEsOCAmIzQzOzExODEsOCBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldClcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0aWYgKCFpZm5hbWVfaXNfc2V0KSB7XG4gXHRcdFx0d2hpbGUgKDEpIHtcbi1cdFx0XHRcdHNucHJpbnRmKHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVosIFwmIzM0O3BwcCVpXCYjMzQ7LCByZXQpO1xuLVx0XHRcdFx0aWYgKCFuZXRkZXZfbmFtZV9pbl91c2UocHBwLVx1MDAzZXBwcF9uZXQsIHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSkpXG4mIzQzO1x0XHRcdFx0c25wcmludGYoZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcJiMzNDtwcHAlaVwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdFx0XHRpZiAoIW5ldGRldl9uYW1lX2luX3VzZShwcHAtXHUwMDNlcHBwX25ldCwgZGV2LVx1MDAzZW5hbWUpKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdHVuaXRfcHV0KFx1MDAyNnBuLVx1MDAzZXVuaXRzX2lkciwgcmV0KTtcbiBcdFx0XHRcdHJldCA9IHVuaXRfZ2V0KFx1MDAyNnBuLVx1MDAzZXVuaXRzX2lkciwgcHBwLCByZXQgJiM0MzsgMSk7XG5AQCAtMTIxMCwxMSAmIzQzOzEyMTAsMTEgQEAgc3RhdGljIGludCBwcHBfdW5pdF9yZWdpc3RlcihzdHJ1Y3QgcHBwICpwcHAsIGludCB1bml0LCBib29sIGlmbmFtZV9pc19zZXQpXG4gXHRwcHAtXHUwMDNlZmlsZS5pbmRleCA9IHJldDtcbiBcbiBcdGlmICghaWZuYW1lX2lzX3NldClcbi1cdFx0c25wcmludGYocHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBJRk5BTVNJWiwgXCYjMzQ7cHBwJWlcJiMzNDssIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbiYjNDM7XHRcdHNucHJpbnRmKGRldi1cdTAwM2VuYW1lLCBJRk5BTVNJWiwgXCYjMzQ7cHBwJWlcJiMzNDssIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwbi1cdTAwM2VhbGxfcHBwX211dGV4KTtcbiBcbi1cdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3VuaXQ7XG4gXG5AQCAtMTIzOSw3ICYjNDM7MTIzOSw2IEBAIHN0YXRpYyBpbnQgcHBwX2Rldl9jb25maWd1cmUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGludCBlcnI7XG4gXHRpbnQgY3B1O1xuIFxuLVx0cHBwLVx1MDAzZWRldiA9IGRldjtcbiBcdHBwcC1cdTAwM2VwcHBfbmV0ID0gc3JjX25ldDtcbiBcdHBwcC1cdTAwM2VtcnUgPSBQUFBfTVJVO1xuIFx0cHBwLVx1MDAzZW93bmVyID0gY29uZi1cdTAwM2VmaWxlO1xuQEAgLTE2NTgsNyAmIzQzOzE2NTcsNyBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9mbHVzaChzdHJ1Y3QgcHBwICpwcHApXG4gXHQvKiBJZiB0aGVyZSYjMzk7cyBubyB3b3JrIGxlZnQgdG8gZG8sIHRlbGwgdGhlIGNvcmUgbmV0IGNvZGUgdGhhdCB3ZSBjYW5cbiBcdCAqIGFjY2VwdCBzb21lIG1vcmUuXG4gXHQgKi9cbi1cdG5ldGlmX3dha2VfcXVldWUocHBwLVx1MDAzZWRldik7XG4mIzQzO1x0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTE2NzQsNyAmIzQzOzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKGxpa2VseShza2JfcXVldWVfZW1wdHkoXHUwMDI2cHBwLVx1MDAzZWZpbGUueHEpKSkge1xuIFx0XHRpZiAodW5saWtlbHkoIXBwcF9wdXNoKHBwcCwgc2tiKSkpIHtcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwcHAtXHUwMDNlZmlsZS54cSwgc2tiKTtcbi1cdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKHBwcC1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7XG4gXHRcdH1cbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtMTcxMiwxNyAmIzQzOzE3MTEsMTggQEAgc3RhdGljIHZvaWQgcHBwX3htaXRfcHJvY2VzcyhzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCYjMzQ7cmVjdXJzaW9uIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2X2Zyb21fcHJpdihwcHApLCBcJiMzNDtyZWN1cnNpb24gZGV0ZWN0ZWRcXG5cJiMzNDspO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbiBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBwcHAtXHUwMDNlZGV2LVx1MDAzZW10dSAmIzQzO1xuLVx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBwcHAtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbi1cdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gcHBwLVx1MDAzZWRldi1cdTAwM2VtdHUgJiM0MztcbiYjNDM7XHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSAmIzQzO1xuJiM0MztcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiYjNDM7XHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgJiM0MztcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjtcbiBcbiBcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG5AQCAtMTczMSwxMiAmIzQzOzE3MzEsMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIW5ld19za2IpIHtcbiBcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBubyBtZW1vcnkgKGNvbXAgcGt0KVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0aWYgKHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuLVx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLFxuLVx0XHRcdCAgICBwcHAtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuJiM0MztcdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuIFxuIFx0LyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi9cbiBcdGxlbiA9IHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wcmVzcyhwcHAtXHUwMDNleGNfc3RhdGUsIHNrYi1cdTAwM2VkYXRhIC0gMixcbkBAIC0xNzYxLDcgJiM0MzsxNzYwLDcgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHRoZSBzYW1lIG51bWJlci5cbiBcdFx0ICovXG4gXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxuXCYjMzQ7KTtcbiBcdFx0Y29uc3VtZV9za2IobmV3X3NrYik7XG4gXHRcdG5ld19za2IgPSBOVUxMO1xuIFx0fVxuQEAgLTE3NzcsMTMgJiM0MzsxNzc2LDE0IEBAIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnRcbiBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XG4gXHRpbnQgcHJvdG8gPSBQUFBfUFJPVE8oc2tiKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuIFx0aW50IGxlbjtcbiBcdHVuc2lnbmVkIGNoYXIgKmNwO1xuIFxuLVx0c2tiLVx1MDAzZWRldiA9IHBwcC1cdTAwM2VkZXY7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IGRldjtcbiBcbiBcdGlmIChwcm90byBcdTAwM2MgMHg4MDAwKSB7XG4gI2lmZGVmIENPTkZJR19QUFBfRklMVEVSXG5AQCAtMTc5NCw3ICYjNDM7MTc5NCw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdFx0aWYgKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJwZl9wcm9nX3J1bihwcHAtXHUwMDNlcGFzc19maWx0ZXIsIHNrYikgPT0gMCkge1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UFBQOiBvdXRib3VuZCBmcmFtZSBcJiMzNDtcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7bm90IHBhc3NlZFxcblwmIzM0Oyk7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtMTgxMSw3ICYjNDM7MTgxMSw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cbiBcdH1cbiBcbi1cdGRldl9zd19uZXRzdGF0c190eF9hZGQocHBwLVx1MDAzZWRldiwgMSwgc2tiLVx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xuJiM0MztcdGRldl9zd19uZXRzdGF0c190eF9hZGQoZGV2LCAxLCBza2ItXHUwMDNlbGVuIC0gUFBQX1BST1RPX0xFTik7XG4gXG4gXHRzd2l0Y2ggKHByb3RvKSB7XG4gXHRjYXNlIFBQUF9JUDpcbkBAIC0xODIyLDEzICYjNDM7MTgyMiwxMyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHRcdFx0Z290byBkcm9wO1xuIFxuIFx0XHQvKiB0cnkgdG8gZG8gVkogVENQIGhlYWRlciBjb21wcmVzc2lvbiAqL1xuLVx0XHRuZXdfc2tiID0gYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gJiM0MzsgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyLFxuJiM0MztcdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihza2ItXHUwMDNlbGVuICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyLFxuIFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIW5ld19za2IpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChWSiBjb21wIHBrdClcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBubyBtZW1vcnkgKFZKIGNvbXAgcGt0KVxcblwmIzM0Oyk7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4tXHRcdHNrYl9yZXNlcnZlKG5ld19za2IsIHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gMik7XG4mIzQzO1x0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gMik7XG4gXHRcdGNwID0gc2tiLVx1MDAzZWRhdGEgJiM0MzsgMjtcbiBcdFx0bGVuID0gc2xoY19jb21wcmVzcyhwcHAtXHUwMDNldmosIGNwLCBza2ItXHUwMDNlbGVuIC0gMixcbiBcdFx0XHRcdCAgICBuZXdfc2tiLVx1MDAzZWRhdGEgJiM0MzsgMiwgXHUwMDI2Y3AsXG5AQCAtMTg2NCw3ICYjNDM7MTg2NCw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdCAgICBwcm90byAhPSBQUFBfTENQIFx1MDAyNlx1MDAyNiBwcm90byAhPSBQUFBfQ0NQKSB7XG4gXHRcdGlmICghKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ0NQX1VQKSBcdTAwMjZcdTAwMjYgKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfTVVTVF9DT01QKSkge1xuIFx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihkZXYsXG4gXHRcdFx0XHRcdCAgIFwmIzM0O3BwcDogY29tcHJlc3Npb24gcmVxdWlyZWQgYnV0IFwmIzM0O1xuIFx0XHRcdFx0XHQgICBcJiMzNDtkb3duIC0gcGt0IGRyb3BwZWQuXFxuXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIGRyb3A7XG5AQCAtMTg5Miw3ICYjNDM7MTg5Miw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcbiAgZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuLVx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCB0eF9lcnJvcnMpO1xuJiM0MztcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9lcnJvcnMpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuQEAgLTE5NjIsNiAmIzQzOzE5NjIsNyBAQCBNT0RVTEVfUEFSTV9ERVNDKG1wX3Byb3RvY29sX2NvbXByZXNzLFxuICAqL1xuIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0aW50IGxlbiwgdG90bGVuO1xuIFx0aW50IGksIGJpdHMsIGhkcmxlbiwgbXR1O1xuIFx0aW50IGZsZW47XG5AQCAtMjE1OCw4ICYjNDM7MjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbiAgZXJyX2xpbmVhcml6ZTpcbiBcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXFxuXCYjMzQ7KTtcbi1cdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXFxuXCYjMzQ7KTtcbiYjNDM7XHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcbiBcdCYjNDM7JiM0MztwcHAtXHUwMDNlbnhzZXE7XG4gXHRyZXR1cm4gMTtcdC8qIGFiYW5kb24gdGhlIGZyYW1lICovXG4gfVxuQEAgLTIzMzIsNyAmIzQzOzIzMzMsNyBAQCBwcHBfaW5wdXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCFwcHBfZGVjb21wcmVzc19wcm90byhza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRpZiAocHBwKSB7XG4tXHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbiYjNDM7XHRcdFx0REVWX1NUQVRTX0lOQyhuZXRkZXZfZnJvbV9wcml2KHBwcCksIHJ4X2xlbmd0aF9lcnJvcnMpO1xuIFx0XHRcdHBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7XG4gXHRcdH1cbiBcdFx0Z290byBkb25lO1xuQEAgLTIzOTQsNyAmIzQzOzIzOTUsNyBAQCBwcHBfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpXG4gc3RhdGljIHZvaWRcbiBwcHBfcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcHBwICpwcHApXG4ge1xuLVx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9lcnJvcnMpO1xuJiM0MztcdERFVl9TVEFUU19JTkMobmV0ZGV2X2Zyb21fcHJpdihwcHApLCByeF9lcnJvcnMpO1xuIFx0aWYgKHBwcC1cdTAwM2V2ailcbiBcdFx0c2xoY190b3NzKHBwcC1cdTAwM2V2aik7XG4gfVxuQEAgLTI0MDIsNiAmIzQzOzI0MDMsNyBAQCBwcHBfcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcHBwICpwcHApXG4gc3RhdGljIHZvaWRcbiBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnM7XG4gXHRpbnQgcHJvdG8sIGxlbiwgbnBpO1xuIFxuQEAgLTI0MzEsOCAmIzQzOzI0MzMsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0LyogY29weSB0byBhIG5ldyBza19idWZmIHdpdGggbW9yZSB0YWlscm9vbSAqL1xuIFx0XHRcdG5zID0gZGV2X2FsbG9jX3NrYihza2ItXHUwMDNlbGVuICYjNDM7IDEyOCk7XG4gXHRcdFx0aWYgKCFucykge1xuLVx0XHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSBcJiMzNDtcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7KFZKIGRlY29tcClcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoVkogZGVjb21wKVxcblwmIzM0Oyk7XG4gXHRcdFx0XHRnb3RvIGVycjtcbiBcdFx0XHR9XG4gXHRcdFx0c2tiX3Jlc2VydmUobnMsIDIpO1xuQEAgLTI0NDUsNyAmIzQzOzI0NDYsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdGxlbiA9IHNsaGNfdW5jb21wcmVzcyhwcHAtXHUwMDNldmosIHNrYi1cdTAwM2VkYXRhICYjNDM7IDIsIHNrYi1cdTAwM2VsZW4gLSAyKTtcbiBcdFx0aWYgKGxlbiBcdTAwM2M9IDApIHtcbi1cdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7UFBQOiBWSiBkZWNvbXByZXNzaW9uIGVycm9yXFxuXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuQEAgLTI0NjgsNyAmIzQzOzI0NjksNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdGlmIChzbGhjX3JlbWVtYmVyKHBwcC1cdTAwM2V2aiwgc2tiLVx1MDAzZWRhdGEgJiM0MzsgMiwgc2tiLVx1MDAzZWxlbiAtIDIpIFx1MDAzYz0gMCkge1xuLVx0XHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCYjMzQ7UFBQOiBWSiB1bmNvbXByZXNzZWQgZXJyb3JcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBWSiB1bmNvbXByZXNzZWQgZXJyb3JcXG5cJiMzNDspO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG4gXHRcdHByb3RvID0gUFBQX0lQO1xuQEAgLTI0NzksNyAmIzQzOzI0ODAsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChwcHAtXHUwMDNlZGV2LCBza2ItXHUwMDNlbGVuIC0gUFBQX1BST1RPX0xFTik7XG4mIzQzO1x0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHNrYi1cdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcbiBcbiBcdG5waSA9IHByb3RvX3RvX25waW5kZXgocHJvdG8pO1xuIFx0aWYgKG5waSBcdTAwM2MgMCkge1xuQEAgLTI1MDYsNyAmIzQzOzI1MDcsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0aWYgKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYnBmX3Byb2dfcnVuKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7XG4gXHRcdFx0XHRpZiAoUkVBRF9PTkNFKHBwcC1cdTAwM2VkZWJ1ZykgXHUwMDI2IDEpXG4tXHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O1BQUDogaW5ib3VuZCBmcmFtZSBcJiMzNDtcbiBcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtub3QgcGFzc2VkXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTI1MjAsMTcgJiM0MzsyNTIxLDE3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cbiBcdFx0XHRXUklURV9PTkNFKHBwcC1cdTAwM2VsYXN0X3JlY3YsIGppZmZpZXMpO1xuIFxuLVx0XHRpZiAoKHBwcC1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxuJiM0MztcdFx0aWYgKChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxuIFx0XHQgICAgUkVBRF9PTkNFKHBwcC1cdTAwM2VucG1vZGVbbnBpXSkgIT0gTlBNT0RFX1BBU1MpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBjaG9wIG9mZiBwcm90b2NvbCAqL1xuIFx0XHRcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgMik7XG4tXHRcdFx0c2tiLVx1MDAzZWRldiA9IHBwcC1cdTAwM2VkZXY7XG4mIzQzO1x0XHRcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4gXHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMobnBpbmRleF90b19ldGhlcnR5cGVbbnBpXSk7XG4gXHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0XHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwcHAtXHUwMDNlcHBwX25ldCxcbi1cdFx0XHRcdFx0XHQgICAgICBkZXZfbmV0KHBwcC1cdTAwM2VkZXYpKSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGRldl9uZXQoZGV2KSkpO1xuIFx0XHRcdG5ldGlmX3J4KHNrYik7XG4gXHRcdH1cbiBcdH1cbkBAIC0yNTY4LDggJiM0MzsyNTY5LDggQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRucyA9IGRldl9hbGxvY19za2Iob2J1ZmZfc2l6ZSk7XG4gXHRcdGlmICghbnMpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwmIzM0O3BwcF9kZWNvbXByZXNzX2ZyYW1lOiBcJiMzNDtcbi1cdFx0XHRcdCAgIFwmIzM0O25vIG1lbW9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2X2Zyb21fcHJpdihwcHApLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3BwcF9kZWNvbXByZXNzX2ZyYW1lOiBubyBtZW1vcnlcXG5cJiMzNDspO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG4gXHRcdC8qIHRoZSBkZWNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyB0aGUgQS9DIGJ5dGVzIGluIHRoZSBoZHIgKi9cbkBAIC0yNjE3LDYgJiM0MzsyNjE4LDcgQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyB2b2lkXG4gcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0dTMyIG1hc2ssIHNlcTtcbiBcdHN0cnVjdCBjaGFubmVsICpjaDtcbiBcdGludCBtcGhkcmxlbiA9IChwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX01QX1NIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjtcbkBAIC0yNjYxLDcgJiM0MzsyNjYzLDcgQEAgcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIFx0ICovXG4gXHRpZiAoc2VxX2JlZm9yZShzZXEsIHBwcC1cdTAwM2VuZXh0c2VxKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9kcm9wcGVkKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9kcm9wcGVkKTtcbiBcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTI2OTcsNyAmIzQzOzI2OTksNyBAQCBwcHBfcmVjZWl2ZV9tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpXG4gXHRcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgMikpXG4gXHRcdFx0cHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUocHBwLCBza2IpO1xuIFx0XHRlbHNlIHtcbi1cdFx0XHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuJiM0MztcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuQEAgLTI3MzksNiAmIzQzOzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHR1MzIgc2VxID0gcHBwLVx1MDAzZW5leHRzZXE7XG4gXHR1MzIgbWluc2VxID0gcHBwLVx1MDAzZW1pbnNlcTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBcdTAwMjZwcHAtXHUwMDNlbXJxO1xuQEAgLTI3NTUsOCAmIzQzOzI3NTgsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFx0YWdhaW46XG4gXHRcdGlmIChzZXFfYmVmb3JlKFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSwgc2VxKSkge1xuIFx0XHRcdC8qIHRoaXMgY2FuJiMzOTt0IGhhcHBlbiwgYW55d2F5IGlnbm9yZSB0aGUgc2tiICovXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtwcHBfbXBfcmVjb25zdHJ1Y3QgYmFkIFwmIzM0O1xuLVx0XHRcdFx0ICAgXCYjMzQ7c2VxICV1IFx1MDAzYyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O3BwcF9tcF9yZWNvbnN0cnVjdCBiYWQgc2VxICV1IFx1MDAzYyAldVxcblwmIzM0OyxcbiBcdFx0XHRcdCAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSwgc2VxKTtcbiBcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG4gXHRcdFx0a2ZyZWVfc2tiKHApO1xuQEAgLTI3NzUsNyAmIzQzOzI3NzcsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFx0XHRcdFx0bWluc2VxICYjNDM7IDE6IFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZTtcbiBcbiBcdFx0XHRpZiAoUkVBRF9PTkNFKHBwcC1cdTAwM2VkZWJ1ZykgXHUwMDI2IDEpXG4tXHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXG4gXHRcdFx0XHRcdCAgICAgIFwmIzM0O2xvc3QgZnJhZyAldS4uJXVcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgICAgIG9sZHNlcSwgc2VxLTEpO1xuIFxuQEAgLTI4MDMsOCAmIzQzOzI4MDUsOCBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFx0XHRpZiAobG9zdCA9PSAwIFx1MDAyNlx1MDAyNiAoUFBQX01QX0NCKHApLVx1MDAzZUJFYml0cyBcdTAwMjYgRSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoUFBQX01QX0NCKGhlYWQpLVx1MDAzZUJFYml0cyBcdTAwMjYgQikpIHtcbiBcdFx0XHRpZiAobGVuIFx1MDAzZSBwcHAtXHUwMDNlbXJydSAmIzQzOyAyKSB7XG4tXHRcdFx0XHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuLVx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UFBQOiByZWNvbnN0cnVjdGVkIHBhY2tldFwmIzM0O1xuIFx0XHRcdFx0XHQgICAgICBcJiMzNDsgaXMgdG9vIGxvbmcgKCVkKVxcblwmIzM0OywgbGVuKTtcbiBcdFx0XHR9IGVsc2Uge1xuQEAgLTI4MjQsNyAmIzQzOzI4MjYsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFxuIFx0XHRcdHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfZnJvbV9zYWZlKGxpc3QsIHAsIHRtcDIpIHtcbiBcdFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7ZGlzY2FyZGluZyBmcmFnICV1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSk7XG4gXHRcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG5AQCAtMjg0Niw3ICYjNDM7Mjg0OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4gXHRcdFx0XHRpZiAocCA9PSBoZWFkKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7ZGlzY2FyZGluZyBmcmFnICV1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSk7XG4gXHRcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG5AQCAtMjg1NCwxMSAmIzQzOzI4NTYsMTEgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFJFQURfT05DRShwcHAtXHUwMDNlZGVidWcpIFx1MDAyNiAxKVxuLVx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcJiMzNDsgIG1pc3NlZCBwa3RzICV1Li4ldVxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgICAgcHBwLVx1MDAzZW5leHRzZXEsXG4gXHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihoZWFkKS1cdTAwM2VzZXF1ZW5jZS0xKTtcbi1cdFx0XHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHJ4X2Ryb3BwZWQpO1xuJiM0MztcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgcnhfZHJvcHBlZCk7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuIFxuQEAgLTI5NzcsOCAmIzQzOzI5NzksOCBAQCBjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuIFxuIFx0aWYgKHBjaCkge1xuIFx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG4tXHRcdGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpXG4tXHRcdFx0bmFtZSA9IHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZTtcbiYjNDM7XHRcdGlmIChwcHApXG4mIzQzO1x0XHRcdG5hbWUgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCktXHUwMDNlbmFtZTtcbiBcdH1cbiBcdHJldHVybiBuYW1lO1xuIH1cbkBAIC0zMzA5LDEyICYjNDM7MzMxMSwxMyBAQCBmaW5kX2NvbXByZXNzb3IoaW50IHR5cGUpXG4gc3RhdGljIHZvaWRcbiBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2xjb21wcmVzcyAqdmogPSBwcHAtXHUwMDNldmo7XG4gXHRpbnQgY3B1O1xuIFxuIFx0bWVtc2V0KHN0LCAwLCBzaXplb2YoKnN0KSk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpwID0gcGVyX2NwdV9wdHIocHBwLVx1MDAzZWRldi1cdTAwM2V0c3RhdHMsIGNwdSk7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKGRldi1cdTAwM2V0c3RhdHMsIGNwdSk7XG4gXHRcdHU2NCByeF9wYWNrZXRzLCByeF9ieXRlcywgdHhfcGFja2V0cywgdHhfYnl0ZXM7XG4gXG4gXHRcdHJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwLVx1MDAzZXJ4X3BhY2tldHMpO1xuQEAgLTMzMjcsOCAmIzQzOzMzMzAsOCBAQCBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpXG4gXHRcdHN0LVx1MDAzZXAucHBwX29wYWNrZXRzICYjNDM7PSB0eF9wYWNrZXRzO1xuIFx0XHRzdC1cdTAwM2VwLnBwcF9vYnl0ZXMgJiM0Mzs9IHR4X2J5dGVzO1xuIFx0fVxuLVx0c3QtXHUwMDNlcC5wcHBfaWVycm9ycyA9IERFVl9TVEFUU19SRUFEKHBwcC1cdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XG4tXHRzdC1cdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbiYjNDM7XHRzdC1cdTAwM2VwLnBwcF9pZXJyb3JzID0gREVWX1NUQVRTX1JFQUQoZGV2LCByeF9lcnJvcnMpO1xuJiM0MztcdHN0LVx1MDAzZXAucHBwX29lcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHR4X2Vycm9ycyk7XG4gXHRpZiAoIXZqKVxuIFx0XHRyZXR1cm47XG4gXHRzdC1cdTAwM2V2ai52anNfcGFja2V0cyA9IHZqLVx1MDAzZXNsc19vX2NvbXByZXNzZWQgJiM0MzsgdmotXHUwMDNlc2xzX29fdW5jb21wcmVzc2VkO1xuQEAgLTM0MDgsNiAmIzQzOzM0MTEsOCBAQCBpbml0X3BwcF9maWxlKHN0cnVjdCBwcHBfZmlsZSAqcGYsIGludCBraW5kKVxuICAqL1xuIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4mIzQzO1xuIFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cHBwLVx1MDAzZWZpbGUucmVmY250KSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTM0MTUsNyAmIzQzOzM0MjAsNyBAQCBzdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKVxuIFxuIFx0aWYgKCFwcHAtXHUwMDNlZmlsZS5kZWFkIHx8IHBwcC1cdTAwM2VuX2NoYW5uZWxzKSB7XG4gXHRcdC8qIFwmIzM0O2NhbiYjMzk7dCBoYXBwZW5cJiMzNDsgKi9cbi1cdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCBcJiMzNDtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCBcJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtidXQgZGVhZD0lZCBuX2NoYW5uZWxzPSVkICFcXG5cJiMzNDssXG4gXHRcdFx0ICAgcHBwLCBwcHAtXHUwMDNlZmlsZS5kZWFkLCBwcHAtXHUwMDNlbl9jaGFubmVscyk7XG4gXHRcdHJldHVybjtcbkBAIC0zNDQ1LDcgJiM0MzszNDUwLDcgQEAgc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcbiBcbiBcdGZyZWVfcGVyY3B1KHBwcC1cdTAwM2V4bWl0X3JlY3Vyc2lvbik7XG4gXG4tXHRmcmVlX25ldGRldihwcHAtXHUwMDNlZGV2KTtcbiYjNDM7XHRmcmVlX25ldGRldihkZXYpO1xuIH1cbiBcbiAvKlxuQEAgLTM0OTIsNiAmIzQzOzM0OTcsNyBAQCBwcHBfZmluZF9jaGFubmVsKHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpXG4gc3RhdGljIGludFxuIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgcHBwICpwcHA7XG4gXHRzdHJ1Y3QgcHBwX25ldCAqcG47XG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuQEAgLTM1MDMsNiAmIzQzOzM1MDksNyBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIFx0cHBwID0gcHBwX2ZpbmRfdW5pdChwbiwgdW5pdCk7XG4gXHRpZiAoIXBwcClcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnBjaC1cdTAwM2V1cGwpO1xuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdGlmIChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBjaC1cdTAwM2VwcHAsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwY2gtXHUwMDNldXBsKSkgfHxcbkBAIC0zNTE5LDE1ICYjNDM7MzUyNiwxNSBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIFx0XHRnb3RvIG91dGw7XG4gXHR9XG4gXHRpZiAocGNoLVx1MDAzZWNoYW4tXHUwMDNlZGlyZWN0X3htaXQpXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7XG4gXHRlbHNlXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfTk9fUVVFVUU7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfTk9fUVVFVUU7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuIFx0aWYgKHBjaC1cdTAwM2VmaWxlLmhkcmxlbiBcdTAwM2UgcHBwLVx1MDAzZWZpbGUuaGRybGVuKVxuIFx0XHRwcHAtXHUwMDNlZmlsZS5oZHJsZW4gPSBwY2gtXHUwMDNlZmlsZS5oZHJsZW47XG4gXHRoZHJsZW4gPSBwY2gtXHUwMDNlZmlsZS5oZHJsZW4gJiM0MzsgMjtcdC8qIGZvciBwcm90b2NvbCBieXRlcyAqL1xuLVx0aWYgKGhkcmxlbiBcdTAwM2UgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gaGRybGVuO1xuJiM0MztcdGlmIChoZHJsZW4gXHUwMDNlIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4mIzQzO1x0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gaGRybGVuO1xuIFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cGNoLVx1MDAzZWNsaXN0LCBcdTAwMjZwcHAtXHUwMDNlY2hhbm5lbHMpO1xuIFx0JiM0MzsmIzQzO3BwcC1cdTAwM2VuX2NoYW5uZWxzO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBjaC1cdTAwM2VwcHAsIHBwcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIGZyb20gYHN0cnVjdCBwcHBgIGFuZCByZXBsYWNlcyBpdCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBTaW5jZSBgc3RydWN0IHBwcGAgaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCwgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmEyZWM3YTNkNDEzY2I1YzBkMjBlN2VlNDI1ZjA2OTNiMjVhZjAzMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDA4YmI4OTc2NTQ4N2YuLmUxMDEzNjIxZWIxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC0xMzksNyAmIzQzOzEzOSw2IEBAIHN0cnVjdCBwcHAgewogCXZvaWQJCSpyY19zdGF0ZTsJLyogaXRzIGludGVybmFsIHN0YXRlIDk4ICovCiAJdW5zaWduZWQgbG9uZwlsYXN0X3htaXQ7CS8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCBzZW50IDljICovCiAJdW5zaWduZWQgbG9uZwlsYXN0X3JlY3Y7CS8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCByY3ZkIGEwICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsJCS8qIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBhNCAqLwogCWludAkJY2xvc2luZzsJLyogaXMgZGV2aWNlIGNsb3NpbmcgZG93bj8gYTggKi8KICNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOSwogCWludAkJbnhjaGFuOwkJLyogbmV4dCBjaGFubmVsIHRvIHNlbmQgc29tZXRoaW5nIG9uICovCkBAIC00MTIsNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyBpbnQgcHBwX3JlbGVhc2Uoc3RydWN0IGlub2RlICp1bnVzZWQsIHN0cnVjdCBmaWxlICpmaWxlKQogCQkJcHBwID0gUEZfVE9fUFBQKHBmKTsKIAkJCXJ0bmxfbG9jaygpOwogCQkJaWYgKGZpbGUgPT0gcHBwLSZndDtvd25lcikKLQkJCQl1bnJlZ2lzdGVyX25ldGRldmljZShwcHAtJmd0O2Rldik7CiYjNDM7CQkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7CiAJCQlydG5sX3VubG9jaygpOwogCQkJcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHBwcCk7CiAJCQlicmVhazsKQEAgLTkyMSw3ICYjNDM7OTIwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJfSBlbHNlIHsKIAkJCVdSSVRFX09OQ0UocHBwLSZndDtucG1vZGVbaV0sIG5waS5tb2RlKTsKIAkJCS8qIHdlIG1heSBiZSBhYmxlIHRvIHRyYW5zbWl0IG1vcmUgcGFja2V0cyBub3cgKD8/KSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShwcHAtJmd0O2Rldik7CiYjNDM7CQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpOwogCQl9CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtMTE0Nyw3ICYjNDM7MTE0Niw3IEBAIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfcnRubF9uZXQoc3RydWN0IG5ldCAqbmV0LAogCWludCBpZDsKIAogCWlkcl9mb3JfZWFjaF9lbnRyeSgmYW1wO3BuLSZndDt1bml0c19pZHIsIHBwcCwgaWQpCi0JCXBwcF9ubF9kZWxsaW5rKHBwcC0mZ3Q7ZGV2LCBkZXZfdG9fa2lsbCk7CiYjNDM7CQlwcHBfbmxfZGVsbGluayhuZXRkZXZfZnJvbV9wcml2KHBwcCksIGRldl90b19raWxsKTsKIH0KIAogc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQpAQCAtMTE3MCw2ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwX25ldF9vcHMgPSB7CiAKIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KQogewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXN0cnVjdCBwcHBfbmV0ICpwbiA9IHBwcF9wZXJuZXQocHBwLSZndDtwcHBfbmV0KTsKIAlpbnQgcmV0OwogCkBAIC0xMTgxLDggJiM0MzsxMTgxLDggQEAgc3RhdGljIGludCBwcHBfdW5pdF9yZWdpc3RlcihzdHJ1Y3QgcHBwICpwcHAsIGludCB1bml0LCBib29sIGlmbmFtZV9pc19zZXQpCiAJCQlnb3RvIGVycjsKIAkJaWYgKCFpZm5hbWVfaXNfc2V0KSB7CiAJCQl3aGlsZSAoMSkgewotCQkJCXNucHJpbnRmKHBwcC0mZ3Q7ZGV2LSZndDtuYW1lLCBJRk5BTVNJWiwgJiMzNDtwcHAlaSYjMzQ7LCByZXQpOwotCQkJCWlmICghbmV0ZGV2X25hbWVfaW5fdXNlKHBwcC0mZ3Q7cHBwX25ldCwgcHBwLSZndDtkZXYtJmd0O25hbWUpKQomIzQzOwkJCQlzbnByaW50ZihkZXYtJmd0O25hbWUsIElGTkFNU0laLCAmIzM0O3BwcCVpJiMzNDssIHJldCk7CiYjNDM7CQkJCWlmICghbmV0ZGV2X25hbWVfaW5fdXNlKHBwcC0mZ3Q7cHBwX25ldCwgZGV2LSZndDtuYW1lKSkKIAkJCQkJYnJlYWs7CiAJCQkJdW5pdF9wdXQoJmFtcDtwbi0mZ3Q7dW5pdHNfaWRyLCByZXQpOwogCQkJCXJldCA9IHVuaXRfZ2V0KCZhbXA7cG4tJmd0O3VuaXRzX2lkciwgcHBwLCByZXQgJiM0MzsgMSk7CkBAIC0xMjEwLDExICYjNDM7MTIxMCwxMSBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldCkKIAlwcHAtJmd0O2ZpbGUuaW5kZXggPSByZXQ7CiAKIAlpZiAoIWlmbmFtZV9pc19zZXQpCi0JCXNucHJpbnRmKHBwcC0mZ3Q7ZGV2LSZndDtuYW1lLCBJRk5BTVNJWiwgJiMzNDtwcHAlaSYjMzQ7LCBwcHAtJmd0O2ZpbGUuaW5kZXgpOwomIzQzOwkJc25wcmludGYoZGV2LSZndDtuYW1lLCBJRk5BTVNJWiwgJiMzNDtwcHAlaSYjMzQ7LCBwcHAtJmd0O2ZpbGUuaW5kZXgpOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cG4tJmd0O2FsbF9wcHBfbXV0ZXgpOwogCi0JcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHBwcC0mZ3Q7ZGV2KTsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX3VuaXQ7CiAKQEAgLTEyMzksNyAmIzQzOzEyMzksNiBAQCBzdGF0aWMgaW50IHBwcF9kZXZfY29uZmlndXJlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaW50IGVycjsKIAlpbnQgY3B1OwogCi0JcHBwLSZndDtkZXYgPSBkZXY7CiAJcHBwLSZndDtwcHBfbmV0ID0gc3JjX25ldDsKIAlwcHAtJmd0O21ydSA9IFBQUF9NUlU7CiAJcHBwLSZndDtvd25lciA9IGNvbmYtJmd0O2ZpbGU7CkBAIC0xNjU4LDcgJiM0MzsxNjU3LDcgQEAgc3RhdGljIHZvaWQgcHBwX3htaXRfZmx1c2goc3RydWN0IHBwcCAqcHBwKQogCS8qIElmIHRoZXJlJiMzOTtzIG5vIHdvcmsgbGVmdCB0byBkbywgdGVsbCB0aGUgY29yZSBuZXQgY29kZSB0aGF0IHdlIGNhbgogCSAqIGFjY2VwdCBzb21lIG1vcmUuCiAJICovCi0JbmV0aWZfd2FrZV9xdWV1ZShwcHAtJmd0O2Rldik7CiYjNDM7CW5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTsKIH0KIAogc3RhdGljIHZvaWQgX19wcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE2NzQsNyAmIzQzOzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChsaWtlbHkoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cHBwLSZndDtmaWxlLnhxKSkpIHsKIAkJaWYgKHVubGlrZWx5KCFwcHBfcHVzaChwcHAsIHNrYikpKSB7CiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BwcC0mZ3Q7ZmlsZS54cSwgc2tiKTsKLQkJCW5ldGlmX3N0b3BfcXVldWUocHBwLSZndDtkZXYpOwomIzQzOwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTsKIAkJfQogCQlnb3RvIG91dDsKIAl9CkBAIC0xNzEyLDE3ICYjNDM7MTcxMSwxOCBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlrZnJlZV9za2Ioc2tiKTsKIAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7cmVjdXJzaW9uIGRldGVjdGVkXG4mIzM0Oyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgJiMzNDtyZWN1cnNpb24gZGV0ZWN0ZWRcbiYjMzQ7KTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCiBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKIAlpbnQgbGVuOwotCWludCBuZXdfc2tiX3NpemUgPSBwcHAtJmd0O2Rldi0mZ3Q7bXR1ICYjNDM7Ci0JCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgcHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKLQlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IHBwcC0mZ3Q7ZGV2LSZndDttdHUgJiM0MzsKJiM0MzsJaW50IG5ld19za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiYjNDM7CQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjsKIAogCWlmIChza2JfbGluZWFyaXplKHNrYikpCkBAIC0xNzMxLDEyICYjNDM7MTczMSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAluZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfc2tiKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcbiYjMzQ7KTsKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXG4mIzM0Oyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAocHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmZ3Q7IFBQUF9IRFJMRU4pCi0JCXNrYl9yZXNlcnZlKG5ld19za2IsCi0JCQkgICAgcHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pOwomIzQzOwlpZiAoZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJmd0OyBQUFBfSERSTEVOKQomIzQzOwkJc2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTsKIAogCS8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovCiAJbGVuID0gcHBwLSZndDt4Y29tcC0mZ3Q7Y29tcHJlc3MocHBwLSZndDt4Y19zdGF0ZSwgc2tiLSZndDtkYXRhIC0gMiwKQEAgLTE3NjEsNyAmIzQzOzE3NjAsNyBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogdGhlIHNhbWUgbnVtYmVyLgogCQkgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XG4mIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihkZXYsICYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XG4mIzM0Oyk7CiAJCWNvbnN1bWVfc2tiKG5ld19za2IpOwogCQluZXdfc2tiID0gTlVMTDsKIAl9CkBAIC0xNzc3LDEzICYjNDM7MTc3NiwxNCBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyBpbnQKIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAJaW50IHByb3RvID0gUFBQX1BST1RPKHNrYik7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiAJaW50IGxlbjsKIAl1bnNpZ25lZCBjaGFyICpjcDsKIAotCXNrYi0mZ3Q7ZGV2ID0gcHBwLSZndDtkZXY7CiYjNDM7CXNrYi0mZ3Q7ZGV2ID0gZGV2OwogCiAJaWYgKHByb3RvICZsdDsgMHg4MDAwKSB7CiAjaWZkZWYgQ09ORklHX1BQUF9GSUxURVIKQEAgLTE3OTQsNyAmIzQzOzE3OTQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCiAJCWlmIChwcHAtJmd0O3Bhc3NfZmlsdGVyICZhbXA7JmFtcDsKIAkJICAgIGJwZl9wcm9nX3J1bihwcHAtJmd0O3Bhc3NfZmlsdGVyLCBza2IpID09IDApIHsKIAkJCWlmIChSRUFEX09OQ0UocHBwLSZndDtkZWJ1ZykgJmFtcDsgMSkKLQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC0mZ3Q7ZGV2LAomIzQzOwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJICAgICAgJiMzNDtQUFA6IG91dGJvdW5kIGZyYW1lICYjMzQ7CiAJCQkJCSAgICAgICYjMzQ7bm90IHBhc3NlZFxuJiMzNDspOwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xODExLDcgJiM0MzsxODExLDcgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKQogI2VuZGlmIC8qIENPTkZJR19QUFBfRklMVEVSICovCiAJfQogCi0JZGV2X3N3X25ldHN0YXRzX3R4X2FkZChwcHAtJmd0O2RldiwgMSwgc2tiLSZndDtsZW4gLSBQUFBfUFJPVE9fTEVOKTsKJiM0MzsJZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIDEsIHNrYi0mZ3Q7bGVuIC0gUFBQX1BST1RPX0xFTik7CiAKIAlzd2l0Y2ggKHByb3RvKSB7CiAJY2FzZSBQUFBfSVA6CkBAIC0xODIyLDEzICYjNDM7MTgyMiwxMyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCiAJCQlnb3RvIGRyb3A7CiAKIAkJLyogdHJ5IHRvIGRvIFZKIFRDUCBoZWFkZXIgY29tcHJlc3Npb24gKi8KLQkJbmV3X3NrYiA9IGFsbG9jX3NrYihza2ItJmd0O2xlbiAmIzQzOyBwcHAtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gMiwKJiM0MzsJCW5ld19za2IgPSBhbGxvY19za2Ioc2tiLSZndDtsZW4gJiM0MzsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gLSAyLAogCQkJCSAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuZXdfc2tiKSB7Ci0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O1BQUDogbm8gbWVtb3J5IChWSiBjb21wIHBrdClcbiYjMzQ7KTsKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoVkogY29tcCBwa3QpXG4mIzM0Oyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KLQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgcHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAtIDIpOwomIzQzOwkJc2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gLSAyKTsKIAkJY3AgPSBza2ItJmd0O2RhdGEgJiM0MzsgMjsKIAkJbGVuID0gc2xoY19jb21wcmVzcyhwcHAtJmd0O3ZqLCBjcCwgc2tiLSZndDtsZW4gLSAyLAogCQkJCSAgICBuZXdfc2tiLSZndDtkYXRhICYjNDM7IDIsICZhbXA7Y3AsCkBAIC0xODY0LDcgJiM0MzsxODY0LDcgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKQogCSAgICBwcm90byAhPSBQUFBfTENQICZhbXA7JmFtcDsgcHJvdG8gIT0gUFBQX0NDUCkgewogCQlpZiAoIShwcHAtJmd0O2ZsYWdzICZhbXA7IFNDX0NDUF9VUCkgJmFtcDsmYW1wOyAocHBwLSZndDtmbGFncyAmYW1wOyBTQ19NVVNUX0NPTVApKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCW5ldGRldl9lcnIocHBwLSZndDtkZXYsCiYjNDM7CQkJCW5ldGRldl9lcnIoZGV2LAogCQkJCQkgICAmIzM0O3BwcDogY29tcHJlc3Npb24gcmVxdWlyZWQgYnV0ICYjMzQ7CiAJCQkJCSAgICYjMzQ7ZG93biAtIHBrdCBkcm9wcGVkLlxuJiMzNDspOwogCQkJZ290byBkcm9wOwpAQCAtMTg5Miw3ICYjNDM7MTg5Miw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYikKIAogIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JREVWX1NUQVRTX0lOQyhwcHAtJmd0O2RldiwgdHhfZXJyb3JzKTsKJiM0MzsJREVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE5NjIsNiAmIzQzOzE5NjIsNyBAQCBNT0RVTEVfUEFSTV9ERVNDKG1wX3Byb3RvY29sX2NvbXByZXNzLAogICovCiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlpbnQgbGVuLCB0b3RsZW47CiAJaW50IGksIGJpdHMsIGhkcmxlbiwgbXR1OwogCWludCBmbGVuOwpAQCAtMjE1OCw4ICYjNDM7MjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CiAgZXJyX2xpbmVhcml6ZToKIAlpZiAoUkVBRF9PTkNFKHBwcC0mZ3Q7ZGVidWcpICZhbXA7IDEpCi0JCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7UFBQOiBubyBtZW1vcnkgKGZyYWdtZW50KVxuJiMzNDspOwotCURFVl9TVEFUU19JTkMocHBwLSZndDtkZXYsIHR4X2Vycm9ycyk7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXG4mIzM0Oyk7CiYjNDM7CURFVl9TVEFUU19JTkMoZGV2LCB0eF9lcnJvcnMpOwogCSYjNDM7JiM0MztwcHAtJmd0O254c2VxOwogCXJldHVybiAxOwkvKiBhYmFuZG9uIHRoZSBmcmFtZSAqLwogfQpAQCAtMjMzMiw3ICYjNDM7MjMzMyw3IEBAIHBwcF9pbnB1dChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKCFwcHBfZGVjb21wcmVzc19wcm90byhza2IpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlpZiAocHBwKSB7Ci0JCQlERVZfU1RBVFNfSU5DKHBwcC0mZ3Q7ZGV2LCByeF9sZW5ndGhfZXJyb3JzKTsKJiM0MzsJCQlERVZfU1RBVFNfSU5DKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgcnhfbGVuZ3RoX2Vycm9ycyk7CiAJCQlwcHBfcmVjZWl2ZV9lcnJvcihwcHApOwogCQl9CiAJCWdvdG8gZG9uZTsKQEAgLTIzOTQsNyAmIzQzOzIzOTUsNyBAQCBwcHBfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpCiBzdGF0aWMgdm9pZAogcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKQogewotCURFVl9TVEFUU19JTkMocHBwLSZndDtkZXYsIHJ4X2Vycm9ycyk7CiYjNDM7CURFVl9TVEFUU19JTkMobmV0ZGV2X2Zyb21fcHJpdihwcHApLCByeF9lcnJvcnMpOwogCWlmIChwcHAtJmd0O3ZqKQogCQlzbGhjX3Rvc3MocHBwLSZndDt2aik7CiB9CkBAIC0yNDAyLDYgJiM0MzsyNDAzLDcgQEAgcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKQogc3RhdGljIHZvaWQKIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnM7CiAJaW50IHByb3RvLCBsZW4sIG5waTsKIApAQCAtMjQzMSw4ICYjNDM7MjQzMyw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCS8qIGNvcHkgdG8gYSBuZXcgc2tfYnVmZiB3aXRoIG1vcmUgdGFpbHJvb20gKi8KIAkJCW5zID0gZGV2X2FsbG9jX3NrYihza2ItJmd0O2xlbiAmIzQzOyAxMjgpOwogCQkJaWYgKCFucykgewotCQkJCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7UFBQOiBubyBtZW1vcnkgJiMzNDsKLQkJCQkJICAgJiMzNDsoVkogZGVjb21wKVxuJiMzNDspOwomIzQzOwkJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoVkogZGVjb21wKVxuJiMzNDspOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJc2tiX3Jlc2VydmUobnMsIDIpOwpAQCAtMjQ0NSw3ICYjNDM7MjQ0Niw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCQlsZW4gPSBzbGhjX3VuY29tcHJlc3MocHBwLSZndDt2aiwgc2tiLSZndDtkYXRhICYjNDM7IDIsIHNrYi0mZ3Q7bGVuIC0gMik7CiAJCWlmIChsZW4gJmx0Oz0gMCkgewotCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtJmd0O2RldiwKJiM0MzsJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkgICAgICAmIzM0O1BQUDogVkogZGVjb21wcmVzc2lvbiBlcnJvclxuJiMzNDspOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTI0NjgsNyAmIzQzOzI0NjksNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlnb3RvIGVycjsKIAogCQlpZiAoc2xoY19yZW1lbWJlcihwcHAtJmd0O3ZqLCBza2ItJmd0O2RhdGEgJiM0MzsgMiwgc2tiLSZndDtsZW4gLSAyKSAmbHQ7PSAwKSB7Ci0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O1BQUDogVkogdW5jb21wcmVzc2VkIGVycm9yXG4mIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihkZXYsICYjMzQ7UFBQOiBWSiB1bmNvbXByZXNzZWQgZXJyb3JcbiYjMzQ7KTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCXByb3RvID0gUFBQX0lQOwpAQCAtMjQ3OSw3ICYjNDM7MjQ4MCw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJYnJlYWs7CiAJfQogCi0JZGV2X3N3X25ldHN0YXRzX3J4X2FkZChwcHAtJmd0O2Rldiwgc2tiLSZndDtsZW4gLSBQUFBfUFJPVE9fTEVOKTsKJiM0MzsJZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHNrYi0mZ3Q7bGVuIC0gUFBQX1BST1RPX0xFTik7CiAKIAlucGkgPSBwcm90b190b19ucGluZGV4KHByb3RvKTsKIAlpZiAobnBpICZsdDsgMCkgewpAQCAtMjUwNiw3ICYjNDM7MjUwNyw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCWlmIChwcHAtJmd0O3Bhc3NfZmlsdGVyICZhbXA7JmFtcDsKIAkJCSAgICBicGZfcHJvZ19ydW4ocHBwLSZndDtwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7CiAJCQkJaWYgKFJFQURfT05DRShwcHAtJmd0O2RlYnVnKSAmYW1wOyAxKQotCQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC0mZ3Q7ZGV2LAomIzQzOwkJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCiAJCQkJCQkgICAgICAmIzM0O1BQUDogaW5ib3VuZCBmcmFtZSAmIzM0OwogCQkJCQkJICAgICAgJiMzNDtub3QgcGFzc2VkXG4mIzM0Oyk7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0yNTIwLDE3ICYjNDM7MjUyMSwxNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi8KIAkJCVdSSVRFX09OQ0UocHBwLSZndDtsYXN0X3JlY3YsIGppZmZpZXMpOwogCi0JCWlmICgocHBwLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkgPT0gMCB8fAomIzQzOwkJaWYgKChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkgPT0gMCB8fAogCQkgICAgUkVBRF9PTkNFKHBwcC0mZ3Q7bnBtb2RlW25waV0pICE9IE5QTU9ERV9QQVNTKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGNob3Agb2ZmIHByb3RvY29sICovCiAJCQlza2JfcHVsbF9yY3N1bShza2IsIDIpOwotCQkJc2tiLSZndDtkZXYgPSBwcHAtJmd0O2RldjsKJiM0MzsJCQlza2ItJmd0O2RldiA9IGRldjsKIAkJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhucGluZGV4X3RvX2V0aGVydHlwZVtucGldKTsKIAkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCQlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwcHAtJmd0O3BwcF9uZXQsCi0JCQkJCQkgICAgICBkZXZfbmV0KHBwcC0mZ3Q7ZGV2KSkpOwomIzQzOwkJCQkJCSAgICAgIGRldl9uZXQoZGV2KSkpOwogCQkJbmV0aWZfcngoc2tiKTsKIAkJfQogCX0KQEAgLTI1NjgsOCAmIzQzOzI1NjksOCBAQCBwcHBfZGVjb21wcmVzc19mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAkJbnMgPSBkZXZfYWxsb2Nfc2tiKG9idWZmX3NpemUpOwogCQlpZiAoIW5zKSB7Ci0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O3BwcF9kZWNvbXByZXNzX2ZyYW1lOiAmIzM0OwotCQkJCSAgICYjMzQ7bm8gbWVtb3J5XG4mIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksCiYjNDM7CQkJCSAgICYjMzQ7cHBwX2RlY29tcHJlc3NfZnJhbWU6IG5vIG1lbW9yeVxuJiMzNDspOwogCQkJZ290byBlcnI7CiAJCX0KIAkJLyogdGhlIGRlY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIHRoZSBBL0MgYnl0ZXMgaW4gdGhlIGhkciAqLwpAQCAtMjYxNyw2ICYjNDM7MjYxOCw3IEBAIHBwcF9kZWNvbXByZXNzX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyB2b2lkCiBwcHBfcmVjZWl2ZV9tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpCiB7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7CiAJdTMyIG1hc2ssIHNlcTsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2g7CiAJaW50IG1waGRybGVuID0gKHBwcC0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfTVBfU0hPUlRTRVEpPyBNUEhEUkxFTl9TU046IE1QSERSTEVOOwpAQCAtMjY2MSw3ICYjNDM7MjY2Myw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaCkKIAkgKi8KIAlpZiAoc2VxX2JlZm9yZShzZXEsIHBwcC0mZ3Q7bmV4dHNlcSkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCURFVl9TVEFUU19JTkMocHBwLSZndDtkZXYsIHJ4X2Ryb3BwZWQpOwomIzQzOwkJREVWX1NUQVRTX0lOQyhkZXYsIHJ4X2Ryb3BwZWQpOwogCQlwcHBfcmVjZWl2ZV9lcnJvcihwcHApOwogCQlyZXR1cm47CiAJfQpAQCAtMjY5Nyw3ICYjNDM7MjY5OSw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaCkKIAkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCAyKSkKIAkJCXBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHBwcCwgc2tiKTsKIAkJZWxzZSB7Ci0JCQlERVZfU1RBVFNfSU5DKHBwcC0mZ3Q7ZGV2LCByeF9sZW5ndGhfZXJyb3JzKTsKJiM0MzsJCQlERVZfU1RBVFNfSU5DKGRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7CiAJCX0KQEAgLTI3MzksNiAmIzQzOzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCiBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKQogewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXUzMiBzZXEgPSBwcHAtJmd0O25leHRzZXE7CiAJdTMyIG1pbnNlcSA9IHBwcC0mZ3Q7bWluc2VxOwogCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSAmYW1wO3BwcC0mZ3Q7bXJxOwpAQCAtMjc1NSw4ICYjNDM7Mjc1OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApCiAJYWdhaW46CiAJCWlmIChzZXFfYmVmb3JlKFBQUF9NUF9DQihwKS0mZ3Q7c2VxdWVuY2UsIHNlcSkpIHsKIAkJCS8qIHRoaXMgY2FuJiMzOTt0IGhhcHBlbiwgYW55d2F5IGlnbm9yZSB0aGUgc2tiICovCi0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O3BwcF9tcF9yZWNvbnN0cnVjdCBiYWQgJiMzNDsKLQkJCQkgICAmIzM0O3NlcSAldSAmbHQ7ICV1XG4mIzM0OywKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtwcHBfbXBfcmVjb25zdHJ1Y3QgYmFkIHNlcSAldSAmbHQ7ICV1XG4mIzM0OywKIAkJCQkgICBQUFBfTVBfQ0IocCktJmd0O3NlcXVlbmNlLCBzZXEpOwogCQkJX19za2JfdW5saW5rKHAsIGxpc3QpOwogCQkJa2ZyZWVfc2tiKHApOwpAQCAtMjc3NSw3ICYjNDM7Mjc3Nyw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApCiAJCQkJbWluc2VxICYjNDM7IDE6IFBQUF9NUF9DQihwKS0mZ3Q7c2VxdWVuY2U7CiAKIAkJCWlmIChSRUFEX09OQ0UocHBwLSZndDtkZWJ1ZykgJmFtcDsgMSkKLQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC0mZ3Q7ZGV2LAomIzQzOwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJICAgICAgJiMzNDtsb3N0IGZyYWcgJXUuLiV1XG4mIzM0OywKIAkJCQkJICAgICAgb2xkc2VxLCBzZXEtMSk7CiAKQEAgLTI4MDMsOCAmIzQzOzI4MDUsOCBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKQogCQlpZiAobG9zdCA9PSAwICZhbXA7JmFtcDsgKFBQUF9NUF9DQihwKS0mZ3Q7QkViaXRzICZhbXA7IEUpICZhbXA7JmFtcDsKIAkJICAgIChQUFBfTVBfQ0IoaGVhZCktJmd0O0JFYml0cyAmYW1wOyBCKSkgewogCQkJaWYgKGxlbiAmZ3Q7IHBwcC0mZ3Q7bXJydSAmIzQzOyAyKSB7Ci0JCQkJREVWX1NUQVRTX0lOQyhwcHAtJmd0O2RldiwgcnhfbGVuZ3RoX2Vycm9ycyk7Ci0JCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtJmd0O2RldiwKJiM0MzsJCQkJREVWX1NUQVRTX0lOQyhkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpOwomIzQzOwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJICAgICAgJiMzNDtQUFA6IHJlY29uc3RydWN0ZWQgcGFja2V0JiMzNDsKIAkJCQkJICAgICAgJiMzNDsgaXMgdG9vIGxvbmcgKCVkKVxuJiMzNDssIGxlbik7CiAJCQl9IGVsc2UgewpAQCAtMjgyNCw3ICYjNDM7MjgyNiw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApCiAKIAkJCXNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfZnJvbV9zYWZlKGxpc3QsIHAsIHRtcDIpIHsKIAkJCQlpZiAoUkVBRF9PTkNFKHBwcC0mZ3Q7ZGVidWcpICZhbXA7IDEpCi0JCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLSZndDtkZXYsCiYjNDM7CQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJCSAgICAgICYjMzQ7ZGlzY2FyZGluZyBmcmFnICV1XG4mIzM0OywKIAkJCQkJCSAgICAgIFBQUF9NUF9DQihwKS0mZ3Q7c2VxdWVuY2UpOwogCQkJCV9fc2tiX3VubGluayhwLCBsaXN0KTsKQEAgLTI4NDYsNyAmIzQzOzI4NDgsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKQogCQkJCWlmIChwID09IGhlYWQpCiAJCQkJCWJyZWFrOwogCQkJCWlmIChSRUFEX09OQ0UocHBwLSZndDtkZWJ1ZykgJmFtcDsgMSkKLQkJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtJmd0O2RldiwKJiM0MzsJCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAogCQkJCQkJICAgICAgJiMzNDtkaXNjYXJkaW5nIGZyYWcgJXVcbiYjMzQ7LAogCQkJCQkJICAgICAgUFBQX01QX0NCKHApLSZndDtzZXF1ZW5jZSk7CiAJCQkJX19za2JfdW5saW5rKHAsIGxpc3QpOwpAQCAtMjg1NCwxMSAmIzQzOzI4NTYsMTEgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcCkKIAkJCX0KIAogCQkJaWYgKFJFQURfT05DRShwcHAtJmd0O2RlYnVnKSAmYW1wOyAxKQotCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLSZndDtkZXYsCiYjNDM7CQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAogCQkJCQkgICAgICAmIzM0OyAgbWlzc2VkIHBrdHMgJXUuLiV1XG4mIzM0OywKIAkJCQkJICAgICAgcHBwLSZndDtuZXh0c2VxLAogCQkJCQkgICAgICBQUFBfTVBfQ0IoaGVhZCktJmd0O3NlcXVlbmNlLTEpOwotCQkJREVWX1NUQVRTX0lOQyhwcHAtJmd0O2RldiwgcnhfZHJvcHBlZCk7CiYjNDM7CQkJREVWX1NUQVRTX0lOQyhkZXYsIHJ4X2Ryb3BwZWQpOwogCQkJcHBwX3JlY2VpdmVfZXJyb3IocHBwKTsKIAkJfQogCkBAIC0yOTc3LDggJiM0MzsyOTc5LDggQEAgY2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKIAogCWlmIChwY2gpIHsKIAkJcHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC0mZ3Q7cHBwKTsKLQkJaWYgKHBwcCAmYW1wOyZhbXA7IHBwcC0mZ3Q7ZGV2KQotCQkJbmFtZSA9IHBwcC0mZ3Q7ZGV2LSZndDtuYW1lOwomIzQzOwkJaWYgKHBwcCkKJiM0MzsJCQluYW1lID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApLSZndDtuYW1lOwogCX0KIAlyZXR1cm4gbmFtZTsKIH0KQEAgLTMzMDksMTIgJiM0MzszMzExLDEzIEBAIGZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSkKIHN0YXRpYyB2b2lkCiBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpCiB7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7CiAJc3RydWN0IHNsY29tcHJlc3MgKnZqID0gcHBwLSZndDt2ajsKIAlpbnQgY3B1OwogCiAJbWVtc2V0KHN0LCAwLCBzaXplb2YoKnN0KSk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKHBwcC0mZ3Q7ZGV2LSZndDt0c3RhdHMsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKGRldi0mZ3Q7dHN0YXRzLCBjcHUpOwogCQl1NjQgcnhfcGFja2V0cywgcnhfYnl0ZXMsIHR4X3BhY2tldHMsIHR4X2J5dGVzOwogCiAJCXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO3AtJmd0O3J4X3BhY2tldHMpOwpAQCAtMzMyNyw4ICYjNDM7MzMzMCw4IEBAIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdCkKIAkJc3QtJmd0O3AucHBwX29wYWNrZXRzICYjNDM7PSB0eF9wYWNrZXRzOwogCQlzdC0mZ3Q7cC5wcHBfb2J5dGVzICYjNDM7PSB0eF9ieXRlczsKIAl9Ci0Jc3QtJmd0O3AucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChwcHAtJmd0O2RldiwgcnhfZXJyb3JzKTsKLQlzdC0mZ3Q7cC5wcHBfb2Vycm9ycyA9IERFVl9TVEFUU19SRUFEKHBwcC0mZ3Q7ZGV2LCB0eF9lcnJvcnMpOwomIzQzOwlzdC0mZ3Q7cC5wcHBfaWVycm9ycyA9IERFVl9TVEFUU19SRUFEKGRldiwgcnhfZXJyb3JzKTsKJiM0MzsJc3QtJmd0O3AucHBwX29lcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHR4X2Vycm9ycyk7CiAJaWYgKCF2aikKIAkJcmV0dXJuOwogCXN0LSZndDt2ai52anNfcGFja2V0cyA9IHZqLSZndDtzbHNfb19jb21wcmVzc2VkICYjNDM7IHZqLSZndDtzbHNfb191bmNvbXByZXNzZWQ7CkBAIC0zNDA4LDYgJiM0MzszNDExLDggQEAgaW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZCkKICAqLwogc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcCkKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKJiM0MzsKIAlpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3BwcC0mZ3Q7ZmlsZS5yZWZjbnQpKQogCQlyZXR1cm47CiAKQEAgLTM0MTUsNyAmIzQzOzM0MjAsNyBAQCBzdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKQogCiAJaWYgKCFwcHAtJmd0O2ZpbGUuZGVhZCB8fCBwcHAtJmd0O25fY2hhbm5lbHMpIHsKIAkJLyogJiMzNDtjYW4mIzM5O3QgaGFwcGVuJiMzNDsgKi8KLQkJbmV0ZGV2X2VycihwcHAtJmd0O2RldiwgJiMzNDtwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCAmIzM0OwomIzQzOwkJbmV0ZGV2X2VycihkZXYsICYjMzQ7cHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgJiMzNDsKIAkJCSAgICYjMzQ7YnV0IGRlYWQ9JWQgbl9jaGFubmVscz0lZCAhXG4mIzM0OywKIAkJCSAgIHBwcCwgcHBwLSZndDtmaWxlLmRlYWQsIHBwcC0mZ3Q7bl9jaGFubmVscyk7CiAJCXJldHVybjsKQEAgLTM0NDUsNyAmIzQzOzM0NTAsNyBAQCBzdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKQogCiAJZnJlZV9wZXJjcHUocHBwLSZndDt4bWl0X3JlY3Vyc2lvbik7CiAKLQlmcmVlX25ldGRldihwcHAtJmd0O2Rldik7CiYjNDM7CWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKIC8qCkBAIC0zNDkyLDYgJiM0MzszNDk3LDcgQEAgcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KQogc3RhdGljIGludAogcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcHBwICpwcHA7CiAJc3RydWN0IHBwcF9uZXQgKnBuOwogCWludCByZXQgPSAtRU5YSU87CkBAIC0zNTAzLDYgJiM0MzszNTA5LDcgQEAgcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIAlwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTsKIAlpZiAoIXBwcCkKIAkJZ290byBvdXQ7CiYjNDM7CWRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzcGluX2xvY2soJmFtcDtwY2gtJmd0O3VwbCk7CiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwY2gtJmd0O3BwcCwgbG9ja2RlcF9pc19oZWxkKCZhbXA7cGNoLSZndDt1cGwpKSB8fApAQCAtMzUxOSwxNSAmIzQzOzM1MjYsMTUgQEAgcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIAkJZ290byBvdXRsOwogCX0KIAlpZiAocGNoLSZndDtjaGFuLSZndDtkaXJlY3RfeG1pdCkKLQkJcHBwLSZndDtkZXYtJmd0O3ByaXZfZmxhZ3MgfD0gSUZGX05PX1FVRVVFOwomIzQzOwkJZGV2LSZndDtwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTsKIAllbHNlCi0JCXBwcC0mZ3Q7ZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7PSB+SUZGX05PX1FVRVVFOwomIzQzOwkJZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7PSB+SUZGX05PX1FVRVVFOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cGNoLSZndDtkb3dubCk7CiAJaWYgKHBjaC0mZ3Q7ZmlsZS5oZHJsZW4gJmd0OyBwcHAtJmd0O2ZpbGUuaGRybGVuKQogCQlwcHAtJmd0O2ZpbGUuaGRybGVuID0gcGNoLSZndDtmaWxlLmhkcmxlbjsKIAloZHJsZW4gPSBwY2gtJmd0O2ZpbGUuaGRybGVuICYjNDM7IDI7CS8qIGZvciBwcm90b2NvbCBieXRlcyAqLwotCWlmIChoZHJsZW4gJmd0OyBwcHAtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKQotCQlwcHAtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gaGRybGVuOwomIzQzOwlpZiAoaGRybGVuICZndDsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pCiYjNDM7CQlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGhkcmxlbjsKIAlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3BjaC0mZ3Q7Y2xpc3QsICZhbXA7cHBwLSZndDtjaGFubmVscyk7CiAJJiM0MzsmIzQzO3BwcC0mZ3Q7bl9jaGFubmVsczsKIAlyY3VfYXNzaWduX3BvaW50ZXIocGNoLSZndDtwcHAsIHBwcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCBmaWVsZCBmcm9tIHRoZSBgc3RydWN0IHBwcGAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aHk/IFRoZSBvYnZpb3VzIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhleSYjMzk7cmUgbm93IHVzaW5nIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIGV2ZXJ5d2hlcmUgYHBwcC0mZ3Q7ZGV2YCB3YXMgdXNlZC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgYHN0cnVjdCBwcHBgIGlzICpub3cqIGJlaW5nIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJbnN0ZWFkIG9mIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHN0cnVjdHMgd2l0aCBhIHBvaW50ZXIgYmV0d2VlbiB0aGVtLgoKQnV0IHdhaXQsIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgKmZ1bmRhbWVudGFsbHkqIGNoYW5nZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIHRoYXQgY3JlYXRlcyB0aGUgUFBQIGludGVyZmFjZS4gRnVuY3Rpb25zIGxpa2UgYHBwcF9jcmVhdGVfaW50ZXJmYWNlYCBhcmUgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGBzdHJ1Y3QgcHBwYCBpcyBiZWluZyBhbGxvY2F0ZWQgbm93LiBUaGUgZGlmZiBhbG9uZSBkb2VzbiYjMzk7dCBnaXZlIG1lIGVub3VnaCBjb250ZXh0LiBUaGlzIGNoYW5nZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gVGhlIHdob2xlIHN0cnVjdHVyZSBvZiBgcHBwX2NyZWF0ZV9pbnRlcmZhY2VgIG1pZ2h0IGhhdmUgY2hhbmdlZCwgbWF5YmUgZXZlbiBob3cgaXQmIzM5O3MgbGlua2VkIGludG8gdGhlIGRldmljZSB0cmVlLiBJIG5lZWQgdG8gc2VlIHRoZSBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX25ldGRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTc9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjg6XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY5LVx0aWYgKCFkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQUFAgSW50ZXJmYWNlIENyZWF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgUFBQIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCAuLi4pYCDigJMgdGhhdCBwYXJ0JiMzOTtzIGFscmVhZHkgaW1wbGVtZW50ZWQsIGdvb2QuIEJ1dCBoYW5nIG9uLCB0aGUgYXV0aG9yIGV4cGxpY2l0bHkgYXNzaWducyBgcHBwLSZndDtkZXZgIHRvIGBkZXZgLCBhbmQgKnRoZW4qIHRoZXkgdXNlIGBwcHAtJmd0O2RldmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZXhwbGljaXQgYXNzaWdubWVudCwgYXMgaXQgc2VlbXMgYSBiaXQgcmVkdW5kYW50IGF0IGZpcnN0IGdsYW5jZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgaW50ZXJmYWNlIGNyZWF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgcHBwX2NyZWF0ZV9pbnRlcmZhY2VgIGluIHRoZSBmaWxlLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gd2h5IHRoaXMgZXhwbGljaXQgYXNzaWdubWVudCBpcyBuZWNlc3NhcnkgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2l0aCB0aGlzIGRldmljZSBzdHJ1Y3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNTc6XHRzdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcbjMzNTg6XHR7XG4zMzU5Olx0XHRzdHJ1Y3QgcHBwX2NvbmZpZyBjb25mID0ge1xuMzM2MDpcdFx0XHQuZmlsZSA9IGZpbGUsXG4zMzYxOlx0XHRcdC51bml0ID0gKnVuaXQsXG4zMzYyOlx0XHRcdC5pZm5hbWVfaXNfc2V0ID0gZmFsc2UsXG4zMzYzOlx0XHR9O1xuMzM2NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjMzNjU6XHRcdHN0cnVjdCBwcHAgKnBwcDtcbjMzNjY6XHRcdGludCBlcnI7XG4zMzY3Olx0XG4zMzY4Olx0XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG4zMzY5Olx0XHRpZiAoIWRldikge1xuMzM3MDpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzM3MTpcdFx0XHRnb3RvIGVycjtcbjMzNzI6XHRcdH1cbjMzNzM6XHRcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcbjMzNzQ6XHRcdGRldi1cdTAwM2VydG5sX2xpbmtfb3BzID0gXHUwMDI2cHBwX2xpbmtfb3BzO1xuMzM3NTpcdFxuMzM3NjpcdFx0cnRubF9sb2NrKCk7XG4zMzc3Olx0XG4zMzc4Olx0XHRlcnIgPSBwcHBfZGV2X2NvbmZpZ3VyZShuZXQsIGRldiwgXHUwMDI2Y29uZik7XG4zMzc5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzM4MDpcdFx0XHRnb3RvIGVycl9kZXY7XG4zMzgxOlx0XHRwcHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuMzM4MjpcdFx0KnVuaXQgPSBwcHAtXHUwMDNlZmlsZS5pbmRleDtcbjMzODM6XHRcbjMzODQ6XHRcdHJ0bmxfdW5sb2NrKCk7XG4zMzg1Olx0XG4zMzg2Olx0XHRyZXR1cm4gMDtcbjMzODc6XHRcbjMzODg6XHRlcnJfZGV2OlxuMzM4OTpcdFx0cnRubF91bmxvY2soKTtcbjMzOTA6XHRcdGZyZWVfbmV0ZGV2KGRldik7XG4zMzkxOlx0ZXJyOlxuMzM5MjpcdFx0cmV0dXJuIGVycjtcbjMzOTM6XHR9XG4zMzk0Olx0XG4zMzk1Olx0LypcbjMzOTY6XHQgKiBJbml0aWFsaXplIGEgcHBwX2ZpbGUgc3RydWN0dXJlLlxuMzM5NzpcdCAqL1xuMzM5ODpcdHN0YXRpYyB2b2lkXG4zMzk5Olx0aW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZClcbjM0MDA6XHR7XG4zNDAxOlx0XHRwZi1cdTAwM2VraW5kID0ga2luZDtcbjM0MDI6XHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cGYtXHUwMDNleHEpO1xuMzQwMzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZi1cdTAwM2VycSk7XG4zNDA0Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cGYtXHUwMDNlcmVmY250LCAxKTtcbjM0MDU6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cGYtXHUwMDNlcndhaXQpO1xuMzQwNjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgLi4uKWAgY2FsbC4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGBwcHBgIHN0cnVjdHVyZSBpcyBiZWluZyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCBpcyBhY2Nlc3NlZCB1c2luZyBgbmV0ZGV2X3ByaXYoZGV2KWAuIFNvLCBgcHBwYCBhbmQgdGhlIGBkZXZgIHN0cnVjdCBhcmUgaW5oZXJlbnRseSBsaW5rZWQsIGdvb2QuCgpOb3csIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgcHBwLSZndDtkZXZgIGFuZCBzdWJzdGl0dXRpbmcgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gSG1tLCBpcyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCBhIGZ1bmN0aW9uIG9yIGEgbWFjcm8/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIFdhaXQgYSBzZWNvbmQsIGlzIGBuZXRkZXZfZnJvbV9wcml2YCBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbj8gSXMgaXQgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyPyBBY3R1YWxseSwgbm8sIEkgdGhpbmsgaXQgaXMgdXN1YWxseSBgbmV0ZGV2X3ByaXYoZGV2KWAgdG8gZ2V0IHRoZSBwcml2YXRlIGRhdGEuIElzIHRoZXJlIGV2ZW4gYSBgbmV0ZGV2X2Zyb21fcHJpdihwcml2KWAgZGVmaW5lZCBzb21ld2hlcmU/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IHNlZSB3aGVyZSBgbmV0ZGV2X2Zyb21fcHJpdmAgaXMgdXNlZCBpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O2xsIGJlIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldl9mcm9tX3ByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjgxOT1zdGF0aWMgaW5saW5lIHZvaWQgKm5ldGRldl9wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODI0LS8qKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyODI1OiAqIG5ldGRldl9mcm9tX3ByaXYoKSAtIGdldCBuZXR3b3JrIGRldmljZSBmcm9tIHByaXZcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjgyNi0gKiBAcHJpdjogbmV0d29yayBkZXZpY2UgcHJpdmF0ZSBkYXRhXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODI5LSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyODMwOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl9mcm9tX3ByaXYoY29uc3Qgdm9pZCAqcHJpdilcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjgzMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDMKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgUFBQIERldmljZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBgbmV0ZGV2X2Zyb21fcHJpdmAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLCBnb29kLiBUaGUgcGF0Y2ggYWltcyBmb3IgcHVyZSByZWZhY3RvcmluZywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nIGhlcmUuIEl0JiMzOTtzIGFsbCBhYm91dCBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBkZXZgIHBvaW50ZXIgd2l0aGluIHRoZSBgc3RydWN0IHBwcGAgYW5kIGxldmVyYWdpbmcgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgaW5zdGVhZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIGlmIHRoZXJlJiMzOTtzIGFueSBmdW5jdGlvbmFsIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgc3RyYWlnaHQgc3dhcCBvZiBgcHBwLSZndDtkZXZgIHdpdGggdGhlIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIGVxdWl2YWxlbnQ/CgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgbm8gbmVlZCB0byBiZSBoYXN0eS4gT2theSwgYmFjayB0byB0aGUgcGF0Y2guIFl1cCwgaXQmIzM5O3MgcmVtb3ZpbmcgdGhhdCBhc3NpZ25tZW50IGluIGBwcHBfZGV2X2NvbmZpZ3VyZWA6IGAtIHBwcC0mZ3Q7ZGV2ID0gZGV2O2AgYW5kIHRoZW4gaXQmIzM5O3MgcmVwbGFjaW5nIGFsbCBpbnN0YW5jZXMgb2YgYHBwcC0mZ3Q7ZGV2YCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBIbW0sIG5vdyBJIGhhdmUgdG8gYmUgdGhvcm91Z2guLi4gQ291bGQgdGhlcmUgKmV2ZXIqIGhhdmUgYmVlbiBhIHNjZW5hcmlvIHdoZXJlIGBwcHAtJmd0O2RldmAgd2FzIE5VTEwgb3IgZGl2ZXJnZWQgZnJvbSB3aGF0IGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIHJldHVybnM/CgpUaGlua2luZyBpdCB0aHJvdWdoLCBubywgbm90IHJlYWxseS4gQmVjYXVzZSBgcHBwYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IHBwcCksIC4uLilgIHdoaWNoIGFsd2F5cywgaW4gZWZmZWN0LCBlbnN1cmVzIHRoYXQgYHBwcGAmIzM5O3MgbWVtb3J5IGxvY2F0aW9uIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgcHJpdmF0ZSBkYXRhIHJlZ2lvbiBvZiB0aGUgYXNzb2NpYXRlZCBgZGV2YCBzdHJ1Y3R1cmUuIFRoZSBjYWxjdWxhdGlvbiwgdGhlcmVmb3JlLCBpcyBqdXN0IGNvcnJlY3QuIEhvbGQgb24sIHRob3VnaC4uLndoYXQgaWYgdGhlcmUmIzM5O3MgYW4gKmFsdGVybmF0aXZlKiB3YXkgdGhhdCBgcHBwYCBjb3VsZCBiZSBhbGxvY2F0ZWQ/IElzIGBzdHJ1Y3QgcHBwYCBldmVyIGluc3RhbnRpYXRlZCBvdXRzaWRlIG9mIHRoZSBgYWxsb2NfbmV0ZGV2YCBjb250ZXh0PyBMZXQmIzM5O3MgZ28gbG9vayBmb3IgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNvcm5lciBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhrbWFsbG9jfGt6YWxsb2N8a2NhbGxvY3x2bWFsbG9jfHZ6YWxsb2MpXFwoLipzaXplb2ZcXChzdHJ1Y3QgcHBwXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHBwcGAgQWxsb2NhdGlvbiBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIHRoZSBgc3RydWN0IHBwcGAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgIGZpbGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBhbGxvY2F0aW9uIG9mIHRoZSBzdHJ1Y3QgKnNwZWNpZmljYWxseSogd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bSBvcGVyYXRpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgd2F5IGl0IGlzIGFsbG9jYXRlZCBtYXkgaGF2ZSBhbiBlZmZlY3Qgb24gaXRzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgc3RydWN0IGlzIGJlaW5nIGluc3RhbnRpYXRlZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYW5kIGlmIHNvLCBob3cuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBhbmFseXNpcy4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBhbGxvY2F0ZWQgZGlyZWN0bHkgdGhlcmUsIG9yIGlmIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVzcG9uc2libGUuIEZpbmRpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgYWxsb2NhdGVkIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NpemVvZlxcKHN0cnVjdCBwcHBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xMzgzPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBwcHBfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xMzg2LVx0LnBvbGljeVx0XHQ9IHBwcF9ubF9wb2xpY3ksXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxMzg3Olx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBwcCksXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xMzg4LVx0LnNldHVwXHRcdD0gcHBwX3NldHVwLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTc9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjg6XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY5LVx0aWYgKCFkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBqdXN0IHJlbW92aW5nIGEgcmVkdW5kYW50IHBvaW50ZXIgd2l0aGluIHRoZSBgc3RydWN0IHBwcGAuIFNwZWNpZmljYWxseSwgdGhpcyBwb2ludGVyIHRoYXQgc3RvcmVzIHRoZSBgbmV0X2RldmljZWAgd2l0aGluIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCBsb29rcyBsaWtlIGBzdHJ1Y3QgcHBwYCBpcyBvbmx5IGV2ZXIgYWxsb2NhdGVkIGFzIGBuZXRkZXZfcHJpdmAsIGVpdGhlciB0aHJvdWdoIGBhbGxvY19uZXRkZXZgIG9yIHZpYSBgcnRubF9saW5rX29wcy5wcml2X3NpemVgLiBUaGVyZWZvcmUsIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIHdpbGwgYWx3YXlzIGNvcnJlY3RseSBnaXZlIHlvdSB0aGUgYXNzb2NpYXRlZCBgbmV0X2RldmljZWAuIFNvLCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBzaG91bGQganVzdCBzYXZlIGEgZmV3IGJ5dGVzIGFuZCBzaG91bGQgaGF2ZSBubyBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGZ1bmN0aW9uYWwgbG9naWMgb2YgdGhlIGNvZGUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggZm9yIGFueSBzbmVha3kgY2hhbmdlcy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgdGhlIGZpcnN0IGNoYW5nZSBpcyBqdXN0IHJlcGxhY2luZyBgcHBwLSZndDtkZXYtJmd0O25hbWVgIHdpdGggYGRldi0mZ3Q7bmFtZWAsIHdoZXJlIGBkZXZgIGlzIGEgbG9jYWwgdmFyaWFibGUgaW5pdGlhbGl6ZWQgYXMgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAuIFRoYXQmIzM5O3MgZmluZS4gSXQmIzM5O3MganVzdCB1c2luZyB0aGUgbG9jYWwgdmFyaWFibGUsIGFzIGV4cGVjdGVkLgoKVGhlbiB0aGVyZSYjMzk7cyBhIGNoYW5nZSBpbiBgcHBwX2Rldl9uYW1lYC4gSXQgbm93IGNhbGxzIGBuZXRkZXZfZnJvbV9wcml2KHBwcCktJmd0O25hbWVgIGluc3RlYWQgb2YgYHBwcC0mZ3Q7ZGV2LSZndDtuYW1lYC4gSGFuZyBvbiwgZG9lcyB0aGlzIGNoYW5nZSBpbmRpY2F0ZSB0aGF0IGBwcHAtJmd0O2RldmAgKmNvdWxkKiBoYXZlIGJlZW4gTlVMTCBwcmV2aW91c2x5PyBMZXQgbWUgZGlnIGEgbGl0dGxlIGRlZXBlci4KCkxldCYjMzk7cyBzZWUuIEluIGBwcHBfZGV2X2NvbmZpZ3VyZWAsIGBwcHAtJmd0O2RldiA9IGRldjtgIGlzIHNldC4gT2theSwgc28gd2hlcmUgaXMgYHBwcC0mZ3Q7ZGV2YCAqbm90KiBzZXQ/IElzIHRoZXJlIGEgc2l0dWF0aW9uIHdoZXJlIGBwcHBgIGV4aXN0cyBidXQgYHBwcC0mZ3Q7ZGV2YCBpcyBOVUxMPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBwcHBgIGlzIGNyZWF0ZWQuCgpMb29raW5nIGF0IGBwcHBfY3JlYXRlX2ludGVyZmFjZWAsIHdlIHNlZSBgZGV2ID0gYWxsb2NfbmV0ZGV2KC4uLilgLiBUaGVuIGBkZXZfbmV0X3NldChkZXYsIG5ldClgLCBhbmQgc28gb24uIGBwcHBfZGV2X2NvbmZpZ3VyZWAgaXMgY2FsbGVkLCBhbmQgKnRoZW4qIGBwcHAtJmd0O2RldiA9IGRldjtgIGlzIGFzc2lnbmVkLiBJZiBgcHBwX2Rldl9jb25maWd1cmVgIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgZXJyX2RldmAsIGFuZCBgZGV2YCBpcyB1bmxvY2tlZCBhbmQgZnJlZWQuIENydWNpYWxseSwgYmVjYXVzZSBgcHBwYCBpcyB3aXRoaW4gdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGBkZXZgIChhcyBpdCYjMzk7cyBgbmV0ZGV2X3ByaXZgISksIGZyZWVpbmcgYGRldmAgd291bGQgYWxzbyBmcmVlIGBwcHBgLiBUaGVyZWZvcmUsIGBwcHBgIGNhbiYjMzk7dCBleGlzdCB3aXRob3V0IGBkZXZgLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgcHBwX25sX25ld2xpbmtgPyBMZXQgbWUgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMjA6XHRcdGludCBlcnI7XG4xMzIxOlx0XG4xMzIyOlx0XHRmaWxlID0gZmdldChubGFfZ2V0X3MzMihkYXRhW0lGTEFfUFBQX0RFVl9GRF0pKTtcbjEzMjM6XHRcdGlmICghZmlsZSlcbjEzMjQ6XHRcdFx0cmV0dXJuIC1FQkFERjtcbjEzMjU6XHRcbjEzMjY6XHRcdC8qIHJ0bmxfbG9jayBpcyBhbHJlYWR5IGhlbGQgaGVyZSwgYnV0IHBwcF9jcmVhdGVfaW50ZXJmYWNlKCkgbG9ja3NcbjEzMjc6XHRcdCAqIHBwcF9tdXRleCBiZWZvcmUgaG9sZGluZyBydG5sX2xvY2suIFVzaW5nIG11dGV4X3RyeWxvY2soKSBhdm9pZHNcbjEzMjg6XHRcdCAqIHBvc3NpYmxlIGRlYWRsb2NrIGR1ZSB0byBsb2NrIG9yZGVyIGludmVyc2lvbiwgYXQgdGhlIGNvc3Qgb2ZcbjEzMjk6XHRcdCAqIHB1c2hpbmcgdGhlIHByb2JsZW0gYmFjayB0byB1c2Vyc3BhY2UuXG4xMzMwOlx0XHQgKi9cbjEzMzE6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZwcHBfbXV0ZXgpKSB7XG4xMzMyOlx0XHRcdGVyciA9IC1FQlVTWTtcbjEzMzM6XHRcdFx0Z290byBvdXQ7XG4xMzM0Olx0XHR9XG4xMzM1Olx0XG4xMzM2Olx0XHRpZiAoZmlsZS1cdTAwM2VmX29wICE9IFx1MDAyNnBwcF9kZXZpY2VfZm9wcyB8fCBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSkge1xuMTMzNzpcdFx0XHRlcnIgPSAtRUJBREY7XG4xMzM4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEzMzk6XHRcdH1cbjEzNDA6XHRcbjEzNDE6XHRcdGNvbmYuZmlsZSA9IGZpbGU7XG4xMzQyOlx0XG4xMzQzOlx0XHQvKiBEb24mIzM5O3QgdXNlIGRldmljZSBuYW1lIGdlbmVyYXRlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyIHdoZW4gaWZuYW1lXG4xMzQ0Olx0XHQgKiBpc24mIzM5O3Qgc3BlY2lmaWVkLiBMZXQgcHBwX2Rldl9jb25maWd1cmUoKSBzZXQgdGhlIGRldmljZSBuYW1lIHVzaW5nXG4xMzQ1Olx0XHQgKiB0aGUgUFBQIHVuaXQgaWRlbnRpZmVyIGFzIHN1ZmZpeCAoaS5lLiBwcHBcdTAwM2N1bml0X2lkXHUwMDNlKS4gVGhpcyBhbGxvd3NcbjEzNDY6XHRcdCAqIHVzZXJzcGFjZSB0byBpbmZlciB0aGUgZGV2aWNlIG5hbWUgdXNpbmcgdG8gdGhlIFBQUElPQ0dVTklUIGlvY3RsLlxuMTM0NzpcdFx0ICovXG4xMzQ4Olx0XHRpZiAoIXRiW0lGTEFfSUZOQU1FXSB8fCAhbmxhX2xlbih0YltJRkxBX0lGTkFNRV0pIHx8ICEqKGNoYXIgKilubGFfZGF0YSh0YltJRkxBX0lGTkFNRV0pKVxuMTM0OTpcdFx0XHRjb25mLmlmbmFtZV9pc19zZXQgPSBmYWxzZTtcbjEzNTA6XHRcbjEzNTE6XHRcdGVyciA9IHBwcF9kZXZfY29uZmlndXJlKGxpbmtfbmV0LCBkZXYsIFx1MDAyNmNvbmYpO1xuMTM1MjpcdFxuMTM1MzpcdG91dF91bmxvY2s6XG4xMzU0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHBwX211dGV4KTtcbjEzNTU6XHRvdXQ6XG4xMzU2Olx0XHRmcHV0KGZpbGUpO1xuMTM1NzpcdFxuMTM1ODpcdFx0cmV0dXJuIGVycjtcbjEzNTk6XHR9XG4xMzYwOlx0XG4xMzYxOlx0c3RhdGljIHZvaWQgcHBwX25sX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbjEzNjI6XHR7XG4xMzYzOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuMTM2NDpcdH1cbjEzNjU6XHRcbjEzNjY6XHRzdGF0aWMgc2l6ZV90IHBwcF9ubF9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuMTM2NzpcdHtcbjEzNjg6XHRcdHJldHVybiAwO1xuMTM2OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gUFBQIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwcHBfbmxfbmV3bGlua2AgZnVuY3Rpb24sIGFuZCBpdCBjYWxscyBgcHBwX2Rldl9jb25maWd1cmVgLiBNeSBtYWluIGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY29kZSBzdGF0ZXMgdGhhdCBpZiBgcHBwX2Rldl9jb25maWd1cmVgIGZhaWxzLCB0aGUgYGRldmAgaXMgZXZlbnR1YWxseSBmcmVlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgYHBwcGAgaXMgYWx3YXlzIHBhcnQgb2YgYGRldmAuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IGlzIHRoZXJlICphbnkqIHNjZW5hcmlvIHdoZXJlIGBwcHAtJmd0O2RldmAgY291bGQgYWN0dWFsbHkgYmUgTlVMTD8KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBzZWN0aW9uIG9mIGNvZGUgKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoOgoKYGBgYwoJaWYgKHBjaCkgewoJCXBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcCk7CgkJaWYgKHBwcCAmYW1wOyZhbXA7IHBwcC0mZ3Q7ZGV2KQoJCQluYW1lID0gcHBwLSZndDtkZXYtJmd0O25hbWU7Cgl9CmBgYAoKVGhlIHdvcnJ5IGlzIHRoYXQgcmVtb3ZpbmcgdGhlIGBwcHAtJmd0O2RldmAgY2hlY2sgY291bGQgbGVhZCB0byBhIGNyYXNoIGlmLCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGBwcHAtJmd0O2RldmAgKmNvdWxkKiBiZSBOVUxMLiBCdXQsIHdhaXQuLi4gaXNuJiMzOTt0IGBwcHBgIGFsbG9jYXRlZCBhcyBgbmV0ZGV2X3ByaXYoZGV2KWA/IFRoYXQgbWFrZXMgYHBwcC0mZ3Q7ZGV2YCBiYXNpY2FsbHkgYSBwb2ludGVyIGJhY2sgdG8gYGRldmAgaXRzZWxmLiBBbmQgaXQgZ2V0cyBpbml0aWFsaXplZCBpbnNpZGUgYHBwcF9kZXZfY29uZmlndXJlYC4gVGhhdCBzZWVtcyBwcmV0dHkgc29saWQuCgpTdGlsbCwgSSBjYW4mIzM5O3QgZGlzbWlzcyB0aGlzIHdpdGhvdXQgZGlnZ2luZyBkZWVwZXIuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBjb3VsZCBgcGNoLSZndDtwcHBgIGJlIHNldCAqYmVmb3JlKiBgcHBwX2Rldl9jb25maWd1cmVgIGZpbmlzaGVzPyBUaGF0JiMzOTtzIHRoZSBvbmx5IHdheSBJIGNhbiBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgYHBjaC0mZ3Q7cHBwYCBpcyBhY3R1YWxseSBzZXQuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBwb2ludGVyIGNoYWluIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgc2V0IGJlZm9yZSBJIGNhbiBnaXZlIHRoZSBncmVlbiBsaWdodC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyY3VfYXNzaWduX3BvaW50ZXJcXChwY2gtXHUwMDNlcHBwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzQ5OD1wcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1MzktXHQmIzQzOyYjNDM7cHBwLVx1MDAzZW5fY2hhbm5lbHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNTQwOlx0cmN1X2Fzc2lnbl9wb2ludGVyKHBjaC1cdTAwM2VwcHAsIHBwcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNTQxLVx0cmVmY291bnRfaW5jKFx1MDAyNnBwcC1cdTAwM2VmaWxlLnJlZmNudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDY1CgkJCQkJCQlvdXRwdXQ6IDk3CgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBwcHBfY29ubmVjdF9jaGFubmVsYCAtIEEgQ2xvc2VyIExvb2sqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgcHBwX2Nvbm5lY3RfY2hhbm5lbGAgZnVuY3Rpb24gYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gRXNzZW50aWFsbHksIHRoaXMgYHBwcF9jb25uZWN0X2NoYW5uZWxgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb25uZWN0aW9uLCBhbmQgdGhlIGNyaXRpY2FsIHBhcnQgaW52b2x2ZXMgZ2V0dGluZyB0aGUgYHBwcGAgc3RydWN0dXJlLiBJdCB1c2VzIGBwcHBfZmluZF91bml0YCB0byBsb2NhdGUgaXQsIHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gdGhlIElEUiB2aWEgYHBwcF91bml0X3JlZ2lzdGVyYC4gVGhpcyByZWdpc3RyYXRpb24gaGFwcGVucyBkdXJpbmcgYHBwcF9kZXZfY29uZmlndXJlYCwgbWVhbmluZyB0aGUgYHBwcGAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpbXBvcnRhbnRseSwgYHBwcC0mZ3Q7ZGV2YCBoYXMgKmFscmVhZHkqIGJlZW4gYXNzaWduZWQgYmVmb3JlIGl0JiMzOTtzIGV2ZW4gYWRkZWQgdG8gdGhlIElEUi4KClRoZXJlZm9yZSwgYmVjYXVzZSBgcHBwYCBpcyByZWdpc3RlcmVkIGNvcnJlY3RseSwgYW5kIGluaXRpYWxpemVkIGNvcnJlY3RseSwgaWYgYHBwcGAgaXMgZm91bmQsIGBwcHAtJmd0O2RldmAgY2FuICpuZXZlciogYmUgTlVMTC4gVGhlIGNvZGUgc2VlbXMgdG8gY2hlY2sgYGlmIChwcHAgJmFtcDsmYW1wOyBwcHAtJmd0O2RldilgIGJ1dCB0aGF0IGxvb2tzIGxpa2UgZWl0aGVyIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyDigJMgYW50aWNpcGF0aW5nIHNvbWUgZWFybGllciwgbm93LXJlbW92ZWQgcG9zc2liaWxpdHkg4oCTIG9yIHBlcmhhcHMganVzdCBhIHJlbW5hbnQgb2YgYSB0aW1lIHdoZW4gYHBwcGAgYW5kIGBkZXZgIHdlcmUgbWFuYWdlZCBzZXBhcmF0ZWx5LiBOb3csIHRoZSBgcHBwLSZndDtkZXZgIGlzIGEgcmVkdW5kYW50IHBvaW50ZXIuCgpNeSBhc3Nlc3NtZW50IGlzIHRoYXQgcmVtb3ZpbmcgdGhpcyBgcHBwLSZndDtkZXZgIGFuZCByZXBsYWNpbmcgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCBpcyBwdXJlbHkgYSBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nLiBJdCYjMzk7cyBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGNvZGUgYW5kIGltcHJvdmluZyBtYWludGFpbmFiaWxpdHksIGJ1dCBpdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBhbHRlciB0aGUgKmZ1bmN0aW9uYWxpdHkqIG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MgaW4gYW55IHdheS4KCkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yIHRvIGVsaW1pbmF0ZSBhIHJlZHVuZGFudCBwb2ludGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIGZyb20gYHN0cnVjdCBwcHBgIGFuZCByZXBsYWNlcyBpdCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBTaW5jZSBgc3RydWN0IHBwcGAgaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCwgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjM2LjkwMTU2NTg5MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDQwMDIwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDM6MzYuOTAxNTcyODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk1ODMxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YTJlYzdhM2Q0MTNjYjVjMGQyMGU3ZWU0MjVmMDY5M2IyNWFmMDMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xcbmluZGV4IDA4YmI4OTc2NTQ4N2YuLmUxMDEzNjIxZWIxZDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xcbkBAIC0xMzksNyArMTM5LDYgQEAgc3RydWN0IHBwcCB7XFxuIFxcdHZvaWRcXHRcXHQqcmNfc3RhdGU7XFx0LyogaXRzIGludGVybmFsIHN0YXRlIDk4ICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRsYXN0X3htaXQ7XFx0LyogamlmZmllcyB3aGVuIGxhc3QgcGt0IHNlbnQgOWMgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdGxhc3RfcmVjdjtcXHQvKiBqaWZmaWVzIHdoZW4gbGFzdCBwa3QgcmN2ZCBhMCAqL1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcdFxcdC8qIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBhNCAqL1xcbiBcXHRpbnRcXHRcXHRjbG9zaW5nO1xcdC8qIGlzIGRldmljZSBjbG9zaW5nIGRvd24/IGE4ICovXFxuICNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOS1xcbiBcXHRpbnRcXHRcXHRueGNoYW47XFx0XFx0LyogbmV4dCBjaGFubmVsIHRvIHNlbmQgc29tZXRoaW5nIG9uICovXFxuQEAgLTQxMiw3ICs0MTEsNyBAQCBzdGF0aWMgaW50IHBwcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqdW51c2VkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0XFx0XFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcXG4gXFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdFxcdGlmIChmaWxlID09IHBwcC1cXHUwMDNlb3duZXIpXFxuLVxcdFxcdFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHBwcC1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcXG4gXFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4gXFx0XFx0XFx0cHBwX3JlbGVhc2VfaW50ZXJmYWNlKHBwcCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC05MjEsNyArOTIwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShwcHAtXFx1MDAzZW5wbW9kZVtpXSwgbnBpLm1vZGUpO1xcbiBcXHRcXHRcXHQvKiB3ZSBtYXkgYmUgYWJsZSB0byB0cmFuc21pdCBtb3JlIHBhY2tldHMgbm93ICg/PykgKi9cXG4tXFx0XFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShwcHAtXFx1MDAzZWRldik7XFxuK1xcdFxcdFxcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMTE0Nyw3ICsxMTQ2LDcgQEAgc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGludCBpZDtcXG4gXFxuIFxcdGlkcl9mb3JfZWFjaF9lbnRyeShcXHUwMDI2cG4tXFx1MDAzZXVuaXRzX2lkciwgcHBwLCBpZClcXG4tXFx0XFx0cHBwX25sX2RlbGxpbmsocHBwLVxcdTAwM2VkZXYsIGRldl90b19raWxsKTtcXG4rXFx0XFx0cHBwX25sX2RlbGxpbmsobmV0ZGV2X2Zyb21fcHJpdihwcHApLCBkZXZfdG9fa2lsbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5AQCAtMTE3MCw2ICsxMTY5LDcgQEAgc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwcHBfbmV0X29wcyA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuIFxcdHN0cnVjdCBwcHBfbmV0ICpwbiA9IHBwcF9wZXJuZXQocHBwLVxcdTAwM2VwcHBfbmV0KTtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTExODEsOCArMTE4MSw4IEBAIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0aWYgKCFpZm5hbWVfaXNfc2V0KSB7XFxuIFxcdFxcdFxcdHdoaWxlICgxKSB7XFxuLVxcdFxcdFxcdFxcdHNucHJpbnRmKHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLCBJRk5BTVNJWiwgXFxcInBwcCVpXFxcIiwgcmV0KTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFuZXRkZXZfbmFtZV9pbl91c2UocHBwLVxcdTAwM2VwcHBfbmV0LCBwcHAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSkpXFxuK1xcdFxcdFxcdFxcdHNucHJpbnRmKGRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVosIFxcXCJwcHAlaVxcXCIsIHJldCk7XFxuK1xcdFxcdFxcdFxcdGlmICghbmV0ZGV2X25hbWVfaW5fdXNlKHBwcC1cXHUwMDNlcHBwX25ldCwgZGV2LVxcdTAwM2VuYW1lKSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdHVuaXRfcHV0KFxcdTAwMjZwbi1cXHUwMDNldW5pdHNfaWRyLCByZXQpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSB1bml0X2dldChcXHUwMDI2cG4tXFx1MDAzZXVuaXRzX2lkciwgcHBwLCByZXQgKyAxKTtcXG5AQCAtMTIxMCwxMSArMTIxMCwxMSBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldClcXG4gXFx0cHBwLVxcdTAwM2VmaWxlLmluZGV4ID0gcmV0O1xcbiBcXG4gXFx0aWYgKCFpZm5hbWVfaXNfc2V0KVxcbi1cXHRcXHRzbnByaW50ZihwcHAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVosIFxcXCJwcHAlaVxcXCIsIHBwcC1cXHUwMDNlZmlsZS5pbmRleCk7XFxuK1xcdFxcdHNucHJpbnRmKGRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVosIFxcXCJwcHAlaVxcXCIsIHBwcC1cXHUwMDNlZmlsZS5pbmRleCk7XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBuLVxcdTAwM2VhbGxfcHBwX211dGV4KTtcXG4gXFxuLVxcdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwcHAtXFx1MDAzZWRldik7XFxuK1xcdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfdW5pdDtcXG4gXFxuQEAgLTEyMzksNyArMTIzOSw2IEBAIHN0YXRpYyBpbnQgcHBwX2Rldl9jb25maWd1cmUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aW50IGVycjtcXG4gXFx0aW50IGNwdTtcXG4gXFxuLVxcdHBwcC1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXHRwcHAtXFx1MDAzZXBwcF9uZXQgPSBzcmNfbmV0O1xcbiBcXHRwcHAtXFx1MDAzZW1ydSA9IFBQUF9NUlU7XFxuIFxcdHBwcC1cXHUwMDNlb3duZXIgPSBjb25mLVxcdTAwM2VmaWxlO1xcbkBAIC0xNjU4LDcgKzE2NTcsNyBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9mbHVzaChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdC8qIElmIHRoZXJlJ3Mgbm8gd29yayBsZWZ0IHRvIGRvLCB0ZWxsIHRoZSBjb3JlIG5ldCBjb2RlIHRoYXQgd2UgY2FuXFxuIFxcdCAqIGFjY2VwdCBzb21lIG1vcmUuXFxuIFxcdCAqL1xcbi1cXHRuZXRpZl93YWtlX3F1ZXVlKHBwcC1cXHUwMDNlZGV2KTtcXG4rXFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xNjc0LDcgKzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAobGlrZWx5KHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2cHBwLVxcdTAwM2VmaWxlLnhxKSkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwcHBfcHVzaChwcHAsIHNrYikpKSB7XFxuIFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUueHEsIHNrYik7XFxuLVxcdFxcdFxcdG5ldGlmX3N0b3BfcXVldWUocHBwLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRcXHRuZXRpZl9zdG9wX3F1ZXVlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtMTcxMiwxNyArMTcxMSwxOCBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcbiBcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbi1cXHRcXHRuZXRkZXZfZXJyKHBwcC1cXHUwMDNlZGV2LCBcXFwicmVjdXJzaW9uIGRldGVjdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFxcXCJyZWN1cnNpb24gZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcXG4gcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XFxuIFxcdGludCBsZW47XFxuLVxcdGludCBuZXdfc2tiX3NpemUgPSBwcHAtXFx1MDAzZWRldi1cXHUwMDNlbXR1ICtcXG4tXFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gcHBwLVxcdTAwM2VkZXYtXFx1MDAzZW10dSArXFxuK1xcdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuK1xcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuIFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbiBcXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG5AQCAtMTczMSwxMiArMTczMSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIW5ld19za2IpIHtcXG4gXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbi1cXHRpZiAocHBwLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcXHUwMDNlIFBQUF9IRFJMRU4pXFxuLVxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsXFxuLVxcdFxcdFxcdCAgICBwcHAtXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuK1xcdGlmIChkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcXHUwMDNlIFBQUF9IRFJMRU4pXFxuK1xcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuIFxcbiBcXHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xcbiBcXHRsZW4gPSBwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wcmVzcyhwcHAtXFx1MDAzZXhjX3N0YXRlLCBza2ItXFx1MDAzZWRhdGEgLSAyLFxcbkBAIC0xNzYxLDcgKzE3NjAsNyBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0ICogdGhlIHNhbWUgbnVtYmVyLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcInBwcDogY29tcHJlc3NvciBkcm9wcGVkIHBrdFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxcXG5cXFwiKTtcXG4gXFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuIFxcdFxcdG5ld19za2IgPSBOVUxMO1xcbiBcXHR9XFxuQEAgLTE3NzcsMTMgKzE3NzYsMTQgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHN0YXRpYyBpbnRcXG4gcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjtcXG4gXFx0aW50IHByb3RvID0gUFBQX1BST1RPKHNrYik7XFxuIFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xcbiBcXHRpbnQgbGVuO1xcbiBcXHR1bnNpZ25lZCBjaGFyICpjcDtcXG4gXFxuLVxcdHNrYi1cXHUwMDNlZGV2ID0gcHBwLVxcdTAwM2VkZXY7XFxuK1xcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXG4gXFx0aWYgKHByb3RvIFxcdTAwM2MgMHg4MDAwKSB7XFxuICNpZmRlZiBDT05GSUdfUFBQX0ZJTFRFUlxcbkBAIC0xNzk0LDcgKzE3OTQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdFxcdGlmIChwcHAtXFx1MDAzZXBhc3NfZmlsdGVyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBicGZfcHJvZ19ydW4ocHBwLVxcdTAwM2VwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7XFxuIFxcdFxcdFxcdGlmIChSRUFEX09OQ0UocHBwLVxcdTAwM2VkZWJ1ZykgXFx1MDAyNiAxKVxcbi1cXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlBQUDogb3V0Ym91bmQgZnJhbWUgXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwibm90IHBhc3NlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbkBAIC0xODExLDcgKzE4MTEsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqL1xcbiBcXHR9XFxuIFxcbi1cXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKHBwcC1cXHUwMDNlZGV2LCAxLCBza2ItXFx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xcbitcXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLVxcdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcXG4gXFxuIFxcdHN3aXRjaCAocHJvdG8pIHtcXG4gXFx0Y2FzZSBQUFBfSVA6XFxuQEAgLTE4MjIsMTMgKzE4MjIsMTMgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbiBcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbiBcXHRcXHQvKiB0cnkgdG8gZG8gVkogVENQIGhlYWRlciBjb21wcmVzc2lvbiAqL1xcbi1cXHRcXHRuZXdfc2tiID0gYWxsb2Nfc2tiKHNrYi1cXHUwMDNlbGVuICsgcHBwLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIDIsXFxuK1xcdFxcdG5ld19za2IgPSBhbGxvY19za2Ioc2tiLVxcdTAwM2VsZW4gKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIDIsXFxuIFxcdFxcdFxcdFxcdCAgICBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9lcnIocHBwLVxcdTAwM2VkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoVkogY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoVkogY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyKTtcXG4rXFx0XFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyKTtcXG4gXFx0XFx0Y3AgPSBza2ItXFx1MDAzZWRhdGEgKyAyO1xcbiBcXHRcXHRsZW4gPSBzbGhjX2NvbXByZXNzKHBwcC1cXHUwMDNldmosIGNwLCBza2ItXFx1MDAzZWxlbiAtIDIsXFxuIFxcdFxcdFxcdFxcdCAgICBuZXdfc2tiLVxcdTAwM2VkYXRhICsgMiwgXFx1MDAyNmNwLFxcbkBAIC0xODY0LDcgKzE4NjQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdCAgICBwcm90byAhPSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IHByb3RvICE9IFBQUF9DQ1ApIHtcXG4gXFx0XFx0aWYgKCEocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NDUF9VUCkgXFx1MDAyNlxcdTAwMjYgKHBwcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19NVVNUX0NPTVApKSB7XFxuIFxcdFxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuLVxcdFxcdFxcdFxcdG5ldGRldl9lcnIocHBwLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXFwicHBwOiBjb21wcmVzc2lvbiByZXF1aXJlZCBidXQgXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXFwiZG93biAtIHBrdCBkcm9wcGVkLlxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtMTg5Miw3ICsxODkyLDcgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbiBcXG4gIGRyb3A6XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCB0eF9lcnJvcnMpO1xcbitcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuQEAgLTE5NjIsNiArMTk2Miw3IEBAIE1PRFVMRV9QQVJNX0RFU0MobXBfcHJvdG9jb2xfY29tcHJlc3MsXFxuICAqL1xcbiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHRpbnQgbGVuLCB0b3RsZW47XFxuIFxcdGludCBpLCBiaXRzLCBoZHJsZW4sIG10dTtcXG4gXFx0aW50IGZsZW47XFxuQEAgLTIxNTgsOCArMjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cGNoLVxcdTAwM2Vkb3dubCk7XFxuICBlcnJfbGluZWFyaXplOlxcbiBcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXFxcblxcXCIpO1xcbi1cXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCB0eF9lcnJvcnMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXFxcblxcXCIpO1xcbitcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcXG4gXFx0KytwcHAtXFx1MDAzZW54c2VxO1xcbiBcXHRyZXR1cm4gMTtcXHQvKiBhYmFuZG9uIHRoZSBmcmFtZSAqL1xcbiB9XFxuQEAgLTIzMzIsNyArMjMzMyw3IEBAIHBwcF9pbnB1dChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmICghcHBwX2RlY29tcHJlc3NfcHJvdG8oc2tiKSkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0aWYgKHBwcCkge1xcbi1cXHRcXHRcXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcXG4rXFx0XFx0XFx0REVWX1NUQVRTX0lOQyhuZXRkZXZfZnJvbV9wcml2KHBwcCksIHJ4X2xlbmd0aF9lcnJvcnMpO1xcbiBcXHRcXHRcXHRwcHBfcmVjZWl2ZV9lcnJvcihwcHApO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGdvdG8gZG9uZTtcXG5AQCAtMjM5NCw3ICsyMzk1LDcgQEAgcHBwX3JlY2VpdmVfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcHBwICpwcHApXFxuIHtcXG4tXFx0REVWX1NUQVRTX0lOQyhwcHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4rXFx0REVWX1NUQVRTX0lOQyhuZXRkZXZfZnJvbV9wcml2KHBwcCksIHJ4X2Vycm9ycyk7XFxuIFxcdGlmIChwcHAtXFx1MDAzZXZqKVxcbiBcXHRcXHRzbGhjX3Rvc3MocHBwLVxcdTAwM2V2aik7XFxuIH1cXG5AQCAtMjQwMiw2ICsyNDAzLDcgQEAgcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5zO1xcbiBcXHRpbnQgcHJvdG8sIGxlbiwgbnBpO1xcbiBcXG5AQCAtMjQzMSw4ICsyNDMzLDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHQvKiBjb3B5IHRvIGEgbmV3IHNrX2J1ZmYgd2l0aCBtb3JlIHRhaWxyb29tICovXFxuIFxcdFxcdFxcdG5zID0gZGV2X2FsbG9jX3NrYihza2ItXFx1MDAzZWxlbiArIDEyOCk7XFxuIFxcdFxcdFxcdGlmICghbnMpIHtcXG4tXFx0XFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogbm8gbWVtb3J5IFxcXCJcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIihWSiBkZWNvbXApXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoVkogZGVjb21wKVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHNrYl9yZXNlcnZlKG5zLCAyKTtcXG5AQCAtMjQ0NSw3ICsyNDQ2LDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0XFx0bGVuID0gc2xoY191bmNvbXByZXNzKHBwcC1cXHUwMDNldmosIHNrYi1cXHUwMDNlZGF0YSArIDIsIHNrYi1cXHUwMDNlbGVuIC0gMik7XFxuIFxcdFxcdGlmIChsZW4gXFx1MDAzYz0gMCkge1xcbi1cXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgXFxcIlBQUDogVkogZGVjb21wcmVzc2lvbiBlcnJvclxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTI0NjgsNyArMjQ2OSw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRcXHRpZiAoc2xoY19yZW1lbWJlcihwcHAtXFx1MDAzZXZqLCBza2ItXFx1MDAzZWRhdGEgKyAyLCBza2ItXFx1MDAzZWxlbiAtIDIpIFxcdTAwM2M9IDApIHtcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogVkogdW5jb21wcmVzc2VkIGVycm9yXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IFZKIHVuY29tcHJlc3NlZCBlcnJvclxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHByb3RvID0gUFBQX0lQO1xcbkBAIC0yNDc5LDcgKzI0ODAsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKHBwcC1cXHUwMDNlZGV2LCBza2ItXFx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xcbitcXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgc2tiLVxcdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcXG4gXFxuIFxcdG5waSA9IHByb3RvX3RvX25waW5kZXgocHJvdG8pO1xcbiBcXHRpZiAobnBpIFxcdTAwM2MgMCkge1xcbkBAIC0yNTA2LDcgKzI1MDcsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGlmIChwcHAtXFx1MDAzZXBhc3NfZmlsdGVyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfcHJvZ19ydW4ocHBwLVxcdTAwM2VwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChSRUFEX09OQ0UocHBwLVxcdTAwM2VkZWJ1ZykgXFx1MDAyNiAxKVxcbi1cXHRcXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlBQUDogaW5ib3VuZCBmcmFtZSBcXFwiXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJub3QgcGFzc2VkXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuQEAgLTI1MjAsMTcgKzI1MjEsMTcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShwcHAtXFx1MDAzZWxhc3RfcmVjdiwgamlmZmllcyk7XFxuIFxcbi1cXHRcXHRpZiAoKHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxcbitcXHRcXHRpZiAoKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApID09IDAgfHxcXG4gXFx0XFx0ICAgIFJFQURfT05DRShwcHAtXFx1MDAzZW5wbW9kZVtucGldKSAhPSBOUE1PREVfUEFTUykge1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogY2hvcCBvZmYgcHJvdG9jb2wgKi9cXG4gXFx0XFx0XFx0c2tiX3B1bGxfcmNzdW0oc2tiLCAyKTtcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBwcHAtXFx1MDAzZWRldjtcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhucGluZGV4X3RvX2V0aGVydHlwZVtucGldKTtcXG4gXFx0XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0XFx0XFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocHBwLVxcdTAwM2VwcHBfbmV0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZXZfbmV0KHBwcC1cXHUwMDNlZGV2KSkpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZXZfbmV0KGRldikpKTtcXG4gXFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTI1NjgsOCArMjU2OSw4IEBAIHBwcF9kZWNvbXByZXNzX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdFxcdG5zID0gZGV2X2FsbG9jX3NrYihvYnVmZl9zaXplKTtcXG4gXFx0XFx0aWYgKCFucykge1xcbi1cXHRcXHRcXHRuZXRkZXZfZXJyKHBwcC1cXHUwMDNlZGV2LCBcXFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IFxcXCJcXG4tXFx0XFx0XFx0XFx0ICAgXFxcIm5vIG1lbW9yeVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2X2Zyb21fcHJpdihwcHApLFxcbitcXHRcXHRcXHRcXHQgICBcXFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IG5vIG1lbW9yeVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIHRoZSBkZWNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyB0aGUgQS9DIGJ5dGVzIGluIHRoZSBoZHIgKi9cXG5AQCAtMjYxNyw2ICsyNjE4LDcgQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfcmVjZWl2ZV9tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0dTMyIG1hc2ssIHNlcTtcXG4gXFx0c3RydWN0IGNoYW5uZWwgKmNoO1xcbiBcXHRpbnQgbXBoZHJsZW4gPSAocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX01QX1NIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjtcXG5AQCAtMjY2MSw3ICsyNjYzLDcgQEAgcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxcbiBcXHQgKi9cXG4gXFx0aWYgKHNlcV9iZWZvcmUoc2VxLCBwcHAtXFx1MDAzZW5leHRzZXEpKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCByeF9kcm9wcGVkKTtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIHJ4X2Ryb3BwZWQpO1xcbiBcXHRcXHRwcHBfcmVjZWl2ZV9lcnJvcihwcHApO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMjY5Nyw3ICsyNjk5LDcgQEAgcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxcbiBcXHRcXHRpZiAocHNrYl9tYXlfcHVsbChza2IsIDIpKVxcbiBcXHRcXHRcXHRwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShwcHAsIHNrYik7XFxuIFxcdFxcdGVsc2Uge1xcbi1cXHRcXHRcXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcXG4rXFx0XFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcXG4gXFx0XFx0fVxcbkBAIC0yNzM5LDYgKzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpcXG4gcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHR1MzIgc2VxID0gcHBwLVxcdTAwM2VuZXh0c2VxO1xcbiBcXHR1MzIgbWluc2VxID0gcHBwLVxcdTAwM2VtaW5zZXE7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBcXHUwMDI2cHBwLVxcdTAwM2VtcnE7XFxuQEAgLTI3NTUsOCArMjc1OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdGFnYWluOlxcbiBcXHRcXHRpZiAoc2VxX2JlZm9yZShQUFBfTVBfQ0IocCktXFx1MDAzZXNlcXVlbmNlLCBzZXEpKSB7XFxuIFxcdFxcdFxcdC8qIHRoaXMgY2FuJ3QgaGFwcGVuLCBhbnl3YXkgaWdub3JlIHRoZSBza2IgKi9cXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcInBwcF9tcF9yZWNvbnN0cnVjdCBiYWQgXFxcIlxcbi1cXHRcXHRcXHRcXHQgICBcXFwic2VxICV1IFxcdTAwM2MgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwX21wX3JlY29uc3RydWN0IGJhZCBzZXEgJXUgXFx1MDAzYyAldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ICAgUFBQX01QX0NCKHApLVxcdTAwM2VzZXF1ZW5jZSwgc2VxKTtcXG4gXFx0XFx0XFx0X19za2JfdW5saW5rKHAsIGxpc3QpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2IocCk7XFxuQEAgLTI3NzUsNyArMjc3Nyw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdFxcdFxcdFxcdG1pbnNlcSArIDE6IFBQUF9NUF9DQihwKS1cXHUwMDNlc2VxdWVuY2U7XFxuIFxcbiBcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJsb3N0IGZyYWcgJXUuLiV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBvbGRzZXEsIHNlcS0xKTtcXG4gXFxuQEAgLTI4MDMsOCArMjgwNSw4IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdFxcdGlmIChsb3N0ID09IDAgXFx1MDAyNlxcdTAwMjYgKFBQUF9NUF9DQihwKS1cXHUwMDNlQkViaXRzIFxcdTAwMjYgRSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChQUFBfTVBfQ0IoaGVhZCktXFx1MDAzZUJFYml0cyBcXHUwMDI2IEIpKSB7XFxuIFxcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSBwcHAtXFx1MDAzZW1ycnUgKyAyKSB7XFxuLVxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMocHBwLVxcdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xcbi1cXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiUFBQOiByZWNvbnN0cnVjdGVkIHBhY2tldFxcXCJcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIiBpcyB0b28gbG9uZyAoJWQpXFxcXG5cXFwiLCBsZW4pO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbkBAIC0yODI0LDcgKzI4MjYsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxcbiBcXG4gXFx0XFx0XFx0c2tiX3F1ZXVlX3JldmVyc2Vfd2Fsa19mcm9tX3NhZmUobGlzdCwgcCwgdG1wMikge1xcbiBcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJkaXNjYXJkaW5nIGZyYWcgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFBQUF9NUF9DQihwKS1cXHUwMDNlc2VxdWVuY2UpO1xcbiBcXHRcXHRcXHRcXHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XFxuQEAgLTI4NDYsNyArMjg0OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdFxcdFxcdFxcdGlmIChwID09IGhlYWQpXFxuIFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJkaXNjYXJkaW5nIGZyYWcgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFBQUF9NUF9DQihwKS1cXHUwMDNlc2VxdWVuY2UpO1xcbiBcXHRcXHRcXHRcXHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XFxuQEAgLTI4NTQsMTEgKzI4NTYsMTEgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKFJFQURfT05DRShwcHAtXFx1MDAzZWRlYnVnKSBcXHUwMDI2IDEpXFxuLVxcdFxcdFxcdFxcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiICBtaXNzZWQgcGt0cyAldS4uJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHBwcC1cXHUwMDNlbmV4dHNlcSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgUFBQX01QX0NCKGhlYWQpLVxcdTAwM2VzZXF1ZW5jZS0xKTtcXG4tXFx0XFx0XFx0REVWX1NUQVRTX0lOQyhwcHAtXFx1MDAzZWRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCByeF9kcm9wcGVkKTtcXG4gXFx0XFx0XFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMjk3Nyw4ICsyOTc5LDggQEAgY2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4gXFxuIFxcdGlmIChwY2gpIHtcXG4gXFx0XFx0cHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC1cXHUwMDNlcHBwKTtcXG4tXFx0XFx0aWYgKHBwcCBcXHUwMDI2XFx1MDAyNiBwcHAtXFx1MDAzZWRldilcXG4tXFx0XFx0XFx0bmFtZSA9IHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lO1xcbitcXHRcXHRpZiAocHBwKVxcbitcXHRcXHRcXHRuYW1lID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApLVxcdTAwM2VuYW1lO1xcbiBcXHR9XFxuIFxcdHJldHVybiBuYW1lO1xcbiB9XFxuQEAgLTMzMDksMTIgKzMzMTEsMTMgQEAgZmluZF9jb21wcmVzc29yKGludCB0eXBlKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3RydWN0IHNsY29tcHJlc3MgKnZqID0gcHBwLVxcdTAwM2V2ajtcXG4gXFx0aW50IGNwdTtcXG4gXFxuIFxcdG1lbXNldChzdCwgMCwgc2l6ZW9mKCpzdCkpO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpwID0gcGVyX2NwdV9wdHIocHBwLVxcdTAwM2VkZXYtXFx1MDAzZXRzdGF0cywgY3B1KTtcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnAgPSBwZXJfY3B1X3B0cihkZXYtXFx1MDAzZXRzdGF0cywgY3B1KTtcXG4gXFx0XFx0dTY0IHJ4X3BhY2tldHMsIHJ4X2J5dGVzLCB0eF9wYWNrZXRzLCB0eF9ieXRlcztcXG4gXFxuIFxcdFxcdHJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuQEAgLTMzMjcsOCArMzMzMCw4IEBAIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdClcXG4gXFx0XFx0c3QtXFx1MDAzZXAucHBwX29wYWNrZXRzICs9IHR4X3BhY2tldHM7XFxuIFxcdFxcdHN0LVxcdTAwM2VwLnBwcF9vYnl0ZXMgKz0gdHhfYnl0ZXM7XFxuIFxcdH1cXG4tXFx0c3QtXFx1MDAzZXAucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChwcHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4tXFx0c3QtXFx1MDAzZXAucHBwX29lcnJvcnMgPSBERVZfU1RBVFNfUkVBRChwcHAtXFx1MDAzZWRldiwgdHhfZXJyb3JzKTtcXG4rXFx0c3QtXFx1MDAzZXAucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHJ4X2Vycm9ycyk7XFxuK1xcdHN0LVxcdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQoZGV2LCB0eF9lcnJvcnMpO1xcbiBcXHRpZiAoIXZqKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHN0LVxcdTAwM2V2ai52anNfcGFja2V0cyA9IHZqLVxcdTAwM2VzbHNfb19jb21wcmVzc2VkICsgdmotXFx1MDAzZXNsc19vX3VuY29tcHJlc3NlZDtcXG5AQCAtMzQwOCw2ICszNDExLDggQEAgaW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZClcXG4gICovXFxuIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4rXFxuIFxcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUucmVmY250KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMzQxNSw3ICszNDIwLDcgQEAgc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcXG4gXFxuIFxcdGlmICghcHBwLVxcdTAwM2VmaWxlLmRlYWQgfHwgcHBwLVxcdTAwM2VuX2NoYW5uZWxzKSB7XFxuIFxcdFxcdC8qIFxcXCJjYW4ndCBoYXBwZW5cXFwiICovXFxuLVxcdFxcdG5ldGRldl9lcnIocHBwLVxcdTAwM2VkZXYsIFxcXCJwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCBcXFwiXFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgXFxcIlxcbiBcXHRcXHRcXHQgICBcXFwiYnV0IGRlYWQ9JWQgbl9jaGFubmVscz0lZCAhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICBwcHAsIHBwcC1cXHUwMDNlZmlsZS5kZWFkLCBwcHAtXFx1MDAzZW5fY2hhbm5lbHMpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTM0NDUsNyArMzQ1MCw3IEBAIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXFxuIFxcbiBcXHRmcmVlX3BlcmNwdShwcHAtXFx1MDAzZXhtaXRfcmVjdXJzaW9uKTtcXG4gXFxuLVxcdGZyZWVfbmV0ZGV2KHBwcC1cXHUwMDNlZGV2KTtcXG4rXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMzQ5Miw2ICszNDk3LDcgQEAgcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KVxcbiBzdGF0aWMgaW50XFxuIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IHBwcCAqcHBwO1xcbiBcXHRzdHJ1Y3QgcHBwX25ldCAqcG47XFxuIFxcdGludCByZXQgPSAtRU5YSU87XFxuQEAgLTM1MDMsNiArMzUwOSw3IEBAIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXFxuIFxcdHBwcCA9IHBwcF9maW5kX3VuaXQocG4sIHVuaXQpO1xcbiBcXHRpZiAoIXBwcClcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdGRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZXVwbCk7XFxuIFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdGlmIChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBjaC1cXHUwMDNlcHBwLCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBjaC1cXHUwMDNldXBsKSkgfHxcXG5AQCAtMzUxOSwxNSArMzUyNiwxNSBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxcbiBcXHRcXHRnb3RvIG91dGw7XFxuIFxcdH1cXG4gXFx0aWYgKHBjaC1cXHUwMDNlY2hhbi1cXHUwMDNlZGlyZWN0X3htaXQpXFxuLVxcdFxcdHBwcC1cXHUwMDNlZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRwcHAtXFx1MDAzZWRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX05PX1FVRVVFO1xcbitcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9OT19RVUVVRTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBjaC1cXHUwMDNlZG93bmwpO1xcbiBcXHRpZiAocGNoLVxcdTAwM2VmaWxlLmhkcmxlbiBcXHUwMDNlIHBwcC1cXHUwMDNlZmlsZS5oZHJsZW4pXFxuIFxcdFxcdHBwcC1cXHUwMDNlZmlsZS5oZHJsZW4gPSBwY2gtXFx1MDAzZWZpbGUuaGRybGVuO1xcbiBcXHRoZHJsZW4gPSBwY2gtXFx1MDAzZWZpbGUuaGRybGVuICsgMjtcXHQvKiBmb3IgcHJvdG9jb2wgYnl0ZXMgKi9cXG4tXFx0aWYgKGhkcmxlbiBcXHUwMDNlIHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pXFxuLVxcdFxcdHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBoZHJsZW47XFxuK1xcdGlmIChoZHJsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4rXFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBoZHJsZW47XFxuIFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwY2gtXFx1MDAzZWNsaXN0LCBcXHUwMDI2cHBwLVxcdTAwM2VjaGFubmVscyk7XFxuIFxcdCsrcHBwLVxcdTAwM2VuX2NoYW5uZWxzO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIocGNoLVxcdTAwM2VwcHAsIHBwcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjM3LjQzMTg5ODk2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNTA5Njc4MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmEyZWM3YTNkNDEzY2I1YzBkMjBlN2VlNDI1ZjA2OTNiMjVhZjAzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAwOGJiODk3NjU0ODdmLi5lMTAxMzYyMWViMWQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTM5LDcgKzEzOSw2IEBAIHN0cnVjdCBwcHAge1xuIFx0dm9pZFx0XHQqcmNfc3RhdGU7XHQvKiBpdHMgaW50ZXJuYWwgc3RhdGUgOTggKi9cbiBcdHVuc2lnbmVkIGxvbmdcdGxhc3RfeG1pdDtcdC8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCBzZW50IDljICovXG4gXHR1bnNpZ25lZCBsb25nXHRsYXN0X3JlY3Y7XHQvKiBqaWZmaWVzIHdoZW4gbGFzdCBwa3QgcmN2ZCBhMCAqL1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcdFx0LyogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIGE0ICovXG4gXHRpbnRcdFx0Y2xvc2luZztcdC8qIGlzIGRldmljZSBjbG9zaW5nIGRvd24/IGE4ICovXG4gI2lmZGVmIENPTkZJR19QUFBfTVVMVElMSU5LXG4gXHRpbnRcdFx0bnhjaGFuO1x0XHQvKiBuZXh0IGNoYW5uZWwgdG8gc2VuZCBzb21ldGhpbmcgb24gKi9cbkBAIC00MTIsNyArNDExLDcgQEAgc3RhdGljIGludCBwcHBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcbiBcdFx0XHRydG5sX2xvY2soKTtcbiBcdFx0XHRpZiAoZmlsZSA9PSBwcHAtXHUwMDNlb3duZXIpXG4tXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbitcdFx0XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7XG4gXHRcdFx0cnRubF91bmxvY2soKTtcbiBcdFx0XHRwcHBfcmVsZWFzZV9pbnRlcmZhY2UocHBwKTtcbiBcdFx0XHRicmVhaztcbkBAIC05MjEsNyArOTIwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXUklURV9PTkNFKHBwcC1cdTAwM2VucG1vZGVbaV0sIG5waS5tb2RlKTtcbiBcdFx0XHQvKiB3ZSBtYXkgYmUgYWJsZSB0byB0cmFuc21pdCBtb3JlIHBhY2tldHMgbm93ICg/PykgKi9cbi1cdFx0XHRuZXRpZl93YWtlX3F1ZXVlKHBwcC1cdTAwM2VkZXYpO1xuK1x0XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiBcdFx0fVxuIFx0XHRlcnIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0xMTQ3LDcgKzExNDYsNyBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcF9leGl0X3J0bmxfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGludCBpZDtcbiBcbiBcdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZwbi1cdTAwM2V1bml0c19pZHIsIHBwcCwgaWQpXG4tXHRcdHBwcF9ubF9kZWxsaW5rKHBwcC1cdTAwM2VkZXYsIGRldl90b19raWxsKTtcbitcdFx0cHBwX25sX2RlbGxpbmsobmV0ZGV2X2Zyb21fcHJpdihwcHApLCBkZXZfdG9fa2lsbCk7XG4gfVxuIFxuIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbkBAIC0xMTcwLDYgKzExNjksNyBAQCBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcF9uZXRfb3BzID0ge1xuIFxuIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3QgcHBwX25ldCAqcG4gPSBwcHBfcGVybmV0KHBwcC1cdTAwM2VwcHBfbmV0KTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTE4MSw4ICsxMTgxLDggQEAgc3RhdGljIGludCBwcHBfdW5pdF9yZWdpc3RlcihzdHJ1Y3QgcHBwICpwcHAsIGludCB1bml0LCBib29sIGlmbmFtZV9pc19zZXQpXG4gXHRcdFx0Z290byBlcnI7XG4gXHRcdGlmICghaWZuYW1lX2lzX3NldCkge1xuIFx0XHRcdHdoaWxlICgxKSB7XG4tXHRcdFx0XHRzbnByaW50ZihwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcInBwcCVpXCIsIHJldCk7XG4tXHRcdFx0XHRpZiAoIW5ldGRldl9uYW1lX2luX3VzZShwcHAtXHUwMDNlcHBwX25ldCwgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lKSlcbitcdFx0XHRcdHNucHJpbnRmKGRldi1cdTAwM2VuYW1lLCBJRk5BTVNJWiwgXCJwcHAlaVwiLCByZXQpO1xuK1x0XHRcdFx0aWYgKCFuZXRkZXZfbmFtZV9pbl91c2UocHBwLVx1MDAzZXBwcF9uZXQsIGRldi1cdTAwM2VuYW1lKSlcbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHR1bml0X3B1dChcdTAwMjZwbi1cdTAwM2V1bml0c19pZHIsIHJldCk7XG4gXHRcdFx0XHRyZXQgPSB1bml0X2dldChcdTAwMjZwbi1cdTAwM2V1bml0c19pZHIsIHBwcCwgcmV0ICsgMSk7XG5AQCAtMTIxMCwxMSArMTIxMCwxMSBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldClcbiBcdHBwcC1cdTAwM2VmaWxlLmluZGV4ID0gcmV0O1xuIFxuIFx0aWYgKCFpZm5hbWVfaXNfc2V0KVxuLVx0XHRzbnByaW50ZihwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcInBwcCVpXCIsIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbitcdFx0c25wcmludGYoZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcInBwcCVpXCIsIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwbi1cdTAwM2VhbGxfcHBwX211dGV4KTtcbiBcbi1cdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbitcdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfdW5pdDtcbiBcbkBAIC0xMjM5LDcgKzEyMzksNiBAQCBzdGF0aWMgaW50IHBwcF9kZXZfY29uZmlndXJlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpbnQgZXJyO1xuIFx0aW50IGNwdTtcbiBcbi1cdHBwcC1cdTAwM2VkZXYgPSBkZXY7XG4gXHRwcHAtXHUwMDNlcHBwX25ldCA9IHNyY19uZXQ7XG4gXHRwcHAtXHUwMDNlbXJ1ID0gUFBQX01SVTtcbiBcdHBwcC1cdTAwM2Vvd25lciA9IGNvbmYtXHUwMDNlZmlsZTtcbkBAIC0xNjU4LDcgKzE2NTcsNyBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9mbHVzaChzdHJ1Y3QgcHBwICpwcHApXG4gXHQvKiBJZiB0aGVyZSdzIG5vIHdvcmsgbGVmdCB0byBkbywgdGVsbCB0aGUgY29yZSBuZXQgY29kZSB0aGF0IHdlIGNhblxuIFx0ICogYWNjZXB0IHNvbWUgbW9yZS5cbiBcdCAqL1xuLVx0bmV0aWZfd2FrZV9xdWV1ZShwcHAtXHUwMDNlZGV2KTtcbitcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19wcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xNjc0LDcgKzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKGxpa2VseShza2JfcXVldWVfZW1wdHkoXHUwMDI2cHBwLVx1MDAzZWZpbGUueHEpKSkge1xuIFx0XHRpZiAodW5saWtlbHkoIXBwcF9wdXNoKHBwcCwgc2tiKSkpIHtcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwcHAtXHUwMDNlZmlsZS54cSwgc2tiKTtcbi1cdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKHBwcC1cdTAwM2VkZXYpO1xuK1x0XHRcdG5ldGlmX3N0b3BfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiBcdFx0fVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xNzEyLDE3ICsxNzExLDE4IEBAIHN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuLVx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwicmVjdXJzaW9uIGRldGVjdGVkXFxuXCIpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgXCJyZWN1cnNpb24gZGV0ZWN0ZWRcXG5cIik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbiBcdGludCBsZW47XG4tXHRpbnQgbmV3X3NrYl9zaXplID0gcHBwLVx1MDAzZWRldi1cdTAwM2VtdHUgK1xuLVx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuLVx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBwcHAtXHUwMDNlZGV2LVx1MDAzZW10dSArXG4rXHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSArXG4rXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSArXG4gXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICsgUFBQX0hEUkxFTjtcbiBcbiBcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG5AQCAtMTczMSwxMiArMTczMSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdG5ld19za2IgPSBhbGxvY19za2IobmV3X3NrYl9zaXplLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghbmV3X3NrYikge1xuIFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuLVx0XHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxuXCIpO1xuK1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cIik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0aWYgKHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuLVx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLFxuLVx0XHRcdCAgICBwcHAtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuK1x0aWYgKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gXHUwMDNlIFBQUF9IRFJMRU4pXG4rXHRcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTtcbiBcbiBcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXG4gXHRsZW4gPSBwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcHJlc3MocHBwLVx1MDAzZXhjX3N0YXRlLCBza2ItXHUwMDNlZGF0YSAtIDIsXG5AQCAtMTc2MSw3ICsxNzYwLDcgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHRoZSBzYW1lIG51bWJlci5cbiBcdFx0ICovXG4gXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcInBwcDogY29tcHJlc3NvciBkcm9wcGVkIHBrdFxcblwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXG5cIik7XG4gXHRcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xuIFx0XHRuZXdfc2tiID0gTlVMTDtcbiBcdH1cbkBAIC0xNzc3LDEzICsxNzc2LDE0IEBAIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnRcbiBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4ge1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjtcbiBcdGludCBwcm90byA9IFBQUF9QUk9UTyhza2IpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4gXHRpbnQgbGVuO1xuIFx0dW5zaWduZWQgY2hhciAqY3A7XG4gXG4tXHRza2ItXHUwMDNlZGV2ID0gcHBwLVx1MDAzZWRldjtcbitcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4gXG4gXHRpZiAocHJvdG8gXHUwMDNjIDB4ODAwMCkge1xuICNpZmRlZiBDT05GSUdfUFBQX0ZJTFRFUlxuQEAgLTE3OTQsNyArMTc5NCw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdFx0aWYgKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJwZl9wcm9nX3J1bihwcHAtXHUwMDNlcGFzc19maWx0ZXIsIHNrYikgPT0gMCkge1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcIlBQUDogb3V0Ym91bmQgZnJhbWUgXCJcbiBcdFx0XHRcdFx0ICAgICAgXCJub3QgcGFzc2VkXFxuXCIpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTE4MTEsNyArMTgxMSw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cbiBcdH1cbiBcbi1cdGRldl9zd19uZXRzdGF0c190eF9hZGQocHBwLVx1MDAzZWRldiwgMSwgc2tiLVx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xuK1x0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIDEsIHNrYi1cdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbiBcdGNhc2UgUFBQX0lQOlxuQEAgLTE4MjIsMTMgKzE4MjIsMTMgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0XHRcdGdvdG8gZHJvcDtcbiBcbiBcdFx0LyogdHJ5IHRvIGRvIFZKIFRDUCBoZWFkZXIgY29tcHJlc3Npb24gKi9cbi1cdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihza2ItXHUwMDNlbGVuICsgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyLFxuK1x0XHRuZXdfc2tiID0gYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gKyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gMixcbiBcdFx0XHRcdCAgICBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuZXdfc2tiKSB7XG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcIlBQUDogbm8gbWVtb3J5IChWSiBjb21wIHBrdClcXG5cIik7XG4rXHRcdFx0bmV0ZGV2X2VycihkZXYsIFwiUFBQOiBubyBtZW1vcnkgKFZKIGNvbXAgcGt0KVxcblwiKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbi1cdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyKTtcbitcdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIDIpO1xuIFx0XHRjcCA9IHNrYi1cdTAwM2VkYXRhICsgMjtcbiBcdFx0bGVuID0gc2xoY19jb21wcmVzcyhwcHAtXHUwMDNldmosIGNwLCBza2ItXHUwMDNlbGVuIC0gMixcbiBcdFx0XHRcdCAgICBuZXdfc2tiLVx1MDAzZWRhdGEgKyAyLCBcdTAwMjZjcCxcbkBAIC0xODY0LDcgKzE4NjQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHQgICAgcHJvdG8gIT0gUFBQX0xDUCBcdTAwMjZcdTAwMjYgcHJvdG8gIT0gUFBQX0NDUCkge1xuIFx0XHRpZiAoIShwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NDUF9VUCkgXHUwMDI2XHUwMDI2IChwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX01VU1RfQ09NUCkpIHtcbiBcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuLVx0XHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LFxuK1x0XHRcdFx0bmV0ZGV2X2VycihkZXYsXG4gXHRcdFx0XHRcdCAgIFwicHBwOiBjb21wcmVzc2lvbiByZXF1aXJlZCBidXQgXCJcbiBcdFx0XHRcdFx0ICAgXCJkb3duIC0gcGt0IGRyb3BwZWQuXFxuXCIpO1xuIFx0XHRcdGdvdG8gZHJvcDtcbkBAIC0xODkyLDcgKzE4OTIsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXG4gIGRyb3A6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbi1cdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbitcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9lcnJvcnMpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuQEAgLTE5NjIsNiArMTk2Miw3IEBAIE1PRFVMRV9QQVJNX0RFU0MobXBfcHJvdG9jb2xfY29tcHJlc3MsXG4gICovXG4gc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdGludCBsZW4sIHRvdGxlbjtcbiBcdGludCBpLCBiaXRzLCBoZHJsZW4sIG10dTtcbiBcdGludCBmbGVuO1xuQEAgLTIxNTgsOCArMjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbiAgZXJyX2xpbmVhcml6ZTpcbiBcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXG5cIik7XG4tXHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHR4X2Vycm9ycyk7XG4rXHRcdG5ldGRldl9lcnIoZGV2LCBcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXG5cIik7XG4rXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcbiBcdCsrcHBwLVx1MDAzZW54c2VxO1xuIFx0cmV0dXJuIDE7XHQvKiBhYmFuZG9uIHRoZSBmcmFtZSAqL1xuIH1cbkBAIC0yMzMyLDcgKzIzMzMsNyBAQCBwcHBfaW5wdXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCFwcHBfZGVjb21wcmVzc19wcm90byhza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRpZiAocHBwKSB7XG4tXHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbitcdFx0XHRERVZfU1RBVFNfSU5DKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgcnhfbGVuZ3RoX2Vycm9ycyk7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuIFx0XHRnb3RvIGRvbmU7XG5AQCAtMjM5NCw3ICsyMzk1LDcgQEAgcHBwX3JlY2VpdmVfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIHN0YXRpYyB2b2lkXG4gcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKVxuIHtcbi1cdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgcnhfZXJyb3JzKTtcbitcdERFVl9TVEFUU19JTkMobmV0ZGV2X2Zyb21fcHJpdihwcHApLCByeF9lcnJvcnMpO1xuIFx0aWYgKHBwcC1cdTAwM2V2ailcbiBcdFx0c2xoY190b3NzKHBwcC1cdTAwM2V2aik7XG4gfVxuQEAgLTI0MDIsNiArMjQwMyw3IEBAIHBwcF9yZWNlaXZlX2Vycm9yKHN0cnVjdCBwcHAgKnBwcClcbiBzdGF0aWMgdm9pZFxuIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5zO1xuIFx0aW50IHByb3RvLCBsZW4sIG5waTtcbiBcbkBAIC0yNDMxLDggKzI0MzMsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0LyogY29weSB0byBhIG5ldyBza19idWZmIHdpdGggbW9yZSB0YWlscm9vbSAqL1xuIFx0XHRcdG5zID0gZGV2X2FsbG9jX3NrYihza2ItXHUwMDNlbGVuICsgMTI4KTtcbiBcdFx0XHRpZiAoIW5zKSB7XG4tXHRcdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwiUFBQOiBubyBtZW1vcnkgXCJcbi1cdFx0XHRcdFx0ICAgXCIoVkogZGVjb21wKVxcblwiKTtcbitcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcIlBQUDogbm8gbWVtb3J5IChWSiBkZWNvbXApXFxuXCIpO1xuIFx0XHRcdFx0Z290byBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdHNrYl9yZXNlcnZlKG5zLCAyKTtcbkBAIC0yNDQ1LDcgKzI0NDYsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdGxlbiA9IHNsaGNfdW5jb21wcmVzcyhwcHAtXHUwMDNldmosIHNrYi1cdTAwM2VkYXRhICsgMiwgc2tiLVx1MDAzZWxlbiAtIDIpO1xuIFx0XHRpZiAobGVuIFx1MDAzYz0gMCkge1xuLVx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdCAgICAgIFwiUFBQOiBWSiBkZWNvbXByZXNzaW9uIGVycm9yXFxuXCIpO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG5AQCAtMjQ2OCw3ICsyNDY5LDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuIFx0XHRpZiAoc2xoY19yZW1lbWJlcihwcHAtXHUwMDNldmosIHNrYi1cdTAwM2VkYXRhICsgMiwgc2tiLVx1MDAzZWxlbiAtIDIpIFx1MDAzYz0gMCkge1xuLVx0XHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCJQUFA6IFZKIHVuY29tcHJlc3NlZCBlcnJvclxcblwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJQUFA6IFZKIHVuY29tcHJlc3NlZCBlcnJvclxcblwiKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuIFx0XHRwcm90byA9IFBQUF9JUDtcbkBAIC0yNDc5LDcgKzI0ODAsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChwcHAtXHUwMDNlZGV2LCBza2ItXHUwMDNlbGVuIC0gUFBQX1BST1RPX0xFTik7XG4rXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgc2tiLVx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xuIFxuIFx0bnBpID0gcHJvdG9fdG9fbnBpbmRleChwcm90byk7XG4gXHRpZiAobnBpIFx1MDAzYyAwKSB7XG5AQCAtMjUwNiw3ICsyNTA3LDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGlmIChwcHAtXHUwMDNlcGFzc19maWx0ZXIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9wcm9nX3J1bihwcHAtXHUwMDNlcGFzc19maWx0ZXIsIHNrYikgPT0gMCkge1xuIFx0XHRcdFx0aWYgKFJFQURfT05DRShwcHAtXHUwMDNlZGVidWcpIFx1MDAyNiAxKVxuLVx0XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwiUFBQOiBpbmJvdW5kIGZyYW1lIFwiXG4gXHRcdFx0XHRcdFx0ICAgICAgXCJub3QgcGFzc2VkXFxuXCIpO1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtMjUyMCwxNyArMjUyMSwxNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gI2VuZGlmIC8qIENPTkZJR19QUFBfRklMVEVSICovXG4gXHRcdFx0V1JJVEVfT05DRShwcHAtXHUwMDNlbGFzdF9yZWN2LCBqaWZmaWVzKTtcbiBcbi1cdFx0aWYgKChwcHAtXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApID09IDAgfHxcbitcdFx0aWYgKChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxuIFx0XHQgICAgUkVBRF9PTkNFKHBwcC1cdTAwM2VucG1vZGVbbnBpXSkgIT0gTlBNT0RFX1BBU1MpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBjaG9wIG9mZiBwcm90b2NvbCAqL1xuIFx0XHRcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgMik7XG4tXHRcdFx0c2tiLVx1MDAzZWRldiA9IHBwcC1cdTAwM2VkZXY7XG4rXHRcdFx0c2tiLVx1MDAzZWRldiA9IGRldjtcbiBcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhucGluZGV4X3RvX2V0aGVydHlwZVtucGldKTtcbiBcdFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRcdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBwcC1cdTAwM2VwcHBfbmV0LFxuLVx0XHRcdFx0XHRcdCAgICAgIGRldl9uZXQocHBwLVx1MDAzZWRldikpKTtcbitcdFx0XHRcdFx0XHQgICAgICBkZXZfbmV0KGRldikpKTtcbiBcdFx0XHRuZXRpZl9yeChza2IpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMjU2OCw4ICsyNTY5LDggQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRucyA9IGRldl9hbGxvY19za2Iob2J1ZmZfc2l6ZSk7XG4gXHRcdGlmICghbnMpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IFwiXG4tXHRcdFx0XHQgICBcIm5vIG1lbW9yeVxcblwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSxcbitcdFx0XHRcdCAgIFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IG5vIG1lbW9yeVxcblwiKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuIFx0XHQvKiB0aGUgZGVjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgdGhlIEEvQyBieXRlcyBpbiB0aGUgaGRyICovXG5AQCAtMjYxNyw2ICsyNjE4LDcgQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyB2b2lkXG4gcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHR1MzIgbWFzaywgc2VxO1xuIFx0c3RydWN0IGNoYW5uZWwgKmNoO1xuIFx0aW50IG1waGRybGVuID0gKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfTVBfU0hPUlRTRVEpPyBNUEhEUkxFTl9TU046IE1QSERSTEVOO1xuQEAgLTI2NjEsNyArMjY2Myw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaClcbiBcdCAqL1xuIFx0aWYgKHNlcV9iZWZvcmUoc2VxLCBwcHAtXHUwMDNlbmV4dHNlcSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgcnhfZHJvcHBlZCk7XG4rXHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9kcm9wcGVkKTtcbiBcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTI2OTcsNyArMjY5OSw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaClcbiBcdFx0aWYgKHBza2JfbWF5X3B1bGwoc2tiLCAyKSlcbiBcdFx0XHRwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShwcHAsIHNrYik7XG4gXHRcdGVsc2Uge1xuLVx0XHRcdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XG4rXHRcdFx0REVWX1NUQVRTX0lOQyhkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7XG4gXHRcdH1cbkBAIC0yNzM5LDYgKzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4ge1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHUzMiBzZXEgPSBwcHAtXHUwMDNlbmV4dHNlcTtcbiBcdHUzMiBtaW5zZXEgPSBwcHAtXHUwMDNlbWluc2VxO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IFx1MDAyNnBwcC1cdTAwM2VtcnE7XG5AQCAtMjc1NSw4ICsyNzU4LDcgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdGFnYWluOlxuIFx0XHRpZiAoc2VxX2JlZm9yZShQUFBfTVBfQ0IocCktXHUwMDNlc2VxdWVuY2UsIHNlcSkpIHtcbiBcdFx0XHQvKiB0aGlzIGNhbid0IGhhcHBlbiwgYW55d2F5IGlnbm9yZSB0aGUgc2tiICovXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcInBwcF9tcF9yZWNvbnN0cnVjdCBiYWQgXCJcbi1cdFx0XHRcdCAgIFwic2VxICV1IFx1MDAzYyAldVxcblwiLFxuK1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcInBwcF9tcF9yZWNvbnN0cnVjdCBiYWQgc2VxICV1IFx1MDAzYyAldVxcblwiLFxuIFx0XHRcdFx0ICAgUFBQX01QX0NCKHApLVx1MDAzZXNlcXVlbmNlLCBzZXEpO1xuIFx0XHRcdF9fc2tiX3VubGluayhwLCBsaXN0KTtcbiBcdFx0XHRrZnJlZV9za2IocCk7XG5AQCAtMjc3NSw3ICsyNzc3LDcgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdFx0XHRcdG1pbnNlcSArIDE6IFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZTtcbiBcbiBcdFx0XHRpZiAoUkVBRF9PTkNFKHBwcC1cdTAwM2VkZWJ1ZykgXHUwMDI2IDEpXG4tXHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0ICAgICAgXCJsb3N0IGZyYWcgJXUuLiV1XFxuXCIsXG4gXHRcdFx0XHRcdCAgICAgIG9sZHNlcSwgc2VxLTEpO1xuIFxuQEAgLTI4MDMsOCArMjgwNSw4IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4gXHRcdGlmIChsb3N0ID09IDAgXHUwMDI2XHUwMDI2IChQUFBfTVBfQ0IocCktXHUwMDNlQkViaXRzIFx1MDAyNiBFKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChQUFBfTVBfQ0IoaGVhZCktXHUwMDNlQkViaXRzIFx1MDAyNiBCKSkge1xuIFx0XHRcdGlmIChsZW4gXHUwMDNlIHBwcC1cdTAwM2VtcnJ1ICsgMikge1xuLVx0XHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbitcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcIlBQUDogcmVjb25zdHJ1Y3RlZCBwYWNrZXRcIlxuIFx0XHRcdFx0XHQgICAgICBcIiBpcyB0b28gbG9uZyAoJWQpXFxuXCIsIGxlbik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0yODI0LDcgKzI4MjYsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFxuIFx0XHRcdHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfZnJvbV9zYWZlKGxpc3QsIHAsIHRtcDIpIHtcbiBcdFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0XHQgICAgICBcImRpc2NhcmRpbmcgZnJhZyAldVxcblwiLFxuIFx0XHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSk7XG4gXHRcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG5AQCAtMjg0Niw3ICsyODQ4LDcgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdFx0XHRcdGlmIChwID09IGhlYWQpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0aWYgKFJFQURfT05DRShwcHAtXHUwMDNlZGVidWcpIFx1MDAyNiAxKVxuLVx0XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwiZGlzY2FyZGluZyBmcmFnICV1XFxuXCIsXG4gXHRcdFx0XHRcdFx0ICAgICAgUFBQX01QX0NCKHApLVx1MDAzZXNlcXVlbmNlKTtcbiBcdFx0XHRcdF9fc2tiX3VubGluayhwLCBsaXN0KTtcbkBAIC0yODU0LDExICsyODU2LDExIEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcIiAgbWlzc2VkIHBrdHMgJXUuLiV1XFxuXCIsXG4gXHRcdFx0XHRcdCAgICAgIHBwcC1cdTAwM2VuZXh0c2VxLFxuIFx0XHRcdFx0XHQgICAgICBQUFBfTVBfQ0IoaGVhZCktXHUwMDNlc2VxdWVuY2UtMSk7XG4tXHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9kcm9wcGVkKTtcbitcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgcnhfZHJvcHBlZCk7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuIFxuQEAgLTI5NzcsOCArMjk3OSw4IEBAIGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4gXG4gXHRpZiAocGNoKSB7XG4gXHRcdHBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtXHUwMDNlcHBwKTtcbi1cdFx0aWYgKHBwcCBcdTAwMjZcdTAwMjYgcHBwLVx1MDAzZWRldilcbi1cdFx0XHRuYW1lID0gcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lO1xuK1x0XHRpZiAocHBwKVxuK1x0XHRcdG5hbWUgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCktXHUwMDNlbmFtZTtcbiBcdH1cbiBcdHJldHVybiBuYW1lO1xuIH1cbkBAIC0zMzA5LDEyICszMzExLDEzIEBAIGZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSlcbiBzdGF0aWMgdm9pZFxuIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdClcbiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNsY29tcHJlc3MgKnZqID0gcHBwLVx1MDAzZXZqO1xuIFx0aW50IGNwdTtcbiBcbiBcdG1lbXNldChzdCwgMCwgc2l6ZW9mKCpzdCkpO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKHBwcC1cdTAwM2VkZXYtXHUwMDNldHN0YXRzLCBjcHUpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKGRldi1cdTAwM2V0c3RhdHMsIGNwdSk7XG4gXHRcdHU2NCByeF9wYWNrZXRzLCByeF9ieXRlcywgdHhfcGFja2V0cywgdHhfYnl0ZXM7XG4gXG4gXHRcdHJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwLVx1MDAzZXJ4X3BhY2tldHMpO1xuQEAgLTMzMjcsOCArMzMzMCw4IEBAIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdClcbiBcdFx0c3QtXHUwMDNlcC5wcHBfb3BhY2tldHMgKz0gdHhfcGFja2V0cztcbiBcdFx0c3QtXHUwMDNlcC5wcHBfb2J5dGVzICs9IHR4X2J5dGVzO1xuIFx0fVxuLVx0c3QtXHUwMDNlcC5wcHBfaWVycm9ycyA9IERFVl9TVEFUU19SRUFEKHBwcC1cdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XG4tXHRzdC1cdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbitcdHN0LVx1MDAzZXAucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHJ4X2Vycm9ycyk7XG4rXHRzdC1cdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQoZGV2LCB0eF9lcnJvcnMpO1xuIFx0aWYgKCF2ailcbiBcdFx0cmV0dXJuO1xuIFx0c3QtXHUwMDNldmoudmpzX3BhY2tldHMgPSB2ai1cdTAwM2VzbHNfb19jb21wcmVzc2VkICsgdmotXHUwMDNlc2xzX29fdW5jb21wcmVzc2VkO1xuQEAgLTM0MDgsNiArMzQxMSw4IEBAIGluaXRfcHBwX2ZpbGUoc3RydWN0IHBwcF9maWxlICpwZiwgaW50IGtpbmQpXG4gICovXG4gc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcbiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuK1xuIFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cHBwLVx1MDAzZWZpbGUucmVmY250KSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTM0MTUsNyArMzQyMCw3IEBAIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXG4gXG4gXHRpZiAoIXBwcC1cdTAwM2VmaWxlLmRlYWQgfHwgcHBwLVx1MDAzZW5fY2hhbm5lbHMpIHtcbiBcdFx0LyogXCJjYW4ndCBoYXBwZW5cIiAqL1xuLVx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwicHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgXCJcbitcdFx0bmV0ZGV2X2VycihkZXYsIFwicHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgXCJcbiBcdFx0XHQgICBcImJ1dCBkZWFkPSVkIG5fY2hhbm5lbHM9JWQgIVxcblwiLFxuIFx0XHRcdCAgIHBwcCwgcHBwLVx1MDAzZWZpbGUuZGVhZCwgcHBwLVx1MDAzZW5fY2hhbm5lbHMpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzQ0NSw3ICszNDUwLDcgQEAgc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcbiBcbiBcdGZyZWVfcGVyY3B1KHBwcC1cdTAwM2V4bWl0X3JlY3Vyc2lvbik7XG4gXG4tXHRmcmVlX25ldGRldihwcHAtXHUwMDNlZGV2KTtcbitcdGZyZWVfbmV0ZGV2KGRldik7XG4gfVxuIFxuIC8qXG5AQCAtMzQ5Miw2ICszNDk3LDcgQEAgcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KVxuIHN0YXRpYyBpbnRcbiBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgcHBwICpwcHA7XG4gXHRzdHJ1Y3QgcHBwX25ldCAqcG47XG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuQEAgLTM1MDMsNiArMzUwOSw3IEBAIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXG4gXHRwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTtcbiBcdGlmICghcHBwKVxuIFx0XHRnb3RvIG91dDtcbitcdGRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZwY2gtXHUwMDNldXBsKTtcbiBcdHJldCA9IC1FSU5WQUw7XG4gXHRpZiAocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwY2gtXHUwMDNlcHBwLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cGNoLVx1MDAzZXVwbCkpIHx8XG5AQCAtMzUxOSwxNSArMzUyNiwxNSBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIFx0XHRnb3RvIG91dGw7XG4gXHR9XG4gXHRpZiAocGNoLVx1MDAzZWNoYW4tXHUwMDNlZGlyZWN0X3htaXQpXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7XG4rXHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTtcbiBcdGVsc2Vcbi1cdFx0cHBwLVx1MDAzZWRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9OT19RVUVVRTtcbitcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX05PX1FVRVVFO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbiBcdGlmIChwY2gtXHUwMDNlZmlsZS5oZHJsZW4gXHUwMDNlIHBwcC1cdTAwM2VmaWxlLmhkcmxlbilcbiBcdFx0cHBwLVx1MDAzZWZpbGUuaGRybGVuID0gcGNoLVx1MDAzZWZpbGUuaGRybGVuO1xuIFx0aGRybGVuID0gcGNoLVx1MDAzZWZpbGUuaGRybGVuICsgMjtcdC8qIGZvciBwcm90b2NvbCBieXRlcyAqL1xuLVx0aWYgKGhkcmxlbiBcdTAwM2UgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gaGRybGVuO1xuK1x0aWYgKGhkcmxlbiBcdTAwM2UgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbitcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGhkcmxlbjtcbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBjaC1cdTAwM2VjbGlzdCwgXHUwMDI2cHBwLVx1MDAzZWNoYW5uZWxzKTtcbiBcdCsrcHBwLVx1MDAzZW5fY2hhbm5lbHM7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocGNoLVx1MDAzZXBwcCwgcHBwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjM3LjQzMTkwMDAzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzQ4MzM3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCBmaWVsZCBmcm9tIHRoZSBgc3RydWN0IHBwcGAuIFRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIE15IGZpcnN0IHRob3VnaHQgaXMsIHdoeT8gVGhlIG9idmlvdXMgaW1wbGljYXRpb24gaXMgdGhhdCB0aGV5J3JlIG5vdyB1c2luZyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCBldmVyeXdoZXJlIGBwcHAtXHUwMDNlZGV2YCB3YXMgdXNlZC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgYHN0cnVjdCBwcHBgIGlzICpub3cqIGJlaW5nIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJbnN0ZWFkIG9mIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHN0cnVjdHMgd2l0aCBhIHBvaW50ZXIgYmV0d2VlbiB0aGVtLlxuXG5CdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyAqZnVuZGFtZW50YWxseSogY2hhbmdlcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSBuZWVkIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgdGhlIFBQUCBpbnRlcmZhY2UuIEZ1bmN0aW9ucyBsaWtlIGBwcHBfY3JlYXRlX2ludGVyZmFjZWAgYXJlIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4uIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGBzdHJ1Y3QgcHBwYCBpcyBiZWluZyBhbGxvY2F0ZWQgbm93LiBUaGUgZGlmZiBhbG9uZSBkb2Vzbid0IGdpdmUgbWUgZW5vdWdoIGNvbnRleHQuIFRoaXMgY2hhbmdlIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMgdGhyb3VnaG91dCB0aGUgZHJpdmVyLiBUaGUgd2hvbGUgc3RydWN0dXJlIG9mIGBwcHBfY3JlYXRlX2ludGVyZmFjZWAgbWlnaHQgaGF2ZSBjaGFuZ2VkLCBtYXliZSBldmVuIGhvdyBpdCdzIGxpbmtlZCBpbnRvIHRoZSBkZXZpY2UgdHJlZS4gSSBuZWVkIHRvIHNlZSB0aGUgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjQzLjA2NjczNjQ0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzNjg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzM1Nz1zdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMzNjctXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzM2ODpcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcXFwiXFxcIiwgTkVUX05BTUVfRU5VTSwgcHBwX3NldHVwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY5LVxcdGlmICghZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjQzLjEyNzY3OTYzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjAzNjgzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQUFAgSW50ZXJmYWNlIENyZWF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFBQUCBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgLi4uKWAg4oCTIHRoYXQgcGFydCdzIGFscmVhZHkgaW1wbGVtZW50ZWQsIGdvb2QuIEJ1dCBoYW5nIG9uLCB0aGUgYXV0aG9yIGV4cGxpY2l0bHkgYXNzaWducyBgcHBwLVx1MDAzZWRldmAgdG8gYGRldmAsIGFuZCAqdGhlbiogdGhleSB1c2UgYHBwcC1cdTAwM2VkZXZgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGV4cGxpY2l0IGFzc2lnbm1lbnQsIGFzIGl0IHNlZW1zIGEgYml0IHJlZHVuZGFudCBhdCBmaXJzdCBnbGFuY2UuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgaW50ZXJmYWNlIGNyZWF0aW9uLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBwcHBfY3JlYXRlX2ludGVyZmFjZWAgaW4gdGhlIGZpbGUuIEhvcGVmdWxseSwgdGhhdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB3aHkgdGhpcyBleHBsaWNpdCBhc3NpZ25tZW50IGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCdzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBkZXZpY2Ugc3RydWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo0Ni42NDgwNTE1ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM1NzpcXHRzdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcXG4zMzU4OlxcdHtcXG4zMzU5OlxcdFxcdHN0cnVjdCBwcHBfY29uZmlnIGNvbmYgPSB7XFxuMzM2MDpcXHRcXHRcXHQuZmlsZSA9IGZpbGUsXFxuMzM2MTpcXHRcXHRcXHQudW5pdCA9ICp1bml0LFxcbjMzNjI6XFx0XFx0XFx0LmlmbmFtZV9pc19zZXQgPSBmYWxzZSxcXG4zMzYzOlxcdFxcdH07XFxuMzM2NDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjMzNjU6XFx0XFx0c3RydWN0IHBwcCAqcHBwO1xcbjMzNjY6XFx0XFx0aW50IGVycjtcXG4zMzY3OlxcdFxcbjMzNjg6XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgXFxcIlxcXCIsIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XFxuMzM2OTpcXHRcXHRpZiAoIWRldikge1xcbjMzNzA6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4zMzcxOlxcdFxcdFxcdGdvdG8gZXJyO1xcbjMzNzI6XFx0XFx0fVxcbjMzNzM6XFx0XFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xcbjMzNzQ6XFx0XFx0ZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID0gXFx1MDAyNnBwcF9saW5rX29wcztcXG4zMzc1OlxcdFxcbjMzNzY6XFx0XFx0cnRubF9sb2NrKCk7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdGVyciA9IHBwcF9kZXZfY29uZmlndXJlKG5ldCwgZGV2LCBcXHUwMDI2Y29uZik7XFxuMzM3OTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zMzgwOlxcdFxcdFxcdGdvdG8gZXJyX2RldjtcXG4zMzgxOlxcdFxcdHBwcCA9IG5ldGRldl9wcml2KGRldik7XFxuMzM4MjpcXHRcXHQqdW5pdCA9IHBwcC1cXHUwMDNlZmlsZS5pbmRleDtcXG4zMzgzOlxcdFxcbjMzODQ6XFx0XFx0cnRubF91bmxvY2soKTtcXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0cmV0dXJuIDA7XFxuMzM4NzpcXHRcXG4zMzg4OlxcdGVycl9kZXY6XFxuMzM4OTpcXHRcXHRydG5sX3VubG9jaygpO1xcbjMzOTA6XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4zMzkxOlxcdGVycjpcXG4zMzkyOlxcdFxcdHJldHVybiBlcnI7XFxuMzM5MzpcXHR9XFxuMzM5NDpcXHRcXG4zMzk1OlxcdC8qXFxuMzM5NjpcXHQgKiBJbml0aWFsaXplIGEgcHBwX2ZpbGUgc3RydWN0dXJlLlxcbjMzOTc6XFx0ICovXFxuMzM5ODpcXHRzdGF0aWMgdm9pZFxcbjMzOTk6XFx0aW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZClcXG4zNDAwOlxcdHtcXG4zNDAxOlxcdFxcdHBmLVxcdTAwM2VraW5kID0ga2luZDtcXG4zNDAyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnBmLVxcdTAwM2V4cSk7XFxuMzQwMzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZi1cXHUwMDNlcnEpO1xcbjM0MDQ6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZwZi1cXHUwMDNlcmVmY250LCAxKTtcXG4zNDA1OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNnBmLVxcdTAwM2Vyd2FpdCk7XFxuMzQwNjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjQ2LjY0ODI3MTAxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDI4MzA5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgRGV2aWNlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgLi4uKWAgY2FsbC4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGBwcHBgIHN0cnVjdHVyZSBpcyBiZWluZyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCBpcyBhY2Nlc3NlZCB1c2luZyBgbmV0ZGV2X3ByaXYoZGV2KWAuIFNvLCBgcHBwYCBhbmQgdGhlIGBkZXZgIHN0cnVjdCBhcmUgaW5oZXJlbnRseSBsaW5rZWQsIGdvb2QuXG5cbk5vdywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIGBwcHAtXHUwMDNlZGV2YCBhbmQgc3Vic3RpdHV0aW5nIGl0IHdpdGggYG5ldGRldl9mcm9tX3ByaXYocHBwKWAuIEhtbSwgaXMgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgYSBmdW5jdGlvbiBvciBhIG1hY3JvPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBXYWl0IGEgc2Vjb25kLCBpcyBgbmV0ZGV2X2Zyb21fcHJpdmAgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24/IElzIGl0IGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCBvciBzb21ld2hlcmUgc2ltaWxhcj8gQWN0dWFsbHksIG5vLCBJIHRoaW5rIGl0IGlzIHVzdWFsbHkgYG5ldGRldl9wcml2KGRldilgIHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhLiBJcyB0aGVyZSBldmVuIGEgYG5ldGRldl9mcm9tX3ByaXYocHJpdilgIGRlZmluZWQgc29tZXdoZXJlPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuXG5cbkFscmlnaHQsIGxldCdzIGp1c3Qgc2VlIHdoZXJlIGBuZXRkZXZfZnJvbV9wcml2YCBpcyB1c2VkIGluIHRoZSBjb2RlYmFzZS4gVGhhdCdsbCBiZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo1MS4wNTExMDQyMzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxNjQ1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X2Zyb21fcHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjgxOT1zdGF0aWMgaW5saW5lIHZvaWQgKm5ldGRldl9wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI4MjQtLyoqXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyODI1OiAqIG5ldGRldl9mcm9tX3ByaXYoKSAtIGdldCBuZXR3b3JrIGRldmljZSBmcm9tIHByaXZcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI4MjYtICogQHByaXY6IG5ldHdvcmsgZGV2aWNlIHByaXZhdGUgZGF0YVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODI5LSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjgzMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfZnJvbV9wcml2KGNvbnN0IHZvaWQgKnByaXYpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODMxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDM6NTEuMTM1MjcyODI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0ODMyNjY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBQUFAgRGV2aWNlIEhhbmRsaW5nKipcblxuT2theSwgc28gYG5ldGRldl9mcm9tX3ByaXZgIGlzIGRlZmluaXRlbHkgYSB0aGluZywgZ29vZC4gVGhlIHBhdGNoIGFpbXMgZm9yIHB1cmUgcmVmYWN0b3JpbmcsIHRoYXQncyB3aGF0IEknbSBzZWVpbmcgaGVyZS4gSXQncyBhbGwgYWJvdXQgZWxpbWluYXRpbmcgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIHdpdGhpbiB0aGUgYHN0cnVjdCBwcHBgIGFuZCBsZXZlcmFnaW5nIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIGluc3RlYWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBpZiB0aGVyZSdzIGFueSBmdW5jdGlvbmFsIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgc3RyYWlnaHQgc3dhcCBvZiBgcHBwLVx1MDAzZWRldmAgd2l0aCB0aGUgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgZXF1aXZhbGVudD9cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIG5vIG5lZWQgdG8gYmUgaGFzdHkuIE9rYXksIGJhY2sgdG8gdGhlIHBhdGNoLiBZdXAsIGl0J3MgcmVtb3ZpbmcgdGhhdCBhc3NpZ25tZW50IGluIGBwcHBfZGV2X2NvbmZpZ3VyZWA6IGAtIHBwcC1cdTAwM2VkZXYgPSBkZXY7YCBhbmQgdGhlbiBpdCdzIHJlcGxhY2luZyBhbGwgaW5zdGFuY2VzIG9mIGBwcHAtXHUwMDNlZGV2YCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBIbW0sIG5vdyBJIGhhdmUgdG8gYmUgdGhvcm91Z2guLi4gQ291bGQgdGhlcmUgKmV2ZXIqIGhhdmUgYmVlbiBhIHNjZW5hcmlvIHdoZXJlIGBwcHAtXHUwMDNlZGV2YCB3YXMgTlVMTCBvciBkaXZlcmdlZCBmcm9tIHdoYXQgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgcmV0dXJucz9cblxuVGhpbmtpbmcgaXQgdGhyb3VnaCwgbm8sIG5vdCByZWFsbHkuIEJlY2F1c2UgYHBwcGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCAuLi4pYCB3aGljaCBhbHdheXMsIGluIGVmZmVjdCwgZW5zdXJlcyB0aGF0IGBwcHBgJ3MgbWVtb3J5IGxvY2F0aW9uIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgcHJpdmF0ZSBkYXRhIHJlZ2lvbiBvZiB0aGUgYXNzb2NpYXRlZCBgZGV2YCBzdHJ1Y3R1cmUuIFRoZSBjYWxjdWxhdGlvbiwgdGhlcmVmb3JlLCBpcyBqdXN0IGNvcnJlY3QuIEhvbGQgb24sIHRob3VnaC4uLndoYXQgaWYgdGhlcmUncyBhbiAqYWx0ZXJuYXRpdmUqIHdheSB0aGF0IGBwcHBgIGNvdWxkIGJlIGFsbG9jYXRlZD8gSXMgYHN0cnVjdCBwcHBgIGV2ZXIgaW5zdGFudGlhdGVkIG91dHNpZGUgb2YgdGhlIGBhbGxvY19uZXRkZXZgIGNvbnRleHQ/IExldCdzIGdvIGxvb2sgZm9yIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNvcm5lciBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0MywiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo1Ni44ODM2MTYxOTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDY4MTg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoa21hbGxvY3xremFsbG9jfGtjYWxsb2N8dm1hbGxvY3x2emFsbG9jKVxcXFwoLipzaXplb2ZcXFxcKHN0cnVjdCBwcHBcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDM6NTYuOTU0Njk1MTI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjMwNDU4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHBwcGAgQWxsb2NhdGlvbiBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgdGhlIGBzdHJ1Y3QgcHBwYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgZmlsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gb2YgdGhlIHN0cnVjdCAqc3BlY2lmaWNhbGx5KiB3aXRoaW4gdGhhdCBmaWxlLiBJJ20gb3BlcmF0aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHdheSBpdCBpcyBhbGxvY2F0ZWQgbWF5IGhhdmUgYW4gZWZmZWN0IG9uIGl0cyB1c2FnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHN0cnVjdCBpcyBiZWluZyBpbnN0YW50aWF0ZWQgd2l0aGluIHRoaXMgcGFydGljdWxhciBmaWxlIGFuZCBpZiBzbywgaG93LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuIExldCdzIHNlZSBpZiBpdCdzIGFsbG9jYXRlZCBkaXJlY3RseSB0aGVyZSwgb3IgaWYgb3RoZXIgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZS4gRmluZGluZyB3aGVyZSBpdCdzIGJlaW5nIGFsbG9jYXRlZCBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjU5LjY3Nzc0Mzg3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzODk3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2l6ZW9mXFxcXChzdHJ1Y3QgcHBwXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTM4Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgcHBwX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xMzg2LVxcdC5wb2xpY3lcXHRcXHQ9IHBwcF9ubF9wb2xpY3ksXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTM4NzpcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHBwcCksXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTM4OC1cXHQuc2V0dXBcXHRcXHQ9IHBwcF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTc9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjg6XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgXFxcIlxcXCIsIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2OS1cXHRpZiAoIWRldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo1OS43MzkxMzg4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk3NzcyMDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkganVzdCByZW1vdmluZyBhIHJlZHVuZGFudCBwb2ludGVyIHdpdGhpbiB0aGUgYHN0cnVjdCBwcHBgLiBTcGVjaWZpY2FsbHksIHRoaXMgcG9pbnRlciB0aGF0IHN0b3JlcyB0aGUgYG5ldF9kZXZpY2VgIHdpdGhpbiB0aGUgc3RydWN0dXJlIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBgc3RydWN0IHBwcGAgaXMgb25seSBldmVyIGFsbG9jYXRlZCBhcyBgbmV0ZGV2X3ByaXZgLCBlaXRoZXIgdGhyb3VnaCBgYWxsb2NfbmV0ZGV2YCBvciB2aWEgYHJ0bmxfbGlua19vcHMucHJpdl9zaXplYC4gVGhlcmVmb3JlLCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCB3aWxsIGFsd2F5cyBjb3JyZWN0bHkgZ2l2ZSB5b3UgdGhlIGFzc29jaWF0ZWQgYG5ldF9kZXZpY2VgLiBTbywgb24gdGhlIHN1cmZhY2UsIHRoaXMgc2hvdWxkIGp1c3Qgc2F2ZSBhIGZldyBieXRlcyBhbmQgc2hvdWxkIGhhdmUgbm8gaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBvciBmdW5jdGlvbmFsIGxvZ2ljIG9mIHRoZSBjb2RlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggZm9yIGFueSBzbmVha3kgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSBkaWZmLCB0aGUgZmlyc3QgY2hhbmdlIGlzIGp1c3QgcmVwbGFjaW5nIGBwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWVgIHdpdGggYGRldi1cdTAwM2VuYW1lYCwgd2hlcmUgYGRldmAgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbml0aWFsaXplZCBhcyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gVGhhdCdzIGZpbmUuIEl0J3MganVzdCB1c2luZyB0aGUgbG9jYWwgdmFyaWFibGUsIGFzIGV4cGVjdGVkLlxuXG5UaGVuIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gYHBwcF9kZXZfbmFtZWAuIEl0IG5vdyBjYWxscyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApLVx1MDAzZW5hbWVgIGluc3RlYWQgb2YgYHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZWAuIEhhbmcgb24sIGRvZXMgdGhpcyBjaGFuZ2UgaW5kaWNhdGUgdGhhdCBgcHBwLVx1MDAzZWRldmAgKmNvdWxkKiBoYXZlIGJlZW4gTlVMTCBwcmV2aW91c2x5PyBMZXQgbWUgZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuTGV0J3Mgc2VlLiBJbiBgcHBwX2Rldl9jb25maWd1cmVgLCBgcHBwLVx1MDAzZWRldiA9IGRldjtgIGlzIHNldC4gT2theSwgc28gd2hlcmUgaXMgYHBwcC1cdTAwM2VkZXZgICpub3QqIHNldD8gSXMgdGhlcmUgYSBzaXR1YXRpb24gd2hlcmUgYHBwcGAgZXhpc3RzIGJ1dCBgcHBwLVx1MDAzZWRldmAgaXMgTlVMTD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgcHBwYCBpcyBjcmVhdGVkLlxuXG5Mb29raW5nIGF0IGBwcHBfY3JlYXRlX2ludGVyZmFjZWAsIHdlIHNlZSBgZGV2ID0gYWxsb2NfbmV0ZGV2KC4uLilgLiBUaGVuIGBkZXZfbmV0X3NldChkZXYsIG5ldClgLCBhbmQgc28gb24uIGBwcHBfZGV2X2NvbmZpZ3VyZWAgaXMgY2FsbGVkLCBhbmQgKnRoZW4qIGBwcHAtXHUwMDNlZGV2ID0gZGV2O2AgaXMgYXNzaWduZWQuIElmIGBwcHBfZGV2X2NvbmZpZ3VyZWAgZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZGV2YCwgYW5kIGBkZXZgIGlzIHVubG9ja2VkIGFuZCBmcmVlZC4gQ3J1Y2lhbGx5LCBiZWNhdXNlIGBwcHBgIGlzIHdpdGhpbiB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYGRldmAgKGFzIGl0J3MgYG5ldGRldl9wcml2YCEpLCBmcmVlaW5nIGBkZXZgIHdvdWxkIGFsc28gZnJlZSBgcHBwYC4gVGhlcmVmb3JlLCBgcHBwYCBjYW4ndCBleGlzdCB3aXRob3V0IGBkZXZgLlxuXG5XYWl0IGEgbWludXRlLCB3aGF0IGFib3V0IGBwcHBfbmxfbmV3bGlua2A/IExldCBtZSBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDQ6MDguNzE2ODYxODY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdGludCBlcnI7XFxuMTMyMTpcXHRcXG4xMzIyOlxcdFxcdGZpbGUgPSBmZ2V0KG5sYV9nZXRfczMyKGRhdGFbSUZMQV9QUFBfREVWX0ZEXSkpO1xcbjEzMjM6XFx0XFx0aWYgKCFmaWxlKVxcbjEzMjQ6XFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0LyogcnRubF9sb2NrIGlzIGFscmVhZHkgaGVsZCBoZXJlLCBidXQgcHBwX2NyZWF0ZV9pbnRlcmZhY2UoKSBsb2Nrc1xcbjEzMjc6XFx0XFx0ICogcHBwX211dGV4IGJlZm9yZSBob2xkaW5nIHJ0bmxfbG9jay4gVXNpbmcgbXV0ZXhfdHJ5bG9jaygpIGF2b2lkc1xcbjEzMjg6XFx0XFx0ICogcG9zc2libGUgZGVhZGxvY2sgZHVlIHRvIGxvY2sgb3JkZXIgaW52ZXJzaW9uLCBhdCB0aGUgY29zdCBvZlxcbjEzMjk6XFx0XFx0ICogcHVzaGluZyB0aGUgcHJvYmxlbSBiYWNrIHRvIHVzZXJzcGFjZS5cXG4xMzMwOlxcdFxcdCAqL1xcbjEzMzE6XFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZwcHBfbXV0ZXgpKSB7XFxuMTMzMjpcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTMzMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMzM0OlxcdFxcdH1cXG4xMzM1OlxcdFxcbjEzMzY6XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AgIT0gXFx1MDAyNnBwcF9kZXZpY2VfZm9wcyB8fCBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpIHtcXG4xMzM3OlxcdFxcdFxcdGVyciA9IC1FQkFERjtcXG4xMzM4OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMzM5OlxcdFxcdH1cXG4xMzQwOlxcdFxcbjEzNDE6XFx0XFx0Y29uZi5maWxlID0gZmlsZTtcXG4xMzQyOlxcdFxcbjEzNDM6XFx0XFx0LyogRG9uJ3QgdXNlIGRldmljZSBuYW1lIGdlbmVyYXRlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyIHdoZW4gaWZuYW1lXFxuMTM0NDpcXHRcXHQgKiBpc24ndCBzcGVjaWZpZWQuIExldCBwcHBfZGV2X2NvbmZpZ3VyZSgpIHNldCB0aGUgZGV2aWNlIG5hbWUgdXNpbmdcXG4xMzQ1OlxcdFxcdCAqIHRoZSBQUFAgdW5pdCBpZGVudGlmZXIgYXMgc3VmZml4IChpLmUuIHBwcFxcdTAwM2N1bml0X2lkXFx1MDAzZSkuIFRoaXMgYWxsb3dzXFxuMTM0NjpcXHRcXHQgKiB1c2Vyc3BhY2UgdG8gaW5mZXIgdGhlIGRldmljZSBuYW1lIHVzaW5nIHRvIHRoZSBQUFBJT0NHVU5JVCBpb2N0bC5cXG4xMzQ3OlxcdFxcdCAqL1xcbjEzNDg6XFx0XFx0aWYgKCF0YltJRkxBX0lGTkFNRV0gfHwgIW5sYV9sZW4odGJbSUZMQV9JRk5BTUVdKSB8fCAhKihjaGFyICopbmxhX2RhdGEodGJbSUZMQV9JRk5BTUVdKSlcXG4xMzQ5OlxcdFxcdFxcdGNvbmYuaWZuYW1lX2lzX3NldCA9IGZhbHNlO1xcbjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRlcnIgPSBwcHBfZGV2X2NvbmZpZ3VyZShsaW5rX25ldCwgZGV2LCBcXHUwMDI2Y29uZik7XFxuMTM1MjpcXHRcXG4xMzUzOlxcdG91dF91bmxvY2s6XFxuMTM1NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBwcF9tdXRleCk7XFxuMTM1NTpcXHRvdXQ6XFxuMTM1NjpcXHRcXHRmcHV0KGZpbGUpO1xcbjEzNTc6XFx0XFxuMTM1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEzNTk6XFx0fVxcbjEzNjA6XFx0XFxuMTM2MTpcXHRzdGF0aWMgdm9pZCBwcHBfbmxfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbjEzNjI6XFx0e1xcbjEzNjM6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcXG4xMzY0OlxcdH1cXG4xMzY1OlxcdFxcbjEzNjY6XFx0c3RhdGljIHNpemVfdCBwcHBfbmxfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMzY3OlxcdHtcXG4xMzY4OlxcdFxcdHJldHVybiAwO1xcbjEzNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowNDowOC43MTcwMTM2MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwNzczODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBQUFAgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBwcHBfbmxfbmV3bGlua2AgZnVuY3Rpb24sIGFuZCBpdCBjYWxscyBgcHBwX2Rldl9jb25maWd1cmVgLiBNeSBtYWluIGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY29kZSBzdGF0ZXMgdGhhdCBpZiBgcHBwX2Rldl9jb25maWd1cmVgIGZhaWxzLCB0aGUgYGRldmAgaXMgZXZlbnR1YWxseSBmcmVlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgYHBwcGAgaXMgYWx3YXlzIHBhcnQgb2YgYGRldmAuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IGlzIHRoZXJlICphbnkqIHNjZW5hcmlvIHdoZXJlIGBwcHAtXHUwMDNlZGV2YCBjb3VsZCBhY3R1YWxseSBiZSBOVUxMP1xuXG5JJ20gZm9jdXNpbmcgb24gdGhpcyBzZWN0aW9uIG9mIGNvZGUgKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoOlxuXG5gYGBjXG5cdGlmIChwY2gpIHtcblx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG5cdFx0aWYgKHBwcCBcdTAwMjZcdTAwMjYgcHBwLVx1MDAzZWRldilcblx0XHRcdG5hbWUgPSBwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWU7XG5cdH1cbmBgYFxuXG5UaGUgd29ycnkgaXMgdGhhdCByZW1vdmluZyB0aGUgYHBwcC1cdTAwM2VkZXZgIGNoZWNrIGNvdWxkIGxlYWQgdG8gYSBjcmFzaCBpZiwgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBgcHBwLVx1MDAzZWRldmAgKmNvdWxkKiBiZSBOVUxMLiBCdXQsIHdhaXQuLi4gaXNuJ3QgYHBwcGAgYWxsb2NhdGVkIGFzIGBuZXRkZXZfcHJpdihkZXYpYD8gVGhhdCBtYWtlcyBgcHBwLVx1MDAzZWRldmAgYmFzaWNhbGx5IGEgcG9pbnRlciBiYWNrIHRvIGBkZXZgIGl0c2VsZi4gQW5kIGl0IGdldHMgaW5pdGlhbGl6ZWQgaW5zaWRlIGBwcHBfZGV2X2NvbmZpZ3VyZWAuIFRoYXQgc2VlbXMgcHJldHR5IHNvbGlkLlxuXG5TdGlsbCwgSSBjYW4ndCBkaXNtaXNzIHRoaXMgd2l0aG91dCBkaWdnaW5nIGRlZXBlci4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IGNvdWxkIGBwY2gtXHUwMDNlcHBwYCBiZSBzZXQgKmJlZm9yZSogYHBwcF9kZXZfY29uZmlndXJlYCBmaW5pc2hlcz8gVGhhdCdzIHRoZSBvbmx5IHdheSBJIGNhbiBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgYHBjaC1cdTAwM2VwcHBgIGlzIGFjdHVhbGx5IHNldC4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgcG9pbnRlciBjaGFpbiB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIHNldCBiZWZvcmUgSSBjYW4gZ2l2ZSB0aGUgZ3JlZW4gbGlnaHQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjA0OjE0LjAyNDc1NDg1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ2MzA2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmN1X2Fzc2lnbl9wb2ludGVyXFxcXChwY2gtXFx1MDAzZXBwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNDk4PXBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNTM5LVxcdCsrcHBwLVxcdTAwM2VuX2NoYW5uZWxzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM1NDA6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBjaC1cXHUwMDNlcHBwLCBwcHApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1NDEtXFx0cmVmY291bnRfaW5jKFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUucmVmY250KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDQ6MTQuMTE5MzkwNzU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjIxNTE2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYHBwcF9jb25uZWN0X2NoYW5uZWxgIC0gQSBDbG9zZXIgTG9vayoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgcHBwX2Nvbm5lY3RfY2hhbm5lbGAgZnVuY3Rpb24gYW5kIEkgdGhpbmsgSSd2ZSBnb3QgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEVzc2VudGlhbGx5LCB0aGlzIGBwcHBfY29ubmVjdF9jaGFubmVsYCBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbiwgYW5kIHRoZSBjcml0aWNhbCBwYXJ0IGludm9sdmVzIGdldHRpbmcgdGhlIGBwcHBgIHN0cnVjdHVyZS4gSXQgdXNlcyBgcHBwX2ZpbmRfdW5pdGAgdG8gbG9jYXRlIGl0LCB3aGljaCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBJRFIgdmlhIGBwcHBfdW5pdF9yZWdpc3RlcmAuIFRoaXMgcmVnaXN0cmF0aW9uIGhhcHBlbnMgZHVyaW5nIGBwcHBfZGV2X2NvbmZpZ3VyZWAsIG1lYW5pbmcgdGhlIGBwcHBgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaW1wb3J0YW50bHksIGBwcHAtXHUwMDNlZGV2YCBoYXMgKmFscmVhZHkqIGJlZW4gYXNzaWduZWQgYmVmb3JlIGl0J3MgZXZlbiBhZGRlZCB0byB0aGUgSURSLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgYHBwcGAgaXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHksIGlmIGBwcHBgIGlzIGZvdW5kLCBgcHBwLVx1MDAzZWRldmAgY2FuICpuZXZlciogYmUgTlVMTC4gVGhlIGNvZGUgc2VlbXMgdG8gY2hlY2sgYGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpYCBidXQgdGhhdCBsb29rcyBsaWtlIGVpdGhlciBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcg4oCTIGFudGljaXBhdGluZyBzb21lIGVhcmxpZXIsIG5vdy1yZW1vdmVkIHBvc3NpYmlsaXR5IOKAkyBvciBwZXJoYXBzIGp1c3QgYSByZW1uYW50IG9mIGEgdGltZSB3aGVuIGBwcHBgIGFuZCBgZGV2YCB3ZXJlIG1hbmFnZWQgc2VwYXJhdGVseS4gTm93LCB0aGUgYHBwcC1cdTAwM2VkZXZgIGlzIGEgcmVkdW5kYW50IHBvaW50ZXIuXG5cbk15IGFzc2Vzc21lbnQgaXMgdGhhdCByZW1vdmluZyB0aGlzIGBwcHAtXHUwMDNlZGV2YCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgaXMgcHVyZWx5IGEgc3RydWN0dXJhbCByZWZhY3RvcmluZy4gSXQncyBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGNvZGUgYW5kIGltcHJvdmluZyBtYWludGFpbmFiaWxpdHksIGJ1dCBpdCBkb2Vzbid0IGFjdHVhbGx5IGFsdGVyIHRoZSAqZnVuY3Rpb25hbGl0eSogb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbiBhbnkgd2F5LlxuXG5HaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yIHRvIGVsaW1pbmF0ZSBhIHJlZHVuZGFudCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ2NSwiT3V0cHV0VG9rZW5zIjo5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowNDoyMC45NDE1NDUzNzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBkZXZgIHBvaW50ZXIgZnJvbSBgc3RydWN0IHBwcGAgYW5kIHJlcGxhY2VzIGl0IHdpdGggYG5ldGRldl9mcm9tX3ByaXYocHBwKWAuIFNpbmNlIGBzdHJ1Y3QgcHBwYCBpcyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBvZiBgc3RydWN0IG5ldF9kZXZpY2VgLCB0aGlzIGRvZXMgbm90IGNoYW5nZSBhbnkgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqfzsd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 23:14:37 +0000 UTC FinishedAt: 2026-08-01 00:04:23 +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+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIGZyb20gYHN0cnVjdCBwcHBgIGFuZCByZXBsYWNlcyBpdCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBTaW5jZSBgc3RydWN0IHBwcGAgaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCwgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmEyZWM3YTNkNDEzY2I1YzBkMjBlN2VlNDI1ZjA2OTNiMjVhZjAzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMDhiYjg5NzY1NDg3Zi4uZTEwMTM2MjFlYjFkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTEzOSw3ICYjNDM7MTM5LDYgQEAgc3RydWN0IHBwcCB7XG4gXHR2b2lkXHRcdCpyY19zdGF0ZTtcdC8qIGl0cyBpbnRlcm5hbCBzdGF0ZSA5OCAqL1xuIFx0dW5zaWduZWQgbG9uZ1x0bGFzdF94bWl0O1x0LyogamlmZmllcyB3aGVuIGxhc3QgcGt0IHNlbnQgOWMgKi9cbiBcdHVuc2lnbmVkIGxvbmdcdGxhc3RfcmVjdjtcdC8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCByY3ZkIGEwICovXG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1x0XHQvKiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2UgYTQgKi9cbiBcdGludFx0XHRjbG9zaW5nO1x0LyogaXMgZGV2aWNlIGNsb3NpbmcgZG93bj8gYTggKi9cbiAjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTktcbiBcdGludFx0XHRueGNoYW47XHRcdC8qIG5leHQgY2hhbm5lbCB0byBzZW5kIHNvbWV0aGluZyBvbiAqL1xuQEAgLTQxMiw3ICYjNDM7NDExLDcgQEAgc3RhdGljIGludCBwcHBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcbiBcdFx0XHRydG5sX2xvY2soKTtcbiBcdFx0XHRpZiAoZmlsZSA9PSBwcHAtXHUwMDNlb3duZXIpXG4tXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpO1xuIFx0XHRcdHJ0bmxfdW5sb2NrKCk7XG4gXHRcdFx0cHBwX3JlbGVhc2VfaW50ZXJmYWNlKHBwcCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtOTIxLDcgJiM0Mzs5MjAsNyBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdFdSSVRFX09OQ0UocHBwLVx1MDAzZW5wbW9kZVtpXSwgbnBpLm1vZGUpO1xuIFx0XHRcdC8qIHdlIG1heSBiZSBhYmxlIHRvIHRyYW5zbWl0IG1vcmUgcGFja2V0cyBub3cgKD8/KSAqL1xuLVx0XHRcdG5ldGlmX3dha2VfcXVldWUocHBwLVx1MDAzZWRldik7XG4mIzQzO1x0XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiBcdFx0fVxuIFx0XHRlcnIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0xMTQ3LDcgJiM0MzsxMTQ2LDcgQEAgc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpbnQgaWQ7XG4gXG4gXHRpZHJfZm9yX2VhY2hfZW50cnkoXHUwMDI2cG4tXHUwMDNldW5pdHNfaWRyLCBwcHAsIGlkKVxuLVx0XHRwcHBfbmxfZGVsbGluayhwcHAtXHUwMDNlZGV2LCBkZXZfdG9fa2lsbCk7XG4mIzQzO1x0XHRwcHBfbmxfZGVsbGluayhuZXRkZXZfZnJvbV9wcml2KHBwcCksIGRldl90b19raWxsKTtcbiB9XG4gXG4gc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuQEAgLTExNzAsNiAmIzQzOzExNjksNyBAQCBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcF9uZXRfb3BzID0ge1xuIFxuIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHBwcF9uZXQgKnBuID0gcHBwX3Blcm5ldChwcHAtXHUwMDNlcHBwX25ldCk7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTExODEsOCAmIzQzOzExODEsOCBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldClcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0aWYgKCFpZm5hbWVfaXNfc2V0KSB7XG4gXHRcdFx0d2hpbGUgKDEpIHtcbi1cdFx0XHRcdHNucHJpbnRmKHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSwgSUZOQU1TSVosIFwmIzM0O3BwcCVpXCYjMzQ7LCByZXQpO1xuLVx0XHRcdFx0aWYgKCFuZXRkZXZfbmFtZV9pbl91c2UocHBwLVx1MDAzZXBwcF9uZXQsIHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZSkpXG4mIzQzO1x0XHRcdFx0c25wcmludGYoZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcJiMzNDtwcHAlaVwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdFx0XHRpZiAoIW5ldGRldl9uYW1lX2luX3VzZShwcHAtXHUwMDNlcHBwX25ldCwgZGV2LVx1MDAzZW5hbWUpKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdHVuaXRfcHV0KFx1MDAyNnBuLVx1MDAzZXVuaXRzX2lkciwgcmV0KTtcbiBcdFx0XHRcdHJldCA9IHVuaXRfZ2V0KFx1MDAyNnBuLVx1MDAzZXVuaXRzX2lkciwgcHBwLCByZXQgJiM0MzsgMSk7XG5AQCAtMTIxMCwxMSAmIzQzOzEyMTAsMTEgQEAgc3RhdGljIGludCBwcHBfdW5pdF9yZWdpc3RlcihzdHJ1Y3QgcHBwICpwcHAsIGludCB1bml0LCBib29sIGlmbmFtZV9pc19zZXQpXG4gXHRwcHAtXHUwMDNlZmlsZS5pbmRleCA9IHJldDtcbiBcbiBcdGlmICghaWZuYW1lX2lzX3NldClcbi1cdFx0c25wcmludGYocHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBJRk5BTVNJWiwgXCYjMzQ7cHBwJWlcJiMzNDssIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbiYjNDM7XHRcdHNucHJpbnRmKGRldi1cdTAwM2VuYW1lLCBJRk5BTVNJWiwgXCYjMzQ7cHBwJWlcJiMzNDssIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwbi1cdTAwM2VhbGxfcHBwX211dGV4KTtcbiBcbi1cdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3VuaXQ7XG4gXG5AQCAtMTIzOSw3ICYjNDM7MTIzOSw2IEBAIHN0YXRpYyBpbnQgcHBwX2Rldl9jb25maWd1cmUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGludCBlcnI7XG4gXHRpbnQgY3B1O1xuIFxuLVx0cHBwLVx1MDAzZWRldiA9IGRldjtcbiBcdHBwcC1cdTAwM2VwcHBfbmV0ID0gc3JjX25ldDtcbiBcdHBwcC1cdTAwM2VtcnUgPSBQUFBfTVJVO1xuIFx0cHBwLVx1MDAzZW93bmVyID0gY29uZi1cdTAwM2VmaWxlO1xuQEAgLTE2NTgsNyAmIzQzOzE2NTcsNyBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9mbHVzaChzdHJ1Y3QgcHBwICpwcHApXG4gXHQvKiBJZiB0aGVyZSYjMzk7cyBubyB3b3JrIGxlZnQgdG8gZG8sIHRlbGwgdGhlIGNvcmUgbmV0IGNvZGUgdGhhdCB3ZSBjYW5cbiBcdCAqIGFjY2VwdCBzb21lIG1vcmUuXG4gXHQgKi9cbi1cdG5ldGlmX3dha2VfcXVldWUocHBwLVx1MDAzZWRldik7XG4mIzQzO1x0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuQEAgLTE2NzQsNyAmIzQzOzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKGxpa2VseShza2JfcXVldWVfZW1wdHkoXHUwMDI2cHBwLVx1MDAzZWZpbGUueHEpKSkge1xuIFx0XHRpZiAodW5saWtlbHkoIXBwcF9wdXNoKHBwcCwgc2tiKSkpIHtcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwcHAtXHUwMDNlZmlsZS54cSwgc2tiKTtcbi1cdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKHBwcC1cdTAwM2VkZXYpO1xuJiM0MztcdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7XG4gXHRcdH1cbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtMTcxMiwxNyAmIzQzOzE3MTEsMTggQEAgc3RhdGljIHZvaWQgcHBwX3htaXRfcHJvY2VzcyhzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCYjMzQ7cmVjdXJzaW9uIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdG5ldGRldl9lcnIobmV0ZGV2X2Zyb21fcHJpdihwcHApLCBcJiMzNDtyZWN1cnNpb24gZGV0ZWN0ZWRcXG5cJiMzNDspO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcbiBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBwcHAtXHUwMDNlZGV2LVx1MDAzZW10dSAmIzQzO1xuLVx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBwcHAtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbi1cdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gcHBwLVx1MDAzZWRldi1cdTAwM2VtdHUgJiM0MztcbiYjNDM7XHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSAmIzQzO1xuJiM0MztcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbiYjNDM7XHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgJiM0MztcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjtcbiBcbiBcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG5AQCAtMTczMSwxMiAmIzQzOzE3MzEsMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIW5ld19za2IpIHtcbiBcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBubyBtZW1vcnkgKGNvbXAgcGt0KVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0aWYgKHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuLVx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLFxuLVx0XHRcdCAgICBwcHAtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuJiM0MztcdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuIFxuIFx0LyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi9cbiBcdGxlbiA9IHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wcmVzcyhwcHAtXHUwMDNleGNfc3RhdGUsIHNrYi1cdTAwM2VkYXRhIC0gMixcbkBAIC0xNzYxLDcgJiM0MzsxNzYwLDcgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHRoZSBzYW1lIG51bWJlci5cbiBcdFx0ICovXG4gXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxuXCYjMzQ7KTtcbiBcdFx0Y29uc3VtZV9za2IobmV3X3NrYik7XG4gXHRcdG5ld19za2IgPSBOVUxMO1xuIFx0fVxuQEAgLTE3NzcsMTMgJiM0MzsxNzc2LDE0IEBAIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnRcbiBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7XG4gXHRpbnQgcHJvdG8gPSBQUFBfUFJPVE8oc2tiKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuIFx0aW50IGxlbjtcbiBcdHVuc2lnbmVkIGNoYXIgKmNwO1xuIFxuLVx0c2tiLVx1MDAzZWRldiA9IHBwcC1cdTAwM2VkZXY7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IGRldjtcbiBcbiBcdGlmIChwcm90byBcdTAwM2MgMHg4MDAwKSB7XG4gI2lmZGVmIENPTkZJR19QUFBfRklMVEVSXG5AQCAtMTc5NCw3ICYjNDM7MTc5NCw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdFx0aWYgKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJwZl9wcm9nX3J1bihwcHAtXHUwMDNlcGFzc19maWx0ZXIsIHNrYikgPT0gMCkge1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UFBQOiBvdXRib3VuZCBmcmFtZSBcJiMzNDtcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7bm90IHBhc3NlZFxcblwmIzM0Oyk7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtMTgxMSw3ICYjNDM7MTgxMSw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cbiBcdH1cbiBcbi1cdGRldl9zd19uZXRzdGF0c190eF9hZGQocHBwLVx1MDAzZWRldiwgMSwgc2tiLVx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xuJiM0MztcdGRldl9zd19uZXRzdGF0c190eF9hZGQoZGV2LCAxLCBza2ItXHUwMDNlbGVuIC0gUFBQX1BST1RPX0xFTik7XG4gXG4gXHRzd2l0Y2ggKHByb3RvKSB7XG4gXHRjYXNlIFBQUF9JUDpcbkBAIC0xODIyLDEzICYjNDM7MTgyMiwxMyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHRcdFx0Z290byBkcm9wO1xuIFxuIFx0XHQvKiB0cnkgdG8gZG8gVkogVENQIGhlYWRlciBjb21wcmVzc2lvbiAqL1xuLVx0XHRuZXdfc2tiID0gYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gJiM0MzsgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyLFxuJiM0MztcdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihza2ItXHUwMDNlbGVuICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyLFxuIFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpO1xuIFx0XHRpZiAoIW5ld19za2IpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChWSiBjb21wIHBrdClcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBubyBtZW1vcnkgKFZKIGNvbXAgcGt0KVxcblwmIzM0Oyk7XG4gXHRcdFx0Z290byBkcm9wO1xuIFx0XHR9XG4tXHRcdHNrYl9yZXNlcnZlKG5ld19za2IsIHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gMik7XG4mIzQzO1x0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gMik7XG4gXHRcdGNwID0gc2tiLVx1MDAzZWRhdGEgJiM0MzsgMjtcbiBcdFx0bGVuID0gc2xoY19jb21wcmVzcyhwcHAtXHUwMDNldmosIGNwLCBza2ItXHUwMDNlbGVuIC0gMixcbiBcdFx0XHRcdCAgICBuZXdfc2tiLVx1MDAzZWRhdGEgJiM0MzsgMiwgXHUwMDI2Y3AsXG5AQCAtMTg2NCw3ICYjNDM7MTg2NCw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdCAgICBwcm90byAhPSBQUFBfTENQIFx1MDAyNlx1MDAyNiBwcm90byAhPSBQUFBfQ0NQKSB7XG4gXHRcdGlmICghKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ0NQX1VQKSBcdTAwMjZcdTAwMjYgKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfTVVTVF9DT01QKSkge1xuIFx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0bmV0ZGV2X2VycihkZXYsXG4gXHRcdFx0XHRcdCAgIFwmIzM0O3BwcDogY29tcHJlc3Npb24gcmVxdWlyZWQgYnV0IFwmIzM0O1xuIFx0XHRcdFx0XHQgICBcJiMzNDtkb3duIC0gcGt0IGRyb3BwZWQuXFxuXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIGRyb3A7XG5AQCAtMTg5Miw3ICYjNDM7MTg5Miw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcbiAgZHJvcDpcbiBcdGtmcmVlX3NrYihza2IpO1xuLVx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCB0eF9lcnJvcnMpO1xuJiM0MztcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9lcnJvcnMpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuQEAgLTE5NjIsNiAmIzQzOzE5NjIsNyBAQCBNT0RVTEVfUEFSTV9ERVNDKG1wX3Byb3RvY29sX2NvbXByZXNzLFxuICAqL1xuIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0aW50IGxlbiwgdG90bGVuO1xuIFx0aW50IGksIGJpdHMsIGhkcmxlbiwgbXR1O1xuIFx0aW50IGZsZW47XG5AQCAtMjE1OCw4ICYjNDM7MjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbiAgZXJyX2xpbmVhcml6ZTpcbiBcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXFxuXCYjMzQ7KTtcbi1cdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXFxuXCYjMzQ7KTtcbiYjNDM7XHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcbiBcdCYjNDM7JiM0MztwcHAtXHUwMDNlbnhzZXE7XG4gXHRyZXR1cm4gMTtcdC8qIGFiYW5kb24gdGhlIGZyYW1lICovXG4gfVxuQEAgLTIzMzIsNyAmIzQzOzIzMzMsNyBAQCBwcHBfaW5wdXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCFwcHBfZGVjb21wcmVzc19wcm90byhza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRpZiAocHBwKSB7XG4tXHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbiYjNDM7XHRcdFx0REVWX1NUQVRTX0lOQyhuZXRkZXZfZnJvbV9wcml2KHBwcCksIHJ4X2xlbmd0aF9lcnJvcnMpO1xuIFx0XHRcdHBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7XG4gXHRcdH1cbiBcdFx0Z290byBkb25lO1xuQEAgLTIzOTQsNyAmIzQzOzIzOTUsNyBAQCBwcHBfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpXG4gc3RhdGljIHZvaWRcbiBwcHBfcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcHBwICpwcHApXG4ge1xuLVx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9lcnJvcnMpO1xuJiM0MztcdERFVl9TVEFUU19JTkMobmV0ZGV2X2Zyb21fcHJpdihwcHApLCByeF9lcnJvcnMpO1xuIFx0aWYgKHBwcC1cdTAwM2V2ailcbiBcdFx0c2xoY190b3NzKHBwcC1cdTAwM2V2aik7XG4gfVxuQEAgLTI0MDIsNiAmIzQzOzI0MDMsNyBAQCBwcHBfcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcHBwICpwcHApXG4gc3RhdGljIHZvaWRcbiBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnM7XG4gXHRpbnQgcHJvdG8sIGxlbiwgbnBpO1xuIFxuQEAgLTI0MzEsOCAmIzQzOzI0MzMsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0LyogY29weSB0byBhIG5ldyBza19idWZmIHdpdGggbW9yZSB0YWlscm9vbSAqL1xuIFx0XHRcdG5zID0gZGV2X2FsbG9jX3NrYihza2ItXHUwMDNlbGVuICYjNDM7IDEyOCk7XG4gXHRcdFx0aWYgKCFucykge1xuLVx0XHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSBcJiMzNDtcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7KFZKIGRlY29tcClcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtQUFA6IG5vIG1lbW9yeSAoVkogZGVjb21wKVxcblwmIzM0Oyk7XG4gXHRcdFx0XHRnb3RvIGVycjtcbiBcdFx0XHR9XG4gXHRcdFx0c2tiX3Jlc2VydmUobnMsIDIpO1xuQEAgLTI0NDUsNyAmIzQzOzI0NDYsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdGxlbiA9IHNsaGNfdW5jb21wcmVzcyhwcHAtXHUwMDNldmosIHNrYi1cdTAwM2VkYXRhICYjNDM7IDIsIHNrYi1cdTAwM2VsZW4gLSAyKTtcbiBcdFx0aWYgKGxlbiBcdTAwM2M9IDApIHtcbi1cdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7UFBQOiBWSiBkZWNvbXByZXNzaW9uIGVycm9yXFxuXCYjMzQ7KTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuQEAgLTI0NjgsNyAmIzQzOzI0NjksNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0Z290byBlcnI7XG4gXG4gXHRcdGlmIChzbGhjX3JlbWVtYmVyKHBwcC1cdTAwM2V2aiwgc2tiLVx1MDAzZWRhdGEgJiM0MzsgMiwgc2tiLVx1MDAzZWxlbiAtIDIpIFx1MDAzYz0gMCkge1xuLVx0XHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCYjMzQ7UFBQOiBWSiB1bmNvbXByZXNzZWQgZXJyb3JcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7UFBQOiBWSiB1bmNvbXByZXNzZWQgZXJyb3JcXG5cJiMzNDspO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG4gXHRcdHByb3RvID0gUFBQX0lQO1xuQEAgLTI0NzksNyAmIzQzOzI0ODAsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChwcHAtXHUwMDNlZGV2LCBza2ItXHUwMDNlbGVuIC0gUFBQX1BST1RPX0xFTik7XG4mIzQzO1x0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHNrYi1cdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcbiBcbiBcdG5waSA9IHByb3RvX3RvX25waW5kZXgocHJvdG8pO1xuIFx0aWYgKG5waSBcdTAwM2MgMCkge1xuQEAgLTI1MDYsNyAmIzQzOzI1MDcsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0aWYgKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgYnBmX3Byb2dfcnVuKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7XG4gXHRcdFx0XHRpZiAoUkVBRF9PTkNFKHBwcC1cdTAwM2VkZWJ1ZykgXHUwMDI2IDEpXG4tXHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwmIzM0O1BQUDogaW5ib3VuZCBmcmFtZSBcJiMzNDtcbiBcdFx0XHRcdFx0XHQgICAgICBcJiMzNDtub3QgcGFzc2VkXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTI1MjAsMTcgJiM0MzsyNTIxLDE3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cbiBcdFx0XHRXUklURV9PTkNFKHBwcC1cdTAwM2VsYXN0X3JlY3YsIGppZmZpZXMpO1xuIFxuLVx0XHRpZiAoKHBwcC1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxuJiM0MztcdFx0aWYgKChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxuIFx0XHQgICAgUkVBRF9PTkNFKHBwcC1cdTAwM2VucG1vZGVbbnBpXSkgIT0gTlBNT0RFX1BBU1MpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBjaG9wIG9mZiBwcm90b2NvbCAqL1xuIFx0XHRcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgMik7XG4tXHRcdFx0c2tiLVx1MDAzZWRldiA9IHBwcC1cdTAwM2VkZXY7XG4mIzQzO1x0XHRcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4gXHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMobnBpbmRleF90b19ldGhlcnR5cGVbbnBpXSk7XG4gXHRcdFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbiBcdFx0XHRza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwcHAtXHUwMDNlcHBwX25ldCxcbi1cdFx0XHRcdFx0XHQgICAgICBkZXZfbmV0KHBwcC1cdTAwM2VkZXYpKSk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGRldl9uZXQoZGV2KSkpO1xuIFx0XHRcdG5ldGlmX3J4KHNrYik7XG4gXHRcdH1cbiBcdH1cbkBAIC0yNTY4LDggJiM0MzsyNTY5LDggQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRucyA9IGRldl9hbGxvY19za2Iob2J1ZmZfc2l6ZSk7XG4gXHRcdGlmICghbnMpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwmIzM0O3BwcF9kZWNvbXByZXNzX2ZyYW1lOiBcJiMzNDtcbi1cdFx0XHRcdCAgIFwmIzM0O25vIG1lbW9yeVxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIobmV0ZGV2X2Zyb21fcHJpdihwcHApLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3BwcF9kZWNvbXByZXNzX2ZyYW1lOiBubyBtZW1vcnlcXG5cJiMzNDspO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG4gXHRcdC8qIHRoZSBkZWNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyB0aGUgQS9DIGJ5dGVzIGluIHRoZSBoZHIgKi9cbkBAIC0yNjE3LDYgJiM0MzsyNjE4LDcgQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyB2b2lkXG4gcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0dTMyIG1hc2ssIHNlcTtcbiBcdHN0cnVjdCBjaGFubmVsICpjaDtcbiBcdGludCBtcGhkcmxlbiA9IChwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX01QX1NIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjtcbkBAIC0yNjYxLDcgJiM0MzsyNjYzLDcgQEAgcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIFx0ICovXG4gXHRpZiAoc2VxX2JlZm9yZShzZXEsIHBwcC1cdTAwM2VuZXh0c2VxKSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9kcm9wcGVkKTtcbiYjNDM7XHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9kcm9wcGVkKTtcbiBcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTI2OTcsNyAmIzQzOzI2OTksNyBAQCBwcHBfcmVjZWl2ZV9tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpXG4gXHRcdGlmIChwc2tiX21heV9wdWxsKHNrYiwgMikpXG4gXHRcdFx0cHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUocHBwLCBza2IpO1xuIFx0XHRlbHNlIHtcbi1cdFx0XHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuJiM0MztcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuQEAgLTI3MzksNiAmIzQzOzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHR1MzIgc2VxID0gcHBwLVx1MDAzZW5leHRzZXE7XG4gXHR1MzIgbWluc2VxID0gcHBwLVx1MDAzZW1pbnNlcTtcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBcdTAwMjZwcHAtXHUwMDNlbXJxO1xuQEAgLTI3NTUsOCAmIzQzOzI3NTgsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFx0YWdhaW46XG4gXHRcdGlmIChzZXFfYmVmb3JlKFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSwgc2VxKSkge1xuIFx0XHRcdC8qIHRoaXMgY2FuJiMzOTt0IGhhcHBlbiwgYW55d2F5IGlnbm9yZSB0aGUgc2tiICovXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtwcHBfbXBfcmVjb25zdHJ1Y3QgYmFkIFwmIzM0O1xuLVx0XHRcdFx0ICAgXCYjMzQ7c2VxICV1IFx1MDAzYyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O3BwcF9tcF9yZWNvbnN0cnVjdCBiYWQgc2VxICV1IFx1MDAzYyAldVxcblwmIzM0OyxcbiBcdFx0XHRcdCAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSwgc2VxKTtcbiBcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG4gXHRcdFx0a2ZyZWVfc2tiKHApO1xuQEAgLTI3NzUsNyAmIzQzOzI3NzcsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFx0XHRcdFx0bWluc2VxICYjNDM7IDE6IFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZTtcbiBcbiBcdFx0XHRpZiAoUkVBRF9PTkNFKHBwcC1cdTAwM2VkZWJ1ZykgXHUwMDI2IDEpXG4tXHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXG4gXHRcdFx0XHRcdCAgICAgIFwmIzM0O2xvc3QgZnJhZyAldS4uJXVcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgICAgIG9sZHNlcSwgc2VxLTEpO1xuIFxuQEAgLTI4MDMsOCAmIzQzOzI4MDUsOCBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFx0XHRpZiAobG9zdCA9PSAwIFx1MDAyNlx1MDAyNiAoUFBQX01QX0NCKHApLVx1MDAzZUJFYml0cyBcdTAwMjYgRSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoUFBQX01QX0NCKGhlYWQpLVx1MDAzZUJFYml0cyBcdTAwMjYgQikpIHtcbiBcdFx0XHRpZiAobGVuIFx1MDAzZSBwcHAtXHUwMDNlbXJydSAmIzQzOyAyKSB7XG4tXHRcdFx0XHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuLVx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbiYjNDM7XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7UFBQOiByZWNvbnN0cnVjdGVkIHBhY2tldFwmIzM0O1xuIFx0XHRcdFx0XHQgICAgICBcJiMzNDsgaXMgdG9vIGxvbmcgKCVkKVxcblwmIzM0OywgbGVuKTtcbiBcdFx0XHR9IGVsc2Uge1xuQEAgLTI4MjQsNyAmIzQzOzI4MjYsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFxuIFx0XHRcdHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfZnJvbV9zYWZlKGxpc3QsIHAsIHRtcDIpIHtcbiBcdFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7ZGlzY2FyZGluZyBmcmFnICV1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSk7XG4gXHRcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG5AQCAtMjg0Niw3ICYjNDM7Mjg0OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4gXHRcdFx0XHRpZiAocCA9PSBoZWFkKVxuIFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgXCYjMzQ7ZGlzY2FyZGluZyBmcmFnICV1XFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSk7XG4gXHRcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG5AQCAtMjg1NCwxMSAmIzQzOzI4NTYsMTEgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdFx0XHR9XG4gXG4gXHRcdFx0aWYgKFJFQURfT05DRShwcHAtXHUwMDNlZGVidWcpIFx1MDAyNiAxKVxuLVx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcJiMzNDsgIG1pc3NlZCBwa3RzICV1Li4ldVxcblwmIzM0OyxcbiBcdFx0XHRcdFx0ICAgICAgcHBwLVx1MDAzZW5leHRzZXEsXG4gXHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihoZWFkKS1cdTAwM2VzZXF1ZW5jZS0xKTtcbi1cdFx0XHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHJ4X2Ryb3BwZWQpO1xuJiM0MztcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgcnhfZHJvcHBlZCk7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuIFxuQEAgLTI5NzcsOCAmIzQzOzI5NzksOCBAQCBjaGFyICpwcHBfZGV2X25hbWUoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKVxuIFxuIFx0aWYgKHBjaCkge1xuIFx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG4tXHRcdGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpXG4tXHRcdFx0bmFtZSA9IHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZTtcbiYjNDM7XHRcdGlmIChwcHApXG4mIzQzO1x0XHRcdG5hbWUgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCktXHUwMDNlbmFtZTtcbiBcdH1cbiBcdHJldHVybiBuYW1lO1xuIH1cbkBAIC0zMzA5LDEyICYjNDM7MzMxMSwxMyBAQCBmaW5kX2NvbXByZXNzb3IoaW50IHR5cGUpXG4gc3RhdGljIHZvaWRcbiBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2xjb21wcmVzcyAqdmogPSBwcHAtXHUwMDNldmo7XG4gXHRpbnQgY3B1O1xuIFxuIFx0bWVtc2V0KHN0LCAwLCBzaXplb2YoKnN0KSk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpwID0gcGVyX2NwdV9wdHIocHBwLVx1MDAzZWRldi1cdTAwM2V0c3RhdHMsIGNwdSk7XG4mIzQzO1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKGRldi1cdTAwM2V0c3RhdHMsIGNwdSk7XG4gXHRcdHU2NCByeF9wYWNrZXRzLCByeF9ieXRlcywgdHhfcGFja2V0cywgdHhfYnl0ZXM7XG4gXG4gXHRcdHJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwLVx1MDAzZXJ4X3BhY2tldHMpO1xuQEAgLTMzMjcsOCAmIzQzOzMzMzAsOCBAQCBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpXG4gXHRcdHN0LVx1MDAzZXAucHBwX29wYWNrZXRzICYjNDM7PSB0eF9wYWNrZXRzO1xuIFx0XHRzdC1cdTAwM2VwLnBwcF9vYnl0ZXMgJiM0Mzs9IHR4X2J5dGVzO1xuIFx0fVxuLVx0c3QtXHUwMDNlcC5wcHBfaWVycm9ycyA9IERFVl9TVEFUU19SRUFEKHBwcC1cdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XG4tXHRzdC1cdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbiYjNDM7XHRzdC1cdTAwM2VwLnBwcF9pZXJyb3JzID0gREVWX1NUQVRTX1JFQUQoZGV2LCByeF9lcnJvcnMpO1xuJiM0MztcdHN0LVx1MDAzZXAucHBwX29lcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHR4X2Vycm9ycyk7XG4gXHRpZiAoIXZqKVxuIFx0XHRyZXR1cm47XG4gXHRzdC1cdTAwM2V2ai52anNfcGFja2V0cyA9IHZqLVx1MDAzZXNsc19vX2NvbXByZXNzZWQgJiM0MzsgdmotXHUwMDNlc2xzX29fdW5jb21wcmVzc2VkO1xuQEAgLTM0MDgsNiAmIzQzOzM0MTEsOCBAQCBpbml0X3BwcF9maWxlKHN0cnVjdCBwcHBfZmlsZSAqcGYsIGludCBraW5kKVxuICAqL1xuIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4mIzQzO1xuIFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cHBwLVx1MDAzZWZpbGUucmVmY250KSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTM0MTUsNyAmIzQzOzM0MjAsNyBAQCBzdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKVxuIFxuIFx0aWYgKCFwcHAtXHUwMDNlZmlsZS5kZWFkIHx8IHBwcC1cdTAwM2VuX2NoYW5uZWxzKSB7XG4gXHRcdC8qIFwmIzM0O2NhbiYjMzk7dCBoYXBwZW5cJiMzNDsgKi9cbi1cdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcJiMzNDtwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCBcJiMzNDtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZGV2LCBcJiMzNDtwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCBcJiMzNDtcbiBcdFx0XHQgICBcJiMzNDtidXQgZGVhZD0lZCBuX2NoYW5uZWxzPSVkICFcXG5cJiMzNDssXG4gXHRcdFx0ICAgcHBwLCBwcHAtXHUwMDNlZmlsZS5kZWFkLCBwcHAtXHUwMDNlbl9jaGFubmVscyk7XG4gXHRcdHJldHVybjtcbkBAIC0zNDQ1LDcgJiM0MzszNDUwLDcgQEAgc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcbiBcbiBcdGZyZWVfcGVyY3B1KHBwcC1cdTAwM2V4bWl0X3JlY3Vyc2lvbik7XG4gXG4tXHRmcmVlX25ldGRldihwcHAtXHUwMDNlZGV2KTtcbiYjNDM7XHRmcmVlX25ldGRldihkZXYpO1xuIH1cbiBcbiAvKlxuQEAgLTM0OTIsNiAmIzQzOzM0OTcsNyBAQCBwcHBfZmluZF9jaGFubmVsKHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpXG4gc3RhdGljIGludFxuIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgcHBwICpwcHA7XG4gXHRzdHJ1Y3QgcHBwX25ldCAqcG47XG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuQEAgLTM1MDMsNiAmIzQzOzM1MDksNyBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIFx0cHBwID0gcHBwX2ZpbmRfdW5pdChwbiwgdW5pdCk7XG4gXHRpZiAoIXBwcClcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNnBjaC1cdTAwM2V1cGwpO1xuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdGlmIChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBjaC1cdTAwM2VwcHAsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZwY2gtXHUwMDNldXBsKSkgfHxcbkBAIC0zNTE5LDE1ICYjNDM7MzUyNiwxNSBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIFx0XHRnb3RvIG91dGw7XG4gXHR9XG4gXHRpZiAocGNoLVx1MDAzZWNoYW4tXHUwMDNlZGlyZWN0X3htaXQpXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7XG4gXHRlbHNlXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfTk9fUVVFVUU7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5JRkZfTk9fUVVFVUU7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZwY2gtXHUwMDNlZG93bmwpO1xuIFx0aWYgKHBjaC1cdTAwM2VmaWxlLmhkcmxlbiBcdTAwM2UgcHBwLVx1MDAzZWZpbGUuaGRybGVuKVxuIFx0XHRwcHAtXHUwMDNlZmlsZS5oZHJsZW4gPSBwY2gtXHUwMDNlZmlsZS5oZHJsZW47XG4gXHRoZHJsZW4gPSBwY2gtXHUwMDNlZmlsZS5oZHJsZW4gJiM0MzsgMjtcdC8qIGZvciBwcm90b2NvbCBieXRlcyAqL1xuLVx0aWYgKGhkcmxlbiBcdTAwM2UgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gaGRybGVuO1xuJiM0MztcdGlmIChoZHJsZW4gXHUwMDNlIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4mIzQzO1x0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gaGRybGVuO1xuIFx0bGlzdF9hZGRfdGFpbF9yY3UoXHUwMDI2cGNoLVx1MDAzZWNsaXN0LCBcdTAwMjZwcHAtXHUwMDNlY2hhbm5lbHMpO1xuIFx0JiM0MzsmIzQzO3BwcC1cdTAwM2VuX2NoYW5uZWxzO1xuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBjaC1cdTAwM2VwcHAsIHBwcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIGZyb20gYHN0cnVjdCBwcHBgIGFuZCByZXBsYWNlcyBpdCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBTaW5jZSBgc3RydWN0IHBwcGAgaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCwgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmEyZWM3YTNkNDEzY2I1YzBkMjBlN2VlNDI1ZjA2OTNiMjVhZjAzMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDA4YmI4OTc2NTQ4N2YuLmUxMDEzNjIxZWIxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC0xMzksNyAmIzQzOzEzOSw2IEBAIHN0cnVjdCBwcHAgewogCXZvaWQJCSpyY19zdGF0ZTsJLyogaXRzIGludGVybmFsIHN0YXRlIDk4ICovCiAJdW5zaWduZWQgbG9uZwlsYXN0X3htaXQ7CS8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCBzZW50IDljICovCiAJdW5zaWduZWQgbG9uZwlsYXN0X3JlY3Y7CS8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCByY3ZkIGEwICovCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsJCS8qIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBhNCAqLwogCWludAkJY2xvc2luZzsJLyogaXMgZGV2aWNlIGNsb3NpbmcgZG93bj8gYTggKi8KICNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOSwogCWludAkJbnhjaGFuOwkJLyogbmV4dCBjaGFubmVsIHRvIHNlbmQgc29tZXRoaW5nIG9uICovCkBAIC00MTIsNyAmIzQzOzQxMSw3IEBAIHN0YXRpYyBpbnQgcHBwX3JlbGVhc2Uoc3RydWN0IGlub2RlICp1bnVzZWQsIHN0cnVjdCBmaWxlICpmaWxlKQogCQkJcHBwID0gUEZfVE9fUFBQKHBmKTsKIAkJCXJ0bmxfbG9jaygpOwogCQkJaWYgKGZpbGUgPT0gcHBwLSZndDtvd25lcikKLQkJCQl1bnJlZ2lzdGVyX25ldGRldmljZShwcHAtJmd0O2Rldik7CiYjNDM7CQkJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7CiAJCQlydG5sX3VubG9jaygpOwogCQkJcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHBwcCk7CiAJCQlicmVhazsKQEAgLTkyMSw3ICYjNDM7OTIwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAkJfSBlbHNlIHsKIAkJCVdSSVRFX09OQ0UocHBwLSZndDtucG1vZGVbaV0sIG5waS5tb2RlKTsKIAkJCS8qIHdlIG1heSBiZSBhYmxlIHRvIHRyYW5zbWl0IG1vcmUgcGFja2V0cyBub3cgKD8/KSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShwcHAtJmd0O2Rldik7CiYjNDM7CQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpOwogCQl9CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtMTE0Nyw3ICYjNDM7MTE0Niw3IEBAIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfcnRubF9uZXQoc3RydWN0IG5ldCAqbmV0LAogCWludCBpZDsKIAogCWlkcl9mb3JfZWFjaF9lbnRyeSgmYW1wO3BuLSZndDt1bml0c19pZHIsIHBwcCwgaWQpCi0JCXBwcF9ubF9kZWxsaW5rKHBwcC0mZ3Q7ZGV2LCBkZXZfdG9fa2lsbCk7CiYjNDM7CQlwcHBfbmxfZGVsbGluayhuZXRkZXZfZnJvbV9wcml2KHBwcCksIGRldl90b19raWxsKTsKIH0KIAogc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQpAQCAtMTE3MCw2ICYjNDM7MTE2OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwX25ldF9vcHMgPSB7CiAKIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KQogewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXN0cnVjdCBwcHBfbmV0ICpwbiA9IHBwcF9wZXJuZXQocHBwLSZndDtwcHBfbmV0KTsKIAlpbnQgcmV0OwogCkBAIC0xMTgxLDggJiM0MzsxMTgxLDggQEAgc3RhdGljIGludCBwcHBfdW5pdF9yZWdpc3RlcihzdHJ1Y3QgcHBwICpwcHAsIGludCB1bml0LCBib29sIGlmbmFtZV9pc19zZXQpCiAJCQlnb3RvIGVycjsKIAkJaWYgKCFpZm5hbWVfaXNfc2V0KSB7CiAJCQl3aGlsZSAoMSkgewotCQkJCXNucHJpbnRmKHBwcC0mZ3Q7ZGV2LSZndDtuYW1lLCBJRk5BTVNJWiwgJiMzNDtwcHAlaSYjMzQ7LCByZXQpOwotCQkJCWlmICghbmV0ZGV2X25hbWVfaW5fdXNlKHBwcC0mZ3Q7cHBwX25ldCwgcHBwLSZndDtkZXYtJmd0O25hbWUpKQomIzQzOwkJCQlzbnByaW50ZihkZXYtJmd0O25hbWUsIElGTkFNU0laLCAmIzM0O3BwcCVpJiMzNDssIHJldCk7CiYjNDM7CQkJCWlmICghbmV0ZGV2X25hbWVfaW5fdXNlKHBwcC0mZ3Q7cHBwX25ldCwgZGV2LSZndDtuYW1lKSkKIAkJCQkJYnJlYWs7CiAJCQkJdW5pdF9wdXQoJmFtcDtwbi0mZ3Q7dW5pdHNfaWRyLCByZXQpOwogCQkJCXJldCA9IHVuaXRfZ2V0KCZhbXA7cG4tJmd0O3VuaXRzX2lkciwgcHBwLCByZXQgJiM0MzsgMSk7CkBAIC0xMjEwLDExICYjNDM7MTIxMCwxMSBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldCkKIAlwcHAtJmd0O2ZpbGUuaW5kZXggPSByZXQ7CiAKIAlpZiAoIWlmbmFtZV9pc19zZXQpCi0JCXNucHJpbnRmKHBwcC0mZ3Q7ZGV2LSZndDtuYW1lLCBJRk5BTVNJWiwgJiMzNDtwcHAlaSYjMzQ7LCBwcHAtJmd0O2ZpbGUuaW5kZXgpOwomIzQzOwkJc25wcmludGYoZGV2LSZndDtuYW1lLCBJRk5BTVNJWiwgJiMzNDtwcHAlaSYjMzQ7LCBwcHAtJmd0O2ZpbGUuaW5kZXgpOwogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7cG4tJmd0O2FsbF9wcHBfbXV0ZXgpOwogCi0JcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHBwcC0mZ3Q7ZGV2KTsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CiAJaWYgKHJldCAmbHQ7IDApCiAJCWdvdG8gZXJyX3VuaXQ7CiAKQEAgLTEyMzksNyAmIzQzOzEyMzksNiBAQCBzdGF0aWMgaW50IHBwcF9kZXZfY29uZmlndXJlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJaW50IGVycjsKIAlpbnQgY3B1OwogCi0JcHBwLSZndDtkZXYgPSBkZXY7CiAJcHBwLSZndDtwcHBfbmV0ID0gc3JjX25ldDsKIAlwcHAtJmd0O21ydSA9IFBQUF9NUlU7CiAJcHBwLSZndDtvd25lciA9IGNvbmYtJmd0O2ZpbGU7CkBAIC0xNjU4LDcgJiM0MzsxNjU3LDcgQEAgc3RhdGljIHZvaWQgcHBwX3htaXRfZmx1c2goc3RydWN0IHBwcCAqcHBwKQogCS8qIElmIHRoZXJlJiMzOTtzIG5vIHdvcmsgbGVmdCB0byBkbywgdGVsbCB0aGUgY29yZSBuZXQgY29kZSB0aGF0IHdlIGNhbgogCSAqIGFjY2VwdCBzb21lIG1vcmUuCiAJICovCi0JbmV0aWZfd2FrZV9xdWV1ZShwcHAtJmd0O2Rldik7CiYjNDM7CW5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTsKIH0KIAogc3RhdGljIHZvaWQgX19wcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE2NzQsNyAmIzQzOzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChsaWtlbHkoc2tiX3F1ZXVlX2VtcHR5KCZhbXA7cHBwLSZndDtmaWxlLnhxKSkpIHsKIAkJaWYgKHVubGlrZWx5KCFwcHBfcHVzaChwcHAsIHNrYikpKSB7CiAJCQlza2JfcXVldWVfdGFpbCgmYW1wO3BwcC0mZ3Q7ZmlsZS54cSwgc2tiKTsKLQkJCW5ldGlmX3N0b3BfcXVldWUocHBwLSZndDtkZXYpOwomIzQzOwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTsKIAkJfQogCQlnb3RvIG91dDsKIAl9CkBAIC0xNzEyLDE3ICYjNDM7MTcxMSwxOCBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlrZnJlZV9za2Ioc2tiKTsKIAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7cmVjdXJzaW9uIGRldGVjdGVkXG4mIzM0Oyk7CiYjNDM7CQluZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgJiMzNDtyZWN1cnNpb24gZGV0ZWN0ZWRcbiYjMzQ7KTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCiBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKIAlpbnQgbGVuOwotCWludCBuZXdfc2tiX3NpemUgPSBwcHAtJmd0O2Rldi0mZ3Q7bXR1ICYjNDM7Ci0JCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgcHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKLQlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IHBwcC0mZ3Q7ZGV2LSZndDttdHUgJiM0MzsKJiM0MzsJaW50IG5ld19za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiYjNDM7CQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwomIzQzOwlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjsKIAogCWlmIChza2JfbGluZWFyaXplKHNrYikpCkBAIC0xNzMxLDEyICYjNDM7MTczMSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAluZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfc2tiKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcbiYjMzQ7KTsKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXG4mIzM0Oyk7CiAJCXJldHVybiBOVUxMOwogCX0KLQlpZiAocHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAmZ3Q7IFBQUF9IRFJMRU4pCi0JCXNrYl9yZXNlcnZlKG5ld19za2IsCi0JCQkgICAgcHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pOwomIzQzOwlpZiAoZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJmd0OyBQUFBfSERSTEVOKQomIzQzOwkJc2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTsKIAogCS8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovCiAJbGVuID0gcHBwLSZndDt4Y29tcC0mZ3Q7Y29tcHJlc3MocHBwLSZndDt4Y19zdGF0ZSwgc2tiLSZndDtkYXRhIC0gMiwKQEAgLTE3NjEsNyAmIzQzOzE3NjAsNyBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJICogdGhlIHNhbWUgbnVtYmVyLgogCQkgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XG4mIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihkZXYsICYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XG4mIzM0Oyk7CiAJCWNvbnN1bWVfc2tiKG5ld19za2IpOwogCQluZXdfc2tiID0gTlVMTDsKIAl9CkBAIC0xNzc3LDEzICYjNDM7MTc3NiwxNCBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyBpbnQKIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKnBza2I7CiAJaW50IHByb3RvID0gUFBQX1BST1RPKHNrYik7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiAJaW50IGxlbjsKIAl1bnNpZ25lZCBjaGFyICpjcDsKIAotCXNrYi0mZ3Q7ZGV2ID0gcHBwLSZndDtkZXY7CiYjNDM7CXNrYi0mZ3Q7ZGV2ID0gZGV2OwogCiAJaWYgKHByb3RvICZsdDsgMHg4MDAwKSB7CiAjaWZkZWYgQ09ORklHX1BQUF9GSUxURVIKQEAgLTE3OTQsNyAmIzQzOzE3OTQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCiAJCWlmIChwcHAtJmd0O3Bhc3NfZmlsdGVyICZhbXA7JmFtcDsKIAkJICAgIGJwZl9wcm9nX3J1bihwcHAtJmd0O3Bhc3NfZmlsdGVyLCBza2IpID09IDApIHsKIAkJCWlmIChSRUFEX09OQ0UocHBwLSZndDtkZWJ1ZykgJmFtcDsgMSkKLQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC0mZ3Q7ZGV2LAomIzQzOwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJICAgICAgJiMzNDtQUFA6IG91dGJvdW5kIGZyYW1lICYjMzQ7CiAJCQkJCSAgICAgICYjMzQ7bm90IHBhc3NlZFxuJiMzNDspOwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xODExLDcgJiM0MzsxODExLDcgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKQogI2VuZGlmIC8qIENPTkZJR19QUFBfRklMVEVSICovCiAJfQogCi0JZGV2X3N3X25ldHN0YXRzX3R4X2FkZChwcHAtJmd0O2RldiwgMSwgc2tiLSZndDtsZW4gLSBQUFBfUFJPVE9fTEVOKTsKJiM0MzsJZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIDEsIHNrYi0mZ3Q7bGVuIC0gUFBQX1BST1RPX0xFTik7CiAKIAlzd2l0Y2ggKHByb3RvKSB7CiAJY2FzZSBQUFBfSVA6CkBAIC0xODIyLDEzICYjNDM7MTgyMiwxMyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCiAJCQlnb3RvIGRyb3A7CiAKIAkJLyogdHJ5IHRvIGRvIFZKIFRDUCBoZWFkZXIgY29tcHJlc3Npb24gKi8KLQkJbmV3X3NrYiA9IGFsbG9jX3NrYihza2ItJmd0O2xlbiAmIzQzOyBwcHAtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuIC0gMiwKJiM0MzsJCW5ld19za2IgPSBhbGxvY19za2Ioc2tiLSZndDtsZW4gJiM0MzsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gLSAyLAogCQkJCSAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuZXdfc2tiKSB7Ci0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O1BQUDogbm8gbWVtb3J5IChWSiBjb21wIHBrdClcbiYjMzQ7KTsKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoVkogY29tcCBwa3QpXG4mIzM0Oyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KLQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgcHBwLSZndDtkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiAtIDIpOwomIzQzOwkJc2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gLSAyKTsKIAkJY3AgPSBza2ItJmd0O2RhdGEgJiM0MzsgMjsKIAkJbGVuID0gc2xoY19jb21wcmVzcyhwcHAtJmd0O3ZqLCBjcCwgc2tiLSZndDtsZW4gLSAyLAogCQkJCSAgICBuZXdfc2tiLSZndDtkYXRhICYjNDM7IDIsICZhbXA7Y3AsCkBAIC0xODY0LDcgJiM0MzsxODY0LDcgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKQogCSAgICBwcm90byAhPSBQUFBfTENQICZhbXA7JmFtcDsgcHJvdG8gIT0gUFBQX0NDUCkgewogCQlpZiAoIShwcHAtJmd0O2ZsYWdzICZhbXA7IFNDX0NDUF9VUCkgJmFtcDsmYW1wOyAocHBwLSZndDtmbGFncyAmYW1wOyBTQ19NVVNUX0NPTVApKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCW5ldGRldl9lcnIocHBwLSZndDtkZXYsCiYjNDM7CQkJCW5ldGRldl9lcnIoZGV2LAogCQkJCQkgICAmIzM0O3BwcDogY29tcHJlc3Npb24gcmVxdWlyZWQgYnV0ICYjMzQ7CiAJCQkJCSAgICYjMzQ7ZG93biAtIHBrdCBkcm9wcGVkLlxuJiMzNDspOwogCQkJZ290byBkcm9wOwpAQCAtMTg5Miw3ICYjNDM7MTg5Miw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYikKIAogIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JREVWX1NUQVRTX0lOQyhwcHAtJmd0O2RldiwgdHhfZXJyb3JzKTsKJiM0MzsJREVWX1NUQVRTX0lOQyhkZXYsIHR4X2Vycm9ycyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE5NjIsNiAmIzQzOzE5NjIsNyBAQCBNT0RVTEVfUEFSTV9ERVNDKG1wX3Byb3RvY29sX2NvbXByZXNzLAogICovCiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlpbnQgbGVuLCB0b3RsZW47CiAJaW50IGksIGJpdHMsIGhkcmxlbiwgbXR1OwogCWludCBmbGVuOwpAQCAtMjE1OCw4ICYjNDM7MjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNwaW5fdW5sb2NrKCZhbXA7cGNoLSZndDtkb3dubCk7CiAgZXJyX2xpbmVhcml6ZToKIAlpZiAoUkVBRF9PTkNFKHBwcC0mZ3Q7ZGVidWcpICZhbXA7IDEpCi0JCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7UFBQOiBubyBtZW1vcnkgKGZyYWdtZW50KVxuJiMzNDspOwotCURFVl9TVEFUU19JTkMocHBwLSZndDtkZXYsIHR4X2Vycm9ycyk7CiYjNDM7CQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoZnJhZ21lbnQpXG4mIzM0Oyk7CiYjNDM7CURFVl9TVEFUU19JTkMoZGV2LCB0eF9lcnJvcnMpOwogCSYjNDM7JiM0MztwcHAtJmd0O254c2VxOwogCXJldHVybiAxOwkvKiBhYmFuZG9uIHRoZSBmcmFtZSAqLwogfQpAQCAtMjMzMiw3ICYjNDM7MjMzMyw3IEBAIHBwcF9pbnB1dChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKCFwcHBfZGVjb21wcmVzc19wcm90byhza2IpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlpZiAocHBwKSB7Ci0JCQlERVZfU1RBVFNfSU5DKHBwcC0mZ3Q7ZGV2LCByeF9sZW5ndGhfZXJyb3JzKTsKJiM0MzsJCQlERVZfU1RBVFNfSU5DKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgcnhfbGVuZ3RoX2Vycm9ycyk7CiAJCQlwcHBfcmVjZWl2ZV9lcnJvcihwcHApOwogCQl9CiAJCWdvdG8gZG9uZTsKQEAgLTIzOTQsNyAmIzQzOzIzOTUsNyBAQCBwcHBfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpCiBzdGF0aWMgdm9pZAogcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKQogewotCURFVl9TVEFUU19JTkMocHBwLSZndDtkZXYsIHJ4X2Vycm9ycyk7CiYjNDM7CURFVl9TVEFUU19JTkMobmV0ZGV2X2Zyb21fcHJpdihwcHApLCByeF9lcnJvcnMpOwogCWlmIChwcHAtJmd0O3ZqKQogCQlzbGhjX3Rvc3MocHBwLSZndDt2aik7CiB9CkBAIC0yNDAyLDYgJiM0MzsyNDAzLDcgQEAgcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKQogc3RhdGljIHZvaWQKIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnM7CiAJaW50IHByb3RvLCBsZW4sIG5waTsKIApAQCAtMjQzMSw4ICYjNDM7MjQzMyw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCS8qIGNvcHkgdG8gYSBuZXcgc2tfYnVmZiB3aXRoIG1vcmUgdGFpbHJvb20gKi8KIAkJCW5zID0gZGV2X2FsbG9jX3NrYihza2ItJmd0O2xlbiAmIzQzOyAxMjgpOwogCQkJaWYgKCFucykgewotCQkJCW5ldGRldl9lcnIocHBwLSZndDtkZXYsICYjMzQ7UFBQOiBubyBtZW1vcnkgJiMzNDsKLQkJCQkJICAgJiMzNDsoVkogZGVjb21wKVxuJiMzNDspOwomIzQzOwkJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtQUFA6IG5vIG1lbW9yeSAoVkogZGVjb21wKVxuJiMzNDspOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJc2tiX3Jlc2VydmUobnMsIDIpOwpAQCAtMjQ0NSw3ICYjNDM7MjQ0Niw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCQlsZW4gPSBzbGhjX3VuY29tcHJlc3MocHBwLSZndDt2aiwgc2tiLSZndDtkYXRhICYjNDM7IDIsIHNrYi0mZ3Q7bGVuIC0gMik7CiAJCWlmIChsZW4gJmx0Oz0gMCkgewotCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtJmd0O2RldiwKJiM0MzsJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkgICAgICAmIzM0O1BQUDogVkogZGVjb21wcmVzc2lvbiBlcnJvclxuJiMzNDspOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTI0NjgsNyAmIzQzOzI0NjksNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlnb3RvIGVycjsKIAogCQlpZiAoc2xoY19yZW1lbWJlcihwcHAtJmd0O3ZqLCBza2ItJmd0O2RhdGEgJiM0MzsgMiwgc2tiLSZndDtsZW4gLSAyKSAmbHQ7PSAwKSB7Ci0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O1BQUDogVkogdW5jb21wcmVzc2VkIGVycm9yXG4mIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihkZXYsICYjMzQ7UFBQOiBWSiB1bmNvbXByZXNzZWQgZXJyb3JcbiYjMzQ7KTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCXByb3RvID0gUFBQX0lQOwpAQCAtMjQ3OSw3ICYjNDM7MjQ4MCw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJYnJlYWs7CiAJfQogCi0JZGV2X3N3X25ldHN0YXRzX3J4X2FkZChwcHAtJmd0O2Rldiwgc2tiLSZndDtsZW4gLSBQUFBfUFJPVE9fTEVOKTsKJiM0MzsJZGV2X3N3X25ldHN0YXRzX3J4X2FkZChkZXYsIHNrYi0mZ3Q7bGVuIC0gUFBQX1BST1RPX0xFTik7CiAKIAlucGkgPSBwcm90b190b19ucGluZGV4KHByb3RvKTsKIAlpZiAobnBpICZsdDsgMCkgewpAQCAtMjUwNiw3ICYjNDM7MjUwNyw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCWlmIChwcHAtJmd0O3Bhc3NfZmlsdGVyICZhbXA7JmFtcDsKIAkJCSAgICBicGZfcHJvZ19ydW4ocHBwLSZndDtwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7CiAJCQkJaWYgKFJFQURfT05DRShwcHAtJmd0O2RlYnVnKSAmYW1wOyAxKQotCQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC0mZ3Q7ZGV2LAomIzQzOwkJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCiAJCQkJCQkgICAgICAmIzM0O1BQUDogaW5ib3VuZCBmcmFtZSAmIzM0OwogCQkJCQkJICAgICAgJiMzNDtub3QgcGFzc2VkXG4mIzM0Oyk7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0yNTIwLDE3ICYjNDM7MjUyMSwxNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi8KIAkJCVdSSVRFX09OQ0UocHBwLSZndDtsYXN0X3JlY3YsIGppZmZpZXMpOwogCi0JCWlmICgocHBwLSZndDtkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkgPT0gMCB8fAomIzQzOwkJaWYgKChkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkgPT0gMCB8fAogCQkgICAgUkVBRF9PTkNFKHBwcC0mZ3Q7bnBtb2RlW25waV0pICE9IE5QTU9ERV9QQVNTKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGNob3Agb2ZmIHByb3RvY29sICovCiAJCQlza2JfcHVsbF9yY3N1bShza2IsIDIpOwotCQkJc2tiLSZndDtkZXYgPSBwcHAtJmd0O2RldjsKJiM0MzsJCQlza2ItJmd0O2RldiA9IGRldjsKIAkJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBodG9ucyhucGluZGV4X3RvX2V0aGVydHlwZVtucGldKTsKIAkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCQlza2Jfc2NydWJfcGFja2V0KHNrYiwgIW5ldF9lcShwcHAtJmd0O3BwcF9uZXQsCi0JCQkJCQkgICAgICBkZXZfbmV0KHBwcC0mZ3Q7ZGV2KSkpOwomIzQzOwkJCQkJCSAgICAgIGRldl9uZXQoZGV2KSkpOwogCQkJbmV0aWZfcngoc2tiKTsKIAkJfQogCX0KQEAgLTI1NjgsOCAmIzQzOzI1NjksOCBAQCBwcHBfZGVjb21wcmVzc19mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAkJbnMgPSBkZXZfYWxsb2Nfc2tiKG9idWZmX3NpemUpOwogCQlpZiAoIW5zKSB7Ci0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O3BwcF9kZWNvbXByZXNzX2ZyYW1lOiAmIzM0OwotCQkJCSAgICYjMzQ7bm8gbWVtb3J5XG4mIzM0Oyk7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksCiYjNDM7CQkJCSAgICYjMzQ7cHBwX2RlY29tcHJlc3NfZnJhbWU6IG5vIG1lbW9yeVxuJiMzNDspOwogCQkJZ290byBlcnI7CiAJCX0KIAkJLyogdGhlIGRlY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIHRoZSBBL0MgYnl0ZXMgaW4gdGhlIGhkciAqLwpAQCAtMjYxNyw2ICYjNDM7MjYxOCw3IEBAIHBwcF9kZWNvbXByZXNzX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyB2b2lkCiBwcHBfcmVjZWl2ZV9tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpCiB7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7CiAJdTMyIG1hc2ssIHNlcTsKIAlzdHJ1Y3QgY2hhbm5lbCAqY2g7CiAJaW50IG1waGRybGVuID0gKHBwcC0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfTVBfU0hPUlRTRVEpPyBNUEhEUkxFTl9TU046IE1QSERSTEVOOwpAQCAtMjY2MSw3ICYjNDM7MjY2Myw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaCkKIAkgKi8KIAlpZiAoc2VxX2JlZm9yZShzZXEsIHBwcC0mZ3Q7bmV4dHNlcSkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0JCURFVl9TVEFUU19JTkMocHBwLSZndDtkZXYsIHJ4X2Ryb3BwZWQpOwomIzQzOwkJREVWX1NUQVRTX0lOQyhkZXYsIHJ4X2Ryb3BwZWQpOwogCQlwcHBfcmVjZWl2ZV9lcnJvcihwcHApOwogCQlyZXR1cm47CiAJfQpAQCAtMjY5Nyw3ICYjNDM7MjY5OSw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaCkKIAkJaWYgKHBza2JfbWF5X3B1bGwoc2tiLCAyKSkKIAkJCXBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHBwcCwgc2tiKTsKIAkJZWxzZSB7Ci0JCQlERVZfU1RBVFNfSU5DKHBwcC0mZ3Q7ZGV2LCByeF9sZW5ndGhfZXJyb3JzKTsKJiM0MzsJCQlERVZfU1RBVFNfSU5DKGRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7CiAJCX0KQEAgLTI3MzksNiAmIzQzOzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCiBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKQogewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApOwogCXUzMiBzZXEgPSBwcHAtJmd0O25leHRzZXE7CiAJdTMyIG1pbnNlcSA9IHBwcC0mZ3Q7bWluc2VxOwogCXN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSAmYW1wO3BwcC0mZ3Q7bXJxOwpAQCAtMjc1NSw4ICYjNDM7Mjc1OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApCiAJYWdhaW46CiAJCWlmIChzZXFfYmVmb3JlKFBQUF9NUF9DQihwKS0mZ3Q7c2VxdWVuY2UsIHNlcSkpIHsKIAkJCS8qIHRoaXMgY2FuJiMzOTt0IGhhcHBlbiwgYW55d2F5IGlnbm9yZSB0aGUgc2tiICovCi0JCQluZXRkZXZfZXJyKHBwcC0mZ3Q7ZGV2LCAmIzM0O3BwcF9tcF9yZWNvbnN0cnVjdCBiYWQgJiMzNDsKLQkJCQkgICAmIzM0O3NlcSAldSAmbHQ7ICV1XG4mIzM0OywKJiM0MzsJCQluZXRkZXZfZXJyKGRldiwgJiMzNDtwcHBfbXBfcmVjb25zdHJ1Y3QgYmFkIHNlcSAldSAmbHQ7ICV1XG4mIzM0OywKIAkJCQkgICBQUFBfTVBfQ0IocCktJmd0O3NlcXVlbmNlLCBzZXEpOwogCQkJX19za2JfdW5saW5rKHAsIGxpc3QpOwogCQkJa2ZyZWVfc2tiKHApOwpAQCAtMjc3NSw3ICYjNDM7Mjc3Nyw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApCiAJCQkJbWluc2VxICYjNDM7IDE6IFBQUF9NUF9DQihwKS0mZ3Q7c2VxdWVuY2U7CiAKIAkJCWlmIChSRUFEX09OQ0UocHBwLSZndDtkZWJ1ZykgJmFtcDsgMSkKLQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC0mZ3Q7ZGV2LAomIzQzOwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJICAgICAgJiMzNDtsb3N0IGZyYWcgJXUuLiV1XG4mIzM0OywKIAkJCQkJICAgICAgb2xkc2VxLCBzZXEtMSk7CiAKQEAgLTI4MDMsOCAmIzQzOzI4MDUsOCBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKQogCQlpZiAobG9zdCA9PSAwICZhbXA7JmFtcDsgKFBQUF9NUF9DQihwKS0mZ3Q7QkViaXRzICZhbXA7IEUpICZhbXA7JmFtcDsKIAkJICAgIChQUFBfTVBfQ0IoaGVhZCktJmd0O0JFYml0cyAmYW1wOyBCKSkgewogCQkJaWYgKGxlbiAmZ3Q7IHBwcC0mZ3Q7bXJydSAmIzQzOyAyKSB7Ci0JCQkJREVWX1NUQVRTX0lOQyhwcHAtJmd0O2RldiwgcnhfbGVuZ3RoX2Vycm9ycyk7Ci0JCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtJmd0O2RldiwKJiM0MzsJCQkJREVWX1NUQVRTX0lOQyhkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpOwomIzQzOwkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJICAgICAgJiMzNDtQUFA6IHJlY29uc3RydWN0ZWQgcGFja2V0JiMzNDsKIAkJCQkJICAgICAgJiMzNDsgaXMgdG9vIGxvbmcgKCVkKVxuJiMzNDssIGxlbik7CiAJCQl9IGVsc2UgewpAQCAtMjgyNCw3ICYjNDM7MjgyNiw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApCiAKIAkJCXNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfZnJvbV9zYWZlKGxpc3QsIHAsIHRtcDIpIHsKIAkJCQlpZiAoUkVBRF9PTkNFKHBwcC0mZ3Q7ZGVidWcpICZhbXA7IDEpCi0JCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLSZndDtkZXYsCiYjNDM7CQkJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwKIAkJCQkJCSAgICAgICYjMzQ7ZGlzY2FyZGluZyBmcmFnICV1XG4mIzM0OywKIAkJCQkJCSAgICAgIFBQUF9NUF9DQihwKS0mZ3Q7c2VxdWVuY2UpOwogCQkJCV9fc2tiX3VubGluayhwLCBsaXN0KTsKQEAgLTI4NDYsNyAmIzQzOzI4NDgsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKQogCQkJCWlmIChwID09IGhlYWQpCiAJCQkJCWJyZWFrOwogCQkJCWlmIChSRUFEX09OQ0UocHBwLSZndDtkZWJ1ZykgJmFtcDsgMSkKLQkJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtJmd0O2RldiwKJiM0MzsJCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAogCQkJCQkJICAgICAgJiMzNDtkaXNjYXJkaW5nIGZyYWcgJXVcbiYjMzQ7LAogCQkJCQkJICAgICAgUFBQX01QX0NCKHApLSZndDtzZXF1ZW5jZSk7CiAJCQkJX19za2JfdW5saW5rKHAsIGxpc3QpOwpAQCAtMjg1NCwxMSAmIzQzOzI4NTYsMTEgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcCkKIAkJCX0KIAogCQkJaWYgKFJFQURfT05DRShwcHAtJmd0O2RlYnVnKSAmYW1wOyAxKQotCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLSZndDtkZXYsCiYjNDM7CQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LAogCQkJCQkgICAgICAmIzM0OyAgbWlzc2VkIHBrdHMgJXUuLiV1XG4mIzM0OywKIAkJCQkJICAgICAgcHBwLSZndDtuZXh0c2VxLAogCQkJCQkgICAgICBQUFBfTVBfQ0IoaGVhZCktJmd0O3NlcXVlbmNlLTEpOwotCQkJREVWX1NUQVRTX0lOQyhwcHAtJmd0O2RldiwgcnhfZHJvcHBlZCk7CiYjNDM7CQkJREVWX1NUQVRTX0lOQyhkZXYsIHJ4X2Ryb3BwZWQpOwogCQkJcHBwX3JlY2VpdmVfZXJyb3IocHBwKTsKIAkJfQogCkBAIC0yOTc3LDggJiM0MzsyOTc5LDggQEAgY2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKIAogCWlmIChwY2gpIHsKIAkJcHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC0mZ3Q7cHBwKTsKLQkJaWYgKHBwcCAmYW1wOyZhbXA7IHBwcC0mZ3Q7ZGV2KQotCQkJbmFtZSA9IHBwcC0mZ3Q7ZGV2LSZndDtuYW1lOwomIzQzOwkJaWYgKHBwcCkKJiM0MzsJCQluYW1lID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApLSZndDtuYW1lOwogCX0KIAlyZXR1cm4gbmFtZTsKIH0KQEAgLTMzMDksMTIgJiM0MzszMzExLDEzIEBAIGZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSkKIHN0YXRpYyB2b2lkCiBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpCiB7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7CiAJc3RydWN0IHNsY29tcHJlc3MgKnZqID0gcHBwLSZndDt2ajsKIAlpbnQgY3B1OwogCiAJbWVtc2V0KHN0LCAwLCBzaXplb2YoKnN0KSk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKHBwcC0mZ3Q7ZGV2LSZndDt0c3RhdHMsIGNwdSk7CiYjNDM7CQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKGRldi0mZ3Q7dHN0YXRzLCBjcHUpOwogCQl1NjQgcnhfcGFja2V0cywgcnhfYnl0ZXMsIHR4X3BhY2tldHMsIHR4X2J5dGVzOwogCiAJCXJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZCgmYW1wO3AtJmd0O3J4X3BhY2tldHMpOwpAQCAtMzMyNyw4ICYjNDM7MzMzMCw4IEBAIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdCkKIAkJc3QtJmd0O3AucHBwX29wYWNrZXRzICYjNDM7PSB0eF9wYWNrZXRzOwogCQlzdC0mZ3Q7cC5wcHBfb2J5dGVzICYjNDM7PSB0eF9ieXRlczsKIAl9Ci0Jc3QtJmd0O3AucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChwcHAtJmd0O2RldiwgcnhfZXJyb3JzKTsKLQlzdC0mZ3Q7cC5wcHBfb2Vycm9ycyA9IERFVl9TVEFUU19SRUFEKHBwcC0mZ3Q7ZGV2LCB0eF9lcnJvcnMpOwomIzQzOwlzdC0mZ3Q7cC5wcHBfaWVycm9ycyA9IERFVl9TVEFUU19SRUFEKGRldiwgcnhfZXJyb3JzKTsKJiM0MzsJc3QtJmd0O3AucHBwX29lcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHR4X2Vycm9ycyk7CiAJaWYgKCF2aikKIAkJcmV0dXJuOwogCXN0LSZndDt2ai52anNfcGFja2V0cyA9IHZqLSZndDtzbHNfb19jb21wcmVzc2VkICYjNDM7IHZqLSZndDtzbHNfb191bmNvbXByZXNzZWQ7CkBAIC0zNDA4LDYgJiM0MzszNDExLDggQEAgaW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZCkKICAqLwogc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcCkKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKJiM0MzsKIAlpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO3BwcC0mZ3Q7ZmlsZS5yZWZjbnQpKQogCQlyZXR1cm47CiAKQEAgLTM0MTUsNyAmIzQzOzM0MjAsNyBAQCBzdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKQogCiAJaWYgKCFwcHAtJmd0O2ZpbGUuZGVhZCB8fCBwcHAtJmd0O25fY2hhbm5lbHMpIHsKIAkJLyogJiMzNDtjYW4mIzM5O3QgaGFwcGVuJiMzNDsgKi8KLQkJbmV0ZGV2X2VycihwcHAtJmd0O2RldiwgJiMzNDtwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCAmIzM0OwomIzQzOwkJbmV0ZGV2X2VycihkZXYsICYjMzQ7cHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgJiMzNDsKIAkJCSAgICYjMzQ7YnV0IGRlYWQ9JWQgbl9jaGFubmVscz0lZCAhXG4mIzM0OywKIAkJCSAgIHBwcCwgcHBwLSZndDtmaWxlLmRlYWQsIHBwcC0mZ3Q7bl9jaGFubmVscyk7CiAJCXJldHVybjsKQEAgLTM0NDUsNyAmIzQzOzM0NTAsNyBAQCBzdGF0aWMgdm9pZCBwcHBfcmVsZWFzZV9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKQogCiAJZnJlZV9wZXJjcHUocHBwLSZndDt4bWl0X3JlY3Vyc2lvbik7CiAKLQlmcmVlX25ldGRldihwcHAtJmd0O2Rldik7CiYjNDM7CWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKIC8qCkBAIC0zNDkyLDYgJiM0MzszNDk3LDcgQEAgcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KQogc3RhdGljIGludAogcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIHsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcHBwICpwcHA7CiAJc3RydWN0IHBwcF9uZXQgKnBuOwogCWludCByZXQgPSAtRU5YSU87CkBAIC0zNTAzLDYgJiM0MzszNTA5LDcgQEAgcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIAlwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTsKIAlpZiAoIXBwcCkKIAkJZ290byBvdXQ7CiYjNDM7CWRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzcGluX2xvY2soJmFtcDtwY2gtJmd0O3VwbCk7CiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwY2gtJmd0O3BwcCwgbG9ja2RlcF9pc19oZWxkKCZhbXA7cGNoLSZndDt1cGwpKSB8fApAQCAtMzUxOSwxNSAmIzQzOzM1MjYsMTUgQEAgcHBwX2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoLCBpbnQgdW5pdCkKIAkJZ290byBvdXRsOwogCX0KIAlpZiAocGNoLSZndDtjaGFuLSZndDtkaXJlY3RfeG1pdCkKLQkJcHBwLSZndDtkZXYtJmd0O3ByaXZfZmxhZ3MgfD0gSUZGX05PX1FVRVVFOwomIzQzOwkJZGV2LSZndDtwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTsKIAllbHNlCi0JCXBwcC0mZ3Q7ZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7PSB+SUZGX05PX1FVRVVFOwomIzQzOwkJZGV2LSZndDtwcml2X2ZsYWdzICZhbXA7PSB+SUZGX05PX1FVRVVFOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7cGNoLSZndDtkb3dubCk7CiAJaWYgKHBjaC0mZ3Q7ZmlsZS5oZHJsZW4gJmd0OyBwcHAtJmd0O2ZpbGUuaGRybGVuKQogCQlwcHAtJmd0O2ZpbGUuaGRybGVuID0gcGNoLSZndDtmaWxlLmhkcmxlbjsKIAloZHJsZW4gPSBwY2gtJmd0O2ZpbGUuaGRybGVuICYjNDM7IDI7CS8qIGZvciBwcm90b2NvbCBieXRlcyAqLwotCWlmIChoZHJsZW4gJmd0OyBwcHAtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKQotCQlwcHAtJmd0O2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gaGRybGVuOwomIzQzOwlpZiAoaGRybGVuICZndDsgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4pCiYjNDM7CQlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IGhkcmxlbjsKIAlsaXN0X2FkZF90YWlsX3JjdSgmYW1wO3BjaC0mZ3Q7Y2xpc3QsICZhbXA7cHBwLSZndDtjaGFubmVscyk7CiAJJiM0MzsmIzQzO3BwcC0mZ3Q7bl9jaGFubmVsczsKIAlyY3VfYXNzaWduX3BvaW50ZXIocGNoLSZndDtwcHAsIHBwcCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgaXQmIzM5O3MgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCBmaWVsZCBmcm9tIHRoZSBgc3RydWN0IHBwcGAuIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCB3aHk/IFRoZSBvYnZpb3VzIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhleSYjMzk7cmUgbm93IHVzaW5nIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIGV2ZXJ5d2hlcmUgYHBwcC0mZ3Q7ZGV2YCB3YXMgdXNlZC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgYHN0cnVjdCBwcHBgIGlzICpub3cqIGJlaW5nIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJbnN0ZWFkIG9mIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHN0cnVjdHMgd2l0aCBhIHBvaW50ZXIgYmV0d2VlbiB0aGVtLgoKQnV0IHdhaXQsIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgKmZ1bmRhbWVudGFsbHkqIGNoYW5nZXMgdGhlIG1lbW9yeSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIHRoYXQgY3JlYXRlcyB0aGUgUFBQIGludGVyZmFjZS4gRnVuY3Rpb25zIGxpa2UgYHBwcF9jcmVhdGVfaW50ZXJmYWNlYCBhcmUgd2hhdCBJJiMzOTttIGludGVyZXN0ZWQgaW4uIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGBzdHJ1Y3QgcHBwYCBpcyBiZWluZyBhbGxvY2F0ZWQgbm93LiBUaGUgZGlmZiBhbG9uZSBkb2VzbiYjMzk7dCBnaXZlIG1lIGVub3VnaCBjb250ZXh0LiBUaGlzIGNoYW5nZSBjb3VsZCBoYXZlIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gVGhlIHdob2xlIHN0cnVjdHVyZSBvZiBgcHBwX2NyZWF0ZV9pbnRlcmZhY2VgIG1pZ2h0IGhhdmUgY2hhbmdlZCwgbWF5YmUgZXZlbiBob3cgaXQmIzM5O3MgbGlua2VkIGludG8gdGhlIGRldmljZSB0cmVlLiBJIG5lZWQgdG8gc2VlIHRoZSBhbGxvY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX25ldGRldiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTc9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjg6XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY5LVx0aWYgKCFkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDczNAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQUFAgSW50ZXJmYWNlIENyZWF0aW9uIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgUFBQIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCAuLi4pYCDigJMgdGhhdCBwYXJ0JiMzOTtzIGFscmVhZHkgaW1wbGVtZW50ZWQsIGdvb2QuIEJ1dCBoYW5nIG9uLCB0aGUgYXV0aG9yIGV4cGxpY2l0bHkgYXNzaWducyBgcHBwLSZndDtkZXZgIHRvIGBkZXZgLCBhbmQgKnRoZW4qIHRoZXkgdXNlIGBwcHAtJmd0O2RldmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgZXhwbGljaXQgYXNzaWdubWVudCwgYXMgaXQgc2VlbXMgYSBiaXQgcmVkdW5kYW50IGF0IGZpcnN0IGdsYW5jZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgaW50ZXJmYWNlIGNyZWF0aW9uLCBzbyBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byBgcHBwX2NyZWF0ZV9pbnRlcmZhY2VgIGluIHRoZSBmaWxlLiBIb3BlZnVsbHksIHRoYXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQgb24gd2h5IHRoaXMgZXhwbGljaXQgYXNzaWdubWVudCBpcyBuZWNlc3NhcnkgYW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgd2l0aCB0aGlzIGRldmljZSBzdHJ1Y3R1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzNTc6XHRzdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcbjMzNTg6XHR7XG4zMzU5Olx0XHRzdHJ1Y3QgcHBwX2NvbmZpZyBjb25mID0ge1xuMzM2MDpcdFx0XHQuZmlsZSA9IGZpbGUsXG4zMzYxOlx0XHRcdC51bml0ID0gKnVuaXQsXG4zMzYyOlx0XHRcdC5pZm5hbWVfaXNfc2V0ID0gZmFsc2UsXG4zMzYzOlx0XHR9O1xuMzM2NDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbjMzNjU6XHRcdHN0cnVjdCBwcHAgKnBwcDtcbjMzNjY6XHRcdGludCBlcnI7XG4zMzY3Olx0XG4zMzY4Olx0XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG4zMzY5Olx0XHRpZiAoIWRldikge1xuMzM3MDpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMzM3MTpcdFx0XHRnb3RvIGVycjtcbjMzNzI6XHRcdH1cbjMzNzM6XHRcdGRldl9uZXRfc2V0KGRldiwgbmV0KTtcbjMzNzQ6XHRcdGRldi1cdTAwM2VydG5sX2xpbmtfb3BzID0gXHUwMDI2cHBwX2xpbmtfb3BzO1xuMzM3NTpcdFxuMzM3NjpcdFx0cnRubF9sb2NrKCk7XG4zMzc3Olx0XG4zMzc4Olx0XHRlcnIgPSBwcHBfZGV2X2NvbmZpZ3VyZShuZXQsIGRldiwgXHUwMDI2Y29uZik7XG4zMzc5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMzM4MDpcdFx0XHRnb3RvIGVycl9kZXY7XG4zMzgxOlx0XHRwcHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuMzM4MjpcdFx0KnVuaXQgPSBwcHAtXHUwMDNlZmlsZS5pbmRleDtcbjMzODM6XHRcbjMzODQ6XHRcdHJ0bmxfdW5sb2NrKCk7XG4zMzg1Olx0XG4zMzg2Olx0XHRyZXR1cm4gMDtcbjMzODc6XHRcbjMzODg6XHRlcnJfZGV2OlxuMzM4OTpcdFx0cnRubF91bmxvY2soKTtcbjMzOTA6XHRcdGZyZWVfbmV0ZGV2KGRldik7XG4zMzkxOlx0ZXJyOlxuMzM5MjpcdFx0cmV0dXJuIGVycjtcbjMzOTM6XHR9XG4zMzk0Olx0XG4zMzk1Olx0LypcbjMzOTY6XHQgKiBJbml0aWFsaXplIGEgcHBwX2ZpbGUgc3RydWN0dXJlLlxuMzM5NzpcdCAqL1xuMzM5ODpcdHN0YXRpYyB2b2lkXG4zMzk5Olx0aW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZClcbjM0MDA6XHR7XG4zNDAxOlx0XHRwZi1cdTAwM2VraW5kID0ga2luZDtcbjM0MDI6XHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cGYtXHUwMDNleHEpO1xuMzQwMzpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZwZi1cdTAwM2VycSk7XG4zNDA0Olx0XHRyZWZjb3VudF9zZXQoXHUwMDI2cGYtXHUwMDNlcmVmY250LCAxKTtcbjM0MDU6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2cGYtXHUwMDNlcndhaXQpO1xuMzQwNjpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTY4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBQUCBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgLi4uKWAgY2FsbC4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGBwcHBgIHN0cnVjdHVyZSBpcyBiZWluZyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCBpcyBhY2Nlc3NlZCB1c2luZyBgbmV0ZGV2X3ByaXYoZGV2KWAuIFNvLCBgcHBwYCBhbmQgdGhlIGBkZXZgIHN0cnVjdCBhcmUgaW5oZXJlbnRseSBsaW5rZWQsIGdvb2QuCgpOb3csIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgcHBwLSZndDtkZXZgIGFuZCBzdWJzdGl0dXRpbmcgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gSG1tLCBpcyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCBhIGZ1bmN0aW9uIG9yIGEgbWFjcm8/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuIFdhaXQgYSBzZWNvbmQsIGlzIGBuZXRkZXZfZnJvbV9wcml2YCBhIHN0YW5kYXJkIGtlcm5lbCBmdW5jdGlvbj8gSXMgaXQgaW4gYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIG9yIHNvbWV3aGVyZSBzaW1pbGFyPyBBY3R1YWxseSwgbm8sIEkgdGhpbmsgaXQgaXMgdXN1YWxseSBgbmV0ZGV2X3ByaXYoZGV2KWAgdG8gZ2V0IHRoZSBwcml2YXRlIGRhdGEuIElzIHRoZXJlIGV2ZW4gYSBgbmV0ZGV2X2Zyb21fcHJpdihwcml2KWAgZGVmaW5lZCBzb21ld2hlcmU/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4KCkFscmlnaHQsIGxldCYjMzk7cyBqdXN0IHNlZSB3aGVyZSBgbmV0ZGV2X2Zyb21fcHJpdmAgaXMgdXNlZCBpbiB0aGUgY29kZWJhc2UuIFRoYXQmIzM5O2xsIGJlIHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGRldl9mcm9tX3ByaXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjgxOT1zdGF0aWMgaW5saW5lIHZvaWQgKm5ldGRldl9wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODI0LS8qKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyODI1OiAqIG5ldGRldl9mcm9tX3ByaXYoKSAtIGdldCBuZXR3b3JrIGRldmljZSBmcm9tIHByaXZcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjgyNi0gKiBAcHJpdjogbmV0d29yayBkZXZpY2UgcHJpdmF0ZSBkYXRhXG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODI5LSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyODMwOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldl9mcm9tX3ByaXYoY29uc3Qgdm9pZCAqcHJpdilcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjgzMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzNDMKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgUFBQIERldmljZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBgbmV0ZGV2X2Zyb21fcHJpdmAgaXMgZGVmaW5pdGVseSBhIHRoaW5nLCBnb29kLiBUaGUgcGF0Y2ggYWltcyBmb3IgcHVyZSByZWZhY3RvcmluZywgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gc2VlaW5nIGhlcmUuIEl0JiMzOTtzIGFsbCBhYm91dCBlbGltaW5hdGluZyB0aGUgcmVkdW5kYW50IGBkZXZgIHBvaW50ZXIgd2l0aGluIHRoZSBgc3RydWN0IHBwcGAgYW5kIGxldmVyYWdpbmcgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgaW5zdGVhZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgYXNzZXNzIGlmIHRoZXJlJiMzOTtzIGFueSBmdW5jdGlvbmFsIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgc3RyYWlnaHQgc3dhcCBvZiBgcHBwLSZndDtkZXZgIHdpdGggdGhlIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIGVxdWl2YWxlbnQ/CgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2ssIHRob3VnaCwgbm8gbmVlZCB0byBiZSBoYXN0eS4gT2theSwgYmFjayB0byB0aGUgcGF0Y2guIFl1cCwgaXQmIzM5O3MgcmVtb3ZpbmcgdGhhdCBhc3NpZ25tZW50IGluIGBwcHBfZGV2X2NvbmZpZ3VyZWA6IGAtIHBwcC0mZ3Q7ZGV2ID0gZGV2O2AgYW5kIHRoZW4gaXQmIzM5O3MgcmVwbGFjaW5nIGFsbCBpbnN0YW5jZXMgb2YgYHBwcC0mZ3Q7ZGV2YCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBIbW0sIG5vdyBJIGhhdmUgdG8gYmUgdGhvcm91Z2guLi4gQ291bGQgdGhlcmUgKmV2ZXIqIGhhdmUgYmVlbiBhIHNjZW5hcmlvIHdoZXJlIGBwcHAtJmd0O2RldmAgd2FzIE5VTEwgb3IgZGl2ZXJnZWQgZnJvbSB3aGF0IGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIHJldHVybnM/CgpUaGlua2luZyBpdCB0aHJvdWdoLCBubywgbm90IHJlYWxseS4gQmVjYXVzZSBgcHBwYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IHBwcCksIC4uLilgIHdoaWNoIGFsd2F5cywgaW4gZWZmZWN0LCBlbnN1cmVzIHRoYXQgYHBwcGAmIzM5O3MgbWVtb3J5IGxvY2F0aW9uIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgcHJpdmF0ZSBkYXRhIHJlZ2lvbiBvZiB0aGUgYXNzb2NpYXRlZCBgZGV2YCBzdHJ1Y3R1cmUuIFRoZSBjYWxjdWxhdGlvbiwgdGhlcmVmb3JlLCBpcyBqdXN0IGNvcnJlY3QuIEhvbGQgb24sIHRob3VnaC4uLndoYXQgaWYgdGhlcmUmIzM5O3MgYW4gKmFsdGVybmF0aXZlKiB3YXkgdGhhdCBgcHBwYCBjb3VsZCBiZSBhbGxvY2F0ZWQ/IElzIGBzdHJ1Y3QgcHBwYCBldmVyIGluc3RhbnRpYXRlZCBvdXRzaWRlIG9mIHRoZSBgYWxsb2NfbmV0ZGV2YCBjb250ZXh0PyBMZXQmIzM5O3MgZ28gbG9vayBmb3IgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNvcm5lciBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhrbWFsbG9jfGt6YWxsb2N8a2NhbGxvY3x2bWFsbG9jfHZ6YWxsb2MpXFwoLipzaXplb2ZcXChzdHJ1Y3QgcHBwXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA1MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgdGhpbmtlcjoKCioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHBwcGAgQWxsb2NhdGlvbiBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIHRoZSBgc3RydWN0IHBwcGAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgIGZpbGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGZvciBhbGxvY2F0aW9uIG9mIHRoZSBzdHJ1Y3QgKnNwZWNpZmljYWxseSogd2l0aGluIHRoYXQgZmlsZS4gSSYjMzk7bSBvcGVyYXRpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgd2F5IGl0IGlzIGFsbG9jYXRlZCBtYXkgaGF2ZSBhbiBlZmZlY3Qgb24gaXRzIHVzYWdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgc3RydWN0IGlzIGJlaW5nIGluc3RhbnRpYXRlZCB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYW5kIGlmIHNvLCBob3cuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBteSBhbmFseXNpcy4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBhbGxvY2F0ZWQgZGlyZWN0bHkgdGhlcmUsIG9yIGlmIG90aGVyIGZ1bmN0aW9ucyBhcmUgcmVzcG9uc2libGUuIEZpbmRpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgYWxsb2NhdGVkIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NpemVvZlxcKHN0cnVjdCBwcHBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xMzgzPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBwcHBfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xMzg2LVx0LnBvbGljeVx0XHQ9IHBwcF9ubF9wb2xpY3ksXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxMzg3Olx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBwcCksXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xMzg4LVx0LnNldHVwXHRcdD0gcHBwX3NldHVwLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTc9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2Ny1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjg6XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcJiMzNDtcJiMzNDssIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY5LVx0aWYgKCFkZXYpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgUmVmYWN0b3JpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBqdXN0IHJlbW92aW5nIGEgcmVkdW5kYW50IHBvaW50ZXIgd2l0aGluIHRoZSBgc3RydWN0IHBwcGAuIFNwZWNpZmljYWxseSwgdGhpcyBwb2ludGVyIHRoYXQgc3RvcmVzIHRoZSBgbmV0X2RldmljZWAgd2l0aGluIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmLiBJdCBsb29rcyBsaWtlIGBzdHJ1Y3QgcHBwYCBpcyBvbmx5IGV2ZXIgYWxsb2NhdGVkIGFzIGBuZXRkZXZfcHJpdmAsIGVpdGhlciB0aHJvdWdoIGBhbGxvY19uZXRkZXZgIG9yIHZpYSBgcnRubF9saW5rX29wcy5wcml2X3NpemVgLiBUaGVyZWZvcmUsIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIHdpbGwgYWx3YXlzIGNvcnJlY3RseSBnaXZlIHlvdSB0aGUgYXNzb2NpYXRlZCBgbmV0X2RldmljZWAuIFNvLCBvbiB0aGUgc3VyZmFjZSwgdGhpcyBzaG91bGQganVzdCBzYXZlIGEgZmV3IGJ5dGVzIGFuZCBzaG91bGQgaGF2ZSBubyBpbXBhY3Qgb24gdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGZ1bmN0aW9uYWwgbG9naWMgb2YgdGhlIGNvZGUuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggZm9yIGFueSBzbmVha3kgY2hhbmdlcy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgZGlmZiwgdGhlIGZpcnN0IGNoYW5nZSBpcyBqdXN0IHJlcGxhY2luZyBgcHBwLSZndDtkZXYtJmd0O25hbWVgIHdpdGggYGRldi0mZ3Q7bmFtZWAsIHdoZXJlIGBkZXZgIGlzIGEgbG9jYWwgdmFyaWFibGUgaW5pdGlhbGl6ZWQgYXMgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAuIFRoYXQmIzM5O3MgZmluZS4gSXQmIzM5O3MganVzdCB1c2luZyB0aGUgbG9jYWwgdmFyaWFibGUsIGFzIGV4cGVjdGVkLgoKVGhlbiB0aGVyZSYjMzk7cyBhIGNoYW5nZSBpbiBgcHBwX2Rldl9uYW1lYC4gSXQgbm93IGNhbGxzIGBuZXRkZXZfZnJvbV9wcml2KHBwcCktJmd0O25hbWVgIGluc3RlYWQgb2YgYHBwcC0mZ3Q7ZGV2LSZndDtuYW1lYC4gSGFuZyBvbiwgZG9lcyB0aGlzIGNoYW5nZSBpbmRpY2F0ZSB0aGF0IGBwcHAtJmd0O2RldmAgKmNvdWxkKiBoYXZlIGJlZW4gTlVMTCBwcmV2aW91c2x5PyBMZXQgbWUgZGlnIGEgbGl0dGxlIGRlZXBlci4KCkxldCYjMzk7cyBzZWUuIEluIGBwcHBfZGV2X2NvbmZpZ3VyZWAsIGBwcHAtJmd0O2RldiA9IGRldjtgIGlzIHNldC4gT2theSwgc28gd2hlcmUgaXMgYHBwcC0mZ3Q7ZGV2YCAqbm90KiBzZXQ/IElzIHRoZXJlIGEgc2l0dWF0aW9uIHdoZXJlIGBwcHBgIGV4aXN0cyBidXQgYHBwcC0mZ3Q7ZGV2YCBpcyBOVUxMPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBwcHBgIGlzIGNyZWF0ZWQuCgpMb29raW5nIGF0IGBwcHBfY3JlYXRlX2ludGVyZmFjZWAsIHdlIHNlZSBgZGV2ID0gYWxsb2NfbmV0ZGV2KC4uLilgLiBUaGVuIGBkZXZfbmV0X3NldChkZXYsIG5ldClgLCBhbmQgc28gb24uIGBwcHBfZGV2X2NvbmZpZ3VyZWAgaXMgY2FsbGVkLCBhbmQgKnRoZW4qIGBwcHAtJmd0O2RldiA9IGRldjtgIGlzIGFzc2lnbmVkLiBJZiBgcHBwX2Rldl9jb25maWd1cmVgIGZhaWxzLCB0aGUgY29kZSBqdW1wcyB0byBgZXJyX2RldmAsIGFuZCBgZGV2YCBpcyB1bmxvY2tlZCBhbmQgZnJlZWQuIENydWNpYWxseSwgYmVjYXVzZSBgcHBwYCBpcyB3aXRoaW4gdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGBkZXZgIChhcyBpdCYjMzk7cyBgbmV0ZGV2X3ByaXZgISksIGZyZWVpbmcgYGRldmAgd291bGQgYWxzbyBmcmVlIGBwcHBgLiBUaGVyZWZvcmUsIGBwcHBgIGNhbiYjMzk7dCBleGlzdCB3aXRob3V0IGBkZXZgLgoKV2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgcHBwX25sX25ld2xpbmtgPyBMZXQgbWUgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMjA6XHRcdGludCBlcnI7XG4xMzIxOlx0XG4xMzIyOlx0XHRmaWxlID0gZmdldChubGFfZ2V0X3MzMihkYXRhW0lGTEFfUFBQX0RFVl9GRF0pKTtcbjEzMjM6XHRcdGlmICghZmlsZSlcbjEzMjQ6XHRcdFx0cmV0dXJuIC1FQkFERjtcbjEzMjU6XHRcbjEzMjY6XHRcdC8qIHJ0bmxfbG9jayBpcyBhbHJlYWR5IGhlbGQgaGVyZSwgYnV0IHBwcF9jcmVhdGVfaW50ZXJmYWNlKCkgbG9ja3NcbjEzMjc6XHRcdCAqIHBwcF9tdXRleCBiZWZvcmUgaG9sZGluZyBydG5sX2xvY2suIFVzaW5nIG11dGV4X3RyeWxvY2soKSBhdm9pZHNcbjEzMjg6XHRcdCAqIHBvc3NpYmxlIGRlYWRsb2NrIGR1ZSB0byBsb2NrIG9yZGVyIGludmVyc2lvbiwgYXQgdGhlIGNvc3Qgb2ZcbjEzMjk6XHRcdCAqIHB1c2hpbmcgdGhlIHByb2JsZW0gYmFjayB0byB1c2Vyc3BhY2UuXG4xMzMwOlx0XHQgKi9cbjEzMzE6XHRcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZwcHBfbXV0ZXgpKSB7XG4xMzMyOlx0XHRcdGVyciA9IC1FQlVTWTtcbjEzMzM6XHRcdFx0Z290byBvdXQ7XG4xMzM0Olx0XHR9XG4xMzM1Olx0XG4xMzM2Olx0XHRpZiAoZmlsZS1cdTAwM2VmX29wICE9IFx1MDAyNnBwcF9kZXZpY2VfZm9wcyB8fCBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSkge1xuMTMzNzpcdFx0XHRlcnIgPSAtRUJBREY7XG4xMzM4Olx0XHRcdGdvdG8gb3V0X3VubG9jaztcbjEzMzk6XHRcdH1cbjEzNDA6XHRcbjEzNDE6XHRcdGNvbmYuZmlsZSA9IGZpbGU7XG4xMzQyOlx0XG4xMzQzOlx0XHQvKiBEb24mIzM5O3QgdXNlIGRldmljZSBuYW1lIGdlbmVyYXRlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyIHdoZW4gaWZuYW1lXG4xMzQ0Olx0XHQgKiBpc24mIzM5O3Qgc3BlY2lmaWVkLiBMZXQgcHBwX2Rldl9jb25maWd1cmUoKSBzZXQgdGhlIGRldmljZSBuYW1lIHVzaW5nXG4xMzQ1Olx0XHQgKiB0aGUgUFBQIHVuaXQgaWRlbnRpZmVyIGFzIHN1ZmZpeCAoaS5lLiBwcHBcdTAwM2N1bml0X2lkXHUwMDNlKS4gVGhpcyBhbGxvd3NcbjEzNDY6XHRcdCAqIHVzZXJzcGFjZSB0byBpbmZlciB0aGUgZGV2aWNlIG5hbWUgdXNpbmcgdG8gdGhlIFBQUElPQ0dVTklUIGlvY3RsLlxuMTM0NzpcdFx0ICovXG4xMzQ4Olx0XHRpZiAoIXRiW0lGTEFfSUZOQU1FXSB8fCAhbmxhX2xlbih0YltJRkxBX0lGTkFNRV0pIHx8ICEqKGNoYXIgKilubGFfZGF0YSh0YltJRkxBX0lGTkFNRV0pKVxuMTM0OTpcdFx0XHRjb25mLmlmbmFtZV9pc19zZXQgPSBmYWxzZTtcbjEzNTA6XHRcbjEzNTE6XHRcdGVyciA9IHBwcF9kZXZfY29uZmlndXJlKGxpbmtfbmV0LCBkZXYsIFx1MDAyNmNvbmYpO1xuMTM1MjpcdFxuMTM1MzpcdG91dF91bmxvY2s6XG4xMzU0Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHBwX211dGV4KTtcbjEzNTU6XHRvdXQ6XG4xMzU2Olx0XHRmcHV0KGZpbGUpO1xuMTM1NzpcdFxuMTM1ODpcdFx0cmV0dXJuIGVycjtcbjEzNTk6XHR9XG4xMzYwOlx0XG4xMzYxOlx0c3RhdGljIHZvaWQgcHBwX25sX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbjEzNjI6XHR7XG4xMzYzOlx0XHR1bnJlZ2lzdGVyX25ldGRldmljZV9xdWV1ZShkZXYsIGhlYWQpO1xuMTM2NDpcdH1cbjEzNjU6XHRcbjEzNjY6XHRzdGF0aWMgc2l6ZV90IHBwcF9ubF9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuMTM2NzpcdHtcbjEzNjg6XHRcdHJldHVybiAwO1xuMTM2OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMDA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2ODEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gUFBQIERldmljZSBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBwcHBfbmxfbmV3bGlua2AgZnVuY3Rpb24sIGFuZCBpdCBjYWxscyBgcHBwX2Rldl9jb25maWd1cmVgLiBNeSBtYWluIGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY29kZSBzdGF0ZXMgdGhhdCBpZiBgcHBwX2Rldl9jb25maWd1cmVgIGZhaWxzLCB0aGUgYGRldmAgaXMgZXZlbnR1YWxseSBmcmVlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgYHBwcGAgaXMgYWx3YXlzIHBhcnQgb2YgYGRldmAuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IGlzIHRoZXJlICphbnkqIHNjZW5hcmlvIHdoZXJlIGBwcHAtJmd0O2RldmAgY291bGQgYWN0dWFsbHkgYmUgTlVMTD8KCkkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBzZWN0aW9uIG9mIGNvZGUgKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoOgoKYGBgYwoJaWYgKHBjaCkgewoJCXBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtJmd0O3BwcCk7CgkJaWYgKHBwcCAmYW1wOyZhbXA7IHBwcC0mZ3Q7ZGV2KQoJCQluYW1lID0gcHBwLSZndDtkZXYtJmd0O25hbWU7Cgl9CmBgYAoKVGhlIHdvcnJ5IGlzIHRoYXQgcmVtb3ZpbmcgdGhlIGBwcHAtJmd0O2RldmAgY2hlY2sgY291bGQgbGVhZCB0byBhIGNyYXNoIGlmLCB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIGBwcHAtJmd0O2RldmAgKmNvdWxkKiBiZSBOVUxMLiBCdXQsIHdhaXQuLi4gaXNuJiMzOTt0IGBwcHBgIGFsbG9jYXRlZCBhcyBgbmV0ZGV2X3ByaXYoZGV2KWA/IFRoYXQgbWFrZXMgYHBwcC0mZ3Q7ZGV2YCBiYXNpY2FsbHkgYSBwb2ludGVyIGJhY2sgdG8gYGRldmAgaXRzZWxmLiBBbmQgaXQgZ2V0cyBpbml0aWFsaXplZCBpbnNpZGUgYHBwcF9kZXZfY29uZmlndXJlYC4gVGhhdCBzZWVtcyBwcmV0dHkgc29saWQuCgpTdGlsbCwgSSBjYW4mIzM5O3QgZGlzbWlzcyB0aGlzIHdpdGhvdXQgZGlnZ2luZyBkZWVwZXIuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzOiBjb3VsZCBgcGNoLSZndDtwcHBgIGJlIHNldCAqYmVmb3JlKiBgcHBwX2Rldl9jb25maWd1cmVgIGZpbmlzaGVzPyBUaGF0JiMzOTtzIHRoZSBvbmx5IHdheSBJIGNhbiBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgYHBjaC0mZ3Q7cHBwYCBpcyBhY3R1YWxseSBzZXQuIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBwb2ludGVyIGNoYWluIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgaXMgc2V0IGJlZm9yZSBJIGNhbiBnaXZlIHRoZSBncmVlbiBsaWdodC4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyY3VfYXNzaWduX3BvaW50ZXJcXChwY2gtXHUwMDNlcHBwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzQ5OD1wcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1MzktXHQmIzQzOyYjNDM7cHBwLVx1MDAzZW5fY2hhbm5lbHM7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzozNTQwOlx0cmN1X2Fzc2lnbl9wb2ludGVyKHBjaC1cdTAwM2VwcHAsIHBwcCk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNTQxLVx0cmVmY291bnRfaW5jKFx1MDAyNnBwcC1cdTAwM2VmaWxlLnJlZmNudCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDAwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDY1CgkJCQkJCQlvdXRwdXQ6IDk3CgkJCQkJCQl0aG91Z2h0czogMjA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBwcHBfY29ubmVjdF9jaGFubmVsYCAtIEEgQ2xvc2VyIExvb2sqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgcHBwX2Nvbm5lY3RfY2hhbm5lbGAgZnVuY3Rpb24gYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gRXNzZW50aWFsbHksIHRoaXMgYHBwcF9jb25uZWN0X2NoYW5uZWxgIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBjb25uZWN0aW9uLCBhbmQgdGhlIGNyaXRpY2FsIHBhcnQgaW52b2x2ZXMgZ2V0dGluZyB0aGUgYHBwcGAgc3RydWN0dXJlLiBJdCB1c2VzIGBwcHBfZmluZF91bml0YCB0byBsb2NhdGUgaXQsIHdoaWNoIGlzIHRoZW4gYWRkZWQgdG8gdGhlIElEUiB2aWEgYHBwcF91bml0X3JlZ2lzdGVyYC4gVGhpcyByZWdpc3RyYXRpb24gaGFwcGVucyBkdXJpbmcgYHBwcF9kZXZfY29uZmlndXJlYCwgbWVhbmluZyB0aGUgYHBwcGAgc3RydWN0dXJlIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpbXBvcnRhbnRseSwgYHBwcC0mZ3Q7ZGV2YCBoYXMgKmFscmVhZHkqIGJlZW4gYXNzaWduZWQgYmVmb3JlIGl0JiMzOTtzIGV2ZW4gYWRkZWQgdG8gdGhlIElEUi4KClRoZXJlZm9yZSwgYmVjYXVzZSBgcHBwYCBpcyByZWdpc3RlcmVkIGNvcnJlY3RseSwgYW5kIGluaXRpYWxpemVkIGNvcnJlY3RseSwgaWYgYHBwcGAgaXMgZm91bmQsIGBwcHAtJmd0O2RldmAgY2FuICpuZXZlciogYmUgTlVMTC4gVGhlIGNvZGUgc2VlbXMgdG8gY2hlY2sgYGlmIChwcHAgJmFtcDsmYW1wOyBwcHAtJmd0O2RldilgIGJ1dCB0aGF0IGxvb2tzIGxpa2UgZWl0aGVyIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyDigJMgYW50aWNpcGF0aW5nIHNvbWUgZWFybGllciwgbm93LXJlbW92ZWQgcG9zc2liaWxpdHkg4oCTIG9yIHBlcmhhcHMganVzdCBhIHJlbW5hbnQgb2YgYSB0aW1lIHdoZW4gYHBwcGAgYW5kIGBkZXZgIHdlcmUgbWFuYWdlZCBzZXBhcmF0ZWx5LiBOb3csIHRoZSBgcHBwLSZndDtkZXZgIGlzIGEgcmVkdW5kYW50IHBvaW50ZXIuCgpNeSBhc3Nlc3NtZW50IGlzIHRoYXQgcmVtb3ZpbmcgdGhpcyBgcHBwLSZndDtkZXZgIGFuZCByZXBsYWNpbmcgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCBpcyBwdXJlbHkgYSBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nLiBJdCYjMzk7cyBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGNvZGUgYW5kIGltcHJvdmluZyBtYWludGFpbmFiaWxpdHksIGJ1dCBpdCBkb2VzbiYjMzk7dCBhY3R1YWxseSBhbHRlciB0aGUgKmZ1bmN0aW9uYWxpdHkqIG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3MgaW4gYW55IHdheS4KCkdpdmVuIHRoaXMgdW5kZXJzdGFuZGluZywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yIHRvIGVsaW1pbmF0ZSBhIHJlZHVuZGFudCBwb2ludGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAwMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbW92ZXMgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIGZyb20gYHN0cnVjdCBwcHBgIGFuZCByZXBsYWNlcyBpdCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBTaW5jZSBgc3RydWN0IHBwcGAgaXMgYWxsb2NhdGVkIGFzIHRoZSBwcml2YXRlIGRhdGEgb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCwgdGhpcyBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWwgbG9naWMgb3IgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjM2LjkwMTU2NTg5MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MDQwMDIwMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDM6MzYuOTAxNTcyODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk1ODMxNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2YTJlYzdhM2Q0MTNjYjVjMGQyMGU3ZWU0MjVmMDY5M2IyNWFmMDMwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xcbmluZGV4IDA4YmI4OTc2NTQ4N2YuLmUxMDEzNjIxZWIxZDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xcbkBAIC0xMzksNyArMTM5LDYgQEAgc3RydWN0IHBwcCB7XFxuIFxcdHZvaWRcXHRcXHQqcmNfc3RhdGU7XFx0LyogaXRzIGludGVybmFsIHN0YXRlIDk4ICovXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRsYXN0X3htaXQ7XFx0LyogamlmZmllcyB3aGVuIGxhc3QgcGt0IHNlbnQgOWMgKi9cXG4gXFx0dW5zaWduZWQgbG9uZ1xcdGxhc3RfcmVjdjtcXHQvKiBqaWZmaWVzIHdoZW4gbGFzdCBwa3QgcmN2ZCBhMCAqL1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcdFxcdC8qIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBhNCAqL1xcbiBcXHRpbnRcXHRcXHRjbG9zaW5nO1xcdC8qIGlzIGRldmljZSBjbG9zaW5nIGRvd24/IGE4ICovXFxuICNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOS1xcbiBcXHRpbnRcXHRcXHRueGNoYW47XFx0XFx0LyogbmV4dCBjaGFubmVsIHRvIHNlbmQgc29tZXRoaW5nIG9uICovXFxuQEAgLTQxMiw3ICs0MTEsNyBAQCBzdGF0aWMgaW50IHBwcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqdW51c2VkLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0XFx0XFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcXG4gXFx0XFx0XFx0cnRubF9sb2NrKCk7XFxuIFxcdFxcdFxcdGlmIChmaWxlID09IHBwcC1cXHUwMDNlb3duZXIpXFxuLVxcdFxcdFxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKHBwcC1cXHUwMDNlZGV2KTtcXG4rXFx0XFx0XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcXG4gXFx0XFx0XFx0cnRubF91bmxvY2soKTtcXG4gXFx0XFx0XFx0cHBwX3JlbGVhc2VfaW50ZXJmYWNlKHBwcCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC05MjEsNyArOTIwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRShwcHAtXFx1MDAzZW5wbW9kZVtpXSwgbnBpLm1vZGUpO1xcbiBcXHRcXHRcXHQvKiB3ZSBtYXkgYmUgYWJsZSB0byB0cmFuc21pdCBtb3JlIHBhY2tldHMgbm93ICg/PykgKi9cXG4tXFx0XFx0XFx0bmV0aWZfd2FrZV9xdWV1ZShwcHAtXFx1MDAzZWRldik7XFxuK1xcdFxcdFxcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHRicmVhaztcXG5AQCAtMTE0Nyw3ICsxMTQ2LDcgQEAgc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBfZXhpdF9ydG5sX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGludCBpZDtcXG4gXFxuIFxcdGlkcl9mb3JfZWFjaF9lbnRyeShcXHUwMDI2cG4tXFx1MDAzZXVuaXRzX2lkciwgcHBwLCBpZClcXG4tXFx0XFx0cHBwX25sX2RlbGxpbmsocHBwLVxcdTAwM2VkZXYsIGRldl90b19raWxsKTtcXG4rXFx0XFx0cHBwX25sX2RlbGxpbmsobmV0ZGV2X2Zyb21fcHJpdihwcHApLCBkZXZfdG9fa2lsbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5AQCAtMTE3MCw2ICsxMTY5LDcgQEAgc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwcHBfbmV0X29wcyA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuIFxcdHN0cnVjdCBwcHBfbmV0ICpwbiA9IHBwcF9wZXJuZXQocHBwLVxcdTAwM2VwcHBfbmV0KTtcXG4gXFx0aW50IHJldDtcXG4gXFxuQEAgLTExODEsOCArMTE4MSw4IEBAIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0aWYgKCFpZm5hbWVfaXNfc2V0KSB7XFxuIFxcdFxcdFxcdHdoaWxlICgxKSB7XFxuLVxcdFxcdFxcdFxcdHNucHJpbnRmKHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lLCBJRk5BTVNJWiwgXFxcInBwcCVpXFxcIiwgcmV0KTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFuZXRkZXZfbmFtZV9pbl91c2UocHBwLVxcdTAwM2VwcHBfbmV0LCBwcHAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSkpXFxuK1xcdFxcdFxcdFxcdHNucHJpbnRmKGRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVosIFxcXCJwcHAlaVxcXCIsIHJldCk7XFxuK1xcdFxcdFxcdFxcdGlmICghbmV0ZGV2X25hbWVfaW5fdXNlKHBwcC1cXHUwMDNlcHBwX25ldCwgZGV2LVxcdTAwM2VuYW1lKSlcXG4gXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdFxcdHVuaXRfcHV0KFxcdTAwMjZwbi1cXHUwMDNldW5pdHNfaWRyLCByZXQpO1xcbiBcXHRcXHRcXHRcXHRyZXQgPSB1bml0X2dldChcXHUwMDI2cG4tXFx1MDAzZXVuaXRzX2lkciwgcHBwLCByZXQgKyAxKTtcXG5AQCAtMTIxMCwxMSArMTIxMCwxMSBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldClcXG4gXFx0cHBwLVxcdTAwM2VmaWxlLmluZGV4ID0gcmV0O1xcbiBcXG4gXFx0aWYgKCFpZm5hbWVfaXNfc2V0KVxcbi1cXHRcXHRzbnByaW50ZihwcHAtXFx1MDAzZWRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVosIFxcXCJwcHAlaVxcXCIsIHBwcC1cXHUwMDNlZmlsZS5pbmRleCk7XFxuK1xcdFxcdHNucHJpbnRmKGRldi1cXHUwMDNlbmFtZSwgSUZOQU1TSVosIFxcXCJwcHAlaVxcXCIsIHBwcC1cXHUwMDNlZmlsZS5pbmRleCk7XFxuIFxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBuLVxcdTAwM2VhbGxfcHBwX211dGV4KTtcXG4gXFxuLVxcdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwcHAtXFx1MDAzZWRldik7XFxuK1xcdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfdW5pdDtcXG4gXFxuQEAgLTEyMzksNyArMTIzOSw2IEBAIHN0YXRpYyBpbnQgcHBwX2Rldl9jb25maWd1cmUoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aW50IGVycjtcXG4gXFx0aW50IGNwdTtcXG4gXFxuLVxcdHBwcC1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXHRwcHAtXFx1MDAzZXBwcF9uZXQgPSBzcmNfbmV0O1xcbiBcXHRwcHAtXFx1MDAzZW1ydSA9IFBQUF9NUlU7XFxuIFxcdHBwcC1cXHUwMDNlb3duZXIgPSBjb25mLVxcdTAwM2VmaWxlO1xcbkBAIC0xNjU4LDcgKzE2NTcsNyBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9mbHVzaChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdC8qIElmIHRoZXJlJ3Mgbm8gd29yayBsZWZ0IHRvIGRvLCB0ZWxsIHRoZSBjb3JlIG5ldCBjb2RlIHRoYXQgd2UgY2FuXFxuIFxcdCAqIGFjY2VwdCBzb21lIG1vcmUuXFxuIFxcdCAqL1xcbi1cXHRuZXRpZl93YWtlX3F1ZXVlKHBwcC1cXHUwMDNlZGV2KTtcXG4rXFx0bmV0aWZfd2FrZV9xdWV1ZShuZXRkZXZfZnJvbV9wcml2KHBwcCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbkBAIC0xNjc0LDcgKzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAobGlrZWx5KHNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2cHBwLVxcdTAwM2VmaWxlLnhxKSkpIHtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KCFwcHBfcHVzaChwcHAsIHNrYikpKSB7XFxuIFxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUueHEsIHNrYik7XFxuLVxcdFxcdFxcdG5ldGlmX3N0b3BfcXVldWUocHBwLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRcXHRuZXRpZl9zdG9wX3F1ZXVlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG5AQCAtMTcxMiwxNyArMTcxMSwxOCBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcbiBcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbi1cXHRcXHRuZXRkZXZfZXJyKHBwcC1cXHUwMDNlZGV2LCBcXFwicmVjdXJzaW9uIGRldGVjdGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFxcXCJyZWN1cnNpb24gZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcXG4gcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XFxuIFxcdGludCBsZW47XFxuLVxcdGludCBuZXdfc2tiX3NpemUgPSBwcHAtXFx1MDAzZWRldi1cXHUwMDNlbXR1ICtcXG4tXFx0XFx0cHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcF9leHRyYSArIHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gcHBwLVxcdTAwM2VkZXYtXFx1MDAzZW10dSArXFxuK1xcdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuK1xcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4rXFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuIFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbiBcXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG5AQCAtMTczMSwxMiArMTczMSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIW5ld19za2IpIHtcXG4gXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbi1cXHRpZiAocHBwLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcXHUwMDNlIFBQUF9IRFJMRU4pXFxuLVxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsXFxuLVxcdFxcdFxcdCAgICBwcHAtXFx1MDAzZWRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuK1xcdGlmIChkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcXHUwMDNlIFBQUF9IRFJMRU4pXFxuK1xcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XFxuIFxcbiBcXHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xcbiBcXHRsZW4gPSBwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wcmVzcyhwcHAtXFx1MDAzZXhjX3N0YXRlLCBza2ItXFx1MDAzZWRhdGEgLSAyLFxcbkBAIC0xNzYxLDcgKzE3NjAsNyBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0ICogdGhlIHNhbWUgbnVtYmVyLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcInBwcDogY29tcHJlc3NvciBkcm9wcGVkIHBrdFxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxcXG5cXFwiKTtcXG4gXFx0XFx0Y29uc3VtZV9za2IobmV3X3NrYik7XFxuIFxcdFxcdG5ld19za2IgPSBOVUxMO1xcbiBcXHR9XFxuQEAgLTE3NzcsMTMgKzE3NzYsMTQgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHN0YXRpYyBpbnRcXG4gcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjtcXG4gXFx0aW50IHByb3RvID0gUFBQX1BST1RPKHNrYik7XFxuIFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xcbiBcXHRpbnQgbGVuO1xcbiBcXHR1bnNpZ25lZCBjaGFyICpjcDtcXG4gXFxuLVxcdHNrYi1cXHUwMDNlZGV2ID0gcHBwLVxcdTAwM2VkZXY7XFxuK1xcdHNrYi1cXHUwMDNlZGV2ID0gZGV2O1xcbiBcXG4gXFx0aWYgKHByb3RvIFxcdTAwM2MgMHg4MDAwKSB7XFxuICNpZmRlZiBDT05GSUdfUFBQX0ZJTFRFUlxcbkBAIC0xNzk0LDcgKzE3OTQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdFxcdGlmIChwcHAtXFx1MDAzZXBhc3NfZmlsdGVyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBicGZfcHJvZ19ydW4ocHBwLVxcdTAwM2VwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7XFxuIFxcdFxcdFxcdGlmIChSRUFEX09OQ0UocHBwLVxcdTAwM2VkZWJ1ZykgXFx1MDAyNiAxKVxcbi1cXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlBQUDogb3V0Ym91bmQgZnJhbWUgXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwibm90IHBhc3NlZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbkBAIC0xODExLDcgKzE4MTEsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqL1xcbiBcXHR9XFxuIFxcbi1cXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKHBwcC1cXHUwMDNlZGV2LCAxLCBza2ItXFx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xcbitcXHRkZXZfc3dfbmV0c3RhdHNfdHhfYWRkKGRldiwgMSwgc2tiLVxcdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcXG4gXFxuIFxcdHN3aXRjaCAocHJvdG8pIHtcXG4gXFx0Y2FzZSBQUFBfSVA6XFxuQEAgLTE4MjIsMTMgKzE4MjIsMTMgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbiBcXHRcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbiBcXHRcXHQvKiB0cnkgdG8gZG8gVkogVENQIGhlYWRlciBjb21wcmVzc2lvbiAqL1xcbi1cXHRcXHRuZXdfc2tiID0gYWxsb2Nfc2tiKHNrYi1cXHUwMDNlbGVuICsgcHBwLVxcdTAwM2VkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIDIsXFxuK1xcdFxcdG5ld19za2IgPSBhbGxvY19za2Ioc2tiLVxcdTAwM2VsZW4gKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIDIsXFxuIFxcdFxcdFxcdFxcdCAgICBHRlBfQVRPTUlDKTtcXG4gXFx0XFx0aWYgKCFuZXdfc2tiKSB7XFxuLVxcdFxcdFxcdG5ldGRldl9lcnIocHBwLVxcdTAwM2VkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoVkogY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoVkogY29tcCBwa3QpXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHR9XFxuLVxcdFxcdHNrYl9yZXNlcnZlKG5ld19za2IsIHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyKTtcXG4rXFx0XFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyKTtcXG4gXFx0XFx0Y3AgPSBza2ItXFx1MDAzZWRhdGEgKyAyO1xcbiBcXHRcXHRsZW4gPSBzbGhjX2NvbXByZXNzKHBwcC1cXHUwMDNldmosIGNwLCBza2ItXFx1MDAzZWxlbiAtIDIsXFxuIFxcdFxcdFxcdFxcdCAgICBuZXdfc2tiLVxcdTAwM2VkYXRhICsgMiwgXFx1MDAyNmNwLFxcbkBAIC0xODY0LDcgKzE4NjQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXFxuIFxcdCAgICBwcm90byAhPSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IHByb3RvICE9IFBQUF9DQ1ApIHtcXG4gXFx0XFx0aWYgKCEocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NDUF9VUCkgXFx1MDAyNlxcdTAwMjYgKHBwcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19NVVNUX0NPTVApKSB7XFxuIFxcdFxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuLVxcdFxcdFxcdFxcdG5ldGRldl9lcnIocHBwLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXFwicHBwOiBjb21wcmVzc2lvbiByZXF1aXJlZCBidXQgXFxcIlxcbiBcXHRcXHRcXHRcXHRcXHQgICBcXFwiZG93biAtIHBrdCBkcm9wcGVkLlxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtMTg5Miw3ICsxODkyLDcgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbiBcXG4gIGRyb3A6XFxuIFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCB0eF9lcnJvcnMpO1xcbitcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4gXFxuQEAgLTE5NjIsNiArMTk2Miw3IEBAIE1PRFVMRV9QQVJNX0RFU0MobXBfcHJvdG9jb2xfY29tcHJlc3MsXFxuICAqL1xcbiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHRpbnQgbGVuLCB0b3RsZW47XFxuIFxcdGludCBpLCBiaXRzLCBoZHJsZW4sIG10dTtcXG4gXFx0aW50IGZsZW47XFxuQEAgLTIxNTgsOCArMjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2cGNoLVxcdTAwM2Vkb3dubCk7XFxuICBlcnJfbGluZWFyaXplOlxcbiBcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXFxcblxcXCIpO1xcbi1cXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCB0eF9lcnJvcnMpO1xcbitcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXFxcblxcXCIpO1xcbitcXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcXG4gXFx0KytwcHAtXFx1MDAzZW54c2VxO1xcbiBcXHRyZXR1cm4gMTtcXHQvKiBhYmFuZG9uIHRoZSBmcmFtZSAqL1xcbiB9XFxuQEAgLTIzMzIsNyArMjMzMyw3IEBAIHBwcF9pbnB1dChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdGlmICghcHBwX2RlY29tcHJlc3NfcHJvdG8oc2tiKSkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0aWYgKHBwcCkge1xcbi1cXHRcXHRcXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcXG4rXFx0XFx0XFx0REVWX1NUQVRTX0lOQyhuZXRkZXZfZnJvbV9wcml2KHBwcCksIHJ4X2xlbmd0aF9lcnJvcnMpO1xcbiBcXHRcXHRcXHRwcHBfcmVjZWl2ZV9lcnJvcihwcHApO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGdvdG8gZG9uZTtcXG5AQCAtMjM5NCw3ICsyMzk1LDcgQEAgcHBwX3JlY2VpdmVfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfcmVjZWl2ZV9lcnJvcihzdHJ1Y3QgcHBwICpwcHApXFxuIHtcXG4tXFx0REVWX1NUQVRTX0lOQyhwcHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4rXFx0REVWX1NUQVRTX0lOQyhuZXRkZXZfZnJvbV9wcml2KHBwcCksIHJ4X2Vycm9ycyk7XFxuIFxcdGlmIChwcHAtXFx1MDAzZXZqKVxcbiBcXHRcXHRzbGhjX3Rvc3MocHBwLVxcdTAwM2V2aik7XFxuIH1cXG5AQCAtMjQwMiw2ICsyNDAzLDcgQEAgcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKm5zO1xcbiBcXHRpbnQgcHJvdG8sIGxlbiwgbnBpO1xcbiBcXG5AQCAtMjQzMSw4ICsyNDMzLDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRcXHQvKiBjb3B5IHRvIGEgbmV3IHNrX2J1ZmYgd2l0aCBtb3JlIHRhaWxyb29tICovXFxuIFxcdFxcdFxcdG5zID0gZGV2X2FsbG9jX3NrYihza2ItXFx1MDAzZWxlbiArIDEyOCk7XFxuIFxcdFxcdFxcdGlmICghbnMpIHtcXG4tXFx0XFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogbm8gbWVtb3J5IFxcXCJcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIihWSiBkZWNvbXApXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IG5vIG1lbW9yeSAoVkogZGVjb21wKVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHNrYl9yZXNlcnZlKG5zLCAyKTtcXG5AQCAtMjQ0NSw3ICsyNDQ2LDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0XFx0bGVuID0gc2xoY191bmNvbXByZXNzKHBwcC1cXHUwMDNldmosIHNrYi1cXHUwMDNlZGF0YSArIDIsIHNrYi1cXHUwMDNlbGVuIC0gMik7XFxuIFxcdFxcdGlmIChsZW4gXFx1MDAzYz0gMCkge1xcbi1cXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgXFxcIlBQUDogVkogZGVjb21wcmVzc2lvbiBlcnJvclxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuQEAgLTI0NjgsNyArMjQ2OSw3IEBAIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0Z290byBlcnI7XFxuIFxcbiBcXHRcXHRpZiAoc2xoY19yZW1lbWJlcihwcHAtXFx1MDAzZXZqLCBza2ItXFx1MDAzZWRhdGEgKyAyLCBza2ItXFx1MDAzZWxlbiAtIDIpIFxcdTAwM2M9IDApIHtcXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcIlBQUDogVkogdW5jb21wcmVzc2VkIGVycm9yXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihkZXYsIFxcXCJQUFA6IFZKIHVuY29tcHJlc3NlZCBlcnJvclxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHByb3RvID0gUFBQX0lQO1xcbkBAIC0yNDc5LDcgKzI0ODAsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbi1cXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKHBwcC1cXHUwMDNlZGV2LCBza2ItXFx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xcbitcXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgc2tiLVxcdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcXG4gXFxuIFxcdG5waSA9IHByb3RvX3RvX25waW5kZXgocHJvdG8pO1xcbiBcXHRpZiAobnBpIFxcdTAwM2MgMCkge1xcbkBAIC0yNTA2LDcgKzI1MDcsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGlmIChwcHAtXFx1MDAzZXBhc3NfZmlsdGVyIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdCAgICBicGZfcHJvZ19ydW4ocHBwLVxcdTAwM2VwYXNzX2ZpbHRlciwgc2tiKSA9PSAwKSB7XFxuIFxcdFxcdFxcdFxcdGlmIChSRUFEX09OQ0UocHBwLVxcdTAwM2VkZWJ1ZykgXFx1MDAyNiAxKVxcbi1cXHRcXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIlBQUDogaW5ib3VuZCBmcmFtZSBcXFwiXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJub3QgcGFzc2VkXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuQEAgLTI1MjAsMTcgKzI1MjEsMTcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cXG4gXFx0XFx0XFx0V1JJVEVfT05DRShwcHAtXFx1MDAzZWxhc3RfcmVjdiwgamlmZmllcyk7XFxuIFxcbi1cXHRcXHRpZiAoKHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxcbitcXHRcXHRpZiAoKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApID09IDAgfHxcXG4gXFx0XFx0ICAgIFJFQURfT05DRShwcHAtXFx1MDAzZW5wbW9kZVtucGldKSAhPSBOUE1PREVfUEFTUykge1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0LyogY2hvcCBvZmYgcHJvdG9jb2wgKi9cXG4gXFx0XFx0XFx0c2tiX3B1bGxfcmNzdW0oc2tiLCAyKTtcXG4tXFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBwcHAtXFx1MDAzZWRldjtcXG4rXFx0XFx0XFx0c2tiLVxcdTAwM2VkZXYgPSBkZXY7XFxuIFxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhucGluZGV4X3RvX2V0aGVydHlwZVtucGldKTtcXG4gXFx0XFx0XFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcXG4gXFx0XFx0XFx0c2tiX3NjcnViX3BhY2tldChza2IsICFuZXRfZXEocHBwLVxcdTAwM2VwcHBfbmV0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZXZfbmV0KHBwcC1cXHUwMDNlZGV2KSkpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZXZfbmV0KGRldikpKTtcXG4gXFx0XFx0XFx0bmV0aWZfcngoc2tiKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTI1NjgsOCArMjU2OSw4IEBAIHBwcF9kZWNvbXByZXNzX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFxuIFxcdFxcdG5zID0gZGV2X2FsbG9jX3NrYihvYnVmZl9zaXplKTtcXG4gXFx0XFx0aWYgKCFucykge1xcbi1cXHRcXHRcXHRuZXRkZXZfZXJyKHBwcC1cXHUwMDNlZGV2LCBcXFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IFxcXCJcXG4tXFx0XFx0XFx0XFx0ICAgXFxcIm5vIG1lbW9yeVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIobmV0ZGV2X2Zyb21fcHJpdihwcHApLFxcbitcXHRcXHRcXHRcXHQgICBcXFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IG5vIG1lbW9yeVxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdGdvdG8gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdC8qIHRoZSBkZWNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyB0aGUgQS9DIGJ5dGVzIGluIHRoZSBoZHIgKi9cXG5AQCAtMjYxNyw2ICsyNjE4LDcgQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfcmVjZWl2ZV9tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjaGFubmVsICpwY2gpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0dTMyIG1hc2ssIHNlcTtcXG4gXFx0c3RydWN0IGNoYW5uZWwgKmNoO1xcbiBcXHRpbnQgbXBoZHJsZW4gPSAocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX01QX1NIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjtcXG5AQCAtMjY2MSw3ICsyNjYzLDcgQEAgcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxcbiBcXHQgKi9cXG4gXFx0aWYgKHNlcV9iZWZvcmUoc2VxLCBwcHAtXFx1MDAzZW5leHRzZXEpKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCByeF9kcm9wcGVkKTtcXG4rXFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIHJ4X2Ryb3BwZWQpO1xcbiBcXHRcXHRwcHBfcmVjZWl2ZV9lcnJvcihwcHApO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMjY5Nyw3ICsyNjk5LDcgQEAgcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxcbiBcXHRcXHRpZiAocHNrYl9tYXlfcHVsbChza2IsIDIpKVxcbiBcXHRcXHRcXHRwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShwcHAsIHNrYik7XFxuIFxcdFxcdGVsc2Uge1xcbi1cXHRcXHRcXHRERVZfU1RBVFNfSU5DKHBwcC1cXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcXG4rXFx0XFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcXG4gXFx0XFx0fVxcbkBAIC0yNzM5LDYgKzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gc3RhdGljIHN0cnVjdCBza19idWZmICpcXG4gcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHR1MzIgc2VxID0gcHBwLVxcdTAwM2VuZXh0c2VxO1xcbiBcXHR1MzIgbWluc2VxID0gcHBwLVxcdTAwM2VtaW5zZXE7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QgPSBcXHUwMDI2cHBwLVxcdTAwM2VtcnE7XFxuQEAgLTI3NTUsOCArMjc1OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdGFnYWluOlxcbiBcXHRcXHRpZiAoc2VxX2JlZm9yZShQUFBfTVBfQ0IocCktXFx1MDAzZXNlcXVlbmNlLCBzZXEpKSB7XFxuIFxcdFxcdFxcdC8qIHRoaXMgY2FuJ3QgaGFwcGVuLCBhbnl3YXkgaWdub3JlIHRoZSBza2IgKi9cXG4tXFx0XFx0XFx0bmV0ZGV2X2VycihwcHAtXFx1MDAzZWRldiwgXFxcInBwcF9tcF9yZWNvbnN0cnVjdCBiYWQgXFxcIlxcbi1cXHRcXHRcXHRcXHQgICBcXFwic2VxICV1IFxcdTAwM2MgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwX21wX3JlY29uc3RydWN0IGJhZCBzZXEgJXUgXFx1MDAzYyAldVxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ICAgUFBQX01QX0NCKHApLVxcdTAwM2VzZXF1ZW5jZSwgc2VxKTtcXG4gXFx0XFx0XFx0X19za2JfdW5saW5rKHAsIGxpc3QpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2IocCk7XFxuQEAgLTI3NzUsNyArMjc3Nyw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdFxcdFxcdFxcdG1pbnNlcSArIDE6IFBQUF9NUF9DQihwKS1cXHUwMDNlc2VxdWVuY2U7XFxuIFxcbiBcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJsb3N0IGZyYWcgJXUuLiV1XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBvbGRzZXEsIHNlcS0xKTtcXG4gXFxuQEAgLTI4MDMsOCArMjgwNSw4IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdFxcdGlmIChsb3N0ID09IDAgXFx1MDAyNlxcdTAwMjYgKFBQUF9NUF9DQihwKS1cXHUwMDNlQkViaXRzIFxcdTAwMjYgRSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIChQUFBfTVBfQ0IoaGVhZCktXFx1MDAzZUJFYml0cyBcXHUwMDI2IEIpKSB7XFxuIFxcdFxcdFxcdGlmIChsZW4gXFx1MDAzZSBwcHAtXFx1MDAzZW1ycnUgKyAyKSB7XFxuLVxcdFxcdFxcdFxcdERFVl9TVEFUU19JTkMocHBwLVxcdTAwM2VkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xcbi1cXHRcXHRcXHRcXHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRERVZfU1RBVFNfSU5DKGRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XFxuK1xcdFxcdFxcdFxcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiUFBQOiByZWNvbnN0cnVjdGVkIHBhY2tldFxcXCJcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgXFxcIiBpcyB0b28gbG9uZyAoJWQpXFxcXG5cXFwiLCBsZW4pO1xcbiBcXHRcXHRcXHR9IGVsc2Uge1xcbkBAIC0yODI0LDcgKzI4MjYsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxcbiBcXG4gXFx0XFx0XFx0c2tiX3F1ZXVlX3JldmVyc2Vfd2Fsa19mcm9tX3NhZmUobGlzdCwgcCwgdG1wMikge1xcbiBcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJkaXNjYXJkaW5nIGZyYWcgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFBQUF9NUF9DQihwKS1cXHUwMDNlc2VxdWVuY2UpO1xcbiBcXHRcXHRcXHRcXHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XFxuQEAgLTI4NDYsNyArMjg0OCw3IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXFxuIFxcdFxcdFxcdFxcdGlmIChwID09IGhlYWQpXFxuIFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRcXHRpZiAoUkVBRF9PTkNFKHBwcC1cXHUwMDNlZGVidWcpIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJkaXNjYXJkaW5nIGZyYWcgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFBQUF9NUF9DQihwKS1cXHUwMDNlc2VxdWVuY2UpO1xcbiBcXHRcXHRcXHRcXHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XFxuQEAgLTI4NTQsMTEgKzI4NTYsMTEgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0XFx0aWYgKFJFQURfT05DRShwcHAtXFx1MDAzZWRlYnVnKSBcXHUwMDI2IDEpXFxuLVxcdFxcdFxcdFxcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwiICBtaXNzZWQgcGt0cyAldS4uJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHBwcC1cXHUwMDNlbmV4dHNlcSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgUFBQX01QX0NCKGhlYWQpLVxcdTAwM2VzZXF1ZW5jZS0xKTtcXG4tXFx0XFx0XFx0REVWX1NUQVRTX0lOQyhwcHAtXFx1MDAzZWRldiwgcnhfZHJvcHBlZCk7XFxuK1xcdFxcdFxcdERFVl9TVEFUU19JTkMoZGV2LCByeF9kcm9wcGVkKTtcXG4gXFx0XFx0XFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMjk3Nyw4ICsyOTc5LDggQEAgY2hhciAqcHBwX2Rldl9uYW1lKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbilcXG4gXFxuIFxcdGlmIChwY2gpIHtcXG4gXFx0XFx0cHBwID0gcmN1X2RlcmVmZXJlbmNlKHBjaC1cXHUwMDNlcHBwKTtcXG4tXFx0XFx0aWYgKHBwcCBcXHUwMDI2XFx1MDAyNiBwcHAtXFx1MDAzZWRldilcXG4tXFx0XFx0XFx0bmFtZSA9IHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VuYW1lO1xcbitcXHRcXHRpZiAocHBwKVxcbitcXHRcXHRcXHRuYW1lID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApLVxcdTAwM2VuYW1lO1xcbiBcXHR9XFxuIFxcdHJldHVybiBuYW1lO1xcbiB9XFxuQEAgLTMzMDksMTIgKzMzMTEsMTMgQEAgZmluZF9jb21wcmVzc29yKGludCB0eXBlKVxcbiBzdGF0aWMgdm9pZFxcbiBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3RydWN0IHNsY29tcHJlc3MgKnZqID0gcHBwLVxcdTAwM2V2ajtcXG4gXFx0aW50IGNwdTtcXG4gXFxuIFxcdG1lbXNldChzdCwgMCwgc2l6ZW9mKCpzdCkpO1xcbiBcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuLVxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpwID0gcGVyX2NwdV9wdHIocHBwLVxcdTAwM2VkZXYtXFx1MDAzZXRzdGF0cywgY3B1KTtcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnAgPSBwZXJfY3B1X3B0cihkZXYtXFx1MDAzZXRzdGF0cywgY3B1KTtcXG4gXFx0XFx0dTY0IHJ4X3BhY2tldHMsIHJ4X2J5dGVzLCB0eF9wYWNrZXRzLCB0eF9ieXRlcztcXG4gXFxuIFxcdFxcdHJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcXHUwMDI2cC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuQEAgLTMzMjcsOCArMzMzMCw4IEBAIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdClcXG4gXFx0XFx0c3QtXFx1MDAzZXAucHBwX29wYWNrZXRzICs9IHR4X3BhY2tldHM7XFxuIFxcdFxcdHN0LVxcdTAwM2VwLnBwcF9vYnl0ZXMgKz0gdHhfYnl0ZXM7XFxuIFxcdH1cXG4tXFx0c3QtXFx1MDAzZXAucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChwcHAtXFx1MDAzZWRldiwgcnhfZXJyb3JzKTtcXG4tXFx0c3QtXFx1MDAzZXAucHBwX29lcnJvcnMgPSBERVZfU1RBVFNfUkVBRChwcHAtXFx1MDAzZWRldiwgdHhfZXJyb3JzKTtcXG4rXFx0c3QtXFx1MDAzZXAucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHJ4X2Vycm9ycyk7XFxuK1xcdHN0LVxcdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQoZGV2LCB0eF9lcnJvcnMpO1xcbiBcXHRpZiAoIXZqKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdHN0LVxcdTAwM2V2ai52anNfcGFja2V0cyA9IHZqLVxcdTAwM2VzbHNfb19jb21wcmVzc2VkICsgdmotXFx1MDAzZXNsc19vX3VuY29tcHJlc3NlZDtcXG5AQCAtMzQwOCw2ICszNDExLDggQEAgaW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZClcXG4gICovXFxuIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4rXFxuIFxcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUucmVmY250KSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG5AQCAtMzQxNSw3ICszNDIwLDcgQEAgc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcXG4gXFxuIFxcdGlmICghcHBwLVxcdTAwM2VmaWxlLmRlYWQgfHwgcHBwLVxcdTAwM2VuX2NoYW5uZWxzKSB7XFxuIFxcdFxcdC8qIFxcXCJjYW4ndCBoYXBwZW5cXFwiICovXFxuLVxcdFxcdG5ldGRldl9lcnIocHBwLVxcdTAwM2VkZXYsIFxcXCJwcHA6IGRlc3Ryb3lpbmcgcHBwIHN0cnVjdCAlcCBcXFwiXFxuK1xcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgXFxcIlxcbiBcXHRcXHRcXHQgICBcXFwiYnV0IGRlYWQ9JWQgbl9jaGFubmVscz0lZCAhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICBwcHAsIHBwcC1cXHUwMDNlZmlsZS5kZWFkLCBwcHAtXFx1MDAzZW5fY2hhbm5lbHMpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTM0NDUsNyArMzQ1MCw3IEBAIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXFxuIFxcbiBcXHRmcmVlX3BlcmNwdShwcHAtXFx1MDAzZXhtaXRfcmVjdXJzaW9uKTtcXG4gXFxuLVxcdGZyZWVfbmV0ZGV2KHBwcC1cXHUwMDNlZGV2KTtcXG4rXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMzQ5Miw2ICszNDk3LDcgQEAgcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KVxcbiBzdGF0aWMgaW50XFxuIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXFxuIHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IHBwcCAqcHBwO1xcbiBcXHRzdHJ1Y3QgcHBwX25ldCAqcG47XFxuIFxcdGludCByZXQgPSAtRU5YSU87XFxuQEAgLTM1MDMsNiArMzUwOSw3IEBAIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXFxuIFxcdHBwcCA9IHBwcF9maW5kX3VuaXQocG4sIHVuaXQpO1xcbiBcXHRpZiAoIXBwcClcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdGRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZwY2gtXFx1MDAzZXVwbCk7XFxuIFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdGlmIChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBjaC1cXHUwMDNlcHBwLCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNnBjaC1cXHUwMDNldXBsKSkgfHxcXG5AQCAtMzUxOSwxNSArMzUyNiwxNSBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxcbiBcXHRcXHRnb3RvIG91dGw7XFxuIFxcdH1cXG4gXFx0aWYgKHBjaC1cXHUwMDNlY2hhbi1cXHUwMDNlZGlyZWN0X3htaXQpXFxuLVxcdFxcdHBwcC1cXHUwMDNlZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRwcHAtXFx1MDAzZWRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX05PX1FVRVVFO1xcbitcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgXFx1MDAyNj0gfklGRl9OT19RVUVVRTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnBjaC1cXHUwMDNlZG93bmwpO1xcbiBcXHRpZiAocGNoLVxcdTAwM2VmaWxlLmhkcmxlbiBcXHUwMDNlIHBwcC1cXHUwMDNlZmlsZS5oZHJsZW4pXFxuIFxcdFxcdHBwcC1cXHUwMDNlZmlsZS5oZHJsZW4gPSBwY2gtXFx1MDAzZWZpbGUuaGRybGVuO1xcbiBcXHRoZHJsZW4gPSBwY2gtXFx1MDAzZWZpbGUuaGRybGVuICsgMjtcXHQvKiBmb3IgcHJvdG9jb2wgYnl0ZXMgKi9cXG4tXFx0aWYgKGhkcmxlbiBcXHUwMDNlIHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4pXFxuLVxcdFxcdHBwcC1cXHUwMDNlZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBoZHJsZW47XFxuK1xcdGlmIChoZHJsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbilcXG4rXFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBoZHJsZW47XFxuIFxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZwY2gtXFx1MDAzZWNsaXN0LCBcXHUwMDI2cHBwLVxcdTAwM2VjaGFubmVscyk7XFxuIFxcdCsrcHBwLVxcdTAwM2VuX2NoYW5uZWxzO1xcbiBcXHRyY3VfYXNzaWduX3BvaW50ZXIocGNoLVxcdTAwM2VwcHAsIHBwcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjM3LjQzMTg5ODk2OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQzNTA5Njc4MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmEyZWM3YTNkNDEzY2I1YzBkMjBlN2VlNDI1ZjA2OTNiMjVhZjAzMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMDA6MDM6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAwOGJiODk3NjU0ODdmLi5lMTAxMzYyMWViMWQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtMTM5LDcgKzEzOSw2IEBAIHN0cnVjdCBwcHAge1xuIFx0dm9pZFx0XHQqcmNfc3RhdGU7XHQvKiBpdHMgaW50ZXJuYWwgc3RhdGUgOTggKi9cbiBcdHVuc2lnbmVkIGxvbmdcdGxhc3RfeG1pdDtcdC8qIGppZmZpZXMgd2hlbiBsYXN0IHBrdCBzZW50IDljICovXG4gXHR1bnNpZ25lZCBsb25nXHRsYXN0X3JlY3Y7XHQvKiBqaWZmaWVzIHdoZW4gbGFzdCBwa3QgcmN2ZCBhMCAqL1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcdFx0LyogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIGE0ICovXG4gXHRpbnRcdFx0Y2xvc2luZztcdC8qIGlzIGRldmljZSBjbG9zaW5nIGRvd24/IGE4ICovXG4gI2lmZGVmIENPTkZJR19QUFBfTVVMVElMSU5LXG4gXHRpbnRcdFx0bnhjaGFuO1x0XHQvKiBuZXh0IGNoYW5uZWwgdG8gc2VuZCBzb21ldGhpbmcgb24gKi9cbkBAIC00MTIsNyArNDExLDcgQEAgc3RhdGljIGludCBwcHBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcbiBcdFx0XHRydG5sX2xvY2soKTtcbiBcdFx0XHRpZiAoZmlsZSA9PSBwcHAtXHUwMDNlb3duZXIpXG4tXHRcdFx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbitcdFx0XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKG5ldGRldl9mcm9tX3ByaXYocHBwKSk7XG4gXHRcdFx0cnRubF91bmxvY2soKTtcbiBcdFx0XHRwcHBfcmVsZWFzZV9pbnRlcmZhY2UocHBwKTtcbiBcdFx0XHRicmVhaztcbkBAIC05MjEsNyArOTIwLDcgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRXUklURV9PTkNFKHBwcC1cdTAwM2VucG1vZGVbaV0sIG5waS5tb2RlKTtcbiBcdFx0XHQvKiB3ZSBtYXkgYmUgYWJsZSB0byB0cmFuc21pdCBtb3JlIHBhY2tldHMgbm93ICg/PykgKi9cbi1cdFx0XHRuZXRpZl93YWtlX3F1ZXVlKHBwcC1cdTAwM2VkZXYpO1xuK1x0XHRcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiBcdFx0fVxuIFx0XHRlcnIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0xMTQ3LDcgKzExNDYsNyBAQCBzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcF9leGl0X3J0bmxfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbiBcdGludCBpZDtcbiBcbiBcdGlkcl9mb3JfZWFjaF9lbnRyeShcdTAwMjZwbi1cdTAwM2V1bml0c19pZHIsIHBwcCwgaWQpXG4tXHRcdHBwcF9ubF9kZWxsaW5rKHBwcC1cdTAwM2VkZXYsIGRldl90b19raWxsKTtcbitcdFx0cHBwX25sX2RlbGxpbmsobmV0ZGV2X2Zyb21fcHJpdihwcHApLCBkZXZfdG9fa2lsbCk7XG4gfVxuIFxuIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgcHBwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbkBAIC0xMTcwLDYgKzExNjksNyBAQCBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcF9uZXRfb3BzID0ge1xuIFxuIHN0YXRpYyBpbnQgcHBwX3VuaXRfcmVnaXN0ZXIoc3RydWN0IHBwcCAqcHBwLCBpbnQgdW5pdCwgYm9vbCBpZm5hbWVfaXNfc2V0KVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3QgcHBwX25ldCAqcG4gPSBwcHBfcGVybmV0KHBwcC1cdTAwM2VwcHBfbmV0KTtcbiBcdGludCByZXQ7XG4gXG5AQCAtMTE4MSw4ICsxMTgxLDggQEAgc3RhdGljIGludCBwcHBfdW5pdF9yZWdpc3RlcihzdHJ1Y3QgcHBwICpwcHAsIGludCB1bml0LCBib29sIGlmbmFtZV9pc19zZXQpXG4gXHRcdFx0Z290byBlcnI7XG4gXHRcdGlmICghaWZuYW1lX2lzX3NldCkge1xuIFx0XHRcdHdoaWxlICgxKSB7XG4tXHRcdFx0XHRzbnByaW50ZihwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcInBwcCVpXCIsIHJldCk7XG4tXHRcdFx0XHRpZiAoIW5ldGRldl9uYW1lX2luX3VzZShwcHAtXHUwMDNlcHBwX25ldCwgcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lKSlcbitcdFx0XHRcdHNucHJpbnRmKGRldi1cdTAwM2VuYW1lLCBJRk5BTVNJWiwgXCJwcHAlaVwiLCByZXQpO1xuK1x0XHRcdFx0aWYgKCFuZXRkZXZfbmFtZV9pbl91c2UocHBwLVx1MDAzZXBwcF9uZXQsIGRldi1cdTAwM2VuYW1lKSlcbiBcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHR1bml0X3B1dChcdTAwMjZwbi1cdTAwM2V1bml0c19pZHIsIHJldCk7XG4gXHRcdFx0XHRyZXQgPSB1bml0X2dldChcdTAwMjZwbi1cdTAwM2V1bml0c19pZHIsIHBwcCwgcmV0ICsgMSk7XG5AQCAtMTIxMCwxMSArMTIxMCwxMSBAQCBzdGF0aWMgaW50IHBwcF91bml0X3JlZ2lzdGVyKHN0cnVjdCBwcHAgKnBwcCwgaW50IHVuaXQsIGJvb2wgaWZuYW1lX2lzX3NldClcbiBcdHBwcC1cdTAwM2VmaWxlLmluZGV4ID0gcmV0O1xuIFxuIFx0aWYgKCFpZm5hbWVfaXNfc2V0KVxuLVx0XHRzbnByaW50ZihwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcInBwcCVpXCIsIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbitcdFx0c25wcmludGYoZGV2LVx1MDAzZW5hbWUsIElGTkFNU0laLCBcInBwcCVpXCIsIHBwcC1cdTAwM2VmaWxlLmluZGV4KTtcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwbi1cdTAwM2VhbGxfcHBwX211dGV4KTtcbiBcbi1cdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShwcHAtXHUwMDNlZGV2KTtcbitcdHJldCA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfdW5pdDtcbiBcbkBAIC0xMjM5LDcgKzEyMzksNiBAQCBzdGF0aWMgaW50IHBwcF9kZXZfY29uZmlndXJlKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpbnQgZXJyO1xuIFx0aW50IGNwdTtcbiBcbi1cdHBwcC1cdTAwM2VkZXYgPSBkZXY7XG4gXHRwcHAtXHUwMDNlcHBwX25ldCA9IHNyY19uZXQ7XG4gXHRwcHAtXHUwMDNlbXJ1ID0gUFBQX01SVTtcbiBcdHBwcC1cdTAwM2Vvd25lciA9IGNvbmYtXHUwMDNlZmlsZTtcbkBAIC0xNjU4LDcgKzE2NTcsNyBAQCBzdGF0aWMgdm9pZCBwcHBfeG1pdF9mbHVzaChzdHJ1Y3QgcHBwICpwcHApXG4gXHQvKiBJZiB0aGVyZSdzIG5vIHdvcmsgbGVmdCB0byBkbywgdGVsbCB0aGUgY29yZSBuZXQgY29kZSB0aGF0IHdlIGNhblxuIFx0ICogYWNjZXB0IHNvbWUgbW9yZS5cbiBcdCAqL1xuLVx0bmV0aWZfd2FrZV9xdWV1ZShwcHAtXHUwMDNlZGV2KTtcbitcdG5ldGlmX3dha2VfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19wcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbkBAIC0xNjc0LDcgKzE2NzMsNyBAQCBzdGF0aWMgdm9pZCBfX3BwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKGxpa2VseShza2JfcXVldWVfZW1wdHkoXHUwMDI2cHBwLVx1MDAzZWZpbGUueHEpKSkge1xuIFx0XHRpZiAodW5saWtlbHkoIXBwcF9wdXNoKHBwcCwgc2tiKSkpIHtcbiBcdFx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZwcHAtXHUwMDNlZmlsZS54cSwgc2tiKTtcbi1cdFx0XHRuZXRpZl9zdG9wX3F1ZXVlKHBwcC1cdTAwM2VkZXYpO1xuK1x0XHRcdG5ldGlmX3N0b3BfcXVldWUobmV0ZGV2X2Zyb21fcHJpdihwcHApKTtcbiBcdFx0fVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xNzEyLDE3ICsxNzExLDE4IEBAIHN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0a2ZyZWVfc2tiKHNrYik7XG4gXG4gXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuLVx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwicmVjdXJzaW9uIGRldGVjdGVkXFxuXCIpO1xuK1x0XHRuZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgXCJyZWN1cnNpb24gZGV0ZWN0ZWRcXG5cIik7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbiBcdGludCBsZW47XG4tXHRpbnQgbmV3X3NrYl9zaXplID0gcHBwLVx1MDAzZWRldi1cdTAwM2VtdHUgK1xuLVx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuLVx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBwcHAtXHUwMDNlZGV2LVx1MDAzZW10dSArXG4rXHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSArXG4rXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbitcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSArXG4gXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICsgUFBQX0hEUkxFTjtcbiBcbiBcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG5AQCAtMTczMSwxMiArMTczMSwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdG5ld19za2IgPSBhbGxvY19za2IobmV3X3NrYl9zaXplLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghbmV3X3NrYikge1xuIFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuLVx0XHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCJQUFA6IG5vIG1lbW9yeSAoY29tcCBwa3QpXFxuXCIpO1xuK1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cIik7XG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuLVx0aWYgKHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuLVx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLFxuLVx0XHRcdCAgICBwcHAtXHUwMDNlZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xuK1x0aWYgKGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gXHUwMDNlIFBQUF9IRFJMRU4pXG4rXHRcdHNrYl9yZXNlcnZlKG5ld19za2IsIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTtcbiBcbiBcdC8qIGNvbXByZXNzb3Igc3RpbGwgZXhwZWN0cyBBL0MgYnl0ZXMgaW4gaGRyICovXG4gXHRsZW4gPSBwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcHJlc3MocHBwLVx1MDAzZXhjX3N0YXRlLCBza2ItXHUwMDNlZGF0YSAtIDIsXG5AQCAtMTc2MSw3ICsxNzYwLDcgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCAqIHRoZSBzYW1lIG51bWJlci5cbiBcdFx0ICovXG4gXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcInBwcDogY29tcHJlc3NvciBkcm9wcGVkIHBrdFxcblwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJwcHA6IGNvbXByZXNzb3IgZHJvcHBlZCBwa3RcXG5cIik7XG4gXHRcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xuIFx0XHRuZXdfc2tiID0gTlVMTDtcbiBcdH1cbkBAIC0xNzc3LDEzICsxNzc2LDE0IEBAIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyBpbnRcbiBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4ge1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjtcbiBcdGludCBwcm90byA9IFBQUF9QUk9UTyhza2IpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4gXHRpbnQgbGVuO1xuIFx0dW5zaWduZWQgY2hhciAqY3A7XG4gXG4tXHRza2ItXHUwMDNlZGV2ID0gcHBwLVx1MDAzZWRldjtcbitcdHNrYi1cdTAwM2VkZXYgPSBkZXY7XG4gXG4gXHRpZiAocHJvdG8gXHUwMDNjIDB4ODAwMCkge1xuICNpZmRlZiBDT05GSUdfUFBQX0ZJTFRFUlxuQEAgLTE3OTQsNyArMTc5NCw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiBcdFx0aWYgKHBwcC1cdTAwM2VwYXNzX2ZpbHRlciBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGJwZl9wcm9nX3J1bihwcHAtXHUwMDNlcGFzc19maWx0ZXIsIHNrYikgPT0gMCkge1xuIFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcIlBQUDogb3V0Ym91bmQgZnJhbWUgXCJcbiBcdFx0XHRcdFx0ICAgICAgXCJub3QgcGFzc2VkXFxuXCIpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuQEAgLTE4MTEsNyArMTgxMSw3IEBAIHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcbiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi9cbiBcdH1cbiBcbi1cdGRldl9zd19uZXRzdGF0c190eF9hZGQocHBwLVx1MDAzZWRldiwgMSwgc2tiLVx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xuK1x0ZGV2X3N3X25ldHN0YXRzX3R4X2FkZChkZXYsIDEsIHNrYi1cdTAwM2VsZW4gLSBQUFBfUFJPVE9fTEVOKTtcbiBcbiBcdHN3aXRjaCAocHJvdG8pIHtcbiBcdGNhc2UgUFBQX0lQOlxuQEAgLTE4MjIsMTMgKzE4MjIsMTMgQEAgcHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxuIFx0XHRcdGdvdG8gZHJvcDtcbiBcbiBcdFx0LyogdHJ5IHRvIGRvIFZKIFRDUCBoZWFkZXIgY29tcHJlc3Npb24gKi9cbi1cdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihza2ItXHUwMDNlbGVuICsgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyLFxuK1x0XHRuZXdfc2tiID0gYWxsb2Nfc2tiKHNrYi1cdTAwM2VsZW4gKyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gMixcbiBcdFx0XHRcdCAgICBHRlBfQVRPTUlDKTtcbiBcdFx0aWYgKCFuZXdfc2tiKSB7XG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcIlBQUDogbm8gbWVtb3J5IChWSiBjb21wIHBrdClcXG5cIik7XG4rXHRcdFx0bmV0ZGV2X2VycihkZXYsIFwiUFBQOiBubyBtZW1vcnkgKFZKIGNvbXAgcGt0KVxcblwiKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbi1cdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSAyKTtcbitcdFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIDIpO1xuIFx0XHRjcCA9IHNrYi1cdTAwM2VkYXRhICsgMjtcbiBcdFx0bGVuID0gc2xoY19jb21wcmVzcyhwcHAtXHUwMDNldmosIGNwLCBza2ItXHUwMDNlbGVuIC0gMixcbiBcdFx0XHRcdCAgICBuZXdfc2tiLVx1MDAzZWRhdGEgKyAyLCBcdTAwMjZjcCxcbkBAIC0xODY0LDcgKzE4NjQsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXHQgICAgcHJvdG8gIT0gUFBQX0xDUCBcdTAwMjZcdTAwMjYgcHJvdG8gIT0gUFBQX0NDUCkge1xuIFx0XHRpZiAoIShwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NDUF9VUCkgXHUwMDI2XHUwMDI2IChwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX01VU1RfQ09NUCkpIHtcbiBcdFx0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuLVx0XHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LFxuK1x0XHRcdFx0bmV0ZGV2X2VycihkZXYsXG4gXHRcdFx0XHRcdCAgIFwicHBwOiBjb21wcmVzc2lvbiByZXF1aXJlZCBidXQgXCJcbiBcdFx0XHRcdFx0ICAgXCJkb3duIC0gcGt0IGRyb3BwZWQuXFxuXCIpO1xuIFx0XHRcdGdvdG8gZHJvcDtcbkBAIC0xODkyLDcgKzE4OTIsNyBAQCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4gXG4gIGRyb3A6XG4gXHRrZnJlZV9za2Ioc2tiKTtcbi1cdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbitcdERFVl9TVEFUU19JTkMoZGV2LCB0eF9lcnJvcnMpO1xuIFx0cmV0dXJuIDE7XG4gfVxuIFxuQEAgLTE5NjIsNiArMTk2Miw3IEBAIE1PRFVMRV9QQVJNX0RFU0MobXBfcHJvdG9jb2xfY29tcHJlc3MsXG4gICovXG4gc3RhdGljIGludCBwcHBfbXBfZXhwbG9kZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdGludCBsZW4sIHRvdGxlbjtcbiBcdGludCBpLCBiaXRzLCBoZHJsZW4sIG10dTtcbiBcdGludCBmbGVuO1xuQEAgLTIxNTgsOCArMjE1OSw4IEBAIHN0YXRpYyBpbnQgcHBwX21wX2V4cGxvZGUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbiAgZXJyX2xpbmVhcml6ZTpcbiBcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXG5cIik7XG4tXHRERVZfU1RBVFNfSU5DKHBwcC1cdTAwM2VkZXYsIHR4X2Vycm9ycyk7XG4rXHRcdG5ldGRldl9lcnIoZGV2LCBcIlBQUDogbm8gbWVtb3J5IChmcmFnbWVudClcXG5cIik7XG4rXHRERVZfU1RBVFNfSU5DKGRldiwgdHhfZXJyb3JzKTtcbiBcdCsrcHBwLVx1MDAzZW54c2VxO1xuIFx0cmV0dXJuIDE7XHQvKiBhYmFuZG9uIHRoZSBmcmFtZSAqL1xuIH1cbkBAIC0yMzMyLDcgKzIzMzMsNyBAQCBwcHBfaW5wdXQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKCFwcHBfZGVjb21wcmVzc19wcm90byhza2IpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRpZiAocHBwKSB7XG4tXHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbitcdFx0XHRERVZfU1RBVFNfSU5DKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgcnhfbGVuZ3RoX2Vycm9ycyk7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuIFx0XHRnb3RvIGRvbmU7XG5AQCAtMjM5NCw3ICsyMzk1LDcgQEAgcHBwX3JlY2VpdmVfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIHN0YXRpYyB2b2lkXG4gcHBwX3JlY2VpdmVfZXJyb3Ioc3RydWN0IHBwcCAqcHBwKVxuIHtcbi1cdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgcnhfZXJyb3JzKTtcbitcdERFVl9TVEFUU19JTkMobmV0ZGV2X2Zyb21fcHJpdihwcHApLCByeF9lcnJvcnMpO1xuIFx0aWYgKHBwcC1cdTAwM2V2ailcbiBcdFx0c2xoY190b3NzKHBwcC1cdTAwM2V2aik7XG4gfVxuQEAgLTI0MDIsNiArMjQwMyw3IEBAIHBwcF9yZWNlaXZlX2Vycm9yKHN0cnVjdCBwcHAgKnBwcClcbiBzdGF0aWMgdm9pZFxuIHBwcF9yZWNlaXZlX25vbm1wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5zO1xuIFx0aW50IHByb3RvLCBsZW4sIG5waTtcbiBcbkBAIC0yNDMxLDggKzI0MzMsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0LyogY29weSB0byBhIG5ldyBza19idWZmIHdpdGggbW9yZSB0YWlscm9vbSAqL1xuIFx0XHRcdG5zID0gZGV2X2FsbG9jX3NrYihza2ItXHUwMDNlbGVuICsgMTI4KTtcbiBcdFx0XHRpZiAoIW5zKSB7XG4tXHRcdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwiUFBQOiBubyBtZW1vcnkgXCJcbi1cdFx0XHRcdFx0ICAgXCIoVkogZGVjb21wKVxcblwiKTtcbitcdFx0XHRcdG5ldGRldl9lcnIoZGV2LCBcIlBQUDogbm8gbWVtb3J5IChWSiBkZWNvbXApXFxuXCIpO1xuIFx0XHRcdFx0Z290byBlcnI7XG4gXHRcdFx0fVxuIFx0XHRcdHNrYl9yZXNlcnZlKG5zLCAyKTtcbkBAIC0yNDQ1LDcgKzI0NDYsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHRcdGxlbiA9IHNsaGNfdW5jb21wcmVzcyhwcHAtXHUwMDNldmosIHNrYi1cdTAwM2VkYXRhICsgMiwgc2tiLVx1MDAzZWxlbiAtIDIpO1xuIFx0XHRpZiAobGVuIFx1MDAzYz0gMCkge1xuLVx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdCAgICAgIFwiUFBQOiBWSiBkZWNvbXByZXNzaW9uIGVycm9yXFxuXCIpO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG5AQCAtMjQ2OCw3ICsyNDY5LDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGdvdG8gZXJyO1xuIFxuIFx0XHRpZiAoc2xoY19yZW1lbWJlcihwcHAtXHUwMDNldmosIHNrYi1cdTAwM2VkYXRhICsgMiwgc2tiLVx1MDAzZWxlbiAtIDIpIFx1MDAzYz0gMCkge1xuLVx0XHRcdG5ldGRldl9lcnIocHBwLVx1MDAzZWRldiwgXCJQUFA6IFZKIHVuY29tcHJlc3NlZCBlcnJvclxcblwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCJQUFA6IFZKIHVuY29tcHJlc3NlZCBlcnJvclxcblwiKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuIFx0XHRwcm90byA9IFBQUF9JUDtcbkBAIC0yNDc5LDcgKzI0ODAsNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0ZGV2X3N3X25ldHN0YXRzX3J4X2FkZChwcHAtXHUwMDNlZGV2LCBza2ItXHUwMDNlbGVuIC0gUFBQX1BST1RPX0xFTik7XG4rXHRkZXZfc3dfbmV0c3RhdHNfcnhfYWRkKGRldiwgc2tiLVx1MDAzZWxlbiAtIFBQUF9QUk9UT19MRU4pO1xuIFxuIFx0bnBpID0gcHJvdG9fdG9fbnBpbmRleChwcm90byk7XG4gXHRpZiAobnBpIFx1MDAzYyAwKSB7XG5AQCAtMjUwNiw3ICsyNTA3LDcgQEAgcHBwX3JlY2VpdmVfbm9ubXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGlmIChwcHAtXHUwMDNlcGFzc19maWx0ZXIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIGJwZl9wcm9nX3J1bihwcHAtXHUwMDNlcGFzc19maWx0ZXIsIHNrYikgPT0gMCkge1xuIFx0XHRcdFx0aWYgKFJFQURfT05DRShwcHAtXHUwMDNlZGVidWcpIFx1MDAyNiAxKVxuLVx0XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwiUFBQOiBpbmJvdW5kIGZyYW1lIFwiXG4gXHRcdFx0XHRcdFx0ICAgICAgXCJub3QgcGFzc2VkXFxuXCIpO1xuIFx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG5AQCAtMjUyMCwxNyArMjUyMSwxNyBAQCBwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4gI2VuZGlmIC8qIENPTkZJR19QUFBfRklMVEVSICovXG4gXHRcdFx0V1JJVEVfT05DRShwcHAtXHUwMDNlbGFzdF9yZWN2LCBqaWZmaWVzKTtcbiBcbi1cdFx0aWYgKChwcHAtXHUwMDNlZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApID09IDAgfHxcbitcdFx0aWYgKChkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkgPT0gMCB8fFxuIFx0XHQgICAgUkVBRF9PTkNFKHBwcC1cdTAwM2VucG1vZGVbbnBpXSkgIT0gTlBNT0RFX1BBU1MpIHtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBjaG9wIG9mZiBwcm90b2NvbCAqL1xuIFx0XHRcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgMik7XG4tXHRcdFx0c2tiLVx1MDAzZWRldiA9IHBwcC1cdTAwM2VkZXY7XG4rXHRcdFx0c2tiLVx1MDAzZWRldiA9IGRldjtcbiBcdFx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhucGluZGV4X3RvX2V0aGVydHlwZVtucGldKTtcbiBcdFx0XHRza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpO1xuIFx0XHRcdHNrYl9zY3J1Yl9wYWNrZXQoc2tiLCAhbmV0X2VxKHBwcC1cdTAwM2VwcHBfbmV0LFxuLVx0XHRcdFx0XHRcdCAgICAgIGRldl9uZXQocHBwLVx1MDAzZWRldikpKTtcbitcdFx0XHRcdFx0XHQgICAgICBkZXZfbmV0KGRldikpKTtcbiBcdFx0XHRuZXRpZl9yeChza2IpO1xuIFx0XHR9XG4gXHR9XG5AQCAtMjU2OCw4ICsyNTY5LDggQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0XHRucyA9IGRldl9hbGxvY19za2Iob2J1ZmZfc2l6ZSk7XG4gXHRcdGlmICghbnMpIHtcbi1cdFx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IFwiXG4tXHRcdFx0XHQgICBcIm5vIG1lbW9yeVxcblwiKTtcbitcdFx0XHRuZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSxcbitcdFx0XHRcdCAgIFwicHBwX2RlY29tcHJlc3NfZnJhbWU6IG5vIG1lbW9yeVxcblwiKTtcbiBcdFx0XHRnb3RvIGVycjtcbiBcdFx0fVxuIFx0XHQvKiB0aGUgZGVjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgdGhlIEEvQyBieXRlcyBpbiB0aGUgaGRyICovXG5AQCAtMjYxNyw2ICsyNjE4LDcgQEAgcHBwX2RlY29tcHJlc3NfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHN0YXRpYyB2b2lkXG4gcHBwX3JlY2VpdmVfbXBfZnJhbWUoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgY2hhbm5lbCAqcGNoKVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4gXHR1MzIgbWFzaywgc2VxO1xuIFx0c3RydWN0IGNoYW5uZWwgKmNoO1xuIFx0aW50IG1waGRybGVuID0gKHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfTVBfU0hPUlRTRVEpPyBNUEhEUkxFTl9TU046IE1QSERSTEVOO1xuQEAgLTI2NjEsNyArMjY2Myw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaClcbiBcdCAqL1xuIFx0aWYgKHNlcV9iZWZvcmUoc2VxLCBwcHAtXHUwMDNlbmV4dHNlcSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgcnhfZHJvcHBlZCk7XG4rXHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9kcm9wcGVkKTtcbiBcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuQEAgLTI2OTcsNyArMjY5OSw3IEBAIHBwcF9yZWNlaXZlX21wX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNoYW5uZWwgKnBjaClcbiBcdFx0aWYgKHBza2JfbWF5X3B1bGwoc2tiLCAyKSlcbiBcdFx0XHRwcHBfcmVjZWl2ZV9ub25tcF9mcmFtZShwcHAsIHNrYik7XG4gXHRcdGVsc2Uge1xuLVx0XHRcdERFVl9TVEFUU19JTkMocHBwLVx1MDAzZWRldiwgcnhfbGVuZ3RoX2Vycm9ycyk7XG4rXHRcdFx0REVWX1NUQVRTX0lOQyhkZXYsIHJ4X2xlbmd0aF9lcnJvcnMpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdHBwcF9yZWNlaXZlX2Vycm9yKHBwcCk7XG4gXHRcdH1cbkBAIC0yNzM5LDYgKzI3NDEsNyBAQCBwcHBfbXBfaW5zZXJ0KHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4ge1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHUzMiBzZXEgPSBwcHAtXHUwMDNlbmV4dHNlcTtcbiBcdHUzMiBtaW5zZXEgPSBwcHAtXHUwMDNlbWluc2VxO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9IFx1MDAyNnBwcC1cdTAwM2VtcnE7XG5AQCAtMjc1NSw4ICsyNzU4LDcgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdGFnYWluOlxuIFx0XHRpZiAoc2VxX2JlZm9yZShQUFBfTVBfQ0IocCktXHUwMDNlc2VxdWVuY2UsIHNlcSkpIHtcbiBcdFx0XHQvKiB0aGlzIGNhbid0IGhhcHBlbiwgYW55d2F5IGlnbm9yZSB0aGUgc2tiICovXG4tXHRcdFx0bmV0ZGV2X2VycihwcHAtXHUwMDNlZGV2LCBcInBwcF9tcF9yZWNvbnN0cnVjdCBiYWQgXCJcbi1cdFx0XHRcdCAgIFwic2VxICV1IFx1MDAzYyAldVxcblwiLFxuK1x0XHRcdG5ldGRldl9lcnIoZGV2LCBcInBwcF9tcF9yZWNvbnN0cnVjdCBiYWQgc2VxICV1IFx1MDAzYyAldVxcblwiLFxuIFx0XHRcdFx0ICAgUFBQX01QX0NCKHApLVx1MDAzZXNlcXVlbmNlLCBzZXEpO1xuIFx0XHRcdF9fc2tiX3VubGluayhwLCBsaXN0KTtcbiBcdFx0XHRrZnJlZV9za2IocCk7XG5AQCAtMjc3NSw3ICsyNzc3LDcgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdFx0XHRcdG1pbnNlcSArIDE6IFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZTtcbiBcbiBcdFx0XHRpZiAoUkVBRF9PTkNFKHBwcC1cdTAwM2VkZWJ1ZykgXHUwMDI2IDEpXG4tXHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0ICAgICAgXCJsb3N0IGZyYWcgJXUuLiV1XFxuXCIsXG4gXHRcdFx0XHRcdCAgICAgIG9sZHNlcSwgc2VxLTEpO1xuIFxuQEAgLTI4MDMsOCArMjgwNSw4IEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4gXHRcdGlmIChsb3N0ID09IDAgXHUwMDI2XHUwMDI2IChQUFBfTVBfQ0IocCktXHUwMDNlQkViaXRzIFx1MDAyNiBFKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChQUFBfTVBfQ0IoaGVhZCktXHUwMDNlQkViaXRzIFx1MDAyNiBCKSkge1xuIFx0XHRcdGlmIChsZW4gXHUwMDNlIHBwcC1cdTAwM2VtcnJ1ICsgMikge1xuLVx0XHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRcdERFVl9TVEFUU19JTkMoZGV2LCByeF9sZW5ndGhfZXJyb3JzKTtcbitcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcIlBQUDogcmVjb25zdHJ1Y3RlZCBwYWNrZXRcIlxuIFx0XHRcdFx0XHQgICAgICBcIiBpcyB0b28gbG9uZyAoJWQpXFxuXCIsIGxlbik7XG4gXHRcdFx0fSBlbHNlIHtcbkBAIC0yODI0LDcgKzI4MjYsNyBAQCBwcHBfbXBfcmVjb25zdHJ1Y3Qoc3RydWN0IHBwcCAqcHBwKVxuIFxuIFx0XHRcdHNrYl9xdWV1ZV9yZXZlcnNlX3dhbGtfZnJvbV9zYWZlKGxpc3QsIHAsIHRtcDIpIHtcbiBcdFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdFx0bmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBwcHAtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldixcbiBcdFx0XHRcdFx0XHQgICAgICBcImRpc2NhcmRpbmcgZnJhZyAldVxcblwiLFxuIFx0XHRcdFx0XHRcdCAgICAgIFBQUF9NUF9DQihwKS1cdTAwM2VzZXF1ZW5jZSk7XG4gXHRcdFx0XHRfX3NrYl91bmxpbmsocCwgbGlzdCk7XG5AQCAtMjg0Niw3ICsyODQ4LDcgQEAgcHBwX21wX3JlY29uc3RydWN0KHN0cnVjdCBwcHAgKnBwcClcbiBcdFx0XHRcdGlmIChwID09IGhlYWQpXG4gXHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0aWYgKFJFQURfT05DRShwcHAtXHUwMDNlZGVidWcpIFx1MDAyNiAxKVxuLVx0XHRcdFx0XHRuZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIHBwcC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIFwiZGlzY2FyZGluZyBmcmFnICV1XFxuXCIsXG4gXHRcdFx0XHRcdFx0ICAgICAgUFBQX01QX0NCKHApLVx1MDAzZXNlcXVlbmNlKTtcbiBcdFx0XHRcdF9fc2tiX3VubGluayhwLCBsaXN0KTtcbkBAIC0yODU0LDExICsyODU2LDExIEBAIHBwcF9tcF9yZWNvbnN0cnVjdChzdHJ1Y3QgcHBwICpwcHApXG4gXHRcdFx0fVxuIFxuIFx0XHRcdGlmIChSRUFEX09OQ0UocHBwLVx1MDAzZWRlYnVnKSBcdTAwMjYgMSlcbi1cdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgcHBwLVx1MDAzZWRldixcbitcdFx0XHRcdG5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LFxuIFx0XHRcdFx0XHQgICAgICBcIiAgbWlzc2VkIHBrdHMgJXUuLiV1XFxuXCIsXG4gXHRcdFx0XHRcdCAgICAgIHBwcC1cdTAwM2VuZXh0c2VxLFxuIFx0XHRcdFx0XHQgICAgICBQUFBfTVBfQ0IoaGVhZCktXHUwMDNlc2VxdWVuY2UtMSk7XG4tXHRcdFx0REVWX1NUQVRTX0lOQyhwcHAtXHUwMDNlZGV2LCByeF9kcm9wcGVkKTtcbitcdFx0XHRERVZfU1RBVFNfSU5DKGRldiwgcnhfZHJvcHBlZCk7XG4gXHRcdFx0cHBwX3JlY2VpdmVfZXJyb3IocHBwKTtcbiBcdFx0fVxuIFxuQEAgLTI5NzcsOCArMjk3OSw4IEBAIGNoYXIgKnBwcF9kZXZfbmFtZShzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pXG4gXG4gXHRpZiAocGNoKSB7XG4gXHRcdHBwcCA9IHJjdV9kZXJlZmVyZW5jZShwY2gtXHUwMDNlcHBwKTtcbi1cdFx0aWYgKHBwcCBcdTAwMjZcdTAwMjYgcHBwLVx1MDAzZWRldilcbi1cdFx0XHRuYW1lID0gcHBwLVx1MDAzZWRldi1cdTAwM2VuYW1lO1xuK1x0XHRpZiAocHBwKVxuK1x0XHRcdG5hbWUgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCktXHUwMDNlbmFtZTtcbiBcdH1cbiBcdHJldHVybiBuYW1lO1xuIH1cbkBAIC0zMzA5LDEyICszMzExLDEzIEBAIGZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSlcbiBzdGF0aWMgdm9pZFxuIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdClcbiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNsY29tcHJlc3MgKnZqID0gcHBwLVx1MDAzZXZqO1xuIFx0aW50IGNwdTtcbiBcbiBcdG1lbXNldChzdCwgMCwgc2l6ZW9mKCpzdCkpO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuLVx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKHBwcC1cdTAwM2VkZXYtXHUwMDNldHN0YXRzLCBjcHUpO1xuK1x0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqcCA9IHBlcl9jcHVfcHRyKGRldi1cdTAwM2V0c3RhdHMsIGNwdSk7XG4gXHRcdHU2NCByeF9wYWNrZXRzLCByeF9ieXRlcywgdHhfcGFja2V0cywgdHhfYnl0ZXM7XG4gXG4gXHRcdHJ4X3BhY2tldHMgPSB1NjRfc3RhdHNfcmVhZChcdTAwMjZwLVx1MDAzZXJ4X3BhY2tldHMpO1xuQEAgLTMzMjcsOCArMzMzMCw4IEBAIHBwcF9nZXRfc3RhdHMoc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3QgcHBwX3N0YXRzICpzdClcbiBcdFx0c3QtXHUwMDNlcC5wcHBfb3BhY2tldHMgKz0gdHhfcGFja2V0cztcbiBcdFx0c3QtXHUwMDNlcC5wcHBfb2J5dGVzICs9IHR4X2J5dGVzO1xuIFx0fVxuLVx0c3QtXHUwMDNlcC5wcHBfaWVycm9ycyA9IERFVl9TVEFUU19SRUFEKHBwcC1cdTAwM2VkZXYsIHJ4X2Vycm9ycyk7XG4tXHRzdC1cdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQocHBwLVx1MDAzZWRldiwgdHhfZXJyb3JzKTtcbitcdHN0LVx1MDAzZXAucHBwX2llcnJvcnMgPSBERVZfU1RBVFNfUkVBRChkZXYsIHJ4X2Vycm9ycyk7XG4rXHRzdC1cdTAwM2VwLnBwcF9vZXJyb3JzID0gREVWX1NUQVRTX1JFQUQoZGV2LCB0eF9lcnJvcnMpO1xuIFx0aWYgKCF2ailcbiBcdFx0cmV0dXJuO1xuIFx0c3QtXHUwMDNldmoudmpzX3BhY2tldHMgPSB2ai1cdTAwM2VzbHNfb19jb21wcmVzc2VkICsgdmotXHUwMDNlc2xzX29fdW5jb21wcmVzc2VkO1xuQEAgLTM0MDgsNiArMzQxMSw4IEBAIGluaXRfcHBwX2ZpbGUoc3RydWN0IHBwcF9maWxlICpwZiwgaW50IGtpbmQpXG4gICovXG4gc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcbiB7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuK1xuIFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2cHBwLVx1MDAzZWZpbGUucmVmY250KSlcbiBcdFx0cmV0dXJuO1xuIFxuQEAgLTM0MTUsNyArMzQyMCw3IEBAIHN0YXRpYyB2b2lkIHBwcF9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApXG4gXG4gXHRpZiAoIXBwcC1cdTAwM2VmaWxlLmRlYWQgfHwgcHBwLVx1MDAzZW5fY2hhbm5lbHMpIHtcbiBcdFx0LyogXCJjYW4ndCBoYXBwZW5cIiAqL1xuLVx0XHRuZXRkZXZfZXJyKHBwcC1cdTAwM2VkZXYsIFwicHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgXCJcbitcdFx0bmV0ZGV2X2VycihkZXYsIFwicHBwOiBkZXN0cm95aW5nIHBwcCBzdHJ1Y3QgJXAgXCJcbiBcdFx0XHQgICBcImJ1dCBkZWFkPSVkIG5fY2hhbm5lbHM9JWQgIVxcblwiLFxuIFx0XHRcdCAgIHBwcCwgcHBwLVx1MDAzZWZpbGUuZGVhZCwgcHBwLVx1MDAzZW5fY2hhbm5lbHMpO1xuIFx0XHRyZXR1cm47XG5AQCAtMzQ0NSw3ICszNDUwLDcgQEAgc3RhdGljIHZvaWQgcHBwX3JlbGVhc2VfaW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcClcbiBcbiBcdGZyZWVfcGVyY3B1KHBwcC1cdTAwM2V4bWl0X3JlY3Vyc2lvbik7XG4gXG4tXHRmcmVlX25ldGRldihwcHAtXHUwMDNlZGV2KTtcbitcdGZyZWVfbmV0ZGV2KGRldik7XG4gfVxuIFxuIC8qXG5AQCAtMzQ5Miw2ICszNDk3LDcgQEAgcHBwX2ZpbmRfY2hhbm5lbChzdHJ1Y3QgcHBwX25ldCAqcG4sIGludCB1bml0KVxuIHN0YXRpYyBpbnRcbiBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgcHBwICpwcHA7XG4gXHRzdHJ1Y3QgcHBwX25ldCAqcG47XG4gXHRpbnQgcmV0ID0gLUVOWElPO1xuQEAgLTM1MDMsNiArMzUwOSw3IEBAIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXG4gXHRwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTtcbiBcdGlmICghcHBwKVxuIFx0XHRnb3RvIG91dDtcbitcdGRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZwY2gtXHUwMDNldXBsKTtcbiBcdHJldCA9IC1FSU5WQUw7XG4gXHRpZiAocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwY2gtXHUwMDNlcHBwLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2cGNoLVx1MDAzZXVwbCkpIHx8XG5AQCAtMzUxOSwxNSArMzUyNiwxNSBAQCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KVxuIFx0XHRnb3RvIG91dGw7XG4gXHR9XG4gXHRpZiAocGNoLVx1MDAzZWNoYW4tXHUwMDNlZGlyZWN0X3htaXQpXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfTk9fUVVFVUU7XG4rXHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9OT19RVUVVRTtcbiBcdGVsc2Vcbi1cdFx0cHBwLVx1MDAzZWRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9OT19RVUVVRTtcbitcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX05PX1FVRVVFO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2cGNoLVx1MDAzZWRvd25sKTtcbiBcdGlmIChwY2gtXHUwMDNlZmlsZS5oZHJsZW4gXHUwMDNlIHBwcC1cdTAwM2VmaWxlLmhkcmxlbilcbiBcdFx0cHBwLVx1MDAzZWZpbGUuaGRybGVuID0gcGNoLVx1MDAzZWZpbGUuaGRybGVuO1xuIFx0aGRybGVuID0gcGNoLVx1MDAzZWZpbGUuaGRybGVuICsgMjtcdC8qIGZvciBwcm90b2NvbCBieXRlcyAqL1xuLVx0aWYgKGhkcmxlbiBcdTAwM2UgcHBwLVx1MDAzZWRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pXG4tXHRcdHBwcC1cdTAwM2VkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gaGRybGVuO1xuK1x0aWYgKGhkcmxlbiBcdTAwM2UgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbilcbitcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IGhkcmxlbjtcbiBcdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNnBjaC1cdTAwM2VjbGlzdCwgXHUwMDI2cHBwLVx1MDAzZWNoYW5uZWxzKTtcbiBcdCsrcHBwLVx1MDAzZW5fY2hhbm5lbHM7XG4gXHRyY3VfYXNzaWduX3BvaW50ZXIocGNoLVx1MDAzZXBwcCwgcHBwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjM3LjQzMTkwMDAzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2MzQ4MzM3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgcmVtb3ZpbmcgdGhlIGBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2YCBmaWVsZCBmcm9tIHRoZSBgc3RydWN0IHBwcGAuIFRoYXQncyBhIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2UuIE15IGZpcnN0IHRob3VnaHQgaXMsIHdoeT8gVGhlIG9idmlvdXMgaW1wbGljYXRpb24gaXMgdGhhdCB0aGV5J3JlIG5vdyB1c2luZyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCBldmVyeXdoZXJlIGBwcHAtXHUwMDNlZGV2YCB3YXMgdXNlZC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGUgYHN0cnVjdCBwcHBgIGlzICpub3cqIGJlaW5nIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBgc3RydWN0IG5ldF9kZXZpY2VgLiBJbnN0ZWFkIG9mIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHN0cnVjdHMgd2l0aCBhIHBvaW50ZXIgYmV0d2VlbiB0aGVtLlxuXG5CdXQgd2FpdCwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyAqZnVuZGFtZW50YWxseSogY2hhbmdlcyB0aGUgbWVtb3J5IGxheW91dCBhbmQgYWxsb2NhdGlvbiBzdHJhdGVneS4gSSBuZWVkIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgY29kZSB0aGF0IGNyZWF0ZXMgdGhlIFBQUCBpbnRlcmZhY2UuIEZ1bmN0aW9ucyBsaWtlIGBwcHBfY3JlYXRlX2ludGVyZmFjZWAgYXJlIHdoYXQgSSdtIGludGVyZXN0ZWQgaW4uIEkgbmVlZCB0byBzZWUgKmhvdyogdGhlIGBzdHJ1Y3QgcHBwYCBpcyBiZWluZyBhbGxvY2F0ZWQgbm93LiBUaGUgZGlmZiBhbG9uZSBkb2Vzbid0IGdpdmUgbWUgZW5vdWdoIGNvbnRleHQuIFRoaXMgY2hhbmdlIGNvdWxkIGhhdmUgcmlwcGxlIGVmZmVjdHMgdGhyb3VnaG91dCB0aGUgZHJpdmVyLiBUaGUgd2hvbGUgc3RydWN0dXJlIG9mIGBwcHBfY3JlYXRlX2ludGVyZmFjZWAgbWlnaHQgaGF2ZSBjaGFuZ2VkLCBtYXliZSBldmVuIGhvdyBpdCdzIGxpbmtlZCBpbnRvIHRoZSBkZXZpY2UgdHJlZS4gSSBuZWVkIHRvIHNlZSB0aGUgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkzMiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjQzLjA2NjczNjQ0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkzNjg4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19uZXRkZXZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MzM1Nz1zdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTMzNjctXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MzM2ODpcXHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCBcXFwiXFxcIiwgTkVUX05BTUVfRU5VTSwgcHBwX3NldHVwKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY5LVxcdGlmICghZGV2KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjQzLjEyNzY3OTYzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjAzNjgzNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQUFAgSW50ZXJmYWNlIENyZWF0aW9uIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFBQUCBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgLi4uKWAg4oCTIHRoYXQgcGFydCdzIGFscmVhZHkgaW1wbGVtZW50ZWQsIGdvb2QuIEJ1dCBoYW5nIG9uLCB0aGUgYXV0aG9yIGV4cGxpY2l0bHkgYXNzaWducyBgcHBwLVx1MDAzZWRldmAgdG8gYGRldmAsIGFuZCAqdGhlbiogdGhleSB1c2UgYHBwcC1cdTAwM2VkZXZgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGV4cGxpY2l0IGFzc2lnbm1lbnQsIGFzIGl0IHNlZW1zIGEgYml0IHJlZHVuZGFudCBhdCBmaXJzdCBnbGFuY2UuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoaXMgaW50ZXJmYWNlIGNyZWF0aW9uLCBzbyBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBwcHBfY3JlYXRlX2ludGVyZmFjZWAgaW4gdGhlIGZpbGUuIEhvcGVmdWxseSwgdGhhdCB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB3aHkgdGhpcyBleHBsaWNpdCBhc3NpZ25tZW50IGlzIG5lY2Vzc2FyeSBhbmQgd2hhdCdzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIHdpdGggdGhpcyBkZXZpY2Ugc3RydWN0dXJlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo0Ni42NDgwNTE1ODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM1NyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM1NzpcXHRzdGF0aWMgaW50IHBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCAqdW5pdClcXG4zMzU4OlxcdHtcXG4zMzU5OlxcdFxcdHN0cnVjdCBwcHBfY29uZmlnIGNvbmYgPSB7XFxuMzM2MDpcXHRcXHRcXHQuZmlsZSA9IGZpbGUsXFxuMzM2MTpcXHRcXHRcXHQudW5pdCA9ICp1bml0LFxcbjMzNjI6XFx0XFx0XFx0LmlmbmFtZV9pc19zZXQgPSBmYWxzZSxcXG4zMzYzOlxcdFxcdH07XFxuMzM2NDpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xcbjMzNjU6XFx0XFx0c3RydWN0IHBwcCAqcHBwO1xcbjMzNjY6XFx0XFx0aW50IGVycjtcXG4zMzY3OlxcdFxcbjMzNjg6XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgXFxcIlxcXCIsIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XFxuMzM2OTpcXHRcXHRpZiAoIWRldikge1xcbjMzNzA6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4zMzcxOlxcdFxcdFxcdGdvdG8gZXJyO1xcbjMzNzI6XFx0XFx0fVxcbjMzNzM6XFx0XFx0ZGV2X25ldF9zZXQoZGV2LCBuZXQpO1xcbjMzNzQ6XFx0XFx0ZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzID0gXFx1MDAyNnBwcF9saW5rX29wcztcXG4zMzc1OlxcdFxcbjMzNzY6XFx0XFx0cnRubF9sb2NrKCk7XFxuMzM3NzpcXHRcXG4zMzc4OlxcdFxcdGVyciA9IHBwcF9kZXZfY29uZmlndXJlKG5ldCwgZGV2LCBcXHUwMDI2Y29uZik7XFxuMzM3OTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zMzgwOlxcdFxcdFxcdGdvdG8gZXJyX2RldjtcXG4zMzgxOlxcdFxcdHBwcCA9IG5ldGRldl9wcml2KGRldik7XFxuMzM4MjpcXHRcXHQqdW5pdCA9IHBwcC1cXHUwMDNlZmlsZS5pbmRleDtcXG4zMzgzOlxcdFxcbjMzODQ6XFx0XFx0cnRubF91bmxvY2soKTtcXG4zMzg1OlxcdFxcbjMzODY6XFx0XFx0cmV0dXJuIDA7XFxuMzM4NzpcXHRcXG4zMzg4OlxcdGVycl9kZXY6XFxuMzM4OTpcXHRcXHRydG5sX3VubG9jaygpO1xcbjMzOTA6XFx0XFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG4zMzkxOlxcdGVycjpcXG4zMzkyOlxcdFxcdHJldHVybiBlcnI7XFxuMzM5MzpcXHR9XFxuMzM5NDpcXHRcXG4zMzk1OlxcdC8qXFxuMzM5NjpcXHQgKiBJbml0aWFsaXplIGEgcHBwX2ZpbGUgc3RydWN0dXJlLlxcbjMzOTc6XFx0ICovXFxuMzM5ODpcXHRzdGF0aWMgdm9pZFxcbjMzOTk6XFx0aW5pdF9wcHBfZmlsZShzdHJ1Y3QgcHBwX2ZpbGUgKnBmLCBpbnQga2luZClcXG4zNDAwOlxcdHtcXG4zNDAxOlxcdFxcdHBmLVxcdTAwM2VraW5kID0ga2luZDtcXG4zNDAyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnBmLVxcdTAwM2V4cSk7XFxuMzQwMzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwZi1cXHUwMDNlcnEpO1xcbjM0MDQ6XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZwZi1cXHUwMDNlcmVmY250LCAxKTtcXG4zNDA1OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNnBmLVxcdTAwM2Vyd2FpdCk7XFxuMzQwNjpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjQ2LjY0ODI3MTAxNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDI4MzA5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgRGV2aWNlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBgYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgLi4uKWAgY2FsbC4gUmlnaHQsIHRoYXQgbWVhbnMgdGhlIGBwcHBgIHN0cnVjdHVyZSBpcyBiZWluZyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBmb3IgdGhlIG5ldHdvcmsgZGV2aWNlLCB3aGljaCBpcyBhY2Nlc3NlZCB1c2luZyBgbmV0ZGV2X3ByaXYoZGV2KWAuIFNvLCBgcHBwYCBhbmQgdGhlIGBkZXZgIHN0cnVjdCBhcmUgaW5oZXJlbnRseSBsaW5rZWQsIGdvb2QuXG5cbk5vdywgdGhlIHBhdGNoIGlzIHJlbW92aW5nIGBwcHAtXHUwMDNlZGV2YCBhbmQgc3Vic3RpdHV0aW5nIGl0IHdpdGggYG5ldGRldl9mcm9tX3ByaXYocHBwKWAuIEhtbSwgaXMgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgYSBmdW5jdGlvbiBvciBhIG1hY3JvPyBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0LiBXYWl0IGEgc2Vjb25kLCBpcyBgbmV0ZGV2X2Zyb21fcHJpdmAgYSBzdGFuZGFyZCBrZXJuZWwgZnVuY3Rpb24/IElzIGl0IGluIGBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oYCBvciBzb21ld2hlcmUgc2ltaWxhcj8gQWN0dWFsbHksIG5vLCBJIHRoaW5rIGl0IGlzIHVzdWFsbHkgYG5ldGRldl9wcml2KGRldilgIHRvIGdldCB0aGUgcHJpdmF0ZSBkYXRhLiBJcyB0aGVyZSBldmVuIGEgYG5ldGRldl9mcm9tX3ByaXYocHJpdilgIGRlZmluZWQgc29tZXdoZXJlPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuXG5cbkFscmlnaHQsIGxldCdzIGp1c3Qgc2VlIHdoZXJlIGBuZXRkZXZfZnJvbV9wcml2YCBpcyB1c2VkIGluIHRoZSBjb2RlYmFzZS4gVGhhdCdsbCBiZSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo1MS4wNTExMDQyMzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxNjQ1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZGV2X2Zyb21fcHJpdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjgxOT1zdGF0aWMgaW5saW5lIHZvaWQgKm5ldGRldl9wcml2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI4MjQtLyoqXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyODI1OiAqIG5ldGRldl9mcm9tX3ByaXYoKSAtIGdldCBuZXR3b3JrIGRldmljZSBmcm9tIHByaXZcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI4MjYtICogQHByaXY6IG5ldHdvcmsgZGV2aWNlIHByaXZhdGUgZGF0YVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODI5LSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjgzMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXZfZnJvbV9wcml2KGNvbnN0IHZvaWQgKnByaXYpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yODMxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDM6NTEuMTM1MjcyODI3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc0ODMyNjY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBQUFAgRGV2aWNlIEhhbmRsaW5nKipcblxuT2theSwgc28gYG5ldGRldl9mcm9tX3ByaXZgIGlzIGRlZmluaXRlbHkgYSB0aGluZywgZ29vZC4gVGhlIHBhdGNoIGFpbXMgZm9yIHB1cmUgcmVmYWN0b3JpbmcsIHRoYXQncyB3aGF0IEknbSBzZWVpbmcgaGVyZS4gSXQncyBhbGwgYWJvdXQgZWxpbWluYXRpbmcgdGhlIHJlZHVuZGFudCBgZGV2YCBwb2ludGVyIHdpdGhpbiB0aGUgYHN0cnVjdCBwcHBgIGFuZCBsZXZlcmFnaW5nIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgIGluc3RlYWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGFzc2VzcyBpZiB0aGVyZSdzIGFueSBmdW5jdGlvbmFsIGNoYW5nZS4gSXMgdGhpcyBqdXN0IGEgc3RyYWlnaHQgc3dhcCBvZiBgcHBwLVx1MDAzZWRldmAgd2l0aCB0aGUgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgZXF1aXZhbGVudD9cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCB0aG91Z2gsIG5vIG5lZWQgdG8gYmUgaGFzdHkuIE9rYXksIGJhY2sgdG8gdGhlIHBhdGNoLiBZdXAsIGl0J3MgcmVtb3ZpbmcgdGhhdCBhc3NpZ25tZW50IGluIGBwcHBfZGV2X2NvbmZpZ3VyZWA6IGAtIHBwcC1cdTAwM2VkZXYgPSBkZXY7YCBhbmQgdGhlbiBpdCdzIHJlcGxhY2luZyBhbGwgaW5zdGFuY2VzIG9mIGBwcHAtXHUwMDNlZGV2YCB3aXRoIGBuZXRkZXZfZnJvbV9wcml2KHBwcClgLiBIbW0sIG5vdyBJIGhhdmUgdG8gYmUgdGhvcm91Z2guLi4gQ291bGQgdGhlcmUgKmV2ZXIqIGhhdmUgYmVlbiBhIHNjZW5hcmlvIHdoZXJlIGBwcHAtXHUwMDNlZGV2YCB3YXMgTlVMTCBvciBkaXZlcmdlZCBmcm9tIHdoYXQgYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgcmV0dXJucz9cblxuVGhpbmtpbmcgaXQgdGhyb3VnaCwgbm8sIG5vdCByZWFsbHkuIEJlY2F1c2UgYHBwcGAgaXMgYWxsb2NhdGVkIHVzaW5nIGBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBwcHApLCAuLi4pYCB3aGljaCBhbHdheXMsIGluIGVmZmVjdCwgZW5zdXJlcyB0aGF0IGBwcHBgJ3MgbWVtb3J5IGxvY2F0aW9uIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGUgcHJpdmF0ZSBkYXRhIHJlZ2lvbiBvZiB0aGUgYXNzb2NpYXRlZCBgZGV2YCBzdHJ1Y3R1cmUuIFRoZSBjYWxjdWxhdGlvbiwgdGhlcmVmb3JlLCBpcyBqdXN0IGNvcnJlY3QuIEhvbGQgb24sIHRob3VnaC4uLndoYXQgaWYgdGhlcmUncyBhbiAqYWx0ZXJuYXRpdmUqIHdheSB0aGF0IGBwcHBgIGNvdWxkIGJlIGFsbG9jYXRlZD8gSXMgYHN0cnVjdCBwcHBgIGV2ZXIgaW5zdGFudGlhdGVkIG91dHNpZGUgb2YgdGhlIGBhbGxvY19uZXRkZXZgIGNvbnRleHQ/IExldCdzIGdvIGxvb2sgZm9yIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNvcm5lciBjYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM0MywiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo1Ni44ODM2MTYxOTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDY4MTg2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIoa21hbGxvY3xremFsbG9jfGtjYWxsb2N8dm1hbGxvY3x2emFsbG9jKVxcXFwoLipzaXplb2ZcXFxcKHN0cnVjdCBwcHBcXFxcKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDM6NTYuOTU0Njk1MTI1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3MjMwNDU4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqSW52ZXN0aWdhdGluZyBgc3RydWN0IHBwcGAgQWxsb2NhdGlvbiBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgdGhlIGBzdHJ1Y3QgcHBwYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgZmlsZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gb2YgdGhlIHN0cnVjdCAqc3BlY2lmaWNhbGx5KiB3aXRoaW4gdGhhdCBmaWxlLiBJJ20gb3BlcmF0aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHdheSBpdCBpcyBhbGxvY2F0ZWQgbWF5IGhhdmUgYW4gZWZmZWN0IG9uIGl0cyB1c2FnZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIHN0cnVjdCBpcyBiZWluZyBpbnN0YW50aWF0ZWQgd2l0aGluIHRoaXMgcGFydGljdWxhciBmaWxlIGFuZCBpZiBzbywgaG93LiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbXkgYW5hbHlzaXMuIExldCdzIHNlZSBpZiBpdCdzIGFsbG9jYXRlZCBkaXJlY3RseSB0aGVyZSwgb3IgaWYgb3RoZXIgZnVuY3Rpb25zIGFyZSByZXNwb25zaWJsZS4gRmluZGluZyB3aGVyZSBpdCdzIGJlaW5nIGFsbG9jYXRlZCBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjAzOjU5LjY3Nzc0Mzg3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEzODk3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2l6ZW9mXFxcXChzdHJ1Y3QgcHBwXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTM4Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgcHBwX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xMzg2LVxcdC5wb2xpY3lcXHRcXHQ9IHBwcF9ubF9wb2xpY3ksXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTM4NzpcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHBwcCksXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTM4OC1cXHQuc2V0dXBcXHRcXHQ9IHBwcF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTMzNTc9c3RhdGljIGludCBwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgKnVuaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zMzY3LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjMzNjg6XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgcHBwKSwgXFxcIlxcXCIsIE5FVF9OQU1FX0VOVU0sIHBwcF9zZXR1cCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMzM2OS1cXHRpZiAoIWRldikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowMzo1OS43MzkxMzg4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODk3NzcyMDIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBQUCBSZWZhY3RvcmluZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZXNzZW50aWFsbHkganVzdCByZW1vdmluZyBhIHJlZHVuZGFudCBwb2ludGVyIHdpdGhpbiB0aGUgYHN0cnVjdCBwcHBgLiBTcGVjaWZpY2FsbHksIHRoaXMgcG9pbnRlciB0aGF0IHN0b3JlcyB0aGUgYG5ldF9kZXZpY2VgIHdpdGhpbiB0aGUgc3RydWN0dXJlIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBgc3RydWN0IHBwcGAgaXMgb25seSBldmVyIGFsbG9jYXRlZCBhcyBgbmV0ZGV2X3ByaXZgLCBlaXRoZXIgdGhyb3VnaCBgYWxsb2NfbmV0ZGV2YCBvciB2aWEgYHJ0bmxfbGlua19vcHMucHJpdl9zaXplYC4gVGhlcmVmb3JlLCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYCB3aWxsIGFsd2F5cyBjb3JyZWN0bHkgZ2l2ZSB5b3UgdGhlIGFzc29jaWF0ZWQgYG5ldF9kZXZpY2VgLiBTbywgb24gdGhlIHN1cmZhY2UsIHRoaXMgc2hvdWxkIGp1c3Qgc2F2ZSBhIGZldyBieXRlcyBhbmQgc2hvdWxkIGhhdmUgbm8gaW1wYWN0IG9uIHRoZSBleGVjdXRpb24gZmxvdyBvciBmdW5jdGlvbmFsIGxvZ2ljIG9mIHRoZSBjb2RlLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cbkhvd2V2ZXIsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgcGF0Y2ggZm9yIGFueSBzbmVha3kgY2hhbmdlcy5cblxuTG9va2luZyBhdCB0aGUgY29kZSBkaWZmLCB0aGUgZmlyc3QgY2hhbmdlIGlzIGp1c3QgcmVwbGFjaW5nIGBwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWVgIHdpdGggYGRldi1cdTAwM2VuYW1lYCwgd2hlcmUgYGRldmAgaXMgYSBsb2NhbCB2YXJpYWJsZSBpbml0aWFsaXplZCBhcyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gVGhhdCdzIGZpbmUuIEl0J3MganVzdCB1c2luZyB0aGUgbG9jYWwgdmFyaWFibGUsIGFzIGV4cGVjdGVkLlxuXG5UaGVuIHRoZXJlJ3MgYSBjaGFuZ2UgaW4gYHBwcF9kZXZfbmFtZWAuIEl0IG5vdyBjYWxscyBgbmV0ZGV2X2Zyb21fcHJpdihwcHApLVx1MDAzZW5hbWVgIGluc3RlYWQgb2YgYHBwcC1cdTAwM2VkZXYtXHUwMDNlbmFtZWAuIEhhbmcgb24sIGRvZXMgdGhpcyBjaGFuZ2UgaW5kaWNhdGUgdGhhdCBgcHBwLVx1MDAzZWRldmAgKmNvdWxkKiBoYXZlIGJlZW4gTlVMTCBwcmV2aW91c2x5PyBMZXQgbWUgZGlnIGEgbGl0dGxlIGRlZXBlci5cblxuTGV0J3Mgc2VlLiBJbiBgcHBwX2Rldl9jb25maWd1cmVgLCBgcHBwLVx1MDAzZWRldiA9IGRldjtgIGlzIHNldC4gT2theSwgc28gd2hlcmUgaXMgYHBwcC1cdTAwM2VkZXZgICpub3QqIHNldD8gSXMgdGhlcmUgYSBzaXR1YXRpb24gd2hlcmUgYHBwcGAgZXhpc3RzIGJ1dCBgcHBwLVx1MDAzZWRldmAgaXMgTlVMTD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgcHBwYCBpcyBjcmVhdGVkLlxuXG5Mb29raW5nIGF0IGBwcHBfY3JlYXRlX2ludGVyZmFjZWAsIHdlIHNlZSBgZGV2ID0gYWxsb2NfbmV0ZGV2KC4uLilgLiBUaGVuIGBkZXZfbmV0X3NldChkZXYsIG5ldClgLCBhbmQgc28gb24uIGBwcHBfZGV2X2NvbmZpZ3VyZWAgaXMgY2FsbGVkLCBhbmQgKnRoZW4qIGBwcHAtXHUwMDNlZGV2ID0gZGV2O2AgaXMgYXNzaWduZWQuIElmIGBwcHBfZGV2X2NvbmZpZ3VyZWAgZmFpbHMsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZGV2YCwgYW5kIGBkZXZgIGlzIHVubG9ja2VkIGFuZCBmcmVlZC4gQ3J1Y2lhbGx5LCBiZWNhdXNlIGBwcHBgIGlzIHdpdGhpbiB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYGRldmAgKGFzIGl0J3MgYG5ldGRldl9wcml2YCEpLCBmcmVlaW5nIGBkZXZgIHdvdWxkIGFsc28gZnJlZSBgcHBwYC4gVGhlcmVmb3JlLCBgcHBwYCBjYW4ndCBleGlzdCB3aXRob3V0IGBkZXZgLlxuXG5XYWl0IGEgbWludXRlLCB3aGF0IGFib3V0IGBwcHBfbmxfbmV3bGlua2A/IExldCBtZSBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1NzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDQ6MDguNzE2ODYxODY0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzIwOlxcdFxcdGludCBlcnI7XFxuMTMyMTpcXHRcXG4xMzIyOlxcdFxcdGZpbGUgPSBmZ2V0KG5sYV9nZXRfczMyKGRhdGFbSUZMQV9QUFBfREVWX0ZEXSkpO1xcbjEzMjM6XFx0XFx0aWYgKCFmaWxlKVxcbjEzMjQ6XFx0XFx0XFx0cmV0dXJuIC1FQkFERjtcXG4xMzI1OlxcdFxcbjEzMjY6XFx0XFx0LyogcnRubF9sb2NrIGlzIGFscmVhZHkgaGVsZCBoZXJlLCBidXQgcHBwX2NyZWF0ZV9pbnRlcmZhY2UoKSBsb2Nrc1xcbjEzMjc6XFx0XFx0ICogcHBwX211dGV4IGJlZm9yZSBob2xkaW5nIHJ0bmxfbG9jay4gVXNpbmcgbXV0ZXhfdHJ5bG9jaygpIGF2b2lkc1xcbjEzMjg6XFx0XFx0ICogcG9zc2libGUgZGVhZGxvY2sgZHVlIHRvIGxvY2sgb3JkZXIgaW52ZXJzaW9uLCBhdCB0aGUgY29zdCBvZlxcbjEzMjk6XFx0XFx0ICogcHVzaGluZyB0aGUgcHJvYmxlbSBiYWNrIHRvIHVzZXJzcGFjZS5cXG4xMzMwOlxcdFxcdCAqL1xcbjEzMzE6XFx0XFx0aWYgKCFtdXRleF90cnlsb2NrKFxcdTAwMjZwcHBfbXV0ZXgpKSB7XFxuMTMzMjpcXHRcXHRcXHRlcnIgPSAtRUJVU1k7XFxuMTMzMzpcXHRcXHRcXHRnb3RvIG91dDtcXG4xMzM0OlxcdFxcdH1cXG4xMzM1OlxcdFxcbjEzMzY6XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AgIT0gXFx1MDAyNnBwcF9kZXZpY2VfZm9wcyB8fCBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGEpIHtcXG4xMzM3OlxcdFxcdFxcdGVyciA9IC1FQkFERjtcXG4xMzM4OlxcdFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4xMzM5OlxcdFxcdH1cXG4xMzQwOlxcdFxcbjEzNDE6XFx0XFx0Y29uZi5maWxlID0gZmlsZTtcXG4xMzQyOlxcdFxcbjEzNDM6XFx0XFx0LyogRG9uJ3QgdXNlIGRldmljZSBuYW1lIGdlbmVyYXRlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyIHdoZW4gaWZuYW1lXFxuMTM0NDpcXHRcXHQgKiBpc24ndCBzcGVjaWZpZWQuIExldCBwcHBfZGV2X2NvbmZpZ3VyZSgpIHNldCB0aGUgZGV2aWNlIG5hbWUgdXNpbmdcXG4xMzQ1OlxcdFxcdCAqIHRoZSBQUFAgdW5pdCBpZGVudGlmZXIgYXMgc3VmZml4IChpLmUuIHBwcFxcdTAwM2N1bml0X2lkXFx1MDAzZSkuIFRoaXMgYWxsb3dzXFxuMTM0NjpcXHRcXHQgKiB1c2Vyc3BhY2UgdG8gaW5mZXIgdGhlIGRldmljZSBuYW1lIHVzaW5nIHRvIHRoZSBQUFBJT0NHVU5JVCBpb2N0bC5cXG4xMzQ3OlxcdFxcdCAqL1xcbjEzNDg6XFx0XFx0aWYgKCF0YltJRkxBX0lGTkFNRV0gfHwgIW5sYV9sZW4odGJbSUZMQV9JRk5BTUVdKSB8fCAhKihjaGFyICopbmxhX2RhdGEodGJbSUZMQV9JRk5BTUVdKSlcXG4xMzQ5OlxcdFxcdFxcdGNvbmYuaWZuYW1lX2lzX3NldCA9IGZhbHNlO1xcbjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRlcnIgPSBwcHBfZGV2X2NvbmZpZ3VyZShsaW5rX25ldCwgZGV2LCBcXHUwMDI2Y29uZik7XFxuMTM1MjpcXHRcXG4xMzUzOlxcdG91dF91bmxvY2s6XFxuMTM1NDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBwcF9tdXRleCk7XFxuMTM1NTpcXHRvdXQ6XFxuMTM1NjpcXHRcXHRmcHV0KGZpbGUpO1xcbjEzNTc6XFx0XFxuMTM1ODpcXHRcXHRyZXR1cm4gZXJyO1xcbjEzNTk6XFx0fVxcbjEzNjA6XFx0XFxuMTM2MTpcXHRzdGF0aWMgdm9pZCBwcHBfbmxfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbjEzNjI6XFx0e1xcbjEzNjM6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcXG4xMzY0OlxcdH1cXG4xMzY1OlxcdFxcbjEzNjY6XFx0c3RhdGljIHNpemVfdCBwcHBfbmxfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xMzY3OlxcdHtcXG4xMzY4OlxcdFxcdHJldHVybiAwO1xcbjEzNjk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowNDowOC43MTcwMTM2MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMwNzczODQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIE5VTEwgUG9pbnRlciBEZXJlZmVyZW5jZSBpbiBQUFAgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBwcHBfbmxfbmV3bGlua2AgZnVuY3Rpb24sIGFuZCBpdCBjYWxscyBgcHBwX2Rldl9jb25maWd1cmVgLiBNeSBtYWluIGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLiBUaGUgY29kZSBzdGF0ZXMgdGhhdCBpZiBgcHBwX2Rldl9jb25maWd1cmVgIGZhaWxzLCB0aGUgYGRldmAgaXMgZXZlbnR1YWxseSBmcmVlZCBieSB0aGUgcnRuZXRsaW5rIGxheWVyLiBUaGlzIHNob3VsZCBtZWFuIHRoYXQgYHBwcGAgaXMgYWx3YXlzIHBhcnQgb2YgYGRldmAuIEhvd2V2ZXIsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IGlzIHRoZXJlICphbnkqIHNjZW5hcmlvIHdoZXJlIGBwcHAtXHUwMDNlZGV2YCBjb3VsZCBhY3R1YWxseSBiZSBOVUxMP1xuXG5JJ20gZm9jdXNpbmcgb24gdGhpcyBzZWN0aW9uIG9mIGNvZGUgKmJlZm9yZSogdGhlIHByb3Bvc2VkIHBhdGNoOlxuXG5gYGBjXG5cdGlmIChwY2gpIHtcblx0XHRwcHAgPSByY3VfZGVyZWZlcmVuY2UocGNoLVx1MDAzZXBwcCk7XG5cdFx0aWYgKHBwcCBcdTAwMjZcdTAwMjYgcHBwLVx1MDAzZWRldilcblx0XHRcdG5hbWUgPSBwcHAtXHUwMDNlZGV2LVx1MDAzZW5hbWU7XG5cdH1cbmBgYFxuXG5UaGUgd29ycnkgaXMgdGhhdCByZW1vdmluZyB0aGUgYHBwcC1cdTAwM2VkZXZgIGNoZWNrIGNvdWxkIGxlYWQgdG8gYSBjcmFzaCBpZiwgdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBgcHBwLVx1MDAzZWRldmAgKmNvdWxkKiBiZSBOVUxMLiBCdXQsIHdhaXQuLi4gaXNuJ3QgYHBwcGAgYWxsb2NhdGVkIGFzIGBuZXRkZXZfcHJpdihkZXYpYD8gVGhhdCBtYWtlcyBgcHBwLVx1MDAzZWRldmAgYmFzaWNhbGx5IGEgcG9pbnRlciBiYWNrIHRvIGBkZXZgIGl0c2VsZi4gQW5kIGl0IGdldHMgaW5pdGlhbGl6ZWQgaW5zaWRlIGBwcHBfZGV2X2NvbmZpZ3VyZWAuIFRoYXQgc2VlbXMgcHJldHR5IHNvbGlkLlxuXG5TdGlsbCwgSSBjYW4ndCBkaXNtaXNzIHRoaXMgd2l0aG91dCBkaWdnaW5nIGRlZXBlci4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IGNvdWxkIGBwY2gtXHUwMDNlcHBwYCBiZSBzZXQgKmJlZm9yZSogYHBwcF9kZXZfY29uZmlndXJlYCBmaW5pc2hlcz8gVGhhdCdzIHRoZSBvbmx5IHdheSBJIGNhbiBzZWUgYSBwb3RlbnRpYWwgcHJvYmxlbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgd2hlcmUgYHBjaC1cdTAwM2VwcHBgIGlzIGFjdHVhbGx5IHNldC4gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgcG9pbnRlciBjaGFpbiB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIHNldCBiZWZvcmUgSSBjYW4gZ2l2ZSB0aGUgZ3JlZW4gbGlnaHQuIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY4MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDAwOjA0OjE0LjAyNDc1NDg1M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ2MzA2NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmN1X2Fzc2lnbl9wb2ludGVyXFxcXChwY2gtXFx1MDAzZXBwcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0zNDk4PXBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0zNTM5LVxcdCsrcHBwLVxcdTAwM2VuX2NoYW5uZWxzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjM1NDA6XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBjaC1cXHUwMDNlcHBwLCBwcHApO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTM1NDEtXFx0cmVmY291bnRfaW5jKFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUucmVmY250KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMDA6MDQ6MTQuMTE5MzkwNzU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjIxNTE2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYHBwcF9jb25uZWN0X2NoYW5uZWxgIC0gQSBDbG9zZXIgTG9vayoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBgcHBwX2Nvbm5lY3RfY2hhbm5lbGAgZnVuY3Rpb24gYW5kIEkgdGhpbmsgSSd2ZSBnb3QgYSBoYW5kbGUgb24gd2hhdCdzIGdvaW5nIG9uIGhlcmUuIEVzc2VudGlhbGx5LCB0aGlzIGBwcHBfY29ubmVjdF9jaGFubmVsYCBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbiwgYW5kIHRoZSBjcml0aWNhbCBwYXJ0IGludm9sdmVzIGdldHRpbmcgdGhlIGBwcHBgIHN0cnVjdHVyZS4gSXQgdXNlcyBgcHBwX2ZpbmRfdW5pdGAgdG8gbG9jYXRlIGl0LCB3aGljaCBpcyB0aGVuIGFkZGVkIHRvIHRoZSBJRFIgdmlhIGBwcHBfdW5pdF9yZWdpc3RlcmAuIFRoaXMgcmVnaXN0cmF0aW9uIGhhcHBlbnMgZHVyaW5nIGBwcHBfZGV2X2NvbmZpZ3VyZWAsIG1lYW5pbmcgdGhlIGBwcHBgIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaW1wb3J0YW50bHksIGBwcHAtXHUwMDNlZGV2YCBoYXMgKmFscmVhZHkqIGJlZW4gYXNzaWduZWQgYmVmb3JlIGl0J3MgZXZlbiBhZGRlZCB0byB0aGUgSURSLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgYHBwcGAgaXMgcmVnaXN0ZXJlZCBjb3JyZWN0bHksIGFuZCBpbml0aWFsaXplZCBjb3JyZWN0bHksIGlmIGBwcHBgIGlzIGZvdW5kLCBgcHBwLVx1MDAzZWRldmAgY2FuICpuZXZlciogYmUgTlVMTC4gVGhlIGNvZGUgc2VlbXMgdG8gY2hlY2sgYGlmIChwcHAgXHUwMDI2XHUwMDI2IHBwcC1cdTAwM2VkZXYpYCBidXQgdGhhdCBsb29rcyBsaWtlIGVpdGhlciBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcg4oCTIGFudGljaXBhdGluZyBzb21lIGVhcmxpZXIsIG5vdy1yZW1vdmVkIHBvc3NpYmlsaXR5IOKAkyBvciBwZXJoYXBzIGp1c3QgYSByZW1uYW50IG9mIGEgdGltZSB3aGVuIGBwcHBgIGFuZCBgZGV2YCB3ZXJlIG1hbmFnZWQgc2VwYXJhdGVseS4gTm93LCB0aGUgYHBwcC1cdTAwM2VkZXZgIGlzIGEgcmVkdW5kYW50IHBvaW50ZXIuXG5cbk15IGFzc2Vzc21lbnQgaXMgdGhhdCByZW1vdmluZyB0aGlzIGBwcHAtXHUwMDNlZGV2YCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggYG5ldGRldl9mcm9tX3ByaXYocHBwKWAgaXMgcHVyZWx5IGEgc3RydWN0dXJhbCByZWZhY3RvcmluZy4gSXQncyBhYm91dCBzdHJlYW1saW5pbmcgdGhlIGNvZGUgYW5kIGltcHJvdmluZyBtYWludGFpbmFiaWxpdHksIGJ1dCBpdCBkb2Vzbid0IGFjdHVhbGx5IGFsdGVyIHRoZSAqZnVuY3Rpb25hbGl0eSogb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyBpbiBhbnkgd2F5LlxuXG5HaXZlbiB0aGlzIHVuZGVyc3RhbmRpbmcsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBpcyBhIGNsZWFuIHJlZmFjdG9yIHRvIGVsaW1pbmF0ZSBhIHJlZHVuZGFudCBwb2ludGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQ2NSwiT3V0cHV0VG9rZW5zIjo5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQwMDowNDoyMC45NDE1NDUzNzRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW1vdmVzIHRoZSByZWR1bmRhbnQgYGRldmAgcG9pbnRlciBmcm9tIGBzdHJ1Y3QgcHBwYCBhbmQgcmVwbGFjZXMgaXQgd2l0aCBgbmV0ZGV2X2Zyb21fcHJpdihwcHApYC4gU2luY2UgYHN0cnVjdCBwcHBgIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIG9mIGBzdHJ1Y3QgbmV0X2RldmljZWAsIHRoaXMgZG9lcyBub3QgY2hhbmdlIGFueSBmdW5jdGlvbmFsIGxvZ2ljIG9yIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVtb3ZlcyB0aGUgcmVkdW5kYW50IGBkZXZgIHBvaW50ZXIgZnJvbSBgc3RydWN0IHBwcGAgYW5kIHJlcGxhY2VzIGl0IHdpdGggYG5ldGRldl9mcm9tX3ByaXYocHBwKWAuIFNpbmNlIGBzdHJ1Y3QgcHBwYCBpcyBhbGxvY2F0ZWQgYXMgdGhlIHByaXZhdGUgZGF0YSBvZiBgc3RydWN0IG5ldF9kZXZpY2VgLCB0aGlzIGRvZXMgbm90IGNoYW5nZSBhbnkgZnVuY3Rpb25hbCBsb2dpYyBvciBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowqfzsd[1] Phase: Running StartedAt: 2026-08-01 00:04:32 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqfzsd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 00:04:33 +0000 UTC FinishedAt: 2026-08-01 00:04:41 +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,}