Name: series-workflowg676x Phase: Failed StartedAt: 2026-08-04 22:37:36 +0000 UTC FinishedAt: 2026-08-04 23:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg676x[0] Phase: Succeeded StartedAt: 2026-08-04 22:37:36 +0000 UTC FinishedAt: 2026-08-04 23:17:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg676x[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 22:37:36 +0000 UTC FinishedAt: 2026-08-04 23:17:58 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGk0MGUsIGlhdmYsIGljZSwgaWdjKS4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGVzZSBkcml2ZXJzIHR5cGljYWxseSByZXF1aXJlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgZmlybXdhcmUgKGUuZy4sIEFkbWluUSkgZHVyaW5nIHByb2JlLCBtZWFuaW5nIHRoZXkgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBvciByZWFjaGVkIHZpYSBnZW5lcmljIFBDSSBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjVlMTEzYTRhMzMzNTEzMzZmZDUzMGQzODhkOTg4ODE2N2MxMDI5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjM6MTc6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IGEwNDY4MzAwNGE1NjcuLjRmMGY3NjI2NjA1YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNjkwNyw3ICYjNDM7NjkwNyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9od19zZXRfZGNiX2NvbmZpZyhzdHJ1Y3QgaTQwZV9wZiAqcGYsXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogQ2hlY2sgaWYgbmVlZCByZWNvbmZpZ3VyYXRpb24gKi9cbi1cdGlmICghbWVtY21wKFx1MDAyNm5ld19jZmcsIFx1MDAyNm9sZF9jZmcsIHNpemVvZihuZXdfY2ZnKSkpIHtcbiYjNDM7XHRpZiAoIW1lbWNtcChuZXdfY2ZnLCBvbGRfY2ZnLCBzaXplb2YoKm5ld19jZmcpKSkge1xuIFx0XHRkZXZfZGJnKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtObyBDaGFuZ2UgaW4gRENCIENvbmZpZyByZXF1aXJlZC5cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbkBAIC0xNDQ5NCwxMyAmIzQzOzE0NDk0LDE1IEBAIHN0cnVjdCBpNDBlX3ZzaSAqaTQwZV92c2lfc2V0dXAoc3RydWN0IGk0MGVfcGYgKnBmLCB1OCB0eXBlLFxuIFx0aWYgKHZzaS1cdTAwM2VuZXRkZXZfcmVnaXN0ZXJlZCkge1xuIFx0XHR2c2ktXHUwMDNlbmV0ZGV2X3JlZ2lzdGVyZWQgPSBmYWxzZTtcbiBcdFx0dW5yZWdpc3Rlcl9uZXRkZXYodnNpLVx1MDAzZW5ldGRldik7XG4tXHRcdGZyZWVfbmV0ZGV2KHZzaS1cdTAwM2VuZXRkZXYpO1xuLVx0XHR2c2ktXHUwMDNlbmV0ZGV2ID0gTlVMTDtcbiBcdH1cbiBlcnJfZGxfcG9ydDpcbiBcdGlmICh2c2ktXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9NQUlOKVxuIFx0XHRpNDBlX2RldmxpbmtfZGVzdHJveV9wb3J0KHBmKTtcbiBlcnJfbmV0ZGV2OlxuJiM0MztcdGlmICh2c2ktXHUwMDNlbmV0ZGV2KSB7XG4mIzQzO1x0XHRmcmVlX25ldGRldih2c2ktXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHZzaS1cdTAwM2VuZXRkZXYgPSBOVUxMO1xuJiM0MztcdH1cbiBcdGk0MGVfYXFfZGVsZXRlX2VsZW1lbnQoXHUwMDI2cGYtXHUwMDNlaHcsIHZzaS1cdTAwM2VzZWlkLCBOVUxMKTtcbiBlcnJfdnNpOlxuIFx0aTQwZV92c2lfY2xlYXIodnNpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5pbmRleCBhMjZjM2Q0N2VjMTU2Li4wY2M0MzRiMjZlYjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5AQCAtNDk0Myw2ICYjNDM7NDk0MywyMyBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBlbmFibGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcbiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmVcbiYjNDM7ICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcbiYjNDM7ICpcbiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4mIzQzOyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCYjMzk7cyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcbiYjNDM7ICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNldHRpbmcpXG4mIzQzO1x0XHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGUgcGZcbkBAIC00OTg3LDE5ICYjNDM7NTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxuIFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHBmLVx1MDAzZXZzaVt2Zi1cdTAwM2VsYW5fdnNpX2lkeF0tXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcbiBcbi1cdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuJiM0MztcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXG4mIzQzO1x0aWYgKCFzZXR0aW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAodmYtXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXHUwMDNlIDAgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSB8fFxuJiM0MztcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9zdGF0ZXMpKSkge1xuJiM0MztcdFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XG4mIzQzO1x0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwmIzM0OyxcbiBcdFx0IHZmX2lkLCBzZXR0aW5nID8gXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7dW5cJiMzNDspO1xuIFxuLVx0aWYgKHZmLVx1MDAzZWFkcV9lbmFibGVkKSB7XG4tXHRcdGlmICghdmYtXHUwMDNldHJ1c3RlZCkge1xuLVx0XHRcdGRldl9pbmZvKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwmIzM0O1ZGICV1IG5vIGxvbmdlciBUcnVzdGVkLCBkZWxldGluZyBhbGwgY2xvdWQgZmlsdGVyc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCB2Zl9pZCk7XG4tXHRcdFx0aTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpO1xuLVx0XHR9XG4tXHR9XG4tXG4gb3V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbmluZGV4IDA1MGY4MjQxZWY1ZTYuLjVmY2JmYTBjYTg1NTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbkBAIC0yNTksNyAmIzQzOzI1OSw2IEBAIHN0cnVjdCBpYXZmX2FkYXB0ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGZpbmlzaF9jb25maWc7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dhaXRxdWV1ZTtcbi1cdHdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTtcbiBcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fZmlsdGVyX2xpc3Q7XG4gXHRpbnQgbnVtX3ZsYW5fZmlsdGVycztcbkBAIC01ODgsOCAmIzQzOzU4Nyw5IEBAIHZvaWQgaWF2Zl9jb25maWd1cmVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9lbmFibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9kaXNhYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfbWFwX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiYjNDM7dm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuQEAgLTYwNiw2ICYjNDM7NjA2LDEzIEBAIHZvaWQgaWF2Zl9kaXNhYmxlX3ZsYW5fc3RyaXBwaW5nKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0ICAgICAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcGNvZGUsXG4gXHRcdFx0ICAgICAgZW51bSBpYXZmX3N0YXR1cyB2X3JldHZhbCwgdTggKm1zZywgdTE2IG1zZ2xlbik7XG4mIzQzO2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXG4mIzQzO1x0XHRcdFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLFxuJiM0MztcdFx0XHRcdFx0XHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmNvbmRfZGF0YSxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcyk7XG4gaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19idyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19xdWFudGFfc2l6ZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xuaW5kZXggMjliODQwM2EwNjZiYy4uM2ZhMjg4ZTM3OThhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC0xMDI5LDYgJiM0MzsxMDI5LDYwIEBAIHN0YXRpYyBib29sIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfbWFjX2NoYW5nZV9kb25lIC0gQ2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWRcbiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqIEBkYXRhOiBNQUMgYWRkcmVzcyBiZWluZyBjaGVja2VkIChhcyBjb25zdCB2b2lkICopXG4mIzQzOyAqIEB2X29wOiB2aXJ0Y2hubCBvcGNvZGUgZnJvbSBwcm9jZXNzZWQgbWVzc2FnZVxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsYmFjayBmb3IgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKCkgdG8gY2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBpYXZmX21hY19jaGFuZ2VfZG9uZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdCBjb25zdCB2b2lkICpkYXRhLCBlbnVtIHZpcnRjaG5sX29wcyB2X29wKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzc1xuJiM0MzsgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGFkZHI6IE1BQyBhZGRyZXNzIHRvIHNldFxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kIE1BQyBjaGFuZ2UgcmVxdWVzdCB0byBQRiBhbmQgcG9sbCBhZG1pbiBxdWV1ZSBmb3IgcmVzcG9uc2UuXG4mIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byAyLjUgc2Vjb25kcy5cbiYjNDM7ICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZlxuJiM0MzsgKiBhbGxvY2F0aW9uIGZhaWxzIGFmdGVyIG1lc3NhZ2UgaXMgc2VudCB0byBQRi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaWF2Zl9zZXRfbWFjX3N5bmMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChhZGFwdGVyLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdGV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTtcbiYjNDM7XHRldmVudC5tc2dfYnVmID0ga3phbGxvYyhldmVudC5idWZfbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWV2ZW50Lm1zZ19idWYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWF2Zl9hZGRfZXRoZXJfYWRkcnMoYWRhcHRlcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgXHUwMDI2ZXZlbnQsXG4mIzQzO1x0XHRcdFx0XHQgIGlhdmZfbWFjX2NoYW5nZV9kb25lLCBhZGRyLCAyNTAwKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShldmVudC5tc2dfYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGlhdmZfc2V0X21hYyAtIE5ETyBjYWxsYmFjayB0byBzZXQgcG9ydCBNQUMgYWRkcmVzc1xuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC0xMDQyLDI5ICYjNDM7MTA5NiwzMCBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxuIFx0c3RydWN0IHNvY2thZGRyICphZGRyID0gcDtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cdTAwM2VzdGF0ZSBcdTAwM2MgX19JQVZGX0RPV04pXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiBcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4gXHRyZXQgPSBpYXZmX3JlcGxhY2VfcHJpbWFyeV9tYWMoYWRhcHRlciwgYWRkci1cdTAwM2VzYV9kYXRhKTtcbi1cbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci1cdTAwM2VzYV9kYXRhKSxcbi1cdFx0XHRcdFx0ICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjUwMCkpO1xuLVxuLVx0LyogSWYgcmV0IFx1MDAzYyAwIHRoZW4gaXQgbWVhbnMgd2FpdCB3YXMgaW50ZXJydXB0ZWQuXG4tXHQgKiBJZiByZXQgPT0gMCB0aGVuIGl0IG1lYW5zIHdlIGdvdCBhIHRpbWVvdXQuXG4tXHQgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLFxuLVx0ICogY2hlY2sgaWYgbmV0ZGV2IE1BQyB3YXMgdXBkYXRlZCB0byByZXF1ZXN0ZWQgTUFDLFxuLVx0ICogaWYgeWVzIHRoZW4gc2V0IE1BQyBzdWNjZWVkZWQgb3RoZXJ3aXNlIGl0IGZhaWxlZCByZXR1cm4gLUVBQ0NFU1xuLVx0ICovXG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdHJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0LyogUm9sbGJhY2sgb25seSBpZiBzZW5kIGZhaWxlZCAobWVzc2FnZSBuZXZlciByZWFjaGVkIFBGKS5cbiYjNDM7XHRcdCAqIERvbiYjMzk7dCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhc1xuJiM0MztcdFx0ICogc2VudCBhbmQgUEYgd2lsbCBldmVudHVhbGx5IHJlc3BvbmQuIFdoZW4gdGhlIHJlc3BvbnNlIGFycml2ZXMsXG4mIzQzO1x0XHQgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpXG4mIzQzO1x0XHQgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FQUdBSU4pIHtcbiYjNDM7XHRcdFx0aWF2Zl9tYWNfYWRkX3JlamVjdChhZGFwdGVyKTtcbiYjNDM7XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0XHR9XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi1cdTAwM2VkZXZfYWRkciwgYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG5AQCAtNTM5NCw5ICYjNDM7NTQ0OSw2IEBAIHN0YXRpYyBpbnQgaWF2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdC8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHRyYW5zaXRpb24gdG8gZG93biBzdGF0dXMgKi9cbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YWRhcHRlci1cdTAwM2Vkb3duX3dhaXRxdWV1ZSk7XG4gXG4tXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB2aXJ0Y2hhbm5lbCBldmVudHMgKi9cbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUpO1xuLVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWRhcHRlci1cdTAwM2VwdHAuYXFfY21kcyk7XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZF9sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5pbmRleCBlYzIzNGNjOGJkOWRiLi5lNmI3ZThmODJjN2MxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zl9wdHAuaFwmIzM0O1xuQEAgLTU1NSwyMCAmIzQzOzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxuLSAqKi9cbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsO1xuIFx0c3RydWN0IGlhdmZfbWFjX2ZpbHRlciAqZjtcbiBcdGludCBpID0gMCwgY291bnQgPSAwO1xuIFx0Ym9vbCBtb3JlID0gZmFsc2U7XG4gXHRzaXplX3QgbGVuO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbiBcdFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXFxuXCYjMzQ7LFxuIFx0XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuQEAgLTU4MCw3ICYjNDM7NTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKCFjb3VudCkge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWFxX3JlcXVpcmVkIFx1MDAyNj0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX0FERF9FVEhfQUREUjtcbiBcbkBAIC01OTQsOCAmIzQzOzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXZlYWwpIHtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR2ZWFsLVx1MDAzZXZzaV9pZCA9IGFkYXB0ZXItXHUwMDNldnNpX3Jlcy1cdTAwM2V2c2lfaWQ7XG5AQCAtNjE1LDggJiM0Mzs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuIFxuLVx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4mIzQzO1x0cmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4gXHRrZnJlZSh2ZWFsKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1VuYWJsZSB0byBzZW5kIEFERF9FVEhfQUREUiBtZXNzYWdlIHRvIFBGLCBlcnJvciAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC03MTIsOCAmIzQzOzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLlxuLSAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcbkBAIC0yMzY0LDcgJiM0MzsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuIFx0XHRcdC8qIHJlc3RvcmUgYWRtaW5pc3RyYXRpdmVseSBzZXQgTUFDIGFkZHJlc3MgKi9cbiBcdFx0XHRldGhlcl9hZGRyX2NvcHkoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbi1cdFx0XHR3YWtlX3VwKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXFxuXCYjMzQ7LFxuQEAgLTI1NTUsNyAmIzQzOzI1NjYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIpO1xuIFx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4gXHRcdH1cbi1cdFx0d2FrZV91cChcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHtcbiBcdFx0c3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9XG5AQCAtMjk1MCwzICYjNDM7Mjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0fSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi9cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXG4mIzQzOyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuJiM0MzsgKiBAZXZlbnQ6IHByZS1hbGxvY2F0ZWQgZXZlbnQgYnVmZmVyIHRvIHVzZSBmb3IgcG9sbGluZ1xuJiM0MzsgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXG4mIzQzOyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXG4mIzQzOyAqIEB0aW1lb3V0X21zOiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHNcbiYjNDM7ICpcbiYjNDM7ICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxuJiM0MzsgKiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggdmFsaWQgbWVzc2FnZSwgY2FsbHMgdGhlIGNvbmRpdGlvbiBjYWxsYmFjayB0byBjaGVja1xuJiM0MzsgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXG4mIzQzOyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xuJiM0MzsgKiBwb2xsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUgb3IgdGltZW91dCBleHBpcmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXG4mIzQzOyAqIHN0YXRlIG1pc21hdGNoIGlmIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxuJiM0MzsgKiBwb2xsaW5nIGhhcmR3YXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbiYjNDM7XHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4mIzQzO1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlhdmZfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XHRlbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4mIzQzO1x0aW50IHJldCA9IC1FQUdBSU47XG4mIzQzO1x0dTE2IHBlbmRpbmcgPSAwO1xuJiM0MztcdHUzMiB2X3JldHZhbDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGlmICghcGVuZGluZylcbiYjNDM7XHRcdFx0dXNsZWVwX3JhbmdlKDUwLCA3NSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlhdmZfY2xlYW5fYXJxX2VsZW1lbnQoaHcsIGV2ZW50LCBcdTAwMjZwZW5kaW5nKSA9PSBJQVZGX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdFx0cmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XG4mIzQzO1x0XHRcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4mIzQzO1x0XHRcdFx0dl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC1cdTAwM2VkZXNjLmNvb2tpZV9sb3cpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBldmVudC1cdTAwM2Vtc2dfYnVmLCBldmVudC1cdTAwM2Vtc2dfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGNvbmRpdGlvbihhZGFwdGVyLCBjb25kX2RhdGEsIHJlY2VpdmVkX29wKSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0bWVtc2V0KGV2ZW50LVx1MDAzZW1zZ19idWYsIDAsIElBVkZfTUFYX0FRX0JVRl9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZW5kaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uODNkYTViYTZlZWIxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMzI4LDYgJiM0MzszMjgsOCBAQCBlbnVtIGljZV92c2lfc3RhdGUge1xuIHN0cnVjdCBpY2VfdnNpX3N0YXRzIHtcbiBcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7ICAvKiBUeCByaW5nIHN0YXRzIGFycmF5ICovXG4gXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzOyAgLyogUnggcmluZyBzdGF0cyBhcnJheSAqL1xuJiM0MztcdHUxNiB0eF9yaW5nX3N0YXRzX2xlbjtcbiYjNDM7XHR1MTYgcnhfcmluZ19zdGF0c19sZW47XG4gfTtcbiBcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5pbmRleCBiMDY5ZTZjNTE0ZmIxLi42ZTdiYmE0NzM4OTg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtOTUsNyAmIzQzOzk1LDcgQEAgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9yZXByKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3JlcHIgKnJlcHIpXG4gXHRcdHJldHVybjtcbiBcbiBcdGljZV92c2lfdXBkYXRlX3NlY3VyaXR5KHZzaSwgaWNlX3ZzaV9jdHhfc2V0X2FudGlzcG9vZik7XG4tXHRtZXRhZGF0YV9kc3RfZnJlZShyZXByLVx1MDAzZWRzdCk7XG4mIzQzO1x0ZHN0X3JlbGVhc2UoXHUwMDI2cmVwci1cdTAwM2Vkc3QtXHUwMDNlZHN0KTtcbiBcdHJlcHItXHUwMDNlZHN0ID0gTlVMTDtcbiBcdGljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh2c2ksIHJlcHItXHUwMDNlcGFyZW50X21hYyxcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTcuLmM3MTg0OTExOWQwNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5AQCAtMzM4LDcgJiM0MzszMzgsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4gXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0aW50IGk7XG4gXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuIFx0XHRyZXR1cm47XG5AQCAtMzQ5LDE0ICYjNDM7MzQ4LDE0IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0aWYgKCF2c2lfc3RhdClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWNlX2Zvcl9lYWNoX2FsbG9jX3R4cSh2c2ksIGkpIHtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4gXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4gXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4gXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4gXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbkBAIC01MTMsNTEgJiM0Mzs1MTIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21zaXhfY2xlYW5fcmluZ3MoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5c1xuLSAqIEB2c2k6IFZTSSBwb2ludGVyXG4tICovXG4tc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4te1xuLVx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuLVx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbi1cbi1cdGlmICh2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX0NITkwpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKCFwZi1cdTAwM2V2c2lfc3RhdHMpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0aWYgKHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSlcbi1cdC8qIHJlYWxsb2Mgd2lsbCBoYXBwZW4gaW4gcmVidWlsZCBwYXRoICovXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0dnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpO1xuLVx0aWYgKCF2c2lfc3RhdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID1cbi1cdFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCB2c2ktXHUwMDNlYWxsb2NfdHhxKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cylcbi1cdFx0Z290byBlcnJfYWxsb2NfdHg7XG4tXG4tXHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID1cbi1cdFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCB2c2ktXHUwMDNlYWxsb2NfcnhxKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cylcbi1cdFx0Z290byBlcnJfYWxsb2Nfcng7XG4tXG4tXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSB2c2lfc3RhdDtcbi1cbi1cdHJldHVybiAwO1xuLVxuLWVycl9hbGxvY19yeDpcbi1cdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xuLWVycl9hbGxvY190eDpcbi1cdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xuLVx0a2ZyZWUodnNpX3N0YXQpO1xuLVx0cGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdID0gTlVMTDtcbi1cdHJldHVybiAtRU5PTUVNO1xuLX1cbi1cbiAvKipcbiAgKiBpY2VfdnNpX2FsbG9jX2RlZiAtIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgVlNJXG4gICogQHZzaTogcHRyIHRvIFZTSVxuQEAgLTIzMDMsNiAmIzQzOzIyNTcsODUgQEAgc3RhdGljIGludCBpY2VfdnNpX2NmZ190Y19sYW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzXG4mIzQzOyAqIEB2c2k6IFZTSSBwb2ludGVyXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiYjNDM7e1xuJiM0MztcdHUxNiByZXFfdHhxID0gdnNpLVx1MDAzZXJlcV90eHEgPyB2c2ktXHUwMDNlcmVxX3R4cSA6IHZzaS1cdTAwM2VhbGxvY190eHE7XG4mIzQzO1x0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzO1xuJiM0MztcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuJiM0MztcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4mIzQzO1x0dTE2IHByZXZfdHhxLCBwcmV2X3J4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZzaS1cdTAwM2V0eXBlID09IElDRV9WU0lfQ0hOTClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR2c2lfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0KSB7XG4mIzQzO1x0XHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XG4mIzQzO1x0XHRpZiAoIXZzaV9zdGF0KVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByZXZfdHhxID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47XG4mIzQzO1x0aWYgKHJlcV90eHEgXHUwMDNjIHByZXZfdHhxKSB7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gcmVxX3R4cTsgaSBcdTAwM2MgcHJldl90eHE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4mIzQzO1x0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4mIzQzO1x0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCByZXFfdHhxLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpIHtcbiYjNDM7XHRcdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xuJiM0MztcdH1cbiYjNDM7XHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbiA9IHJlcV90eHE7XG4mIzQzO1xuJiM0MztcdHByZXZfcnhxID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW47XG4mIzQzO1x0aWYgKHJlcV9yeHEgXHUwMDNjIHByZXZfcnhxKSB7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4mIzQzO1x0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cnhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4mIzQzO1x0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbiYjNDM7XHRcdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPSByeF9yaW5nX3N0YXRzO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xuJiM0MztcdH1cbiYjNDM7XHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbiA9IHJlcV9yeHE7XG4mIzQzO1xuJiM0MztcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDpcbiYjNDM7XHRpZiAoIXBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSkge1xuJiM0MztcdFx0LyogdnNpX3N0YXQgd2FzIG5vdCB2aXNpYmxlIGJlZm9yZSBjdXJyZW50IGFsbG9jIGF0dGVtcHQgKi9cbiYjNDM7XHRcdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xuJiM0MztcdFx0a2ZyZWUodnNpX3N0YXQpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX2NmZ19kZWYgLSBjb25maWd1cmUgZGVmYXVsdCBWU0kgYmFzZWQgb24gdGhlIHR5cGVcbiAgKiBAdnNpOiBwb2ludGVyIHRvIFZTSVxuQEAgLTIzMjAsNyAmIzQzOzIzNTMsNyBAQCBzdGF0aWMgaW50IGljZV92c2lfY2ZnX2RlZihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogYWxsb2NhdGUgbWVtb3J5IGZvciBUeC9SeCByaW5nIHN0YXQgcG9pbnRlcnMgKi9cbi1cdHJldCA9IGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcbiYjNDM7XHRyZXQgPSBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5yb2xsX3ZzaV9hbGxvYztcbiBcbkBAIC0zMDExLDY2ICYjNDM7MzA0NCw2IEBAIGljZV92c2lfcmVidWlsZF9zZXRfY29hbGVzY2Uoc3RydWN0IGljZV92c2kgKnZzaSxcbiBcdH1cbiB9XG4gXG4tLyoqXG4tICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lc1xuLSAqIEB2c2k6IFZTSSBwb2ludGVyXG4tICovXG4tc3RhdGljIGludFxuLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuLXtcbi1cdHUxNiByZXFfdHhxID0gdnNpLVx1MDAzZXJlcV90eHEgPyB2c2ktXHUwMDNlcmVxX3R4cSA6IHZzaS1cdTAwM2VhbGxvY190eHE7XG4tXHR1MTYgcmVxX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxID8gdnNpLVx1MDAzZXJlcV9yeHEgOiB2c2ktXHUwMDNlYWxsb2NfcnhxO1xuLVx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0cztcbi1cdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XG4tXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4tXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0dTE2IHByZXZfdHhxID0gdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cdHUxNiBwcmV2X3J4cSA9IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4tXHRpbnQgaTtcbi1cbi1cdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuLVxuLVx0aWYgKHJlcV90eHEgXHUwMDNjIHByZXZfdHhxKSB7XG4tXHRcdGZvciAoaSA9IHJlcV90eHE7IGkgXHUwMDNjIHByZXZfdHhxOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHR0eF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCByZXFfdHhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVxuLVx0aWYgKHJlcV9yeHEgXHUwMDNjIHByZXZfcnhxKSB7XG4tXHRcdGZvciAoaSA9IHJlcV9yeHE7IGkgXHUwMDNjIHByZXZfcnhxOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qKlxuICAqIGljZV92c2lfcmVidWlsZCAtIFJlYnVpbGQgVlNJIGFmdGVyIHJlc2V0XG4gICogQHZzaTogVlNJIHRvIGJlIHJlYnVpbGRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbmluZGV4IGUwNGRlMDIxNTU5NjYuLjU1ODkzNzg5OTgxODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTEzNjYsNiAmIzQzOzEzNjYsMjMgQEAgaW50IGljZV9zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgdTggKm1hYylcbiBcdHJldHVybiBfX2ljZV9zZXRfdmZfbWFjKGljZV9uZXRkZXZfdG9fcGYobmV0ZGV2KSwgdmZfaWQsIG1hYyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XG4mIzQzOyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXG4mIzQzOyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXG4mIzQzOyAqXG4mIzQzOyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxuJiM0MzsgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQmIzM5O3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkXG4mIzQzOyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2V0dGluZylcbiYjNDM7XHRcdHNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGNsZWFyX2JpdChJQ0VfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX3NldF92Zl90cnVzdFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC0xNDAxLDExICYjNDM7MTQxOCwxOSBAQCBpbnQgaWNlX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgdHJ1c3RlZClcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dmYtXHUwMDNlY2ZnX2xvY2spO1xuIFxuLVx0d2hpbGUgKCF0cnVzdGVkIFx1MDAyNlx1MDAyNiB2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4tXHRcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcbi1cbi1cdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuLVx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbiYjNDM7XHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xuJiM0MztcdGlmICghdHJ1c3RlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKHZmLVx1MDAzZW51bV9tYWNfbGxkcCBcdTAwM2UgMCB8fFxuJiM0MztcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi1cdTAwM2V2Zl9zdGF0ZXMpKSkge1xuJiM0MztcdFx0d2hpbGUgKHZmLVx1MDAzZW51bV9tYWNfbGxkcClcbiYjNDM7XHRcdFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xuJiM0MztcdFx0dmYtXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XG4mIzQzO1x0XHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbiYjNDM7XHRcdGljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7XG4mIzQzO1x0fVxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1ZGICV1IGlzIG5vdyAlc3RydXN0ZWRcXG5cJiMzNDssXG4gXHRcdCB2Zl9pZCwgdHJ1c3RlZCA/IFwmIzM0O1wmIzM0OyA6IFwmIzM0O3VuXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5pbmRleCAxNmZjYzhjZjYxOTE5Li4zOTA0M2Q4Y2ExYmY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5AQCAtNzU4NSwxMSAmIzQzOzc1ODUsMTMgQEAgc3RhdGljIGludCBfX2lnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHJwbSlcbiBcdFx0ZXJyID0gX19pZ2Nfb3BlbihuZXRkZXYsIHRydWUpO1xuIFx0XHRpZiAoIXJwbSlcbiBcdFx0XHRydG5sX3VubG9jaygpO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpNDBlLCBpYXZmLCBpY2UsIGlnYykuIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlc2UgZHJpdmVycyB0eXBpY2FsbHkgcmVxdWlyZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIGZpcm13YXJlIChlLmcuLCBBZG1pblEpIGR1cmluZyBwcm9iZSwgbWVhbmluZyB0aGV5IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgb3IgcmVhY2hlZCB2aWEgZ2VuZXJpYyBQQ0kgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1ZTExM2E0YTMzMzUxMzM2ZmQ1MzBkMzg4ZDk4ODgxNjdjMTAyOTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDIzOjE3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggYTA0NjgzMDA0YTU2Ny4uNGYwZjc2MjY2MDViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC02OTA3LDcgJiM0Mzs2OTA3LDcgQEAgc3RhdGljIGludCBpNDBlX2h3X3NldF9kY2JfY29uZmlnKHN0cnVjdCBpNDBlX3BmICpwZiwKIAlpbnQgcmV0OwogCiAJLyogQ2hlY2sgaWYgbmVlZCByZWNvbmZpZ3VyYXRpb24gKi8KLQlpZiAoIW1lbWNtcCgmYW1wO25ld19jZmcsICZhbXA7b2xkX2NmZywgc2l6ZW9mKG5ld19jZmcpKSkgewomIzQzOwlpZiAoIW1lbWNtcChuZXdfY2ZnLCBvbGRfY2ZnLCBzaXplb2YoKm5ld19jZmcpKSkgewogCQlkZXZfZGJnKCZhbXA7cGYtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtObyBDaGFuZ2UgaW4gRENCIENvbmZpZyByZXF1aXJlZC5cbiYjMzQ7KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQ0OTQsMTMgJiM0MzsxNDQ5NCwxNSBAQCBzdHJ1Y3QgaTQwZV92c2kgKmk0MGVfdnNpX3NldHVwKHN0cnVjdCBpNDBlX3BmICpwZiwgdTggdHlwZSwKIAlpZiAodnNpLSZndDtuZXRkZXZfcmVnaXN0ZXJlZCkgewogCQl2c2ktJmd0O25ldGRldl9yZWdpc3RlcmVkID0gZmFsc2U7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KHZzaS0mZ3Q7bmV0ZGV2KTsKLQkJZnJlZV9uZXRkZXYodnNpLSZndDtuZXRkZXYpOwotCQl2c2ktJmd0O25ldGRldiA9IE5VTEw7CiAJfQogZXJyX2RsX3BvcnQ6CiAJaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJNDBFX1ZTSV9NQUlOKQogCQlpNDBlX2RldmxpbmtfZGVzdHJveV9wb3J0KHBmKTsKIGVycl9uZXRkZXY6CiYjNDM7CWlmICh2c2ktJmd0O25ldGRldikgewomIzQzOwkJZnJlZV9uZXRkZXYodnNpLSZndDtuZXRkZXYpOwomIzQzOwkJdnNpLSZndDtuZXRkZXYgPSBOVUxMOwomIzQzOwl9CiAJaTQwZV9hcV9kZWxldGVfZWxlbWVudCgmYW1wO3BmLSZndDtodywgdnNpLSZndDtzZWlkLCBOVUxMKTsKIGVycl92c2k6CiAJaTQwZV92c2lfY2xlYXIodnNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMKaW5kZXggYTI2YzNkNDdlYzE1Ni4uMGNjNDM0YjI2ZWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMKQEAgLTQ5NDMsNiAmIzQzOzQ5NDMsMjMgQEAgaW50IGk0MGVfbmRvX3NldF92Zl9zcG9vZmNoayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgZW5hYmxlKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpNDBlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0CiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmUKJiM0MzsgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZwomIzQzOyAqCiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuCiYjNDM7ICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0JiMzOTtzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZAomIzQzOyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGk0MGVfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGk0MGVfdmYgKnZmLCBib29sIHNldHRpbmcpCiYjNDM7ewomIzQzOwlpZiAoc2V0dGluZykKJiM0MzsJCXNldF9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCAmYW1wO3ZmLSZndDt2Zl9jYXBzKTsKJiM0MzsJZWxzZQomIzQzOwkJY2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgJmFtcDt2Zi0mZ3Q7dmZfY2Fwcyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpNDBlX25kb19zZXRfdmZfdHJ1c3QKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIHBmCkBAIC00OTg3LDE5ICYjNDM7NTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKQogCXNldF9iaXQoX19JNDBFX01BQ1ZMQU5fU1lOQ19QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogCXBmLSZndDt2c2lbdmYtJmd0O2xhbl92c2lfaWR4XS0mZ3Q7ZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDsKIAotCWk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpOwomIzQzOwkvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqLwomIzQzOwlpZiAoIXNldHRpbmcgJmFtcDsmYW1wOwomIzQzOwkgICAgKHZmLSZndDthZHFfZW5hYmxlZCB8fCB2Zi0mZ3Q7bnVtX2Nsb3VkX2ZpbHRlcnMgJmd0OyAwIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9VQ19QUk9NSVNDLCAmYW1wO3ZmLSZndDt2Zl9zdGF0ZXMpIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCAmYW1wO3ZmLSZndDt2Zl9zdGF0ZXMpKSkgewomIzQzOwkJaTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7CiYjNDM7CQlpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpNDBlX3NldHVwX3ZmX3RydXN0KHZmLCBzZXR0aW5nKTsKJiM0MzsJfQomIzQzOwogCWRldl9pbmZvKCZhbXA7cGYtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtWRiAldSBpcyBub3cgJXN0cnVzdGVkXG4mIzM0OywKIAkJIHZmX2lkLCBzZXR0aW5nID8gJiMzNDsmIzM0OyA6ICYjMzQ7dW4mIzM0Oyk7CiAKLQlpZiAodmYtJmd0O2FkcV9lbmFibGVkKSB7Ci0JCWlmICghdmYtJmd0O3RydXN0ZWQpIHsKLQkJCWRldl9pbmZvKCZhbXA7cGYtJmd0O3BkZXYtJmd0O2RldiwKLQkJCQkgJiMzNDtWRiAldSBubyBsb25nZXIgVHJ1c3RlZCwgZGVsZXRpbmcgYWxsIGNsb3VkIGZpbHRlcnNcbiYjMzQ7LAotCQkJCSB2Zl9pZCk7Ci0JCQlpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7Ci0JCX0KLQl9Ci0KIG91dDoKIAljbGVhcl9iaXQoX19JNDBFX1ZJUlRDSE5MX09QX1BFTkRJTkcsIHBmLSZndDtzdGF0ZSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKaW5kZXggMDUwZjgyNDFlZjVlNi4uNWZjYmZhMGNhODU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKQEAgLTI1OSw3ICYjNDM7MjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmaW5pc2hfY29uZmlnOwogCXdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlOwotCXdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTsKIAlzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3JzOwogCXN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDsKIAlpbnQgbnVtX3ZsYW5fZmlsdGVyczsKQEAgLTU4OCw4ICYjNDM7NTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9kaXNhYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwomIzQzO3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTYwNiw2ICYjNDM7NjA2LDEzIEBAIHZvaWQgaWF2Zl9kaXNhYmxlX3ZsYW5fc3RyaXBwaW5nKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLAogCQkJICAgICAgZW51bSBpYXZmX3N0YXR1cyB2X3JldHZhbCwgdTggKm1zZywgdTE2IG1zZ2xlbik7CiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsCiYjNDM7CQkJCWJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCQkJCSAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmNvbmRfZGF0YSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpOwogaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX2NmZ19xdWV1ZXNfcXVhbnRhX3NpemUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwppbmRleCAyOWI4NDAzYTA2NmJjLi4zZmEyODhlMzc5OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMKQEAgLTEwMjksNiAmIzQzOzEwMjksNjAgQEAgc3RhdGljIGJvb2wgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWF2Zl9tYWNfY2hhbmdlX2RvbmUgLSBDaGVjayBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZAomIzQzOyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBNQUMgYWRkcmVzcyBiZWluZyBjaGVja2VkIChhcyBjb25zdCB2b2lkICopCiYjNDM7ICogQHZfb3A6IHZpcnRjaG5sIG9wY29kZSBmcm9tIHByb2Nlc3NlZCBtZXNzYWdlCiYjNDM7ICoKJiM0MzsgKiBDYWxsYmFjayBmb3IgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKCkgdG8gY2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGlhdmZfbWFjX2NoYW5nZV9kb25lKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCSBjb25zdCB2b2lkICpkYXRhLCBlbnVtIHZpcnRjaG5sX29wcyB2X29wKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKmFkZHIgPSBkYXRhOwomIzQzOwomIzQzOwlyZXR1cm4gaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoYWRhcHRlci0mZ3Q7bmV0ZGV2LCBhZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzcwomIzQzOyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXQKJiM0MzsgKgomIzQzOyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS4KJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuCiYjNDM7ICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZgomIzQzOyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gZXZlbnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItJmd0O25ldGRldik7CiYjNDM7CiYjNDM7CWV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTsKJiM0MzsJZXZlbnQubXNnX2J1ZiA9IGt6YWxsb2MoZXZlbnQuYnVmX2xlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXZlbnQubXNnX2J1ZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlyZXQgPSBpYXZmX2FkZF9ldGhlcl9hZGRycyhhZGFwdGVyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgJmFtcDtldmVudCwKJiM0MzsJCQkJCSAgaWF2Zl9tYWNfY2hhbmdlX2RvbmUsIGFkZHIsIDI1MDApOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUoZXZlbnQubXNnX2J1Zik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpYXZmX3NldF9tYWMgLSBORE8gY2FsbGJhY2sgdG8gc2V0IHBvcnQgTUFDIGFkZHJlc3MKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEwNDIsMjkgJiM0MzsxMDk2LDMwIEBAIHN0YXRpYyBpbnQgaWF2Zl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChpYXZmX2lzX3Jlc2V0X2luX3Byb2dyZXNzKGFkYXB0ZXIpIHx8IGFkYXB0ZXItJmd0O3N0YXRlICZsdDsgX19JQVZGX0RPV04pCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLSZndDtzYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJcmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItJmd0O3NhX2RhdGEpOwotCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItJmd0O3ZjX3dhaXRxdWV1ZSwKLQkJCQkJICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci0mZ3Q7c2FfZGF0YSksCi0JCQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTsKLQotCS8qIElmIHJldCAmbHQ7IDAgdGhlbiBpdCBtZWFucyB3YWl0IHdhcyBpbnRlcnJ1cHRlZC4KLQkgKiBJZiByZXQgPT0gMCB0aGVuIGl0IG1lYW5zIHdlIGdvdCBhIHRpbWVvdXQuCi0JICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRiwKLQkgKiBjaGVjayBpZiBuZXRkZXYgTUFDIHdhcyB1cGRhdGVkIHRvIHJlcXVlc3RlZCBNQUMsCi0JICogaWYgeWVzIHRoZW4gc2V0IE1BQyBzdWNjZWVkZWQgb3RoZXJ3aXNlIGl0IGZhaWxlZCByZXR1cm4gLUVBQ0NFUwotCSAqLwotCWlmIChyZXQgJmx0OyAwKQomIzQzOwlyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLSZndDtzYV9kYXRhKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyogUm9sbGJhY2sgb25seSBpZiBzZW5kIGZhaWxlZCAobWVzc2FnZSBuZXZlciByZWFjaGVkIFBGKS4KJiM0MzsJCSAqIERvbiYjMzk7dCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhcwomIzQzOwkJICogc2VudCBhbmQgUEYgd2lsbCBldmVudHVhbGx5IHJlc3BvbmQuIFdoZW4gdGhlIHJlc3BvbnNlIGFycml2ZXMsCiYjNDM7CQkgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpCiYjNDM7CQkgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICE9IC1FQUdBSU4pIHsKJiM0MzsJCQlpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShhZGFwdGVyLSZndDtody5tYWMuYWRkciwgbmV0ZGV2LSZndDtkZXZfYWRkcik7CiYjNDM7CQl9CiAJCXJldHVybiByZXQ7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KIAogCWlmICghZXRoZXJfYWRkcl9lcXVhbChuZXRkZXYtJmd0O2Rldl9hZGRyLCBhZGRyLSZndDtzYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC01Mzk0LDkgJiM0Mzs1NDQ5LDYgQEAgc3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCS8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHRyYW5zaXRpb24gdG8gZG93biBzdGF0dXMgKi8KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7YWRhcHRlci0mZ3Q7ZG93bl93YWl0cXVldWUpOwogCi0JLyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2FkYXB0ZXItJmd0O3ZjX3dhaXRxdWV1ZSk7Ci0KIAlJTklUX0xJU1RfSEVBRCgmYW1wO2FkYXB0ZXItJmd0O3B0cC5hcV9jbWRzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7YWRhcHRlci0mZ3Q7cHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7CiAJbXV0ZXhfaW5pdCgmYW1wO2FkYXB0ZXItJmd0O3B0cC5hcV9jbWRfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jCmluZGV4IGVjMjM0Y2M4YmQ5ZGIuLmU2YjdlOGY4MmM3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIC8qIENvcHlyaWdodChjKSAyMDEzIC0gMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X2xvY2suaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpYXZmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpYXZmX3B0cC5oJiMzNDsKQEAgLTU1NSwyMCAmIzQzOzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLAogICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiAgKgogICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLgotICoqLwotdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsOwogCXN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmY7CiAJaW50IGkgPSAwLCBjb3VudCA9IDA7CiAJYm9vbCBtb3JlID0gZmFsc2U7CiAJc2l6ZV90IGxlbjsKJiM0MzsJaW50IHJldDsKIAogCWlmIChhZGFwdGVyLSZndDtjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHsKIAkJLyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqLwogCQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O0Nhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXG4mIzM0OywKIAkJCWFkYXB0ZXItJmd0O2N1cnJlbnRfb3ApOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXNwaW5fbG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21hY192bGFuX2xpc3RfbG9jayk7CkBAIC01ODAsNyAmIzQzOzU4NCw3IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIAlpZiAoIWNvdW50KSB7CiAJCWFkYXB0ZXItJmd0O2FxX3JlcXVpcmVkICZhbXA7PSB+SUFWRl9GTEFHX0FRX0FERF9NQUNfRklMVEVSOwogCQlzcGluX3VubG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21hY192bGFuX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlhZGFwdGVyLSZndDtjdXJyZW50X29wID0gVklSVENITkxfT1BfQUREX0VUSF9BRERSOwogCkBAIC01OTQsOCAmIzQzOzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIAogCXZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCF2ZWFsKSB7CiYjNDM7CQlhZGFwdGVyLSZndDtjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl2ZWFsLSZndDt2c2lfaWQgPSBhZGFwdGVyLSZndDt2c2lfcmVzLSZndDt2c2lfaWQ7CkBAIC02MTUsOCAmIzQzOzYyMCwxNSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAKIAlzcGluX3VubG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21hY192bGFuX2xpc3RfbG9jayk7CiAKLQlpYXZmX3NlbmRfcGZfbXNnKGFkYXB0ZXIsIFZJUlRDSE5MX09QX0FERF9FVEhfQUREUiwgKHU4ICopdmVhbCwgbGVuKTsKJiM0MzsJcmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7CiAJa2ZyZWUodmVhbCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtVbmFibGUgdG8gc2VuZCBBRERfRVRIX0FERFIgbWVzc2FnZSB0byBQRiwgZXJyb3IgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC03MTIsOCAmIzQzOzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiAgKgogICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLgotICoqLwotc3RhdGljIHZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQomIzQzOyAqLwomIzQzO3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLSZndDtuZXRkZXY7CiAJc3RydWN0IGlhdmZfbWFjX2ZpbHRlciAqZiwgKmZ0bXA7CkBAIC0yMzY0LDcgJiM0MzsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCWlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7CiAJCQkvKiByZXN0b3JlIGFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzICovCiAJCQlldGhlcl9hZGRyX2NvcHkoYWRhcHRlci0mZ3Q7aHcubWFjLmFkZHIsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwotCQkJd2FrZV91cCgmYW1wO2FkYXB0ZXItJmd0O3ZjX3dhaXRxdWV1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6CiAJCQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byBkZWxldGUgTUFDIGZpbHRlciwgZXJyb3IgJXNcbiYjMzQ7LApAQCAtMjU1NSw3ICYjNDM7MjU2Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGFwdGVyLSZndDtody5tYWMuYWRkcik7CiAJCQluZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpOwogCQl9Ci0JCXdha2VfdXAoJmFtcDthZGFwdGVyLSZndDt2Y193YWl0cXVldWUpOwogCQlicmVhazsKIAljYXNlIFZJUlRDSE5MX09QX0dFVF9TVEFUUzogewogCQlzdHJ1Y3QgaWF2Zl9ldGhfc3RhdHMgKnN0YXRzID0KQEAgLTI5NTAsMyAmIzQzOzI5NjAsNzIgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAl9IC8qIHN3aXRjaCB2X29wY29kZSAqLwogCWFkYXB0ZXItJmd0O2N1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlCiYjNDM7ICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiYjNDM7ICogQGV2ZW50OiBwcmUtYWxsb2NhdGVkIGV2ZW50IGJ1ZmZlciB0byB1c2UgZm9yIHBvbGxpbmcKJiM0MzsgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkCiYjNDM7ICogQGNvbmRfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCB0byBjb25kaXRpb24gY2FsbGJhY2sKJiM0MzsgKiBAdGltZW91dF9tczogbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzCiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgYWRtaW4gcXVldWUgYW5kIHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgdmlydGNobmwgbWVzc2FnZXMuCiYjNDM7ICogQWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIHZhbGlkIG1lc3NhZ2UsIGNhbGxzIHRoZSBjb25kaXRpb24gY2FsbGJhY2sgdG8gY2hlY2sKJiM0MzsgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlCiYjNDM7ICogb2YgdGhlIHByb2Nlc3NlZCBtZXNzYWdlIHRvIGlkZW50aWZ5IHdoaWNoIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQ29udGludWVzCiYjNDM7ICogcG9sbGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlIG9yIHRpbWVvdXQgZXhwaXJlcy4KJiM0MzsgKgomIzQzOyAqIENhbGxlciBtdXN0IGFsbG9jYXRlIGV2ZW50IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyBhbnkgbWVzc2FnZXMgdG8gUEYgdG8gYXZvaWQKJiM0MzsgKiBzdGF0ZSBtaXNtYXRjaCBpZiBhbGxvY2F0aW9uIGZhaWxzIGFmdGVyIG1lc3NhZ2UgaXMgc2VudC4KJiM0MzsgKgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byB0aW1lb3V0X21zIHdoaWxlCiYjNDM7ICogcG9sbGluZyBoYXJkd2FyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChjb25kaXRpb24gbWV0KSwgLUVBR0FJTiBvbiB0aW1lb3V0LCBvciBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsCiYjNDM7CQkJCWJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCQkJCSAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmNvbmRfZGF0YSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWF2Zl9odyAqaHcgPSAmYW1wO2FkYXB0ZXItJmd0O2h3OwomIzQzOwllbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwomIzQzOwlpbnQgcmV0ID0gLUVBR0FJTjsKJiM0MzsJdTE2IHBlbmRpbmcgPSAwOwomIzQzOwl1MzIgdl9yZXR2YWw7CiYjNDM7CiYjNDM7CW5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItJmd0O25ldGRldik7CiYjNDM7CiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7CiYjNDM7CWRvIHsKJiM0MzsJCWlmICghcGVuZGluZykKJiM0MzsJCQl1c2xlZXBfcmFuZ2UoNTAsIDc1KTsKJiM0MzsKJiM0MzsJCWlmIChpYXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCBldmVudCwgJmFtcDtwZW5kaW5nKSA9PSBJQVZGX1NVQ0NFU1MpIHsKJiM0MzsJCQlyZWNlaXZlZF9vcCA9IChlbnVtIHZpcnRjaG5sX29wcylsZTMyX3RvX2NwdShldmVudC0mZ3Q7ZGVzYy5jb29raWVfaGlnaCk7CiYjNDM7CQkJaWYgKHJlY2VpdmVkX29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHsKJiM0MzsJCQkJdl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC0mZ3Q7ZGVzYy5jb29raWVfbG93KTsKJiM0MzsKJiM0MzsJCQkJaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKGFkYXB0ZXIsIHJlY2VpdmVkX29wLAomIzQzOwkJCQkJCQkgKGVudW0gaWF2Zl9zdGF0dXMpdl9yZXR2YWwsCiYjNDM7CQkJCQkJCSBldmVudC0mZ3Q7bXNnX2J1ZiwgZXZlbnQtJmd0O21zZ19sZW4pOwomIzQzOwomIzQzOwkJCQlpZiAoY29uZGl0aW9uKGFkYXB0ZXIsIGNvbmRfZGF0YSwgcmVjZWl2ZWRfb3ApKSB7CiYjNDM7CQkJCQlyZXQgPSAwOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJbWVtc2V0KGV2ZW50LSZndDttc2dfYnVmLCAwLCBJQVZGX01BWF9BUV9CVUZfU0laRSk7CiYjNDM7CiYjNDM7CQkJaWYgKHBlbmRpbmcpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCmluZGV4IGZjOTFiNjY2NWY5MDUuLjgzZGE1YmE2ZWViMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKQEAgLTMyOCw2ICYjNDM7MzI4LDggQEAgZW51bSBpY2VfdnNpX3N0YXRlIHsKIHN0cnVjdCBpY2VfdnNpX3N0YXRzIHsKIAlzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOyAgLyogVHggcmluZyBzdGF0cyBhcnJheSAqLwogCXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7ICAvKiBSeCByaW5nIHN0YXRzIGFycmF5ICovCiYjNDM7CXUxNiB0eF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJdTE2IHJ4X3Jpbmdfc3RhdHNfbGVuOwogfTsKIAogLyogc3RydWN0IHRoYXQgZGVmaW5lcyBhIFZTSSwgYXNzb2NpYXRlZCB3aXRoIGEgZGV2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCmluZGV4IGIwNjllNmM1MTRmYjEuLjZlN2JiYTQ3Mzg5ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCkBAIC05NSw3ICYjNDM7OTUsNyBAQCBpY2VfZXN3aXRjaF9yZWxlYXNlX3JlcHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcmVwciAqcmVwcikKIAkJcmV0dXJuOwogCiAJaWNlX3ZzaV91cGRhdGVfc2VjdXJpdHkodnNpLCBpY2VfdnNpX2N0eF9zZXRfYW50aXNwb29mKTsKLQltZXRhZGF0YV9kc3RfZnJlZShyZXByLSZndDtkc3QpOwomIzQzOwlkc3RfcmVsZWFzZSgmYW1wO3JlcHItJmd0O2RzdC0mZ3Q7ZHN0KTsKIAlyZXByLSZndDtkc3QgPSBOVUxMOwogCWljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh2c2ksIHJlcHItJmd0O3BhcmVudF9tYWMsCiAJCQkJICAgICAgIElDRV9GV0RfVE9fVlNJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCmluZGV4IDhjZGM0ZmRhODllOTcuLmM3MTg0OTExOWQwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwpAQCAtMzM4LDcgJiM0MzszMzgsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSkKIHsKIAlzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7CiAJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7Ci0JaW50IGk7CiAKIAlpZiAodnNpLSZndDt0eXBlID09IElDRV9WU0lfQ0hOTCkKIAkJcmV0dXJuOwpAQCAtMzQ5LDE0ICYjNDM7MzQ4LDE0IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCWlmICghdnNpX3N0YXQpCiAJCXJldHVybjsKIAotCWljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNfbGVuOyBpJiM0MzsmIzQzOykgewogCQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKIAkJCWtmcmVlX3JjdSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0c1tpXSwgcmN1KTsKIAkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwogCQl9CiAJfQogCi0JaWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c19sZW47IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewogCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwogCQkJV1JJVEVfT05DRSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7CkBAIC01MTMsNTEgJiM0Mzs1MTIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21zaXhfY2xlYW5fcmluZ3MoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKioKLSAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5cwotICogQHZzaTogVlNJIHBvaW50ZXIKLSAqLwotc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCi17Ci0Jc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0OwotCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwotCi0JaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX0NITkwpCi0JCXJldHVybiAwOwotCWlmICghcGYtJmd0O3ZzaV9zdGF0cykKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlpZiAocGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0pCi0JLyogcmVhbGxvYyB3aWxsIGhhcHBlbiBpbiByZWJ1aWxkIHBhdGggKi8KLQkJcmV0dXJuIDA7Ci0KLQl2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7Ci0JaWYgKCF2c2lfc3RhdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyA9Ci0JCWt6YWxsb2Nfb2JqcygqdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMsIHZzaS0mZ3Q7YWxsb2NfdHhxKTsKLQlpZiAoIXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKQotCQlnb3RvIGVycl9hbGxvY190eDsKLQotCXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0KLQkJa3phbGxvY19vYmpzKCp2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cywgdnNpLSZndDthbGxvY19yeHEpOwotCWlmICghdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpCi0JCWdvdG8gZXJyX2FsbG9jX3J4OwotCi0JcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSB2c2lfc3RhdDsKLQotCXJldHVybiAwOwotCi1lcnJfYWxsb2Nfcng6Ci0Ja2ZyZWUodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpOwotZXJyX2FsbG9jX3R4OgotCWtmcmVlKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKTsKLQlrZnJlZSh2c2lfc3RhdCk7Ci0JcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSBOVUxMOwotCXJldHVybiAtRU5PTUVNOwotfQotCiAvKioKICAqIGljZV92c2lfYWxsb2NfZGVmIC0gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhbHJlYWR5IGFsbG9jYXRlZCBWU0kKICAqIEB2c2k6IHB0ciB0byBWU0kKQEAgLTIzMDMsNiAmIzQzOzIyNTcsODUgQEAgc3RhdGljIGludCBpY2VfdnNpX2NmZ190Y19sYW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzCiYjNDM7ICogQHZzaTogVlNJIHBvaW50ZXIKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQomIzQzO3sKJiM0MzsJdTE2IHJlcV90eHEgPSB2c2ktJmd0O3JlcV90eHEgPyB2c2ktJmd0O3JlcV90eHEgOiB2c2ktJmd0O2FsbG9jX3R4cTsKJiM0MzsJdTE2IHJlcV9yeHEgPSB2c2ktJmd0O3JlcV9yeHEgPyB2c2ktJmd0O3JlcV9yeHEgOiB2c2ktJmd0O2FsbG9jX3J4cTsKJiM0MzsJc3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsKJiM0MzsJc3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsKJiM0MzsJc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0OwomIzQzOwlzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS0mZ3Q7YmFjazsKJiM0MzsJdTE2IHByZXZfdHhxLCBwcmV2X3J4cTsKJiM0MzsKJiM0MzsJaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX0NITkwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJaWYgKCF2c2lfc3RhdCkgewomIzQzOwkJdnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpOwomIzQzOwkJaWYgKCF2c2lfc3RhdCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcmV2X3R4cSA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJaWYgKHJlcV90eHEgJmx0OyBwcmV2X3R4cSkgewomIzQzOwkJZm9yIChpbnQgaSA9IHJlcV90eHE7IGkgJmx0OyBwcmV2X3R4cTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwomIzQzOwkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzOwomIzQzOwl2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyA9CiYjNDM7CQlrcmVhbGxvY19hcnJheSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cywgcmVxX3R4cSwKJiM0MzsJCQkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyksCiYjNDM7CQkJICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKJiM0MzsJaWYgKCF2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cykgewomIzQzOwkJdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzOwomIzQzOwkJZ290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0OwomIzQzOwl9CiYjNDM7CXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbiA9IHJlcV90eHE7CiYjNDM7CiYjNDM7CXByZXZfcnhxID0gdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNfbGVuOwomIzQzOwlpZiAocmVxX3J4cSAmbHQ7IHByZXZfcnhxKSB7CiYjNDM7CQlmb3IgKGludCBpID0gcmVxX3J4cTsgaSAmbHQ7IHByZXZfcnhxOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewomIzQzOwkJCQlrZnJlZV9yY3UodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7CiYjNDM7CQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHM7CiYjNDM7CXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0KJiM0MzsJCWtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzLCByZXFfcnhxLAomIzQzOwkJCSAgICAgICBzaXplb2YoKnZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSwKJiM0MzsJCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwomIzQzOwlpZiAoIXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSB7CiYjNDM7CQl2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7CiYjNDM7CQlnb3RvIGVycl9mcmVlX3BhcnRpYWxfdnNpX3N0YXQ7CiYjNDM7CX0KJiM0MzsJdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNfbGVuID0gcmVxX3J4cTsKJiM0MzsKJiM0MzsJcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSB2c2lfc3RhdDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDoKJiM0MzsJaWYgKCFwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XSkgewomIzQzOwkJLyogdnNpX3N0YXQgd2FzIG5vdCB2aXNpYmxlIGJlZm9yZSBjdXJyZW50IGFsbG9jIGF0dGVtcHQgKi8KJiM0MzsJCWtmcmVlKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKTsKJiM0MzsJCWtmcmVlKHZzaV9zdGF0KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV92c2lfY2ZnX2RlZiAtIGNvbmZpZ3VyZSBkZWZhdWx0IFZTSSBiYXNlZCBvbiB0aGUgdHlwZQogICogQHZzaTogcG9pbnRlciB0byBWU0kKQEAgLTIzMjAsNyAmIzQzOzIzNTMsNyBAQCBzdGF0aWMgaW50IGljZV92c2lfY2ZnX2RlZihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQlyZXR1cm4gcmV0OwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBUeC9SeCByaW5nIHN0YXQgcG9pbnRlcnMgKi8KLQlyZXQgPSBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHZzaSk7CiYjNDM7CXJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5yb2xsX3ZzaV9hbGxvYzsKIApAQCAtMzAxMSw2NiAmIzQzOzMwNDQsNiBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksCiAJfQogfQogCi0vKioKLSAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXMKLSAqIEB2c2k6IFZTSSBwb2ludGVyCi0gKi8KLXN0YXRpYyBpbnQKLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQotewotCXUxNiByZXFfdHhxID0gdnNpLSZndDtyZXFfdHhxID8gdnNpLSZndDtyZXFfdHhxIDogdnNpLSZndDthbGxvY190eHE7Ci0JdTE2IHJlcV9yeHEgPSB2c2ktJmd0O3JlcV9yeHEgPyB2c2ktJmd0O3JlcV9yeHEgOiB2c2ktJmd0O2FsbG9jX3J4cTsKLQlzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOwotCXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7Ci0Jc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0OwotCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwotCXUxNiBwcmV2X3R4cSA9IHZzaS0mZ3Q7YWxsb2NfdHhxOwotCXUxNiBwcmV2X3J4cSA9IHZzaS0mZ3Q7YWxsb2NfcnhxOwotCWludCBpOwotCi0JdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKLQotCWlmIChyZXFfdHhxICZsdDsgcHJldl90eHEpIHsKLQkJZm9yIChpID0gcmVxX3R4cTsgaSAmbHQ7IHByZXZfdHhxOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwotCQkJfQotCQl9Ci0JfQotCi0JdHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzOwotCXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzID0KLQkJa3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMsIHJlcV90eHEsCi0JCQkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCWlmICghdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpIHsKLQkJdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAocmVxX3J4cSAmbHQ7IHByZXZfcnhxKSB7Ci0JCWZvciAoaSA9IHJlcV9yeHE7IGkgJmx0OyBwcmV2X3J4cTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewotCQkJCWtmcmVlX3JjdSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgcmN1KTsKLQkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKLQkJCX0KLQkJfQotCX0KLQotCXJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0czsKLQl2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyA9Ci0JCWtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzLCByZXFfcnhxLAotCQkJICAgICAgIHNpemVvZigqdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpLAotCQkJICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQlpZiAoIXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSB7Ci0JCXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0czsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaWNlX3ZzaV9yZWJ1aWxkIC0gUmVidWlsZCBWU0kgYWZ0ZXIgcmVzZXQKICAqIEB2c2k6IFZTSSB0byBiZSByZWJ1aWxkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMKaW5kZXggZTA0ZGUwMjE1NTk2Ni4uNTU4OTM3ODk5ODE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwpAQCAtMTM2Niw2ICYjNDM7MTM2NiwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKQogCXJldHVybiBfX2ljZV9zZXRfdmZfbWFjKGljZV9uZXRkZXZfdG9fcGYobmV0ZGV2KSwgdmZfaWQsIG1hYyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2Vfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXQKJiM0MzsgKiBAdmY6IFZGIHRvIGNvbmZpZ3VyZQomIzQzOyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nCiYjNDM7ICoKJiM0MzsgKiBVcGRhdGUgVkYgZmxhZ3Mgd2hlbiBjaGFuZ2luZyB0cnVzdCB3aXRob3V0IHBlcmZvcm1pbmcgYSBWRiByZXNldC4KJiM0MzsgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQmIzM5O3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkCiYjNDM7ICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpCiYjNDM7ewomIzQzOwlpZiAoc2V0dGluZykKJiM0MzsJCXNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsICZhbXA7dmYtJmd0O3ZmX2NhcHMpOwomIzQzOwllbHNlCiYjNDM7CQljbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsICZhbXA7dmYtJmd0O3ZmX2NhcHMpOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX3NldF92Zl90cnVzdAogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQwMSwxMSAmIzQzOzE0MTgsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpCiAKIAltdXRleF9sb2NrKCZhbXA7dmYtJmd0O2NmZ19sb2NrKTsKIAotCXdoaWxlICghdHJ1c3RlZCAmYW1wOyZhbXA7IHZmLSZndDtudW1fbWFjX2xsZHApCi0JCWljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTsKLQotCXZmLSZndDt0cnVzdGVkID0gdHJ1c3RlZDsKLQlpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpOwomIzQzOwkvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqLwomIzQzOwlpZiAoIXRydXN0ZWQgJmFtcDsmYW1wOwomIzQzOwkgICAgKHZmLSZndDtudW1fbWFjX2xsZHAgJmd0OyAwIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLSZndDt2Zl9zdGF0ZXMpIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX01DX1BST01JU0MsIHZmLSZndDt2Zl9zdGF0ZXMpKSkgewomIzQzOwkJd2hpbGUgKHZmLSZndDtudW1fbWFjX2xsZHApCiYjNDM7CQkJaWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpOwomIzQzOwkJdmYtJmd0O3RydXN0ZWQgPSB0cnVzdGVkOwomIzQzOwkJaWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZmLSZndDt0cnVzdGVkID0gdHJ1c3RlZDsKJiM0MzsJCWljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7CiYjNDM7CX0KIAlkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtWRiAldSBpcyBub3cgJXN0cnVzdGVkXG4mIzM0OywKIAkJIHZmX2lkLCB0cnVzdGVkID8gJiMzNDsmIzM0OyA6ICYjMzQ7dW4mIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKaW5kZXggMTZmY2M4Y2Y2MTkxOS4uMzkwNDNkOGNhMWJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKQEAgLTc1ODUsMTEgJiM0Mzs3NTg1LDEzIEBAIHN0YXRpYyBpbnQgX19pZ2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBycG0pCiAJCWVyciA9IF9faWdjX29wZW4obmV0ZGV2LCB0cnVlKTsKIAkJaWYgKCFycG0pCiAJCQlydG5sX3VubG9jaygpOwotCQlpZiAoIWVycikKLQkJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4gZXJyOwomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgdHdlYWtzIGEgYnVuY2ggb2YgSW50ZWwgZXRoZXJuZXQgZHJpdmVyczogYGk0MGVgLCBgaWF2ZmAsIGBpY2VgLCBhbmQgYGlnY2AuIEl0JiMzOTtzIGFsbCBmdW5jdGlvbmFsIHN0dWZmIOKAkyBmaXhpbmcgbWVtb3J5IGNvbXBhcmlzb25zLCBtZW1vcnkgbGVha3MsIGFuZCBvcHRpbWl6aW5nIHNvbWUgVkYgdHJ1c3QgY29uZmlndXJhdGlvbnMuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBob3cgZWFzeSBpcyB0aGlzIHRvIHRlc3Q/IEFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBpNDBlYCwgYGlhdmZgLCBgaWNlYCwgYW5kIGBpZ2NgIGFyZSBhbGwgKnBoeXNpY2FsKiBoYXJkd2FyZSBkcml2ZXJzLiBUaGV5JiMzOTtyZSBtZWFudCB0byB3b3JrIHdpdGggYWN0dWFsIEludGVsIEV0aGVybmV0IGhhcmR3YXJlLiBJIGtub3cgUUVNVSBlbXVsYXRlcyBzb21lIEludGVsIE5JQ3Mg4oCTIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAgc3ByaW5nIHRvIG1pbmQuIEJ1dCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgc3BlY2lmaWMgZGV2aWNlcyB0YXJnZXRlZCBieSB0aGlzIHBhdGNoIHNlcmllcz8KCkkgY2FuJiMzOTt0IGluc3RhbnRseSBzZWFyY2ggUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBidXQgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgbm8sIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBgaTQwZWAsIGBpY2VgLCBvciBgaWdjYCBvdXQgb2YgdGhlIGJveC4gT2theSwgc28gdGhhdOKAmXMgYSBiaWcgJiMzNDtubyYjMzQ7LiBJJiMzOTttIHByZXR0eSBzdXJlIGBpYXZmYCBpcyBhbHNvIG5vdCBlbXVsYXRlZCwgc2luY2UgaXQmIzM5O3MgYSBWRiBkcml2ZXIsIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyBmdXJ0aGVyLiBJdCBpcyBpbnRlcmVzdGluZyB0byBsb29rIGlmIFFFTVUgZW11bGF0ZXMgYGlnY2AsIGJ1dCBwcm9iYWJseSBub3QuCgpXYWl0LCBhcmUgdGhlc2UgZHJpdmVycyB0aGUga2luZCBvZiAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgdGhhdCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlPyBZZXMsIHRoZXkgYXJlISBUaGV5JiMzOTtyZSBzdGFuZGFyZCBOSUMgZHJpdmVycywgYnV0IHRoZXkgcmVxdWlyZSB0aGUgcGh5c2ljYWwgY2FyZCB0byB3b3JrLiBTbywgZXZlbiBpZiBRRU1VIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGVtdWxhdGUgdGhlbSwgY291bGQgd2UgZnV6eiB0aGVtIHNvbWVob3c/IFN5emthbGxlciBoYXMgc29tZSBQQ0kgZGV2aWNlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMsIGJ1dCBpdCB1c3VhbGx5IHJlbGllcyBvbiBlbXVsYXRlZCBkZXZpY2VzLiBNYXliZSBgc3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX2dlbmVyaWNfZGV2bGluay50eHRgIGlzIHVzZWZ1bC4gSG93ZXZlciwgaWYgdGhlIFBDSSBkZXZpY2UgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiB3b24mIzM5O3QgZXZlbiBiZSBjYWxsZWQuIFRoZSBwYXRjaCB3b3VsZCBiZSB1bnJlYWNoYWJsZS4KCkFscmlnaHQsIHdoYXQgYWJvdXQgdmlydHVhbCBvciBlbXVsYXRlZCB3YXlzIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHM/IGBpYXZmYCBpcyBhbiBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSBwcm9taXNpbmcsIGJ1dCBzdGlsbCB0cmlja3kuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHdpdGggdGhlIHN5emthbGxlciBzZXR1cCBpZiB0aGV5IGFyZSByZWFjaGFibGUsIHdoaWNoIEkgY2Fubm90IHdpdGggdGhlIHRvb2xzIHRoYXQgSSBoYXZlLiBJIGNhbm5vdCBzZWFyY2ggYHN5cy9saW51eGAgZm9yIHRoZSBkcml2ZXJzIHVzaW5nIHRoZSBjdXJyZW50IHByb21wdCYjMzk7cyBmdW5jdGlvbnMuIFRoZXNlIGFyZSBzdGFuZGFyZCBQQ0kgZHJpdmVycy4KCkdpdmVuIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZW0gYW5kIHRoZXkmIzM5O3JlIG1lYW50IGZvciBwaHlzaWNhbCBoYXJkd2FyZSwgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBJIGNhbiByZWFjaCB0aGVzZSBkcml2ZXIgY2hhbmdlcyB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBJIG5lZWQgYSByZWFsIG1hY2hpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TU9EVUxFX0RFVklDRV9UQUJMRVxcKHBjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGk0MGVfcGNpX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTAzLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEwNDpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaTQwZV9wY2lfdGJsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQzCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDgwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRHJpdmVyIEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgUENJIGRyaXZlcnMgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlIEludGVsIEV0aGVybmV0IGRyaXZlcnMg4oCTIGBpNDBlYCwgYGljZWAsIGBpYXZmYCwgYW5kIGBpZ2NgLiBUaGUgcHJvYmxlbSBpcywgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGFueSBvZiB0aGVtLiBUaGF0IGltbWVkaWF0ZWx5IHRocm93cyBhIHdyZW5jaCBpbiB0aGUgZnV6emluZyBwcm9jZXNzLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDYW4gc3l6a2FsbGVyJiMzOTtzIGBzeXpfcGNpX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhciBzaW11bGF0ZSBQQ0kgY29uZmlnIHNwYWNlIGVub3VnaCB0byBnZXQgdGhlc2UgZHJpdmVycyBwcm9iZWQ/JiMzNDsgCgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IHN5emthbGxlciAqZG9lcyogaGF2ZSBQQ0kgZnV6emluZyBzdXBwb3J0ISBJdCB1c2VzIGBzeXpfcGNpX3NldHVwYCwgb3IgdGhlIGB2aGNpYCwgb3Igc2ltaWxhciB2aXJ0dWFsIG1lY2hhbmlzbXMuIEJ1dCBob2xkIG9uLCB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhhdCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgcmVsaWVzIG9uIGEgdmlydHVhbCBQQ0kgaG9zdCBicmlkZ2UsIHdoaWNoIHRoZW4gaW5qZWN0cyBQQ0kgZGV2aWNlcy4KCk9rYXksIGxldCBtZSBjaGVjayB0aGUgJiMzNDtyZWFjaGFibGUmIzM0OyBjcml0ZXJpYSBpbiB0aGUgcHJvbXB0LiBBaCwgaGVyZSBpdCBpczogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKClNvLCBhcmUgdGhlc2UgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAmIzM0O3ZlbmRvci1zcGVjaWZpYyYjMzQ7PyBXZWxsLCBgaTQwZWAgaXMgNDAgR2lnYWJpdCwgYGljZWAgaXMgMTAwIEdpZ2FiaXQgKEU4MDAgc2VyaWVzKSwgYW5kIGBpZ2NgIGlzIDIuNSBHaWdhYml0LiBUaGV5JiMzOTtyZSBhbGwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcy4gQW5kIEkgKmtub3cqIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGVzZSBOSUNzLiBOb3csIHdvdWxkIHN5emthbGxlciBldmVuIGJlIGFibGUgdG8gZ2V0IHRoZW0gZ29pbmc/IE1heWJlLCBidXQgaXQgd291bGQgYmUgcmVhbGx5IHRvdWdoLiBJdCYjMzk7cyB1bmxpa2VseSB0aGF0IHN5emthbGxlciBjb3VsZCBnZXQgcGFzdCB0aGVpciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBzaW5jZSB0aGV5IHJlcXVpcmUgZmlybXdhcmUsIHJlYWQgc3BlY2lmaWMgaGFyZHdhcmUgcmVnaXN0ZXJzLCBvciByZXF1aXJlIHZhbGlkIE1BQyBhZGRyZXNzZXMgZnJvbSBFRVBST00sIHdoaWNoIHdvdWxkIGFsbCBiZSBhYnNlbnQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBGb3IgaW5zdGFuY2UsIGBpNDBlYCBkZW1hbmRzIGZpcm13YXJlIChBZG1pblEpLiBBIGJhc2ljIFBDSSBmdXp6ZXIgaXMganVzdCBnb2luZyB0byBmYWlsIGF0IHRoZSBgaTQwZV9wcm9iZWAgc3RhZ2UgYmVjYXVzZSBpdCYjMzk7cyBleHBlY3RpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIFNhbWUgd2l0aCBgaWNlYCBhbmQgYGlhdmZgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBidXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGBpZ2NgLCBpdCBoYXMgYWRkZWQgYGlnYmAgKEludGVsIDgyNTc2KS4gTm90IGBpZ2NgIChJbnRlbCBJMjI1KS4gQW5kIGl0IGFsc28gZG9lc24mIzM5O3QgZW11bGF0ZSBgaTQwZWAgb3IgYGljZWAuIEl0IGRvZXMgZW11bGF0ZSBvdGhlciBOSUNzLCBsaWtlIGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgZXRjLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgbWVhbnMgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyBzaW1wbGU6IHRoZXNlIGFyZSBwaHlzaWNhbCBQQ0llIE5JQyBkcml2ZXJzIChgaTQwZWAsIGBpYXZmYCwgYGljZWAsIGBpZ2NgKSB0aGF0IG5lZWQgaGFyZHdhcmUgbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGVtIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaTQwZSwgaWF2ZiwgaWNlLCBpZ2MpLiBUaGVzZSBhcmUgZHJpdmVycyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZXNlIGRyaXZlcnMgdHlwaWNhbGx5IHJlcXVpcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW5RKSBkdXJpbmcgcHJvYmUsIG1lYW5pbmcgdGhleSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG9yIHJlYWNoZWQgdmlhIGdlbmVyaWMgUENJIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGk0MGUsIGlhdmYsIGljZSwgaWdjKS4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGVzZSBkcml2ZXJzIHR5cGljYWxseSByZXF1aXJlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgZmlybXdhcmUgKGUuZy4sIEFkbWluUSkgZHVyaW5nIHByb2JlLCBtZWFuaW5nIHRoZXkgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBvciByZWFjaGVkIHZpYSBnZW5lcmljIFBDSSBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjM6MTc6MTQuMjg2NTM1MDg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0NzUzMTQ4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGk0MGUsIGlhdmYsIGljZSwgaWdjKS4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGVzZSBkcml2ZXJzIHR5cGljYWxseSByZXF1aXJlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgZmlybXdhcmUgKGUuZy4sIEFkbWluUSkgZHVyaW5nIHByb2JlLCBtZWFuaW5nIHRoZXkgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBvciByZWFjaGVkIHZpYSBnZW5lcmljIFBDSSBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMzoxNzoxNC4yODY1NDAyOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjkyNzQwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNWUxMTNhNGEzMzM1MTMzNmZkNTMwZDM4OGQ5ODg4MTY3YzEwMjkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMjM6MTc6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG5pbmRleCBhMDQ2ODMwMDRhNTY3Li40ZjBmNzYyNjYwNWJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXFxuQEAgLTY5MDcsNyArNjkwNyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9od19zZXRfZGNiX2NvbmZpZyhzdHJ1Y3QgaTQwZV9wZiAqcGYsXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBuZWVkIHJlY29uZmlndXJhdGlvbiAqL1xcbi1cXHRpZiAoIW1lbWNtcChcXHUwMDI2bmV3X2NmZywgXFx1MDAyNm9sZF9jZmcsIHNpemVvZihuZXdfY2ZnKSkpIHtcXG4rXFx0aWYgKCFtZW1jbXAobmV3X2NmZywgb2xkX2NmZywgc2l6ZW9mKCpuZXdfY2ZnKSkpIHtcXG4gXFx0XFx0ZGV2X2RiZyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIk5vIENoYW5nZSBpbiBEQ0IgQ29uZmlnIHJlcXVpcmVkLlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuQEAgLTE0NDk0LDEzICsxNDQ5NCwxNSBAQCBzdHJ1Y3QgaTQwZV92c2kgKmk0MGVfdnNpX3NldHVwKHN0cnVjdCBpNDBlX3BmICpwZiwgdTggdHlwZSxcXG4gXFx0aWYgKHZzaS1cXHUwMDNlbmV0ZGV2X3JlZ2lzdGVyZWQpIHtcXG4gXFx0XFx0dnNpLVxcdTAwM2VuZXRkZXZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xcbiBcXHRcXHR1bnJlZ2lzdGVyX25ldGRldih2c2ktXFx1MDAzZW5ldGRldik7XFxuLVxcdFxcdGZyZWVfbmV0ZGV2KHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4tXFx0XFx0dnNpLVxcdTAwM2VuZXRkZXYgPSBOVUxMO1xcbiBcXHR9XFxuIGVycl9kbF9wb3J0OlxcbiBcXHRpZiAodnNpLVxcdTAwM2V0eXBlID09IEk0MEVfVlNJX01BSU4pXFxuIFxcdFxcdGk0MGVfZGV2bGlua19kZXN0cm95X3BvcnQocGYpO1xcbiBlcnJfbmV0ZGV2OlxcbitcXHRpZiAodnNpLVxcdTAwM2VuZXRkZXYpIHtcXG4rXFx0XFx0ZnJlZV9uZXRkZXYodnNpLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRcXHR2c2ktXFx1MDAzZW5ldGRldiA9IE5VTEw7XFxuK1xcdH1cXG4gXFx0aTQwZV9hcV9kZWxldGVfZWxlbWVudChcXHUwMDI2cGYtXFx1MDAzZWh3LCB2c2ktXFx1MDAzZXNlaWQsIE5VTEwpO1xcbiBlcnJfdnNpOlxcbiBcXHRpNDBlX3ZzaV9jbGVhcih2c2kpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuaW5kZXggYTI2YzNkNDdlYzE1Ni4uMGNjNDM0YjI2ZWI4OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuQEAgLTQ5NDMsNiArNDk0MywyMyBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBlbmFibGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpNDBlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXFxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXFxuKyAqXFxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxcbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxcbit7XFxuK1xcdGlmIChzZXR0aW5nKVxcbitcXHRcXHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXFx1MDAyNnZmLVxcdTAwM2V2Zl9jYXBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbGVhcl9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcXHUwMDI2dmYtXFx1MDAzZXZmX2NhcHMpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0XFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIHBmXFxuQEAgLTQ5ODcsMTkgKzUwMDQsMjAgQEAgaW50IGk0MGVfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgc2V0dGluZylcXG4gXFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBmLVxcdTAwM2V2c2lbdmYtXFx1MDAzZWxhbl92c2lfaWR4XS1cXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcXG4gXFxuLVxcdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xcbitcXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xcbitcXHRpZiAoIXNldHRpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2Zi1cXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXFx1MDAzZW51bV9jbG91ZF9maWx0ZXJzIFxcdTAwM2UgMCB8fFxcbitcXHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXFx1MDAyNnZmLVxcdTAwM2V2Zl9zdGF0ZXMpIHx8XFxuK1xcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCBcXHUwMDI2dmYtXFx1MDAzZXZmX3N0YXRlcykpKSB7XFxuK1xcdFxcdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xcbitcXHRcXHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xcbitcXHR9XFxuK1xcbiBcXHRkZXZfaW5mbyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIlZGICV1IGlzIG5vdyAlc3RydXN0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdCB2Zl9pZCwgc2V0dGluZyA/IFxcXCJcXFwiIDogXFxcInVuXFxcIik7XFxuIFxcbi1cXHRpZiAodmYtXFx1MDAzZWFkcV9lbmFibGVkKSB7XFxuLVxcdFxcdGlmICghdmYtXFx1MDAzZXRydXN0ZWQpIHtcXG4tXFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBmLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCBcXFwiVkYgJXUgbm8gbG9uZ2VyIFRydXN0ZWQsIGRlbGV0aW5nIGFsbCBjbG91ZCBmaWx0ZXJzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgdmZfaWQpO1xcbi1cXHRcXHRcXHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4gb3V0OlxcbiBcXHRjbGVhcl9iaXQoX19JNDBFX1ZJUlRDSE5MX09QX1BFTkRJTkcsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcXG5pbmRleCAwNTBmODI0MWVmNWU2Li41ZmNiZmEwY2E4NTUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcXG5AQCAtMjU5LDcgKzI1OSw2IEBAIHN0cnVjdCBpYXZmX2FkYXB0ZXIge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5xX3Rhc2s7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBmaW5pc2hfY29uZmlnO1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dhaXRxdWV1ZTtcXG4tXFx0d2FpdF9xdWV1ZV9oZWFkX3QgdmNfd2FpdHF1ZXVlO1xcbiBcXHRzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3JzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fZmlsdGVyX2xpc3Q7XFxuIFxcdGludCBudW1fdmxhbl9maWx0ZXJzO1xcbkBAIC01ODgsOCArNTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9lbmFibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfZGlzYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbitpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9kZWxfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuK3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2FkZF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2RlbF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG5AQCAtNjA2LDYgKzYwNiwxMyBAQCB2b2lkIGlhdmZfZGlzYWJsZV92bGFuX3N0cmlwcGluZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0XFx0ICAgICAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcGNvZGUsXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gaWF2Zl9zdGF0dXMgdl9yZXR2YWwsIHU4ICptc2csIHUxNiBtc2dsZW4pO1xcbitpbnQgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcXG4rXFx0XFx0XFx0XFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpjb25kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKTtcXG4gaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2NmZ19xdWV1ZXNfYncoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX3F1YW50YV9zaXplKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbmluZGV4IDI5Yjg0MDNhMDY2YmMuLjNmYTI4OGUzNzk4YWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcXG5AQCAtMTAyOSw2ICsxMDI5LDYwIEBAIHN0YXRpYyBib29sIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxcbisgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2VcXG4rICpcXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXFxuK3tcXG4rXFx0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xcbitcXG4rXFx0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXFx1MDAzZW5ldGRldiwgYWRkcik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpYXZmX3NldF9tYWNfc3luYyAtIFN5bmNocm9ub3VzbHkgY2hhbmdlIE1BQyBhZGRyZXNzXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAYWRkcjogTUFDIGFkZHJlc3MgdG8gc2V0XFxuKyAqXFxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBuZXRkZXZfbG9jay4gVGhpcyBjYW4gc2xlZXAgZm9yIHVwIHRvIDIuNSBzZWNvbmRzLlxcbisgKiBFdmVudCBidWZmZXIgaXMgYWxsb2NhdGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoIGlmXFxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZVxcbisgKi9cXG4rc3RhdGljIGludCBpYXZmX3NldF9tYWNfc3luYyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHRldmVudC5idWZfbGVuID0gSUFWRl9NQVhfQVFfQlVGX1NJWkU7XFxuK1xcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWV2ZW50Lm1zZ19idWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9hZGRfZXRoZXJfYWRkcnMoYWRhcHRlcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKGFkYXB0ZXIsIFxcdTAwMjZldmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7XFxuK1xcbitvdXQ6XFxuK1xcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTA0MiwyOSArMTA5NiwzMCBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxcbiBcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cXHUwMDNlc3RhdGUgXFx1MDAzYyBfX0lBVkZfRE9XTilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVxcdTAwM2VzYV9kYXRhKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiBcXG4gXFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbi1cXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcXG4tXFxuLVxcdC8qIElmIHJldCBcXHUwMDNjIDAgdGhlbiBpdCBtZWFucyB3YWl0IHdhcyBpbnRlcnJ1cHRlZC5cXG4tXFx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0Llxcbi1cXHQgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLFxcbi1cXHQgKiBjaGVjayBpZiBuZXRkZXYgTUFDIHdhcyB1cGRhdGVkIHRvIHJlcXVlc3RlZCBNQUMsXFxuLVxcdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcXG4tXFx0ICovXFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLVxcdTAwM2VzYV9kYXRhKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHQvKiBSb2xsYmFjayBvbmx5IGlmIHNlbmQgZmFpbGVkIChtZXNzYWdlIG5ldmVyIHJlYWNoZWQgUEYpLlxcbitcXHRcXHQgKiBEb24ndCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhc1xcbitcXHRcXHQgKiBzZW50IGFuZCBQRiB3aWxsIGV2ZW50dWFsbHkgcmVzcG9uZC4gV2hlbiB0aGUgcmVzcG9uc2UgYXJyaXZlcyxcXG4rXFx0XFx0ICogaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKCkgd2lsbCBoYW5kbGUgcm9sbGJhY2sgKG9uIFBGIGVycm9yKVxcbitcXHRcXHQgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCAhPSAtRUFHQUlOKSB7XFxuK1xcdFxcdFxcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XFxuK1xcdFxcdFxcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVxcdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi1cXHUwMDNlZGV2X2FkZHIsIGFkZHItXFx1MDAzZXNhX2RhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5AQCAtNTM5NCw5ICs1NDQ5LDYgQEAgc3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRvd25fd2FpdHF1ZXVlKTtcXG4gXFxuLVxcdC8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHZpcnRjaGFubmVsIGV2ZW50cyAqL1xcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbi1cXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRzKTtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5pbmRleCBlYzIzNGNjOGJkOWRiLi5lNmI3ZThmODJjN2MxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaWF2Zi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaWF2Zl9wdHAuaFxcXCJcXG5AQCAtNTU1LDIwICs1NTYsMjMgQEAgaWF2Zl9zZXRfbWFjX2FkZHJfdHlwZShzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkciAqdmlydGNobmxfZXRoZXJfYWRkcixcXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXFxuICAqXFxuICAqIFJlcXVlc3QgdGhhdCB0aGUgUEYgYWRkIG9uZSBvciBtb3JlIGFkZHJlc3NlcyB0byBvdXIgZmlsdGVycy5cXG4tICoqL1xcbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXFxuKyAqL1xcbitpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsO1xcbiBcXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmO1xcbiBcXHRpbnQgaSA9IDAsIGNvdW50ID0gMDtcXG4gXFx0Ym9vbCBtb3JlID0gZmFsc2U7XFxuIFxcdHNpemVfdCBsZW47XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoYWRhcHRlci1cXHUwMDNlY3VycmVudF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XFxuIFxcdFxcdC8qIGJhaWwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHBlbmRpbmcgKi9cXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGFkZCBmaWx0ZXJzLCBjb21tYW5kICVkIHBlbmRpbmdcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3ApO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG5AQCAtNTgwLDcgKzU4NCw3IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFx0aWYgKCFjb3VudCkge1xcbiBcXHRcXHRhZGFwdGVyLVxcdTAwM2VhcV9yZXF1aXJlZCBcXHUwMDI2PSB+SUFWRl9GTEFHX0FRX0FERF9NQUNfRklMVEVSO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfQUREX0VUSF9BRERSO1xcbiBcXG5AQCAtNTk0LDggKzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFxuIFxcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghdmVhbCkge1xcbitcXHRcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW1hY192bGFuX2xpc3RfbG9jayk7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdHZlYWwtXFx1MDAzZXZzaV9pZCA9IGFkYXB0ZXItXFx1MDAzZXZzaV9yZXMtXFx1MDAzZXZzaV9pZDtcXG5AQCAtNjE1LDggKzYyMCwxNSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG4gXFxuLVxcdGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pO1xcbitcXHRyZXQgPSBpYXZmX3NlbmRfcGZfbXNnKGFkYXB0ZXIsIFZJUlRDSE5MX09QX0FERF9FVEhfQUREUiwgKHU4ICopdmVhbCwgbGVuKTtcXG4gXFx0a2ZyZWUodmVhbCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiVW5hYmxlIHRvIHNlbmQgQUREX0VUSF9BRERSIG1lc3NhZ2UgdG8gUEYsIGVycm9yICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTcxMiw4ICs3MjQsOCBAQCBzdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfb2soc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXFxuICAqXFxuICAqIFJlbW92ZSBmaWx0ZXJzIGZyb20gbGlzdCBiYXNlZCBvbiBQRiByZXNwb25zZS5cXG4tICoqL1xcbi1zdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuKyAqL1xcbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcXG5AQCAtMjM2NCw3ICsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0XFx0aWF2Zl9tYWNfYWRkX3JlamVjdChhZGFwdGVyKTtcXG4gXFx0XFx0XFx0LyogcmVzdG9yZSBhZG1pbmlzdHJhdGl2ZWx5IHNldCBNQUMgYWRkcmVzcyAqL1xcbiBcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbi1cXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6XFxuIFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBkZWxldGUgTUFDIGZpbHRlciwgZXJyb3IgJXNcXFxcblxcXCIsXFxuQEAgLTI1NTUsNyArMjU2Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkYXB0ZXItXFx1MDAzZWh3Lm1hYy5hZGRyKTtcXG4gXFx0XFx0XFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTtcXG4gXFx0XFx0fVxcbi1cXHRcXHR3YWtlX3VwKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHtcXG4gXFx0XFx0c3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9XFxuQEAgLTI5NTAsMyArMjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHR9IC8qIHN3aXRjaCB2X29wY29kZSAqL1xcbiBcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXFxuKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxcbisgKiBAZXZlbnQ6IHByZS1hbGxvY2F0ZWQgZXZlbnQgYnVmZmVyIHRvIHVzZSBmb3IgcG9sbGluZ1xcbisgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXFxuKyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXFxuKyAqIEB0aW1lb3V0X21zOiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHNcXG4rICpcXG4rICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxcbisgKiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggdmFsaWQgbWVzc2FnZSwgY2FsbHMgdGhlIGNvbmRpdGlvbiBjYWxsYmFjayB0byBjaGVja1xcbisgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXFxuKyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xcbisgKiBwb2xsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUgb3IgdGltZW91dCBleHBpcmVzLlxcbisgKlxcbisgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXFxuKyAqIHN0YXRlIG1pc21hdGNoIGlmIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50LlxcbisgKlxcbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxcbisgKiBwb2xsaW5nIGhhcmR3YXJlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxcbisgKi9cXG4raW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXFxuK1xcdFxcdFxcdFxcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIHZpcnRjaG5sX29wcyB2X29wKSxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcylcXG4re1xcbitcXHRzdHJ1Y3QgaWF2Zl9odyAqaHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuK1xcdGVudW0gdmlydGNobmxfb3BzIHJlY2VpdmVkX29wO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XFxuK1xcdGludCByZXQgPSAtRUFHQUlOO1xcbitcXHR1MTYgcGVuZGluZyA9IDA7XFxuK1xcdHUzMiB2X3JldHZhbDtcXG4rXFxuK1xcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKCFwZW5kaW5nKVxcbitcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoNTAsIDc1KTtcXG4rXFxuK1xcdFxcdGlmIChpYXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCBldmVudCwgXFx1MDAyNnBlbmRpbmcpID09IElBVkZfU1VDQ0VTUykge1xcbitcXHRcXHRcXHRyZWNlaXZlZF9vcCA9IChlbnVtIHZpcnRjaG5sX29wcylsZTMyX3RvX2NwdShldmVudC1cXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XFxuK1xcdFxcdFxcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XFxuK1xcdFxcdFxcdFxcdHZfcmV0dmFsID0gbGUzMl90b19jcHUoZXZlbnQtXFx1MDAzZWRlc2MuY29va2llX2xvdyk7XFxuK1xcbitcXHRcXHRcXHRcXHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAoZW51bSBpYXZmX3N0YXR1cyl2X3JldHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGV2ZW50LVxcdTAwM2Vtc2dfYnVmLCBldmVudC1cXHUwMDNlbXNnX2xlbik7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoY29uZGl0aW9uKGFkYXB0ZXIsIGNvbmRfZGF0YSwgcmVjZWl2ZWRfb3ApKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdG1lbXNldChldmVudC1cXHUwMDNlbXNnX2J1ZiwgMCwgSUFWRl9NQVhfQVFfQlVGX1NJWkUpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHBlbmRpbmcpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uODNkYTViYTZlZWIxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5AQCAtMzI4LDYgKzMyOCw4IEBAIGVudW0gaWNlX3ZzaV9zdGF0ZSB7XFxuIHN0cnVjdCBpY2VfdnNpX3N0YXRzIHtcXG4gXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsgIC8qIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi9cXG4gXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsgIC8qIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cXG4rXFx0dTE2IHR4X3Jpbmdfc3RhdHNfbGVuO1xcbitcXHR1MTYgcnhfcmluZ19zdGF0c19sZW47XFxuIH07XFxuIFxcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbmluZGV4IGIwNjllNmM1MTRmYjEuLjZlN2JiYTQ3Mzg5ODkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbkBAIC05NSw3ICs5NSw3IEBAIGljZV9lc3dpdGNoX3JlbGVhc2VfcmVwcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9yZXByICpyZXByKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpY2VfdnNpX3VwZGF0ZV9zZWN1cml0eSh2c2ksIGljZV92c2lfY3R4X3NldF9hbnRpc3Bvb2YpO1xcbi1cXHRtZXRhZGF0YV9kc3RfZnJlZShyZXByLVxcdTAwM2Vkc3QpO1xcbitcXHRkc3RfcmVsZWFzZShcXHUwMDI2cmVwci1cXHUwMDNlZHN0LVxcdTAwM2Vkc3QpO1xcbiBcXHRyZXByLVxcdTAwM2Vkc3QgPSBOVUxMO1xcbiBcXHRpY2VfZmx0cl9hZGRfbWFjX2FuZF9icm9hZGNhc3QodnNpLCByZXByLVxcdTAwM2VwYXJlbnRfbWFjLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbmluZGV4IDhjZGM0ZmRhODllOTcuLmM3MTg0OTExOWQwNGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5AQCAtMzM4LDcgKzMzOCw2IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuLVxcdGludCBpO1xcbiBcXG4gXFx0aWYgKHZzaS1cXHUwMDNldHlwZSA9PSBJQ0VfVlNJX0NITkwpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMzQ5LDE0ICszNDgsMTQgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdGlmICghdnNpX3N0YXQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcXG4gXFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XFxuIFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW47IGkrKykge1xcbiBcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcXG4gXFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbiBcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG5AQCAtNTEzLDUxICs1MTIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21zaXhfY2xlYW5fcmluZ3MoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5c1xcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxcbi0gKi9cXG4tc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuLXtcXG4tXFx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xcbi1cXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4tXFxuLVxcdGlmICh2c2ktXFx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0aWYgKCFwZi1cXHUwMDNldnNpX3N0YXRzKVxcbi1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4tXFxuLVxcdGlmIChwZi1cXHUwMDNldnNpX3N0YXRzW3ZzaS1cXHUwMDNlaWR4XSlcXG4tXFx0LyogcmVhbGxvYyB3aWxsIGhhcHBlbiBpbiByZWJ1aWxkIHBhdGggKi9cXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XFxuLVxcdGlmICghdnNpX3N0YXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRremFsbG9jX29ianMoKnZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzLCB2c2ktXFx1MDAzZWFsbG9jX3R4cSk7XFxuLVxcdGlmICghdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpXFxuLVxcdFxcdGdvdG8gZXJyX2FsbG9jX3R4O1xcbi1cXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRremFsbG9jX29ianMoKnZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzLCB2c2ktXFx1MDAzZWFsbG9jX3J4cSk7XFxuLVxcdGlmICghdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpXFxuLVxcdFxcdGdvdG8gZXJyX2FsbG9jX3J4O1xcbi1cXG4tXFx0cGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF0gPSB2c2lfc3RhdDtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi1cXG4tZXJyX2FsbG9jX3J4Olxcbi1cXHRrZnJlZSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyk7XFxuLWVycl9hbGxvY190eDpcXG4tXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xcbi1cXHRrZnJlZSh2c2lfc3RhdCk7XFxuLVxcdHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdID0gTlVMTDtcXG4tXFx0cmV0dXJuIC1FTk9NRU07XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBpY2VfdnNpX2FsbG9jX2RlZiAtIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgVlNJXFxuICAqIEB2c2k6IHB0ciB0byBWU0lcXG5AQCAtMjMwMyw2ICsyMjU3LDg1IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9jZmdfdGNfbGFuKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXNcXG4rICogQHZzaTogVlNJIHBvaW50ZXJcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbit7XFxuK1xcdHUxNiByZXFfdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxID8gdnNpLVxcdTAwM2VyZXFfdHhxIDogdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuK1xcdHUxNiByZXFfcnhxID0gdnNpLVxcdTAwM2VyZXFfcnhxID8gdnNpLVxcdTAwM2VyZXFfcnhxIDogdnNpLVxcdTAwM2VhbGxvY19yeHE7XFxuK1xcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XFxuK1xcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4rXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuK1xcdHUxNiBwcmV2X3R4cSwgcHJldl9yeHE7XFxuK1xcbitcXHRpZiAodnNpLVxcdTAwM2V0eXBlID09IElDRV9WU0lfQ0hOTClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2c2lfc3RhdCA9IHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdO1xcbitcXHRpZiAoIXZzaV9zdGF0KSB7XFxuK1xcdFxcdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcXG4rXFx0XFx0aWYgKCF2c2lfc3RhdClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHByZXZfdHhxID0gdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xcbitcXHRpZiAocmVxX3R4cSBcXHUwMDNjIHByZXZfdHhxKSB7XFxuK1xcdFxcdGZvciAoaW50IGkgPSByZXFfdHhxOyBpIFxcdTAwM2MgcHJldl90eHE7IGkrKykge1xcbitcXHRcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcXG4rXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbitcXHRcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cztcXG4rXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxcbitcXHRcXHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cywgcmVxX3R4cSxcXG4rXFx0XFx0XFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxcbitcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbitcXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKSB7XFxuK1xcdFxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xcbitcXHR9XFxuK1xcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbiA9IHJlcV90eHE7XFxuK1xcbitcXHRwcmV2X3J4cSA9IHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0aWYgKHJlcV9yeHEgXFx1MDAzYyBwcmV2X3J4cSkge1xcbitcXHRcXHRmb3IgKGludCBpID0gcmVxX3J4cTsgaSBcXHUwMDNjIHByZXZfcnhxOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XFxuK1xcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHM7XFxuK1xcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID1cXG4rXFx0XFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXFxuK1xcdFxcdFxcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4rXFx0aWYgKCF2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cykge1xcbitcXHRcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDtcXG4rXFx0fVxcbitcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW4gPSByZXFfcnhxO1xcbitcXG4rXFx0cGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF0gPSB2c2lfc3RhdDtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0OlxcbitcXHRpZiAoIXBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdKSB7XFxuK1xcdFxcdC8qIHZzaV9zdGF0IHdhcyBub3QgdmlzaWJsZSBiZWZvcmUgY3VycmVudCBhbGxvYyBhdHRlbXB0ICovXFxuK1xcdFxcdGtmcmVlKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKTtcXG4rXFx0XFx0a2ZyZWUodnNpX3N0YXQpO1xcbitcXHR9XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9jZmdfZGVmIC0gY29uZmlndXJlIGRlZmF1bHQgVlNJIGJhc2VkIG9uIHRoZSB0eXBlXFxuICAqIEB2c2k6IHBvaW50ZXIgdG8gVlNJXFxuQEAgLTIzMjAsNyArMjM1Myw3IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9jZmdfZGVmKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIFR4L1J4IHJpbmcgc3RhdCBwb2ludGVycyAqL1xcbi1cXHRyZXQgPSBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHZzaSk7XFxuK1xcdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVucm9sbF92c2lfYWxsb2M7XFxuIFxcbkBAIC0zMDExLDY2ICszMDQ0LDYgQEAgaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiBcXHR9XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzXFxuLSAqIEB2c2k6IFZTSSBwb2ludGVyXFxuLSAqL1xcbi1zdGF0aWMgaW50XFxuLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbi17XFxuLVxcdHUxNiByZXFfdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxID8gdnNpLVxcdTAwM2VyZXFfdHhxIDogdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuLVxcdHUxNiByZXFfcnhxID0gdnNpLVxcdTAwM2VyZXFfcnhxID8gdnNpLVxcdTAwM2VyZXFfcnhxIDogdnNpLVxcdTAwM2VhbGxvY19yeHE7XFxuLVxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XFxuLVxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XFxuLVxcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4tXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuLVxcdHUxNiBwcmV2X3R4cSA9IHZzaS1cXHUwMDNlYWxsb2NfdHhxO1xcbi1cXHR1MTYgcHJldl9yeHEgPSB2c2ktXFx1MDAzZWFsbG9jX3J4cTtcXG4tXFx0aW50IGk7XFxuLVxcbi1cXHR2c2lfc3RhdCA9IHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdO1xcbi1cXG4tXFx0aWYgKHJlcV90eHEgXFx1MDAzYyBwcmV2X3R4cSkge1xcbi1cXHRcXHRmb3IgKGkgPSByZXFfdHhxOyBpIFxcdTAwM2MgcHJldl90eHE7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cztcXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cywgcmVxX3R4cSxcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxcbi1cXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKSB7XFxuLVxcdFxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChyZXFfcnhxIFxcdTAwM2MgcHJldl9yeHEpIHtcXG4tXFx0XFx0Zm9yIChpID0gcmVxX3J4cTsgaSBcXHUwMDNjIHByZXZfcnhxOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XFxuLVxcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4tXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHM7XFxuLVxcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKSxcXG4tXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tXFx0aWYgKCF2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cykge1xcbi1cXHRcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIGljZV92c2lfcmVidWlsZCAtIFJlYnVpbGQgVlNJIGFmdGVyIHJlc2V0XFxuICAqIEB2c2k6IFZTSSB0byBiZSByZWJ1aWxkXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xcbmluZGV4IGUwNGRlMDIxNTU5NjYuLjU1ODkzNzg5OTgxODEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuQEAgLTEzNjYsNiArMTM2NiwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxcbiBcXHRyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXFxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXFxuKyAqXFxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxcbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2Vfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGljZV92ZiAqdmYsIGJvb2wgc2V0dGluZylcXG4re1xcbitcXHRpZiAoc2V0dGluZylcXG4rXFx0XFx0c2V0X2JpdChJQ0VfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXFx1MDAyNnZmLVxcdTAwM2V2Zl9jYXBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfY2Fwcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTQwMSwxMSArMTQxOCwxOSBAQCBpbnQgaWNlX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgdHJ1c3RlZClcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnZmLVxcdTAwM2VjZmdfbG9jayk7XFxuIFxcbi1cXHR3aGlsZSAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjYgdmYtXFx1MDAzZW51bV9tYWNfbGxkcClcXG4tXFx0XFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xcbi1cXG4tXFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbi1cXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xcbitcXHRpZiAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2Zi1cXHUwMDNlbnVtX21hY19sbGRwIFxcdTAwM2UgMCB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSkpIHtcXG4rXFx0XFx0d2hpbGUgKHZmLVxcdTAwM2VudW1fbWFjX2xsZHApXFxuK1xcdFxcdFxcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcXG4rXFx0XFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbitcXHRcXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR2Zi1cXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XFxuK1xcdFxcdGljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7XFxuK1xcdH1cXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJWRiAldSBpcyBub3cgJXN0cnVzdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgdmZfaWQsIHRydXN0ZWQgPyBcXFwiXFxcIiA6IFxcXCJ1blxcXCIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbmluZGV4IDE2ZmNjOGNmNjE5MTkuLjM5MDQzZDhjYTFiZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbkBAIC03NTg1LDExICs3NTg1LDEzIEBAIHN0YXRpYyBpbnQgX19pZ2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBycG0pXFxuIFxcdFxcdGVyciA9IF9faWdjX29wZW4obmV0ZGV2LCB0cnVlKTtcXG4gXFx0XFx0aWYgKCFycG0pXFxuIFxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuLVxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMzoxNzoxNS40NTY2OTgzMDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTMwNTE0NjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaTQwZSwgaWF2ZiwgaWNlLCBpZ2MpLiBUaGVzZSBhcmUgZHJpdmVycyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZXNlIGRyaXZlcnMgdHlwaWNhbGx5IHJlcXVpcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW5RKSBkdXJpbmcgcHJvYmUsIG1lYW5pbmcgdGhleSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG9yIHJlYWNoZWQgdmlhIGdlbmVyaWMgUENJIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1ZTExM2E0YTMzMzUxMzM2ZmQ1MzBkMzg4ZDk4ODgxNjdjMTAyOTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDIzOjE3OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IGEwNDY4MzAwNGE1NjcuLjRmMGY3NjI2NjA1YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNjkwNyw3ICs2OTA3LDcgQEAgc3RhdGljIGludCBpNDBlX2h3X3NldF9kY2JfY29uZmlnKHN0cnVjdCBpNDBlX3BmICpwZixcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBDaGVjayBpZiBuZWVkIHJlY29uZmlndXJhdGlvbiAqL1xuLVx0aWYgKCFtZW1jbXAoXHUwMDI2bmV3X2NmZywgXHUwMDI2b2xkX2NmZywgc2l6ZW9mKG5ld19jZmcpKSkge1xuK1x0aWYgKCFtZW1jbXAobmV3X2NmZywgb2xkX2NmZywgc2l6ZW9mKCpuZXdfY2ZnKSkpIHtcbiBcdFx0ZGV2X2RiZyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJObyBDaGFuZ2UgaW4gRENCIENvbmZpZyByZXF1aXJlZC5cXG5cIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTE0NDk0LDEzICsxNDQ5NCwxNSBAQCBzdHJ1Y3QgaTQwZV92c2kgKmk0MGVfdnNpX3NldHVwKHN0cnVjdCBpNDBlX3BmICpwZiwgdTggdHlwZSxcbiBcdGlmICh2c2ktXHUwMDNlbmV0ZGV2X3JlZ2lzdGVyZWQpIHtcbiBcdFx0dnNpLVx1MDAzZW5ldGRldl9yZWdpc3RlcmVkID0gZmFsc2U7XG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2KHZzaS1cdTAwM2VuZXRkZXYpO1xuLVx0XHRmcmVlX25ldGRldih2c2ktXHUwMDNlbmV0ZGV2KTtcbi1cdFx0dnNpLVx1MDAzZW5ldGRldiA9IE5VTEw7XG4gXHR9XG4gZXJyX2RsX3BvcnQ6XG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfTUFJTilcbiBcdFx0aTQwZV9kZXZsaW5rX2Rlc3Ryb3lfcG9ydChwZik7XG4gZXJyX25ldGRldjpcbitcdGlmICh2c2ktXHUwMDNlbmV0ZGV2KSB7XG4rXHRcdGZyZWVfbmV0ZGV2KHZzaS1cdTAwM2VuZXRkZXYpO1xuK1x0XHR2c2ktXHUwMDNlbmV0ZGV2ID0gTlVMTDtcbitcdH1cbiBcdGk0MGVfYXFfZGVsZXRlX2VsZW1lbnQoXHUwMDI2cGYtXHUwMDNlaHcsIHZzaS1cdTAwM2VzZWlkLCBOVUxMKTtcbiBlcnJfdnNpOlxuIFx0aTQwZV92c2lfY2xlYXIodnNpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5pbmRleCBhMjZjM2Q0N2VjMTU2Li4wY2M0MzRiMjZlYjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5AQCAtNDk0Myw2ICs0OTQzLDIzIEBAIGludCBpNDBlX25kb19zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIGVuYWJsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcbisgKiBAdmY6IFZGIHRvIGNvbmZpZ3VyZVxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXG4rICpcbisgKiBVcGRhdGUgVkYgZmxhZ3Mgd2hlbiBjaGFuZ2luZyB0cnVzdCB3aXRob3V0IHBlcmZvcm1pbmcgYSBWRiByZXNldC5cbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcbisgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS5cbisgKi9cbitzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuK3tcbitcdGlmIChzZXR0aW5nKVxuK1x0XHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4rXHRlbHNlXG4rXHRcdGNsZWFyX2JpdChJNDBFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK31cbitcbiAvKipcbiAgKiBpNDBlX25kb19zZXRfdmZfdHJ1c3RcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlIG9mIHRoZSBwZlxuQEAgLTQ5ODcsMTkgKzUwMDQsMjAgQEAgaW50IGk0MGVfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgc2V0dGluZylcbiBcdHNldF9iaXQoX19JNDBFX01BQ1ZMQU5fU1lOQ19QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRwZi1cdTAwM2V2c2lbdmYtXHUwMDNlbGFuX3ZzaV9pZHhdLVx1MDAzZWZsYWdzIHw9IEk0MEVfVlNJX0ZMQUdfRklMVEVSX0NIQU5HRUQ7XG4gXG4tXHRpNDBlX3ZjX3Jlc2V0X3ZmKHZmLCB0cnVlKTtcbitcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXG4rXHRpZiAoIXNldHRpbmcgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHZmLVx1MDAzZWFkcV9lbmFibGVkIHx8IHZmLVx1MDAzZW51bV9jbG91ZF9maWx0ZXJzIFx1MDAzZSAwIHx8XG4rXHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSB8fFxuK1x0ICAgICB0ZXN0X2JpdChJNDBFX1ZGX1NUQVRFX01DX1BST01JU0MsIFx1MDAyNnZmLVx1MDAzZXZmX3N0YXRlcykpKSB7XG4rXHRcdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuK1x0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpNDBlX3NldHVwX3ZmX3RydXN0KHZmLCBzZXR0aW5nKTtcbitcdH1cbitcbiBcdGRldl9pbmZvKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcIlZGICV1IGlzIG5vdyAlc3RydXN0ZWRcXG5cIixcbiBcdFx0IHZmX2lkLCBzZXR0aW5nID8gXCJcIiA6IFwidW5cIik7XG4gXG4tXHRpZiAodmYtXHUwMDNlYWRxX2VuYWJsZWQpIHtcbi1cdFx0aWYgKCF2Zi1cdTAwM2V0cnVzdGVkKSB7XG4tXHRcdFx0ZGV2X2luZm8oXHUwMDI2cGYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0XHQgXCJWRiAldSBubyBsb25nZXIgVHJ1c3RlZCwgZGVsZXRpbmcgYWxsIGNsb3VkIGZpbHRlcnNcXG5cIixcbi1cdFx0XHRcdCB2Zl9pZCk7XG4tXHRcdFx0aTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpO1xuLVx0XHR9XG4tXHR9XG4tXG4gb3V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbmluZGV4IDA1MGY4MjQxZWY1ZTYuLjVmY2JmYTBjYTg1NTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbkBAIC0yNTksNyArMjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5xX3Rhc2s7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluaXNoX2NvbmZpZztcbiBcdHdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlO1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3QgdmNfd2FpdHF1ZXVlO1xuIFx0c3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9ycztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDtcbiBcdGludCBudW1fdmxhbl9maWx0ZXJzO1xuQEAgLTU4OCw4ICs1ODcsOSBAQCB2b2lkIGlhdmZfY29uZmlndXJlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGlzYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX21hcF9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4tdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbitpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2FkZF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG5AQCAtNjA2LDYgKzYwNiwxMyBAQCB2b2lkIGlhdmZfZGlzYWJsZV92bGFuX3N0cmlwcGluZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdCAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLFxuIFx0XHRcdCAgICAgIGVudW0gaWF2Zl9zdGF0dXMgdl9yZXR2YWwsIHU4ICptc2csIHUxNiBtc2dsZW4pO1xuK2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbitcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbitcdFx0XHRcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4rXHRcdFx0XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLFxuK1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4rXHRcdFx0XHRjb25zdCB2b2lkICpjb25kX2RhdGEsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcyk7XG4gaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19idyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19xdWFudGFfc2l6ZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xuaW5kZXggMjliODQwM2EwNjZiYy4uM2ZhMjg4ZTM3OThhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC0xMDI5LDYgKzEwMjksNjAgQEAgc3RhdGljIGJvb2wgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGlhdmZfbWFjX2NoYW5nZV9kb25lIC0gQ2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWRcbisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxuKyAqIEB2X29wOiB2aXJ0Y2hubCBvcGNvZGUgZnJvbSBwcm9jZXNzZWQgbWVzc2FnZVxuKyAqXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbCBpYXZmX21hY19jaGFuZ2VfZG9uZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXG4re1xuK1x0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xuK1xuK1x0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2LCBhZGRyKTtcbit9XG4rXG4rLyoqXG4rICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzc1xuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuKyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXRcbisgKlxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuXG4rICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZlxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcbisgKi9cbitzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKVxuK3tcbitcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvIGV2ZW50O1xuK1x0aW50IHJldDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KTtcbitcbitcdGV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTtcbitcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFldmVudC5tc2dfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgXHUwMDI2ZXZlbnQsXG4rXHRcdFx0XHRcdCAgaWF2Zl9tYWNfY2hhbmdlX2RvbmUsIGFkZHIsIDI1MDApO1xuK1xuK291dDpcbitcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTEwNDIsMjkgKzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cdTAwM2VzdGF0ZSBcdTAwM2MgX19JQVZGX0RPV04pXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4tXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChuZXRkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSksXG4tXHRcdFx0XHRcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcbi1cbi1cdC8qIElmIHJldCBcdTAwM2MgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLlxuLVx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0LlxuLVx0ICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRixcbi1cdCAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQyxcbi1cdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcbi1cdCAqL1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbitcdHJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdC8qIFJvbGxiYWNrIG9ubHkgaWYgc2VuZCBmYWlsZWQgKG1lc3NhZ2UgbmV2ZXIgcmVhY2hlZCBQRikuXG4rXHRcdCAqIERvbid0IHJvbGxiYWNrIG9uIHRpbWVvdXQgKC1FQUdBSU4pIGJlY2F1c2UgdGhlIG1lc3NhZ2Ugd2FzXG4rXHRcdCAqIHNlbnQgYW5kIFBGIHdpbGwgZXZlbnR1YWxseSByZXNwb25kLiBXaGVuIHRoZSByZXNwb25zZSBhcnJpdmVzLFxuK1x0XHQgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpXG4rXHRcdCAqIG9yIGFjY2VwdGFuY2UgKG9uIFBGIHN1Y2Nlc3MpIGF1dG9tYXRpY2FsbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ICE9IC1FQUdBSU4pIHtcbitcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0XHR9XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4gXG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwobmV0ZGV2LVx1MDAzZWRldl9hZGRyLCBhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC01Mzk0LDkgKzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlZG93bl93YWl0cXVldWUpO1xuIFxuLVx0LyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbi1cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZHMpO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5waGNfdGltZV93YWl0cXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuaW5kZXggZWMyMzRjYzhiZDlkYi4uZTZiN2U4ZjgyYzdjMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImlhdmYuaFwiXG4gI2luY2x1ZGUgXCJpYXZmX3B0cC5oXCJcbkBAIC01NTUsMjAgKzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxuLSAqKi9cbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZVxuKyAqL1xuK2ludCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIHtcbiBcdHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyX2xpc3QgKnZlYWw7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmO1xuIFx0aW50IGkgPSAwLCBjb3VudCA9IDA7XG4gXHRib29sIG1vcmUgPSBmYWxzZTtcbiBcdHNpemVfdCBsZW47XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4gXHRcdC8qIGJhaWwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHBlbmRpbmcgKi9cbiBcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcIkNhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXFxuXCIsXG4gXHRcdFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbkBAIC01ODAsNyArNTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKCFjb3VudCkge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWFxX3JlcXVpcmVkIFx1MDAyNj0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfQUREX0VUSF9BRERSO1xuIFxuQEAgLTU5NCw4ICs1OTgsOSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXG4gXHR2ZWFsID0ga3phbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCF2ZWFsKSB7XG4rXHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdHZlYWwtXHUwMDNldnNpX2lkID0gYWRhcHRlci1cdTAwM2V2c2lfcmVzLVx1MDAzZXZzaV9pZDtcbkBAIC02MTUsOCArNjIwLDE1IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbiBcbi1cdGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pO1xuK1x0cmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4gXHRrZnJlZSh2ZWFsKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiVW5hYmxlIHRvIHNlbmQgQUREX0VUSF9BRERSIG1lc3NhZ2UgdG8gUEYsIGVycm9yICVkXFxuXCIsIHJldCk7XG4rXHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC03MTIsOCArNzI0LDggQEAgc3RhdGljIHZvaWQgaWF2Zl9tYWNfYWRkX29rKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4gICpcbiAgKiBSZW1vdmUgZmlsdGVycyBmcm9tIGxpc3QgYmFzZWQgb24gUEYgcmVzcG9uc2UuXG4tICoqL1xuLXN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbisgKi9cbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcbkBAIC0yMzY0LDcgKzIzNzYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XG4gXHRcdFx0LyogcmVzdG9yZSBhZG1pbmlzdHJhdGl2ZWx5IHNldCBNQUMgYWRkcmVzcyAqL1xuIFx0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuLVx0XHRcdHdha2VfdXAoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFZJUlRDSE5MX09QX0RFTF9FVEhfQUREUjpcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIGRlbGV0ZSBNQUMgZmlsdGVyLCBlcnJvciAlc1xcblwiLFxuQEAgLTI1NTUsNyArMjU2Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkcik7XG4gXHRcdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTtcbiBcdFx0fVxuLVx0XHR3YWtlX3VwKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFZJUlRDSE5MX09QX0dFVF9TVEFUUzoge1xuIFx0XHRzdHJ1Y3QgaWF2Zl9ldGhfc3RhdHMgKnN0YXRzID1cbkBAIC0yOTUwLDMgKzI5NjAsNzIgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdH0gLyogc3dpdGNoIHZfb3Bjb2RlICovXG4gXHRhZGFwdGVyLVx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xuIH1cbitcbisvKipcbisgKiBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UgLSBQb2xsIGFkbWluIHF1ZXVlIGZvciB2aXJ0Y2hubCByZXNwb25zZVxuKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuKyAqIEBldmVudDogcHJlLWFsbG9jYXRlZCBldmVudCBidWZmZXIgdG8gdXNlIGZvciBwb2xsaW5nXG4rICogQGNvbmRpdGlvbjogY2FsbGJhY2sgdG8gY2hlY2sgaWYgZGVzaXJlZCByZXNwb25zZSByZWNlaXZlZFxuKyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXG4rICogQHRpbWVvdXRfbXM6IG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kc1xuKyAqXG4rICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxuKyAqIEFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWxpZCBtZXNzYWdlLCBjYWxscyB0aGUgY29uZGl0aW9uIGNhbGxiYWNrIHRvIGNoZWNrXG4rICogaWYgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIG9wY29kZVxuKyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xuKyAqIHBvbGxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSBvciB0aW1lb3V0IGV4cGlyZXMuXG4rICpcbisgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXG4rICogc3RhdGUgbWlzbWF0Y2ggaWYgYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQuXG4rICpcbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxuKyAqIHBvbGxpbmcgaGFyZHdhcmUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxuKyAqL1xuK2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbitcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbitcdFx0XHRcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4rXHRcdFx0XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLFxuK1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4rXHRcdFx0XHRjb25zdCB2b2lkICpjb25kX2RhdGEsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcylcbit7XG4rXHRzdHJ1Y3QgaWF2Zl9odyAqaHcgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWh3O1xuK1x0ZW51bSB2aXJ0Y2hubF9vcHMgcmVjZWl2ZWRfb3A7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4rXHRpbnQgcmV0ID0gLUVBR0FJTjtcbitcdHUxNiBwZW5kaW5nID0gMDtcbitcdHUzMiB2X3JldHZhbDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KTtcbitcbitcdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcbitcdGRvIHtcbitcdFx0aWYgKCFwZW5kaW5nKVxuK1x0XHRcdHVzbGVlcF9yYW5nZSg1MCwgNzUpO1xuK1xuK1x0XHRpZiAoaWF2Zl9jbGVhbl9hcnFfZWxlbWVudChodywgZXZlbnQsIFx1MDAyNnBlbmRpbmcpID09IElBVkZfU1VDQ0VTUykge1xuK1x0XHRcdHJlY2VpdmVkX29wID0gKGVudW0gdmlydGNobmxfb3BzKWxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZWRlc2MuY29va2llX2hpZ2gpO1xuK1x0XHRcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4rXHRcdFx0XHR2X3JldHZhbCA9IGxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZWRlc2MuY29va2llX2xvdyk7XG4rXG4rXHRcdFx0XHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXG4rXHRcdFx0XHRcdFx0XHQgKGVudW0gaWF2Zl9zdGF0dXMpdl9yZXR2YWwsXG4rXHRcdFx0XHRcdFx0XHQgZXZlbnQtXHUwMDNlbXNnX2J1ZiwgZXZlbnQtXHUwMDNlbXNnX2xlbik7XG4rXG4rXHRcdFx0XHRpZiAoY29uZGl0aW9uKGFkYXB0ZXIsIGNvbmRfZGF0YSwgcmVjZWl2ZWRfb3ApKSB7XG4rXHRcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbitcdFx0XHRtZW1zZXQoZXZlbnQtXHUwMDNlbXNnX2J1ZiwgMCwgSUFWRl9NQVhfQVFfQlVGX1NJWkUpO1xuK1xuK1x0XHRcdGlmIChwZW5kaW5nKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uODNkYTViYTZlZWIxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMzI4LDYgKzMyOCw4IEBAIGVudW0gaWNlX3ZzaV9zdGF0ZSB7XG4gc3RydWN0IGljZV92c2lfc3RhdHMge1xuIFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsgIC8qIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiBcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7ICAvKiBSeCByaW5nIHN0YXRzIGFycmF5ICovXG4rXHR1MTYgdHhfcmluZ19zdGF0c19sZW47XG4rXHR1MTYgcnhfcmluZ19zdGF0c19sZW47XG4gfTtcbiBcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5pbmRleCBiMDY5ZTZjNTE0ZmIxLi42ZTdiYmE0NzM4OTg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtOTUsNyArOTUsNyBAQCBpY2VfZXN3aXRjaF9yZWxlYXNlX3JlcHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcmVwciAqcmVwcilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWNlX3ZzaV91cGRhdGVfc2VjdXJpdHkodnNpLCBpY2VfdnNpX2N0eF9zZXRfYW50aXNwb29mKTtcbi1cdG1ldGFkYXRhX2RzdF9mcmVlKHJlcHItXHUwMDNlZHN0KTtcbitcdGRzdF9yZWxlYXNlKFx1MDAyNnJlcHItXHUwMDNlZHN0LVx1MDAzZWRzdCk7XG4gXHRyZXByLVx1MDAzZWRzdCA9IE5VTEw7XG4gXHRpY2VfZmx0cl9hZGRfbWFjX2FuZF9icm9hZGNhc3QodnNpLCByZXByLVx1MDAzZXBhcmVudF9tYWMsXG4gXHRcdFx0XHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5pbmRleCA4Y2RjNGZkYTg5ZTk3Li5jNzE4NDkxMTlkMDRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuQEAgLTMzOCw3ICszMzgsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4gXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0aW50IGk7XG4gXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuIFx0XHRyZXR1cm47XG5AQCAtMzQ5LDE0ICszNDgsMTQgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRpZiAoIXZzaV9zdGF0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpY2VfZm9yX2VhY2hfYWxsb2NfdHhxKHZzaSwgaSkge1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcbiBcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbiBcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiBcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpY2VfZm9yX2VhY2hfYWxsb2NfcnhxKHZzaSwgaSkge1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcbiBcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbiBcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiBcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuQEAgLTUxMyw1MSArNTEyLDYgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9tc2l4X2NsZWFuX3JpbmdzKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzIC0gQWxsb2NhdGUgc3RhdGlzdGljcyBhcnJheXNcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxuLSAqL1xuLXN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuLXtcbi1cdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcbi1cdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4tXG4tXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuLVx0XHRyZXR1cm4gMDtcbi1cdGlmICghcGYtXHUwMDNldnNpX3N0YXRzKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmIChwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0pXG4tXHQvKiByZWFsbG9jIHdpbGwgaGFwcGVuIGluIHJlYnVpbGQgcGF0aCAqL1xuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcbi1cdGlmICghdnNpX3N0YXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4tXHRcdGt6YWxsb2Nfb2JqcygqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cywgdnNpLVx1MDAzZWFsbG9jX3R4cSk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpXG4tXHRcdGdvdG8gZXJyX2FsbG9jX3R4O1xuLVxuLVx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4tXHRcdGt6YWxsb2Nfb2JqcygqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cywgdnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpXG4tXHRcdGdvdG8gZXJyX2FsbG9jX3J4O1xuLVxuLVx0cGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdID0gdnNpX3N0YXQ7XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1lcnJfYWxsb2Nfcng6XG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbi1lcnJfYWxsb2NfdHg6XG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKTtcbi1cdGtmcmVlKHZzaV9zdGF0KTtcbi1cdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IE5VTEw7XG4tXHRyZXR1cm4gLUVOT01FTTtcbi19XG4tXG4gLyoqXG4gICogaWNlX3ZzaV9hbGxvY19kZWYgLSBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGFscmVhZHkgYWxsb2NhdGVkIFZTSVxuICAqIEB2c2k6IHB0ciB0byBWU0lcbkBAIC0yMzAzLDYgKzIyNTcsODUgQEAgc3RhdGljIGludCBpY2VfdnNpX2NmZ190Y19sYW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lc1xuKyAqIEB2c2k6IFZTSSBwb2ludGVyXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGludCBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbit7XG4rXHR1MTYgcmVxX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID8gdnNpLVx1MDAzZXJlcV90eHEgOiB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuK1x0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbitcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4rXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xuK1x0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuK1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbitcdHUxNiBwcmV2X3R4cSwgcHJldl9yeHE7XG4rXG4rXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuK1x0aWYgKCF2c2lfc3RhdCkge1xuK1x0XHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XG4rXHRcdGlmICghdnNpX3N0YXQpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRwcmV2X3R4cSA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0aWYgKHJlcV90eHEgXHUwMDNjIHByZXZfdHhxKSB7XG4rXHRcdGZvciAoaW50IGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4rXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbitcdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuK1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzO1xuK1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4rXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHJlcV90eHEsXG4rXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyksXG4rXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbitcdGlmICghdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cykge1xuK1x0XHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcbitcdFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xuK1x0fVxuK1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW4gPSByZXFfdHhxO1xuK1xuK1x0cHJldl9yeHEgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcbitcdGlmIChyZXFfcnhxIFx1MDAzYyBwcmV2X3J4cSkge1xuK1x0XHRmb3IgKGludCBpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkrKykge1xuK1x0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4rXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbitcdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cztcbitcdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuK1x0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuK1x0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxuK1x0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4rXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbitcdFx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDtcbitcdH1cbitcdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuID0gcmVxX3J4cTtcbitcbitcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDpcbitcdGlmICghcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdKSB7XG4rXHRcdC8qIHZzaV9zdGF0IHdhcyBub3QgdmlzaWJsZSBiZWZvcmUgY3VycmVudCBhbGxvYyBhdHRlbXB0ICovXG4rXHRcdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xuK1x0XHRrZnJlZSh2c2lfc3RhdCk7XG4rXHR9XG4rXHRyZXR1cm4gLUVOT01FTTtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9jZmdfZGVmIC0gY29uZmlndXJlIGRlZmF1bHQgVlNJIGJhc2VkIG9uIHRoZSB0eXBlXG4gICogQHZzaTogcG9pbnRlciB0byBWU0lcbkBAIC0yMzIwLDcgKzIzNTMsNyBAQCBzdGF0aWMgaW50IGljZV92c2lfY2ZnX2RlZihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogYWxsb2NhdGUgbWVtb3J5IGZvciBUeC9SeCByaW5nIHN0YXQgcG9pbnRlcnMgKi9cbi1cdHJldCA9IGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcbitcdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bnJvbGxfdnNpX2FsbG9jO1xuIFxuQEAgLTMwMTEsNjYgKzMwNDQsNiBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHR9XG4gfVxuIFxuLS8qKlxuLSAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXNcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxuLSAqL1xuLXN0YXRpYyBpbnRcbi1pY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbi17XG4tXHR1MTYgcmVxX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID8gdnNpLVx1MDAzZXJlcV90eHEgOiB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuLVx0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbi1cdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4tXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xuLVx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuLVx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbi1cdHUxNiBwcmV2X3R4cSA9IHZzaS1cdTAwM2VhbGxvY190eHE7XG4tXHR1MTYgcHJldl9yeHEgPSB2c2ktXHUwMDNlYWxsb2NfcnhxO1xuLVx0aW50IGk7XG4tXG4tXHR2c2lfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbi1cbi1cdGlmIChyZXFfdHhxIFx1MDAzYyBwcmV2X3R4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzO1xuLVx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4tXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHJlcV90eHEsXG4tXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyksXG4tXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cykge1xuLVx0XHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4tXHRpZiAocmVxX3J4cSBcdTAwM2MgcHJldl9yeHEpIHtcbi1cdFx0Zm9yIChpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkrKykge1xuLVx0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qKlxuICAqIGljZV92c2lfcmVidWlsZCAtIFJlYnVpbGQgVlNJIGFmdGVyIHJlc2V0XG4gICogQHZzaTogVlNJIHRvIGJlIHJlYnVpbGRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbmluZGV4IGUwNGRlMDIxNTU5NjYuLjU1ODkzNzg5OTgxODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTEzNjYsNiArMTM2NiwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxuIFx0cmV0dXJuIF9faWNlX3NldF92Zl9tYWMoaWNlX25ldGRldl90b19wZihuZXRkZXYpLCB2Zl9pZCwgbWFjKTtcbiB9XG4gXG4rLyoqXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XG4rICogQHZmOiBWRiB0byBjb25maWd1cmVcbisgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZ1xuKyAqXG4rICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4rICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0J3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpXG4re1xuK1x0aWYgKHNldHRpbmcpXG4rXHRcdHNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK1x0ZWxzZVxuK1x0XHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK31cbitcbiAvKipcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTE0MDEsMTEgKzE0MTgsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcbi1cdHdoaWxlICghdHJ1c3RlZCBcdTAwMjZcdTAwMjYgdmYtXHUwMDNlbnVtX21hY19sbGRwKVxuLVx0XHRpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7XG4tXG4tXHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbi1cdGljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7XG4rXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xuK1x0aWYgKCF0cnVzdGVkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICh2Zi1cdTAwM2VudW1fbWFjX2xsZHAgXHUwMDNlIDAgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX01DX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykpKSB7XG4rXHRcdHdoaWxlICh2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4rXHRcdFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xuK1x0XHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbitcdFx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbitcdH0gZWxzZSB7XG4rXHRcdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuK1x0XHRpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpO1xuK1x0fVxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwiLFxuIFx0XHQgdmZfaWQsIHRydXN0ZWQgPyBcIlwiIDogXCJ1blwiKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5pbmRleCAxNmZjYzhjZjYxOTE5Li4zOTA0M2Q4Y2ExYmY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5AQCAtNzU4NSwxMSArNzU4NSwxMyBAQCBzdGF0aWMgaW50IF9faWdjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgcnBtKVxuIFx0XHRlcnIgPSBfX2lnY19vcGVuKG5ldGRldiwgdHJ1ZSk7XG4gXHRcdGlmICghcnBtKVxuIFx0XHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdGlmICghZXJyKVxuLVx0XHRcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGVycjtcbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjM6MTc6MTUuNDU2Njk5Nzc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc2MTM4MDA4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IHR3ZWFrcyBhIGJ1bmNoIG9mIEludGVsIGV0aGVybmV0IGRyaXZlcnM6IGBpNDBlYCwgYGlhdmZgLCBgaWNlYCwgYW5kIGBpZ2NgLiBJdCdzIGFsbCBmdW5jdGlvbmFsIHN0dWZmIOKAkyBmaXhpbmcgbWVtb3J5IGNvbXBhcmlzb25zLCBtZW1vcnkgbGVha3MsIGFuZCBvcHRpbWl6aW5nIHNvbWUgVkYgdHJ1c3QgY29uZmlndXJhdGlvbnMuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBob3cgZWFzeSBpcyB0aGlzIHRvIHRlc3Q/IEFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgaTQwZWAsIGBpYXZmYCwgYGljZWAsIGFuZCBgaWdjYCBhcmUgYWxsICpwaHlzaWNhbCogaGFyZHdhcmUgZHJpdmVycy4gVGhleSdyZSBtZWFudCB0byB3b3JrIHdpdGggYWN0dWFsIEludGVsIEV0aGVybmV0IGhhcmR3YXJlLiBJIGtub3cgUUVNVSBlbXVsYXRlcyBzb21lIEludGVsIE5JQ3Mg4oCTIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAgc3ByaW5nIHRvIG1pbmQuIEJ1dCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgc3BlY2lmaWMgZGV2aWNlcyB0YXJnZXRlZCBieSB0aGlzIHBhdGNoIHNlcmllcz9cblxuSSBjYW4ndCBpbnN0YW50bHkgc2VhcmNoIFFFTVUgc291cmNlIHJpZ2h0IG5vdywgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBgaTQwZWAsIGBpY2VgLCBvciBgaWdjYCBvdXQgb2YgdGhlIGJveC4gT2theSwgc28gdGhhdOKAmXMgYSBiaWcgXCJub1wiLiBJJ20gcHJldHR5IHN1cmUgYGlhdmZgIGlzIGFsc28gbm90IGVtdWxhdGVkLCBzaW5jZSBpdCdzIGEgVkYgZHJpdmVyLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MgZnVydGhlci4gSXQgaXMgaW50ZXJlc3RpbmcgdG8gbG9vayBpZiBRRU1VIGVtdWxhdGVzIGBpZ2NgLCBidXQgcHJvYmFibHkgbm90LlxuXG5XYWl0LCBhcmUgdGhlc2UgZHJpdmVycyB0aGUga2luZCBvZiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlPyBZZXMsIHRoZXkgYXJlISBUaGV5J3JlIHN0YW5kYXJkIE5JQyBkcml2ZXJzLCBidXQgdGhleSByZXF1aXJlIHRoZSBwaHlzaWNhbCBjYXJkIHRvIHdvcmsuIFNvLCBldmVuIGlmIFFFTVUgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIHRoZW0sIGNvdWxkIHdlIGZ1enogdGhlbSBzb21laG93PyBTeXprYWxsZXIgaGFzIHNvbWUgUENJIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLCBidXQgaXQgdXN1YWxseSByZWxpZXMgb24gZW11bGF0ZWQgZGV2aWNlcy4gTWF5YmUgYHN5cy9saW51eC9zb2NrZXRfbmV0bGlua19nZW5lcmljX2RldmxpbmsudHh0YCBpcyB1c2VmdWwuIEhvd2V2ZXIsIGlmIHRoZSBQQ0kgZGV2aWNlIGlzbid0IHByZXNlbnQsIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdvbid0IGV2ZW4gYmUgY2FsbGVkLiBUaGUgcGF0Y2ggd291bGQgYmUgdW5yZWFjaGFibGUuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgdmlydHVhbCBvciBlbXVsYXRlZCB3YXlzIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHM/IGBpYXZmYCBpcyBhbiBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSBwcm9taXNpbmcsIGJ1dCBzdGlsbCB0cmlja3kuIEknZCBuZWVkIHRvIGNvbmZpcm0gd2l0aCB0aGUgc3l6a2FsbGVyIHNldHVwIGlmIHRoZXkgYXJlIHJlYWNoYWJsZSwgd2hpY2ggSSBjYW5ub3Qgd2l0aCB0aGUgdG9vbHMgdGhhdCBJIGhhdmUuIEkgY2Fubm90IHNlYXJjaCBgc3lzL2xpbnV4YCBmb3IgdGhlIGRyaXZlcnMgdXNpbmcgdGhlIGN1cnJlbnQgcHJvbXB0J3MgZnVuY3Rpb25zLiBUaGVzZSBhcmUgc3RhbmRhcmQgUENJIGRyaXZlcnMuXG5cbkdpdmVuIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlbSBhbmQgdGhleSdyZSBtZWFudCBmb3IgcGh5c2ljYWwgaGFyZHdhcmUsIGl0IHNlZW1zIHVubGlrZWx5IHRoYXQgSSBjYW4gcmVhY2ggdGhlc2UgZHJpdmVyIGNoYW5nZXMgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gSSBuZWVkIGEgcmVhbCBtYWNoaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMzoxNzozMy4wNzA1MDMxNDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3MTMwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1PRFVMRV9ERVZJQ0VfVEFCTEVcXFxcKHBjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpNDBlX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTAzLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxMDQ6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGk0MGVfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xMDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIzOjE3OjMzLjcwNzY0MTM1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDU0MTY2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBEcml2ZXIgRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgUENJIGRyaXZlcnMgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyDigJMgYGk0MGVgLCBgaWNlYCwgYGlhdmZgLCBhbmQgYGlnY2AuIFRoZSBwcm9ibGVtIGlzLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBhbnkgb2YgdGhlbS4gVGhhdCBpbW1lZGlhdGVseSB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIGZ1enppbmcgcHJvY2VzcywgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ2FuIHN5emthbGxlcidzIGBzeXpfcGNpX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhciBzaW11bGF0ZSBQQ0kgY29uZmlnIHNwYWNlIGVub3VnaCB0byBnZXQgdGhlc2UgZHJpdmVycyBwcm9iZWQ/XCIgXG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgc3l6a2FsbGVyICpkb2VzKiBoYXZlIFBDSSBmdXp6aW5nIHN1cHBvcnQhIEl0IHVzZXMgYHN5el9wY2lfc2V0dXBgLCBvciB0aGUgYHZoY2lgLCBvciBzaW1pbGFyIHZpcnR1YWwgbWVjaGFuaXNtcy4gQnV0IGhvbGQgb24sIHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyB0aGF0IHN5emthbGxlcidzIFBDSSBmdXp6aW5nIHJlbGllcyBvbiBhIHZpcnR1YWwgUENJIGhvc3QgYnJpZGdlLCB3aGljaCB0aGVuIGluamVjdHMgUENJIGRldmljZXMuXG5cbk9rYXksIGxldCBtZSBjaGVjayB0aGUgXCJyZWFjaGFibGVcIiBjcml0ZXJpYSBpbiB0aGUgcHJvbXB0LiBBaCwgaGVyZSBpdCBpczogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuU28sIGFyZSB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIFwidmVuZG9yLXNwZWNpZmljXCI/IFdlbGwsIGBpNDBlYCBpcyA0MCBHaWdhYml0LCBgaWNlYCBpcyAxMDAgR2lnYWJpdCAoRTgwMCBzZXJpZXMpLCBhbmQgYGlnY2AgaXMgMi41IEdpZ2FiaXQuIFRoZXkncmUgYWxsIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEFuZCBJICprbm93KiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBOSUNzLiBOb3csIHdvdWxkIHN5emthbGxlciBldmVuIGJlIGFibGUgdG8gZ2V0IHRoZW0gZ29pbmc/IE1heWJlLCBidXQgaXQgd291bGQgYmUgcmVhbGx5IHRvdWdoLiBJdCdzIHVubGlrZWx5IHRoYXQgc3l6a2FsbGVyIGNvdWxkIGdldCBwYXN0IHRoZWlyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHNpbmNlIHRoZXkgcmVxdWlyZSBmaXJtd2FyZSwgcmVhZCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMsIG9yIHJlcXVpcmUgdmFsaWQgTUFDIGFkZHJlc3NlcyBmcm9tIEVFUFJPTSwgd2hpY2ggd291bGQgYWxsIGJlIGFic2VudCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEZvciBpbnN0YW5jZSwgYGk0MGVgIGRlbWFuZHMgZmlybXdhcmUgKEFkbWluUSkuIEEgYmFzaWMgUENJIGZ1enplciBpcyBqdXN0IGdvaW5nIHRvIGZhaWwgYXQgdGhlIGBpNDBlX3Byb2JlYCBzdGFnZSBiZWNhdXNlIGl0J3MgZXhwZWN0aW5nIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGZpcm13YXJlLiBTYW1lIHdpdGggYGljZWAgYW5kIGBpYXZmYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBidXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgYGlnY2AsIGl0IGhhcyBhZGRlZCBgaWdiYCAoSW50ZWwgODI1NzYpLiBOb3QgYGlnY2AgKEludGVsIEkyMjUpLiBBbmQgaXQgYWxzbyBkb2Vzbid0IGVtdWxhdGUgYGk0MGVgIG9yIGBpY2VgLiBJdCBkb2VzIGVtdWxhdGUgb3RoZXIgTklDcywgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGV0Yy5cblxuVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgbWVhbnMgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyBzaW1wbGU6IHRoZXNlIGFyZSBwaHlzaWNhbCBQQ0llIE5JQyBkcml2ZXJzIChgaTQwZWAsIGBpYXZmYCwgYGljZWAsIGBpZ2NgKSB0aGF0IG5lZWQgaGFyZHdhcmUgbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGVtIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0MywiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjM6MTc6NDYuNzYxODA5OTA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpNDBlLCBpYXZmLCBpY2UsIGlnYykuIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlc2UgZHJpdmVycyB0eXBpY2FsbHkgcmVxdWlyZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIGZpcm13YXJlIChlLmcuLCBBZG1pblEpIGR1cmluZyBwcm9iZSwgbWVhbmluZyB0aGV5IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgb3IgcmVhY2hlZCB2aWEgZ2VuZXJpYyBQQ0kgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaTQwZSwgaWF2ZiwgaWNlLCBpZ2MpLiBUaGVzZSBhcmUgZHJpdmVycyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZXNlIGRyaXZlcnMgdHlwaWNhbGx5IHJlcXVpcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW5RKSBkdXJpbmcgcHJvYmUsIG1lYW5pbmcgdGhleSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG9yIHJlYWNoZWQgdmlhIGdlbmVyaWMgUENJIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowg676x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 22:37:36 +0000 UTC FinishedAt: 2026-08-04 23:17:48 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGk0MGUsIGlhdmYsIGljZSwgaWdjKS4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGVzZSBkcml2ZXJzIHR5cGljYWxseSByZXF1aXJlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgZmlybXdhcmUgKGUuZy4sIEFkbWluUSkgZHVyaW5nIHByb2JlLCBtZWFuaW5nIHRoZXkgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBvciByZWFjaGVkIHZpYSBnZW5lcmljIFBDSSBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjVlMTEzYTRhMzMzNTEzMzZmZDUzMGQzODhkOTg4ODE2N2MxMDI5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDQgMjM6MTc6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IGEwNDY4MzAwNGE1NjcuLjRmMGY3NjI2NjA1YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNjkwNyw3ICYjNDM7NjkwNyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9od19zZXRfZGNiX2NvbmZpZyhzdHJ1Y3QgaTQwZV9wZiAqcGYsXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogQ2hlY2sgaWYgbmVlZCByZWNvbmZpZ3VyYXRpb24gKi9cbi1cdGlmICghbWVtY21wKFx1MDAyNm5ld19jZmcsIFx1MDAyNm9sZF9jZmcsIHNpemVvZihuZXdfY2ZnKSkpIHtcbiYjNDM7XHRpZiAoIW1lbWNtcChuZXdfY2ZnLCBvbGRfY2ZnLCBzaXplb2YoKm5ld19jZmcpKSkge1xuIFx0XHRkZXZfZGJnKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtObyBDaGFuZ2UgaW4gRENCIENvbmZpZyByZXF1aXJlZC5cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbkBAIC0xNDQ5NCwxMyAmIzQzOzE0NDk0LDE1IEBAIHN0cnVjdCBpNDBlX3ZzaSAqaTQwZV92c2lfc2V0dXAoc3RydWN0IGk0MGVfcGYgKnBmLCB1OCB0eXBlLFxuIFx0aWYgKHZzaS1cdTAwM2VuZXRkZXZfcmVnaXN0ZXJlZCkge1xuIFx0XHR2c2ktXHUwMDNlbmV0ZGV2X3JlZ2lzdGVyZWQgPSBmYWxzZTtcbiBcdFx0dW5yZWdpc3Rlcl9uZXRkZXYodnNpLVx1MDAzZW5ldGRldik7XG4tXHRcdGZyZWVfbmV0ZGV2KHZzaS1cdTAwM2VuZXRkZXYpO1xuLVx0XHR2c2ktXHUwMDNlbmV0ZGV2ID0gTlVMTDtcbiBcdH1cbiBlcnJfZGxfcG9ydDpcbiBcdGlmICh2c2ktXHUwMDNldHlwZSA9PSBJNDBFX1ZTSV9NQUlOKVxuIFx0XHRpNDBlX2RldmxpbmtfZGVzdHJveV9wb3J0KHBmKTtcbiBlcnJfbmV0ZGV2OlxuJiM0MztcdGlmICh2c2ktXHUwMDNlbmV0ZGV2KSB7XG4mIzQzO1x0XHRmcmVlX25ldGRldih2c2ktXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHZzaS1cdTAwM2VuZXRkZXYgPSBOVUxMO1xuJiM0MztcdH1cbiBcdGk0MGVfYXFfZGVsZXRlX2VsZW1lbnQoXHUwMDI2cGYtXHUwMDNlaHcsIHZzaS1cdTAwM2VzZWlkLCBOVUxMKTtcbiBlcnJfdnNpOlxuIFx0aTQwZV92c2lfY2xlYXIodnNpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5pbmRleCBhMjZjM2Q0N2VjMTU2Li4wY2M0MzRiMjZlYjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5AQCAtNDk0Myw2ICYjNDM7NDk0MywyMyBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBlbmFibGUpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcbiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmVcbiYjNDM7ICogQHNldHRpbmc6IHRydXN0IHNldHRpbmdcbiYjNDM7ICpcbiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4mIzQzOyAqIFRoaXMgaXMgb25seSBjYWxsZWQgd2hlbiBpdCYjMzk7cyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcbiYjNDM7ICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHNldHRpbmcpXG4mIzQzO1x0XHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0Y2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGUgcGZcbkBAIC00OTg3LDE5ICYjNDM7NTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKVxuIFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdHBmLVx1MDAzZXZzaVt2Zi1cdTAwM2VsYW5fdnNpX2lkeF0tXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcbiBcbi1cdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuJiM0MztcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXG4mIzQzO1x0aWYgKCFzZXR0aW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAodmYtXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMgXHUwMDNlIDAgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSB8fFxuJiM0MztcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCBcdTAwMjZ2Zi1cdTAwM2V2Zl9zdGF0ZXMpKSkge1xuJiM0MztcdFx0aTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7XG4mIzQzO1x0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwmIzM0OyxcbiBcdFx0IHZmX2lkLCBzZXR0aW5nID8gXCYjMzQ7XCYjMzQ7IDogXCYjMzQ7dW5cJiMzNDspO1xuIFxuLVx0aWYgKHZmLVx1MDAzZWFkcV9lbmFibGVkKSB7XG4tXHRcdGlmICghdmYtXHUwMDNldHJ1c3RlZCkge1xuLVx0XHRcdGRldl9pbmZvKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0IFwmIzM0O1ZGICV1IG5vIGxvbmdlciBUcnVzdGVkLCBkZWxldGluZyBhbGwgY2xvdWQgZmlsdGVyc1xcblwmIzM0Oyxcbi1cdFx0XHRcdCB2Zl9pZCk7XG4tXHRcdFx0aTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpO1xuLVx0XHR9XG4tXHR9XG4tXG4gb3V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbmluZGV4IDA1MGY4MjQxZWY1ZTYuLjVmY2JmYTBjYTg1NTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbkBAIC0yNTksNyAmIzQzOzI1OSw2IEBAIHN0cnVjdCBpYXZmX2FkYXB0ZXIge1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IGZpbmlzaF9jb25maWc7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dhaXRxdWV1ZTtcbi1cdHdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTtcbiBcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fZmlsdGVyX2xpc3Q7XG4gXHRpbnQgbnVtX3ZsYW5fZmlsdGVycztcbkBAIC01ODgsOCAmIzQzOzU4Nyw5IEBAIHZvaWQgaWF2Zl9jb25maWd1cmVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9lbmFibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9kaXNhYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfbWFwX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiYjNDM7dm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuQEAgLTYwNiw2ICYjNDM7NjA2LDEzIEBAIHZvaWQgaWF2Zl9kaXNhYmxlX3ZsYW5fc3RyaXBwaW5nKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0ICAgICAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcGNvZGUsXG4gXHRcdFx0ICAgICAgZW51bSBpYXZmX3N0YXR1cyB2X3JldHZhbCwgdTggKm1zZywgdTE2IG1zZ2xlbik7XG4mIzQzO2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXG4mIzQzO1x0XHRcdFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiYjNDM7XHRcdFx0XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLFxuJiM0MztcdFx0XHRcdFx0XHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmNvbmRfZGF0YSxcbiYjNDM7XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcyk7XG4gaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19idyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19xdWFudGFfc2l6ZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xuaW5kZXggMjliODQwM2EwNjZiYy4uM2ZhMjg4ZTM3OThhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC0xMDI5LDYgJiM0MzsxMDI5LDYwIEBAIHN0YXRpYyBib29sIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfbWFjX2NoYW5nZV9kb25lIC0gQ2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWRcbiYjNDM7ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4mIzQzOyAqIEBkYXRhOiBNQUMgYWRkcmVzcyBiZWluZyBjaGVja2VkIChhcyBjb25zdCB2b2lkICopXG4mIzQzOyAqIEB2X29wOiB2aXJ0Y2hubCBvcGNvZGUgZnJvbSBwcm9jZXNzZWQgbWVzc2FnZVxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsYmFjayBmb3IgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKCkgdG8gY2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCBpYXZmX21hY19jaGFuZ2VfZG9uZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdCBjb25zdCB2b2lkICpkYXRhLCBlbnVtIHZpcnRjaG5sX29wcyB2X29wKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYsIGFkZHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzc1xuJiM0MzsgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbiYjNDM7ICogQGFkZHI6IE1BQyBhZGRyZXNzIHRvIHNldFxuJiM0MzsgKlxuJiM0MzsgKiBTZW5kIE1BQyBjaGFuZ2UgcmVxdWVzdCB0byBQRiBhbmQgcG9sbCBhZG1pbiBxdWV1ZSBmb3IgcmVzcG9uc2UuXG4mIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byAyLjUgc2Vjb25kcy5cbiYjNDM7ICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZlxuJiM0MzsgKiBhbGxvY2F0aW9uIGZhaWxzIGFmdGVyIG1lc3NhZ2UgaXMgc2VudCB0byBQRi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgaWF2Zl9zZXRfbWFjX3N5bmMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfYXNzZXJ0X2xvY2tlZChhZGFwdGVyLVx1MDAzZW5ldGRldik7XG4mIzQzO1xuJiM0MztcdGV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTtcbiYjNDM7XHRldmVudC5tc2dfYnVmID0ga3phbGxvYyhldmVudC5idWZfbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWV2ZW50Lm1zZ19idWYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gaWF2Zl9hZGRfZXRoZXJfYWRkcnMoYWRhcHRlcik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgXHUwMDI2ZXZlbnQsXG4mIzQzO1x0XHRcdFx0XHQgIGlhdmZfbWFjX2NoYW5nZV9kb25lLCBhZGRyLCAyNTAwKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShldmVudC5tc2dfYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGlhdmZfc2V0X21hYyAtIE5ETyBjYWxsYmFjayB0byBzZXQgcG9ydCBNQUMgYWRkcmVzc1xuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC0xMDQyLDI5ICYjNDM7MTA5NiwzMCBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxuIFx0c3RydWN0IHNvY2thZGRyICphZGRyID0gcDtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cdTAwM2VzdGF0ZSBcdTAwM2MgX19JQVZGX0RPV04pXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiBcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4gXHRyZXQgPSBpYXZmX3JlcGxhY2VfcHJpbWFyeV9tYWMoYWRhcHRlciwgYWRkci1cdTAwM2VzYV9kYXRhKTtcbi1cbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSxcbi1cdFx0XHRcdFx0ICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci1cdTAwM2VzYV9kYXRhKSxcbi1cdFx0XHRcdFx0ICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjUwMCkpO1xuLVxuLVx0LyogSWYgcmV0IFx1MDAzYyAwIHRoZW4gaXQgbWVhbnMgd2FpdCB3YXMgaW50ZXJydXB0ZWQuXG4tXHQgKiBJZiByZXQgPT0gMCB0aGVuIGl0IG1lYW5zIHdlIGdvdCBhIHRpbWVvdXQuXG4tXHQgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLFxuLVx0ICogY2hlY2sgaWYgbmV0ZGV2IE1BQyB3YXMgdXBkYXRlZCB0byByZXF1ZXN0ZWQgTUFDLFxuLVx0ICogaWYgeWVzIHRoZW4gc2V0IE1BQyBzdWNjZWVkZWQgb3RoZXJ3aXNlIGl0IGZhaWxlZCByZXR1cm4gLUVBQ0NFU1xuLVx0ICovXG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdHJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0LyogUm9sbGJhY2sgb25seSBpZiBzZW5kIGZhaWxlZCAobWVzc2FnZSBuZXZlciByZWFjaGVkIFBGKS5cbiYjNDM7XHRcdCAqIERvbiYjMzk7dCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhc1xuJiM0MztcdFx0ICogc2VudCBhbmQgUEYgd2lsbCBldmVudHVhbGx5IHJlc3BvbmQuIFdoZW4gdGhlIHJlc3BvbnNlIGFycml2ZXMsXG4mIzQzO1x0XHQgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpXG4mIzQzO1x0XHQgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FQUdBSU4pIHtcbiYjNDM7XHRcdFx0aWF2Zl9tYWNfYWRkX3JlamVjdChhZGFwdGVyKTtcbiYjNDM7XHRcdFx0ZXRoZXJfYWRkcl9jb3B5KGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0XHR9XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi1cdTAwM2VkZXZfYWRkciwgYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUNDRVM7XG5AQCAtNTM5NCw5ICYjNDM7NTQ0OSw2IEBAIHN0YXRpYyBpbnQgaWF2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdC8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHRyYW5zaXRpb24gdG8gZG93biBzdGF0dXMgKi9cbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YWRhcHRlci1cdTAwM2Vkb3duX3dhaXRxdWV1ZSk7XG4gXG4tXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB2aXJ0Y2hhbm5lbCBldmVudHMgKi9cbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUpO1xuLVxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2YWRhcHRlci1cdTAwM2VwdHAuYXFfY21kcyk7XG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7XG4gXHRtdXRleF9pbml0KFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZF9sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5pbmRleCBlYzIzNGNjOGJkOWRiLi5lNmI3ZThmODJjN2MxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG5AQCAtMiw2ICYjNDM7Miw3IEBAXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7aWF2Zl9wdHAuaFwmIzM0O1xuQEAgLTU1NSwyMCAmIzQzOzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxuLSAqKi9cbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsO1xuIFx0c3RydWN0IGlhdmZfbWFjX2ZpbHRlciAqZjtcbiBcdGludCBpID0gMCwgY291bnQgPSAwO1xuIFx0Ym9vbCBtb3JlID0gZmFsc2U7XG4gXHRzaXplX3QgbGVuO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRpZiAoYWRhcHRlci1cdTAwM2VjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHtcbiBcdFx0LyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqL1xuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O0Nhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXFxuXCYjMzQ7LFxuIFx0XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCk7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuQEAgLTU4MCw3ICYjNDM7NTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKCFjb3VudCkge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWFxX3JlcXVpcmVkIFx1MDAyNj0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX0FERF9FVEhfQUREUjtcbiBcbkBAIC01OTQsOCAmIzQzOzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXZlYWwpIHtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4gXHR2ZWFsLVx1MDAzZXZzaV9pZCA9IGFkYXB0ZXItXHUwMDNldnNpX3Jlcy1cdTAwM2V2c2lfaWQ7XG5AQCAtNjE1LDggJiM0Mzs2MjAsMTUgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuIFxuLVx0aWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4mIzQzO1x0cmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4gXHRrZnJlZSh2ZWFsKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1VuYWJsZSB0byBzZW5kIEFERF9FVEhfQUREUiBtZXNzYWdlIHRvIFBGLCBlcnJvciAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC03MTIsOCAmIzQzOzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLlxuLSAqKi9cbi1zdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcbkBAIC0yMzY0LDcgJiM0MzsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuIFx0XHRcdC8qIHJlc3RvcmUgYWRtaW5pc3RyYXRpdmVseSBzZXQgTUFDIGFkZHJlc3MgKi9cbiBcdFx0XHRldGhlcl9hZGRyX2NvcHkoYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbi1cdFx0XHR3YWtlX3VwKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6XG4gXHRcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gZGVsZXRlIE1BQyBmaWx0ZXIsIGVycm9yICVzXFxuXCYjMzQ7LFxuQEAgLTI1NTUsNyAmIzQzOzI1NjYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkYXB0ZXItXHUwMDNlaHcubWFjLmFkZHIpO1xuIFx0XHRcdG5ldGlmX2FkZHJfdW5sb2NrX2JoKG5ldGRldik7XG4gXHRcdH1cbi1cdFx0d2FrZV91cChcdTAwMjZhZGFwdGVyLVx1MDAzZXZjX3dhaXRxdWV1ZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHtcbiBcdFx0c3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9XG5AQCAtMjk1MCwzICYjNDM7Mjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0fSAvKiBzd2l0Y2ggdl9vcGNvZGUgKi9cbiBcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXG4mIzQzOyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuJiM0MzsgKiBAZXZlbnQ6IHByZS1hbGxvY2F0ZWQgZXZlbnQgYnVmZmVyIHRvIHVzZSBmb3IgcG9sbGluZ1xuJiM0MzsgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXG4mIzQzOyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXG4mIzQzOyAqIEB0aW1lb3V0X21zOiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHNcbiYjNDM7ICpcbiYjNDM7ICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxuJiM0MzsgKiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggdmFsaWQgbWVzc2FnZSwgY2FsbHMgdGhlIGNvbmRpdGlvbiBjYWxsYmFjayB0byBjaGVja1xuJiM0MzsgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXG4mIzQzOyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xuJiM0MzsgKiBwb2xsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUgb3IgdGltZW91dCBleHBpcmVzLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXG4mIzQzOyAqIHN0YXRlIG1pc21hdGNoIGlmIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50LlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxuJiM0MzsgKiBwb2xsaW5nIGhhcmR3YXJlLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbiYjNDM7XHRcdFx0XHRib29sICgqY29uZGl0aW9uKShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4mIzQzO1x0XHRcdFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxuJiM0MztcdFx0XHRcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlhdmZfaHcgKmh3ID0gXHUwMDI2YWRhcHRlci1cdTAwM2VodztcbiYjNDM7XHRlbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4mIzQzO1x0aW50IHJldCA9IC1FQUdBSU47XG4mIzQzO1x0dTE2IHBlbmRpbmcgPSAwO1xuJiM0MztcdHUzMiB2X3JldHZhbDtcbiYjNDM7XG4mIzQzO1x0bmV0ZGV2X2Fzc2VydF9sb2NrZWQoYWRhcHRlci1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiYjNDM7XHR0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGlmICghcGVuZGluZylcbiYjNDM7XHRcdFx0dXNsZWVwX3JhbmdlKDUwLCA3NSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlhdmZfY2xlYW5fYXJxX2VsZW1lbnQoaHcsIGV2ZW50LCBcdTAwMjZwZW5kaW5nKSA9PSBJQVZGX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdFx0cmVjZWl2ZWRfb3AgPSAoZW51bSB2aXJ0Y2hubF9vcHMpbGUzMl90b19jcHUoZXZlbnQtXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XG4mIzQzO1x0XHRcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4mIzQzO1x0XHRcdFx0dl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC1cdTAwM2VkZXNjLmNvb2tpZV9sb3cpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IChlbnVtIGlhdmZfc3RhdHVzKXZfcmV0dmFsLFxuJiM0MztcdFx0XHRcdFx0XHRcdCBldmVudC1cdTAwM2Vtc2dfYnVmLCBldmVudC1cdTAwM2Vtc2dfbGVuKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGNvbmRpdGlvbihhZGFwdGVyLCBjb25kX2RhdGEsIHJlY2VpdmVkX29wKSkge1xuJiM0MztcdFx0XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0bWVtc2V0KGV2ZW50LVx1MDAzZW1zZ19idWYsIDAsIElBVkZfTUFYX0FRX0JVRl9TSVpFKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZW5kaW5nKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uODNkYTViYTZlZWIxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMzI4LDYgJiM0MzszMjgsOCBAQCBlbnVtIGljZV92c2lfc3RhdGUge1xuIHN0cnVjdCBpY2VfdnNpX3N0YXRzIHtcbiBcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7ICAvKiBUeCByaW5nIHN0YXRzIGFycmF5ICovXG4gXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzOyAgLyogUnggcmluZyBzdGF0cyBhcnJheSAqL1xuJiM0MztcdHUxNiB0eF9yaW5nX3N0YXRzX2xlbjtcbiYjNDM7XHR1MTYgcnhfcmluZ19zdGF0c19sZW47XG4gfTtcbiBcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5pbmRleCBiMDY5ZTZjNTE0ZmIxLi42ZTdiYmE0NzM4OTg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtOTUsNyAmIzQzOzk1LDcgQEAgaWNlX2Vzd2l0Y2hfcmVsZWFzZV9yZXByKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3JlcHIgKnJlcHIpXG4gXHRcdHJldHVybjtcbiBcbiBcdGljZV92c2lfdXBkYXRlX3NlY3VyaXR5KHZzaSwgaWNlX3ZzaV9jdHhfc2V0X2FudGlzcG9vZik7XG4tXHRtZXRhZGF0YV9kc3RfZnJlZShyZXByLVx1MDAzZWRzdCk7XG4mIzQzO1x0ZHN0X3JlbGVhc2UoXHUwMDI2cmVwci1cdTAwM2Vkc3QtXHUwMDNlZHN0KTtcbiBcdHJlcHItXHUwMDNlZHN0ID0gTlVMTDtcbiBcdGljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh2c2ksIHJlcHItXHUwMDNlcGFyZW50X21hYyxcbiBcdFx0XHRcdCAgICAgICBJQ0VfRldEX1RPX1ZTSSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcbmluZGV4IDhjZGM0ZmRhODllOTcuLmM3MTg0OTExOWQwNGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5AQCAtMzM4LDcgJiM0MzszMzgsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4gXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0aW50IGk7XG4gXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuIFx0XHRyZXR1cm47XG5AQCAtMzQ5LDE0ICYjNDM7MzQ4LDE0IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0aWYgKCF2c2lfc3RhdClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWNlX2Zvcl9lYWNoX2FsbG9jX3R4cSh2c2ksIGkpIHtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4gXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4gXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW47IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4gXHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4gXHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbkBAIC01MTMsNTEgJiM0Mzs1MTIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21zaXhfY2xlYW5fcmluZ3MoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5c1xuLSAqIEB2c2k6IFZTSSBwb2ludGVyXG4tICovXG4tc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4te1xuLVx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuLVx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbi1cbi1cdGlmICh2c2ktXHUwMDNldHlwZSA9PSBJQ0VfVlNJX0NITkwpXG4tXHRcdHJldHVybiAwO1xuLVx0aWYgKCFwZi1cdTAwM2V2c2lfc3RhdHMpXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0aWYgKHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSlcbi1cdC8qIHJlYWxsb2Mgd2lsbCBoYXBwZW4gaW4gcmVidWlsZCBwYXRoICovXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0dnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpO1xuLVx0aWYgKCF2c2lfc3RhdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID1cbi1cdFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCB2c2ktXHUwMDNlYWxsb2NfdHhxKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cylcbi1cdFx0Z290byBlcnJfYWxsb2NfdHg7XG4tXG4tXHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzID1cbi1cdFx0a3phbGxvY19vYmpzKCp2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCB2c2ktXHUwMDNlYWxsb2NfcnhxKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cylcbi1cdFx0Z290byBlcnJfYWxsb2Nfcng7XG4tXG4tXHRwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0gPSB2c2lfc3RhdDtcbi1cbi1cdHJldHVybiAwO1xuLVxuLWVycl9hbGxvY19yeDpcbi1cdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpO1xuLWVycl9hbGxvY190eDpcbi1cdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xuLVx0a2ZyZWUodnNpX3N0YXQpO1xuLVx0cGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdID0gTlVMTDtcbi1cdHJldHVybiAtRU5PTUVNO1xuLX1cbi1cbiAvKipcbiAgKiBpY2VfdnNpX2FsbG9jX2RlZiAtIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgVlNJXG4gICogQHZzaTogcHRyIHRvIFZTSVxuQEAgLTIzMDMsNiAmIzQzOzIyNTcsODUgQEAgc3RhdGljIGludCBpY2VfdnNpX2NmZ190Y19sYW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzXG4mIzQzOyAqIEB2c2k6IFZTSSBwb2ludGVyXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIC1FTk9NRU0gb24gYWxsb2NhdGlvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbiYjNDM7e1xuJiM0MztcdHUxNiByZXFfdHhxID0gdnNpLVx1MDAzZXJlcV90eHEgPyB2c2ktXHUwMDNlcmVxX3R4cSA6IHZzaS1cdTAwM2VhbGxvY190eHE7XG4mIzQzO1x0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbiYjNDM7XHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzO1xuJiM0MztcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuJiM0MztcdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4mIzQzO1x0dTE2IHByZXZfdHhxLCBwcmV2X3J4cTtcbiYjNDM7XG4mIzQzO1x0aWYgKHZzaS1cdTAwM2V0eXBlID09IElDRV9WU0lfQ0hOTClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR2c2lfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0KSB7XG4mIzQzO1x0XHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XG4mIzQzO1x0XHRpZiAoIXZzaV9zdGF0KVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByZXZfdHhxID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW47XG4mIzQzO1x0aWYgKHJlcV90eHEgXHUwMDNjIHByZXZfdHhxKSB7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gcmVxX3R4cTsgaSBcdTAwM2MgcHJldl90eHE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4mIzQzO1x0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4mIzQzO1x0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCByZXFfdHhxLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpIHtcbiYjNDM7XHRcdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xuJiM0MztcdH1cbiYjNDM7XHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzX2xlbiA9IHJlcV90eHE7XG4mIzQzO1xuJiM0MztcdHByZXZfcnhxID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c19sZW47XG4mIzQzO1x0aWYgKHJlcV9yeHEgXHUwMDNjIHByZXZfcnhxKSB7XG4mIzQzO1x0XHRmb3IgKGludCBpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4mIzQzO1x0XHRcdFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7XG4mIzQzO1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cnhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHM7XG4mIzQzO1x0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4mIzQzO1x0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKSxcbiYjNDM7XHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbiYjNDM7XHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbiYjNDM7XHRcdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPSByeF9yaW5nX3N0YXRzO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xuJiM0MztcdH1cbiYjNDM7XHR2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbiA9IHJlcV9yeHE7XG4mIzQzO1xuJiM0MztcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDpcbiYjNDM7XHRpZiAoIXBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSkge1xuJiM0MztcdFx0LyogdnNpX3N0YXQgd2FzIG5vdCB2aXNpYmxlIGJlZm9yZSBjdXJyZW50IGFsbG9jIGF0dGVtcHQgKi9cbiYjNDM7XHRcdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xuJiM0MztcdFx0a2ZyZWUodnNpX3N0YXQpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfdnNpX2NmZ19kZWYgLSBjb25maWd1cmUgZGVmYXVsdCBWU0kgYmFzZWQgb24gdGhlIHR5cGVcbiAgKiBAdnNpOiBwb2ludGVyIHRvIFZTSVxuQEAgLTIzMjAsNyAmIzQzOzIzNTMsNyBAQCBzdGF0aWMgaW50IGljZV92c2lfY2ZnX2RlZihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogYWxsb2NhdGUgbWVtb3J5IGZvciBUeC9SeCByaW5nIHN0YXQgcG9pbnRlcnMgKi9cbi1cdHJldCA9IGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcbiYjNDM7XHRyZXQgPSBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5yb2xsX3ZzaV9hbGxvYztcbiBcbkBAIC0zMDExLDY2ICYjNDM7MzA0NCw2IEBAIGljZV92c2lfcmVidWlsZF9zZXRfY29hbGVzY2Uoc3RydWN0IGljZV92c2kgKnZzaSxcbiBcdH1cbiB9XG4gXG4tLyoqXG4tICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lc1xuLSAqIEB2c2k6IFZTSSBwb2ludGVyXG4tICovXG4tc3RhdGljIGludFxuLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuLXtcbi1cdHUxNiByZXFfdHhxID0gdnNpLVx1MDAzZXJlcV90eHEgPyB2c2ktXHUwMDNlcmVxX3R4cSA6IHZzaS1cdTAwM2VhbGxvY190eHE7XG4tXHR1MTYgcmVxX3J4cSA9IHZzaS1cdTAwM2VyZXFfcnhxID8gdnNpLVx1MDAzZXJlcV9yeHEgOiB2c2ktXHUwMDNlYWxsb2NfcnhxO1xuLVx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0cztcbi1cdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XG4tXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4tXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0dTE2IHByZXZfdHhxID0gdnNpLVx1MDAzZWFsbG9jX3R4cTtcbi1cdHUxNiBwcmV2X3J4cSA9IHZzaS1cdTAwM2VhbGxvY19yeHE7XG4tXHRpbnQgaTtcbi1cbi1cdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuLVxuLVx0aWYgKHJlcV90eHEgXHUwMDNjIHByZXZfdHhxKSB7XG4tXHRcdGZvciAoaSA9IHJlcV90eHE7IGkgXHUwMDNjIHByZXZfdHhxOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHR0eF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzLCByZXFfdHhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9IHR4X3Jpbmdfc3RhdHM7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVxuLVx0aWYgKHJlcV9yeHEgXHUwMDNjIHByZXZfcnhxKSB7XG4tXHRcdGZvciAoaSA9IHJlcV9yeHE7IGkgXHUwMDNjIHByZXZfcnhxOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qKlxuICAqIGljZV92c2lfcmVidWlsZCAtIFJlYnVpbGQgVlNJIGFmdGVyIHJlc2V0XG4gICogQHZzaTogVlNJIHRvIGJlIHJlYnVpbGRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbmluZGV4IGUwNGRlMDIxNTU5NjYuLjU1ODkzNzg5OTgxODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTEzNjYsNiAmIzQzOzEzNjYsMjMgQEAgaW50IGljZV9zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgdTggKm1hYylcbiBcdHJldHVybiBfX2ljZV9zZXRfdmZfbWFjKGljZV9uZXRkZXZfdG9fcGYobmV0ZGV2KSwgdmZfaWQsIG1hYyk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XG4mIzQzOyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXG4mIzQzOyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXG4mIzQzOyAqXG4mIzQzOyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxuJiM0MzsgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQmIzM5O3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkXG4mIzQzOyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoc2V0dGluZylcbiYjNDM7XHRcdHNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGNsZWFyX2JpdChJQ0VfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaWNlX3NldF92Zl90cnVzdFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcbkBAIC0xNDAxLDExICYjNDM7MTQxOCwxOSBAQCBpbnQgaWNlX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgdHJ1c3RlZClcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2dmYtXHUwMDNlY2ZnX2xvY2spO1xuIFxuLVx0d2hpbGUgKCF0cnVzdGVkIFx1MDAyNlx1MDAyNiB2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4tXHRcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcbi1cbi1cdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuLVx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbiYjNDM7XHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xuJiM0MztcdGlmICghdHJ1c3RlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKHZmLVx1MDAzZW51bV9tYWNfbGxkcCBcdTAwM2UgMCB8fFxuJiM0MztcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykgfHxcbiYjNDM7XHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi1cdTAwM2V2Zl9zdGF0ZXMpKSkge1xuJiM0MztcdFx0d2hpbGUgKHZmLVx1MDAzZW51bV9tYWNfbGxkcClcbiYjNDM7XHRcdFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xuJiM0MztcdFx0dmYtXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XG4mIzQzO1x0XHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbiYjNDM7XHRcdGljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7XG4mIzQzO1x0fVxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O1ZGICV1IGlzIG5vdyAlc3RydXN0ZWRcXG5cJiMzNDssXG4gXHRcdCB2Zl9pZCwgdHJ1c3RlZCA/IFwmIzM0O1wmIzM0OyA6IFwmIzM0O3VuXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5pbmRleCAxNmZjYzhjZjYxOTE5Li4zOTA0M2Q4Y2ExYmY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5AQCAtNzU4NSwxMSAmIzQzOzc1ODUsMTMgQEAgc3RhdGljIGludCBfX2lnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHJwbSlcbiBcdFx0ZXJyID0gX19pZ2Nfb3BlbihuZXRkZXYsIHRydWUpO1xuIFx0XHRpZiAoIXJwbSlcbiBcdFx0XHRydG5sX3VubG9jaygpO1xuLVx0XHRpZiAoIWVycilcbi1cdFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGVycjtcbiYjNDM7XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpNDBlLCBpYXZmLCBpY2UsIGlnYykuIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlc2UgZHJpdmVycyB0eXBpY2FsbHkgcmVxdWlyZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIGZpcm13YXJlIChlLmcuLCBBZG1pblEpIGR1cmluZyBwcm9iZSwgbWVhbmluZyB0aGV5IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgb3IgcmVhY2hlZCB2aWEgZ2VuZXJpYyBQQ0kgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1ZTExM2E0YTMzMzUxMzM2ZmQ1MzBkMzg4ZDk4ODgxNjdjMTAyOTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDIzOjE3OjEyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggYTA0NjgzMDA0YTU2Ny4uNGYwZjc2MjY2MDViYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC02OTA3LDcgJiM0Mzs2OTA3LDcgQEAgc3RhdGljIGludCBpNDBlX2h3X3NldF9kY2JfY29uZmlnKHN0cnVjdCBpNDBlX3BmICpwZiwKIAlpbnQgcmV0OwogCiAJLyogQ2hlY2sgaWYgbmVlZCByZWNvbmZpZ3VyYXRpb24gKi8KLQlpZiAoIW1lbWNtcCgmYW1wO25ld19jZmcsICZhbXA7b2xkX2NmZywgc2l6ZW9mKG5ld19jZmcpKSkgewomIzQzOwlpZiAoIW1lbWNtcChuZXdfY2ZnLCBvbGRfY2ZnLCBzaXplb2YoKm5ld19jZmcpKSkgewogCQlkZXZfZGJnKCZhbXA7cGYtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtObyBDaGFuZ2UgaW4gRENCIENvbmZpZyByZXF1aXJlZC5cbiYjMzQ7KTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQ0OTQsMTMgJiM0MzsxNDQ5NCwxNSBAQCBzdHJ1Y3QgaTQwZV92c2kgKmk0MGVfdnNpX3NldHVwKHN0cnVjdCBpNDBlX3BmICpwZiwgdTggdHlwZSwKIAlpZiAodnNpLSZndDtuZXRkZXZfcmVnaXN0ZXJlZCkgewogCQl2c2ktJmd0O25ldGRldl9yZWdpc3RlcmVkID0gZmFsc2U7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KHZzaS0mZ3Q7bmV0ZGV2KTsKLQkJZnJlZV9uZXRkZXYodnNpLSZndDtuZXRkZXYpOwotCQl2c2ktJmd0O25ldGRldiA9IE5VTEw7CiAJfQogZXJyX2RsX3BvcnQ6CiAJaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJNDBFX1ZTSV9NQUlOKQogCQlpNDBlX2RldmxpbmtfZGVzdHJveV9wb3J0KHBmKTsKIGVycl9uZXRkZXY6CiYjNDM7CWlmICh2c2ktJmd0O25ldGRldikgewomIzQzOwkJZnJlZV9uZXRkZXYodnNpLSZndDtuZXRkZXYpOwomIzQzOwkJdnNpLSZndDtuZXRkZXYgPSBOVUxMOwomIzQzOwl9CiAJaTQwZV9hcV9kZWxldGVfZWxlbWVudCgmYW1wO3BmLSZndDtodywgdnNpLSZndDtzZWlkLCBOVUxMKTsKIGVycl92c2k6CiAJaTQwZV92c2lfY2xlYXIodnNpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMKaW5kZXggYTI2YzNkNDdlYzE1Ni4uMGNjNDM0YjI2ZWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmMKQEAgLTQ5NDMsNiAmIzQzOzQ5NDMsMjMgQEAgaW50IGk0MGVfbmRvX3NldF92Zl9zcG9vZmNoayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgZW5hYmxlKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpNDBlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0CiYjNDM7ICogQHZmOiBWRiB0byBjb25maWd1cmUKJiM0MzsgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZwomIzQzOyAqCiYjNDM7ICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuCiYjNDM7ICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0JiMzOTtzIHNhZmUgdG8gc2tpcCB0aGUgcmVzZXQgKFZGIGhhcyBubyBhZHZhbmNlZAomIzQzOyAqIGZlYXR1cmVzIGNvbmZpZ3VyZWQgdGhhdCBuZWVkIGNsZWFudXApLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGk0MGVfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGk0MGVfdmYgKnZmLCBib29sIHNldHRpbmcpCiYjNDM7ewomIzQzOwlpZiAoc2V0dGluZykKJiM0MzsJCXNldF9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCAmYW1wO3ZmLSZndDt2Zl9jYXBzKTsKJiM0MzsJZWxzZQomIzQzOwkJY2xlYXJfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgJmFtcDt2Zi0mZ3Q7dmZfY2Fwcyk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpNDBlX25kb19zZXRfdmZfdHJ1c3QKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIHBmCkBAIC00OTg3LDE5ICYjNDM7NTAwNCwyMCBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3RydXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBzZXR0aW5nKQogCXNldF9iaXQoX19JNDBFX01BQ1ZMQU5fU1lOQ19QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogCXBmLSZndDt2c2lbdmYtJmd0O2xhbl92c2lfaWR4XS0mZ3Q7ZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDsKIAotCWk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpOwomIzQzOwkvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqLwomIzQzOwlpZiAoIXNldHRpbmcgJmFtcDsmYW1wOwomIzQzOwkgICAgKHZmLSZndDthZHFfZW5hYmxlZCB8fCB2Zi0mZ3Q7bnVtX2Nsb3VkX2ZpbHRlcnMgJmd0OyAwIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9VQ19QUk9NSVNDLCAmYW1wO3ZmLSZndDt2Zl9zdGF0ZXMpIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCAmYW1wO3ZmLSZndDt2Zl9zdGF0ZXMpKSkgewomIzQzOwkJaTQwZV92Y19yZXNldF92Zih2ZiwgdHJ1ZSk7CiYjNDM7CQlpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpNDBlX3NldHVwX3ZmX3RydXN0KHZmLCBzZXR0aW5nKTsKJiM0MzsJfQomIzQzOwogCWRldl9pbmZvKCZhbXA7cGYtJmd0O3BkZXYtJmd0O2RldiwgJiMzNDtWRiAldSBpcyBub3cgJXN0cnVzdGVkXG4mIzM0OywKIAkJIHZmX2lkLCBzZXR0aW5nID8gJiMzNDsmIzM0OyA6ICYjMzQ7dW4mIzM0Oyk7CiAKLQlpZiAodmYtJmd0O2FkcV9lbmFibGVkKSB7Ci0JCWlmICghdmYtJmd0O3RydXN0ZWQpIHsKLQkJCWRldl9pbmZvKCZhbXA7cGYtJmd0O3BkZXYtJmd0O2RldiwKLQkJCQkgJiMzNDtWRiAldSBubyBsb25nZXIgVHJ1c3RlZCwgZGVsZXRpbmcgYWxsIGNsb3VkIGZpbHRlcnNcbiYjMzQ7LAotCQkJCSB2Zl9pZCk7Ci0JCQlpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7Ci0JCX0KLQl9Ci0KIG91dDoKIAljbGVhcl9iaXQoX19JNDBFX1ZJUlRDSE5MX09QX1BFTkRJTkcsIHBmLSZndDtzdGF0ZSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKaW5kZXggMDUwZjgyNDFlZjVlNi4uNWZjYmZhMGNhODU1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmgKQEAgLTI1OSw3ICYjNDM7MjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGFkbWlucV90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmaW5pc2hfY29uZmlnOwogCXdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlOwotCXdhaXRfcXVldWVfaGVhZF90IHZjX3dhaXRxdWV1ZTsKIAlzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3JzOwogCXN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDsKIAlpbnQgbnVtX3ZsYW5fZmlsdGVyczsKQEAgLTU4OCw4ICYjNDM7NTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9kaXNhYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwomIzQzO3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9hZGRfdmxhbnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTYwNiw2ICYjNDM7NjA2LDEzIEBAIHZvaWQgaWF2Zl9kaXNhYmxlX3ZsYW5fc3RyaXBwaW5nKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLAogCQkJICAgICAgZW51bSBpYXZmX3N0YXR1cyB2X3JldHZhbCwgdTggKm1zZywgdTE2IG1zZ2xlbik7CiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsCiYjNDM7CQkJCWJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCQkJCSAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmNvbmRfZGF0YSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpOwogaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgaWF2Zl9jZmdfcXVldWVzX2J3KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCBpYXZmX2NmZ19xdWV1ZXNfcXVhbnRhX3NpemUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwppbmRleCAyOWI4NDAzYTA2NmJjLi4zZmEyODhlMzc5OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMKQEAgLTEwMjksNiAmIzQzOzEwMjksNjAgQEAgc3RhdGljIGJvb2wgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogaWF2Zl9tYWNfY2hhbmdlX2RvbmUgLSBDaGVjayBpZiBNQUMgY2hhbmdlIGNvbXBsZXRlZAomIzQzOyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqIEBkYXRhOiBNQUMgYWRkcmVzcyBiZWluZyBjaGVja2VkIChhcyBjb25zdCB2b2lkICopCiYjNDM7ICogQHZfb3A6IHZpcnRjaG5sIG9wY29kZSBmcm9tIHByb2Nlc3NlZCBtZXNzYWdlCiYjNDM7ICoKJiM0MzsgKiBDYWxsYmFjayBmb3IgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKCkgdG8gY2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZQomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGlhdmZfbWFjX2NoYW5nZV9kb25lKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCSBjb25zdCB2b2lkICpkYXRhLCBlbnVtIHZpcnRjaG5sX29wcyB2X29wKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKmFkZHIgPSBkYXRhOwomIzQzOwomIzQzOwlyZXR1cm4gaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoYWRhcHRlci0mZ3Q7bmV0ZGV2LCBhZGRyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzcwomIzQzOyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXQKJiM0MzsgKgomIzQzOyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS4KJiM0MzsgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuCiYjNDM7ICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZgomIzQzOyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IGlhdmZfYXJxX2V2ZW50X2luZm8gZXZlbnQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItJmd0O25ldGRldik7CiYjNDM7CiYjNDM7CWV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTsKJiM0MzsJZXZlbnQubXNnX2J1ZiA9IGt6YWxsb2MoZXZlbnQuYnVmX2xlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghZXZlbnQubXNnX2J1ZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlyZXQgPSBpYXZmX2FkZF9ldGhlcl9hZGRycyhhZGFwdGVyKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgJmFtcDtldmVudCwKJiM0MzsJCQkJCSAgaWF2Zl9tYWNfY2hhbmdlX2RvbmUsIGFkZHIsIDI1MDApOwomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUoZXZlbnQubXNnX2J1Zik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBpYXZmX3NldF9tYWMgLSBORE8gY2FsbGJhY2sgdG8gc2V0IHBvcnQgTUFDIGFkZHJlc3MKICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTEwNDIsMjkgJiM0MzsxMDk2LDMwIEBAIHN0YXRpYyBpbnQgaWF2Zl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChpYXZmX2lzX3Jlc2V0X2luX3Byb2dyZXNzKGFkYXB0ZXIpIHx8IGFkYXB0ZXItJmd0O3N0YXRlICZsdDsgX19JQVZGX0RPV04pCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLSZndDtzYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJcmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItJmd0O3NhX2RhdGEpOwotCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItJmd0O3ZjX3dhaXRxdWV1ZSwKLQkJCQkJICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci0mZ3Q7c2FfZGF0YSksCi0JCQkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTsKLQotCS8qIElmIHJldCAmbHQ7IDAgdGhlbiBpdCBtZWFucyB3YWl0IHdhcyBpbnRlcnJ1cHRlZC4KLQkgKiBJZiByZXQgPT0gMCB0aGVuIGl0IG1lYW5zIHdlIGdvdCBhIHRpbWVvdXQuCi0JICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRiwKLQkgKiBjaGVjayBpZiBuZXRkZXYgTUFDIHdhcyB1cGRhdGVkIHRvIHJlcXVlc3RlZCBNQUMsCi0JICogaWYgeWVzIHRoZW4gc2V0IE1BQyBzdWNjZWVkZWQgb3RoZXJ3aXNlIGl0IGZhaWxlZCByZXR1cm4gLUVBQ0NFUwotCSAqLwotCWlmIChyZXQgJmx0OyAwKQomIzQzOwlyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLSZndDtzYV9kYXRhKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJLyogUm9sbGJhY2sgb25seSBpZiBzZW5kIGZhaWxlZCAobWVzc2FnZSBuZXZlciByZWFjaGVkIFBGKS4KJiM0MzsJCSAqIERvbiYjMzk7dCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhcwomIzQzOwkJICogc2VudCBhbmQgUEYgd2lsbCBldmVudHVhbGx5IHJlc3BvbmQuIFdoZW4gdGhlIHJlc3BvbnNlIGFycml2ZXMsCiYjNDM7CQkgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpCiYjNDM7CQkgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LgomIzQzOwkJICovCiYjNDM7CQlpZiAocmV0ICE9IC1FQUdBSU4pIHsKJiM0MzsJCQlpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpOwomIzQzOwkJCWV0aGVyX2FkZHJfY29weShhZGFwdGVyLSZndDtody5tYWMuYWRkciwgbmV0ZGV2LSZndDtkZXZfYWRkcik7CiYjNDM7CQl9CiAJCXJldHVybiByZXQ7Ci0KLQlpZiAoIXJldCkKLQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CX0KIAogCWlmICghZXRoZXJfYWRkcl9lcXVhbChuZXRkZXYtJmd0O2Rldl9hZGRyLCBhZGRyLSZndDtzYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUNDRVM7CkBAIC01Mzk0LDkgJiM0Mzs1NDQ5LDYgQEAgc3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCS8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHRyYW5zaXRpb24gdG8gZG93biBzdGF0dXMgKi8KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7YWRhcHRlci0mZ3Q7ZG93bl93YWl0cXVldWUpOwogCi0JLyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2FkYXB0ZXItJmd0O3ZjX3dhaXRxdWV1ZSk7Ci0KIAlJTklUX0xJU1RfSEVBRCgmYW1wO2FkYXB0ZXItJmd0O3B0cC5hcV9jbWRzKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7YWRhcHRlci0mZ3Q7cHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7CiAJbXV0ZXhfaW5pdCgmYW1wO2FkYXB0ZXItJmd0O3B0cC5hcV9jbWRfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jCmluZGV4IGVjMjM0Y2M4YmQ5ZGIuLmU2YjdlOGY4MmM3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIC8qIENvcHlyaWdodChjKSAyMDEzIC0gMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbi4gKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X2xvY2suaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpYXZmLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpYXZmX3B0cC5oJiMzNDsKQEAgLTU1NSwyMCAmIzQzOzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLAogICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiAgKgogICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLgotICoqLwotdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsOwogCXN0cnVjdCBpYXZmX21hY19maWx0ZXIgKmY7CiAJaW50IGkgPSAwLCBjb3VudCA9IDA7CiAJYm9vbCBtb3JlID0gZmFsc2U7CiAJc2l6ZV90IGxlbjsKJiM0MzsJaW50IHJldDsKIAogCWlmIChhZGFwdGVyLSZndDtjdXJyZW50X29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHsKIAkJLyogYmFpbCBiZWNhdXNlIHdlIGFscmVhZHkgaGF2ZSBhIGNvbW1hbmQgcGVuZGluZyAqLwogCQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O0Nhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXG4mIzM0OywKIAkJCWFkYXB0ZXItJmd0O2N1cnJlbnRfb3ApOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCXNwaW5fbG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21hY192bGFuX2xpc3RfbG9jayk7CkBAIC01ODAsNyAmIzQzOzU4NCw3IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIAlpZiAoIWNvdW50KSB7CiAJCWFkYXB0ZXItJmd0O2FxX3JlcXVpcmVkICZhbXA7PSB+SUFWRl9GTEFHX0FRX0FERF9NQUNfRklMVEVSOwogCQlzcGluX3VubG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21hY192bGFuX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKJiM0MzsJCXJldHVybiAwOwogCX0KIAlhZGFwdGVyLSZndDtjdXJyZW50X29wID0gVklSVENITkxfT1BfQUREX0VUSF9BRERSOwogCkBAIC01OTQsOCAmIzQzOzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcikKIAogCXZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCF2ZWFsKSB7CiYjNDM7CQlhZGFwdGVyLSZndDtjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDttYWNfdmxhbl9saXN0X2xvY2spOwotCQlyZXR1cm47CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl2ZWFsLSZndDt2c2lfaWQgPSBhZGFwdGVyLSZndDt2c2lfcmVzLSZndDt2c2lfaWQ7CkBAIC02MTUsOCAmIzQzOzYyMCwxNSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiAKIAlzcGluX3VubG9ja19iaCgmYW1wO2FkYXB0ZXItJmd0O21hY192bGFuX2xpc3RfbG9jayk7CiAKLQlpYXZmX3NlbmRfcGZfbXNnKGFkYXB0ZXIsIFZJUlRDSE5MX09QX0FERF9FVEhfQUREUiwgKHU4ICopdmVhbCwgbGVuKTsKJiM0MzsJcmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7CiAJa2ZyZWUodmVhbCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtVbmFibGUgdG8gc2VuZCBBRERfRVRIX0FERFIgbWVzc2FnZSB0byBQRiwgZXJyb3IgJWRcbiYjMzQ7LCByZXQpOwomIzQzOwkJYWRhcHRlci0mZ3Q7Y3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC03MTIsOCAmIzQzOzcyNCw4IEBAIHN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9vayhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiAgKgogICogUmVtb3ZlIGZpbHRlcnMgZnJvbSBsaXN0IGJhc2VkIG9uIFBGIHJlc3BvbnNlLgotICoqLwotc3RhdGljIHZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQomIzQzOyAqLwomIzQzO3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLSZndDtuZXRkZXY7CiAJc3RydWN0IGlhdmZfbWFjX2ZpbHRlciAqZiwgKmZ0bXA7CkBAIC0yMzY0LDcgJiM0MzsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCWlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7CiAJCQkvKiByZXN0b3JlIGFkbWluaXN0cmF0aXZlbHkgc2V0IE1BQyBhZGRyZXNzICovCiAJCQlldGhlcl9hZGRyX2NvcHkoYWRhcHRlci0mZ3Q7aHcubWFjLmFkZHIsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwotCQkJd2FrZV91cCgmYW1wO2FkYXB0ZXItJmd0O3ZjX3dhaXRxdWV1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6CiAJCQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byBkZWxldGUgTUFDIGZpbHRlciwgZXJyb3IgJXNcbiYjMzQ7LApAQCAtMjU1NSw3ICYjNDM7MjU2Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQlldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCBhZGFwdGVyLSZndDtody5tYWMuYWRkcik7CiAJCQluZXRpZl9hZGRyX3VubG9ja19iaChuZXRkZXYpOwogCQl9Ci0JCXdha2VfdXAoJmFtcDthZGFwdGVyLSZndDt2Y193YWl0cXVldWUpOwogCQlicmVhazsKIAljYXNlIFZJUlRDSE5MX09QX0dFVF9TVEFUUzogewogCQlzdHJ1Y3QgaWF2Zl9ldGhfc3RhdHMgKnN0YXRzID0KQEAgLTI5NTAsMyAmIzQzOzI5NjAsNzIgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwKIAl9IC8qIHN3aXRjaCB2X29wY29kZSAqLwogCWFkYXB0ZXItJmd0O2N1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOOwogfQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlCiYjNDM7ICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlCiYjNDM7ICogQGV2ZW50OiBwcmUtYWxsb2NhdGVkIGV2ZW50IGJ1ZmZlciB0byB1c2UgZm9yIHBvbGxpbmcKJiM0MzsgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkCiYjNDM7ICogQGNvbmRfZGF0YTogY29udGV4dCBkYXRhIHBhc3NlZCB0byBjb25kaXRpb24gY2FsbGJhY2sKJiM0MzsgKiBAdGltZW91dF9tczogbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzCiYjNDM7ICoKJiM0MzsgKiBQb2xscyB0aGUgYWRtaW4gcXVldWUgYW5kIHByb2Nlc3NlcyBhbGwgaW5jb21pbmcgdmlydGNobmwgbWVzc2FnZXMuCiYjNDM7ICogQWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIHZhbGlkIG1lc3NhZ2UsIGNhbGxzIHRoZSBjb25kaXRpb24gY2FsbGJhY2sgdG8gY2hlY2sKJiM0MzsgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlCiYjNDM7ICogb2YgdGhlIHByb2Nlc3NlZCBtZXNzYWdlIHRvIGlkZW50aWZ5IHdoaWNoIHJlc3BvbnNlIHdhcyByZWNlaXZlZC4gQ29udGludWVzCiYjNDM7ICogcG9sbGluZyB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlIG9yIHRpbWVvdXQgZXhwaXJlcy4KJiM0MzsgKgomIzQzOyAqIENhbGxlciBtdXN0IGFsbG9jYXRlIGV2ZW50IGJ1ZmZlciBiZWZvcmUgc2VuZGluZyBhbnkgbWVzc2FnZXMgdG8gUEYgdG8gYXZvaWQKJiM0MzsgKiBzdGF0ZSBtaXNtYXRjaCBpZiBhbGxvY2F0aW9uIGZhaWxzIGFmdGVyIG1lc3NhZ2UgaXMgc2VudC4KJiM0MzsgKgomIzQzOyAqIENhbGxlciBtdXN0IGhvbGQgbmV0ZGV2X2xvY2suIFRoaXMgY2FuIHNsZWVwIGZvciB1cCB0byB0aW1lb3V0X21zIHdoaWxlCiYjNDM7ICogcG9sbGluZyBoYXJkd2FyZS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIChjb25kaXRpb24gbWV0KSwgLUVBR0FJTiBvbiB0aW1lb3V0LCBvciBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7aW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLAomIzQzOwkJCQlzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsCiYjNDM7CQkJCWJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiYjNDM7CQkJCQkJICBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCQkJCSAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmNvbmRfZGF0YSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IHRpbWVvdXRfbXMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWF2Zl9odyAqaHcgPSAmYW1wO2FkYXB0ZXItJmd0O2h3OwomIzQzOwllbnVtIHZpcnRjaG5sX29wcyByZWNlaXZlZF9vcDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwomIzQzOwlpbnQgcmV0ID0gLUVBR0FJTjsKJiM0MzsJdTE2IHBlbmRpbmcgPSAwOwomIzQzOwl1MzIgdl9yZXR2YWw7CiYjNDM7CiYjNDM7CW5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItJmd0O25ldGRldik7CiYjNDM7CiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7CiYjNDM7CWRvIHsKJiM0MzsJCWlmICghcGVuZGluZykKJiM0MzsJCQl1c2xlZXBfcmFuZ2UoNTAsIDc1KTsKJiM0MzsKJiM0MzsJCWlmIChpYXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCBldmVudCwgJmFtcDtwZW5kaW5nKSA9PSBJQVZGX1NVQ0NFU1MpIHsKJiM0MzsJCQlyZWNlaXZlZF9vcCA9IChlbnVtIHZpcnRjaG5sX29wcylsZTMyX3RvX2NwdShldmVudC0mZ3Q7ZGVzYy5jb29raWVfaGlnaCk7CiYjNDM7CQkJaWYgKHJlY2VpdmVkX29wICE9IFZJUlRDSE5MX09QX1VOS05PV04pIHsKJiM0MzsJCQkJdl9yZXR2YWwgPSBsZTMyX3RvX2NwdShldmVudC0mZ3Q7ZGVzYy5jb29raWVfbG93KTsKJiM0MzsKJiM0MzsJCQkJaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKGFkYXB0ZXIsIHJlY2VpdmVkX29wLAomIzQzOwkJCQkJCQkgKGVudW0gaWF2Zl9zdGF0dXMpdl9yZXR2YWwsCiYjNDM7CQkJCQkJCSBldmVudC0mZ3Q7bXNnX2J1ZiwgZXZlbnQtJmd0O21zZ19sZW4pOwomIzQzOwomIzQzOwkJCQlpZiAoY29uZGl0aW9uKGFkYXB0ZXIsIGNvbmRfZGF0YSwgcmVjZWl2ZWRfb3ApKSB7CiYjNDM7CQkJCQlyZXQgPSAwOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJbWVtc2V0KGV2ZW50LSZndDttc2dfYnVmLCAwLCBJQVZGX01BWF9BUV9CVUZfU0laRSk7CiYjNDM7CiYjNDM7CQkJaWYgKHBlbmRpbmcpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oCmluZGV4IGZjOTFiNjY2NWY5MDUuLjgzZGE1YmE2ZWViMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmgKQEAgLTMyOCw2ICYjNDM7MzI4LDggQEAgZW51bSBpY2VfdnNpX3N0YXRlIHsKIHN0cnVjdCBpY2VfdnNpX3N0YXRzIHsKIAlzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOyAgLyogVHggcmluZyBzdGF0cyBhcnJheSAqLwogCXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7ICAvKiBSeCByaW5nIHN0YXRzIGFycmF5ICovCiYjNDM7CXUxNiB0eF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJdTE2IHJ4X3Jpbmdfc3RhdHNfbGVuOwogfTsKIAogLyogc3RydWN0IHRoYXQgZGVmaW5lcyBhIFZTSSwgYXNzb2NpYXRlZCB3aXRoIGEgZGV2ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCmluZGV4IGIwNjllNmM1MTRmYjEuLjZlN2JiYTQ3Mzg5ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jCkBAIC05NSw3ICYjNDM7OTUsNyBAQCBpY2VfZXN3aXRjaF9yZWxlYXNlX3JlcHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcmVwciAqcmVwcikKIAkJcmV0dXJuOwogCiAJaWNlX3ZzaV91cGRhdGVfc2VjdXJpdHkodnNpLCBpY2VfdnNpX2N0eF9zZXRfYW50aXNwb29mKTsKLQltZXRhZGF0YV9kc3RfZnJlZShyZXByLSZndDtkc3QpOwomIzQzOwlkc3RfcmVsZWFzZSgmYW1wO3JlcHItJmd0O2RzdC0mZ3Q7ZHN0KTsKIAlyZXByLSZndDtkc3QgPSBOVUxMOwogCWljZV9mbHRyX2FkZF9tYWNfYW5kX2Jyb2FkY2FzdCh2c2ksIHJlcHItJmd0O3BhcmVudF9tYWMsCiAJCQkJICAgICAgIElDRV9GV0RfVE9fVlNJKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jCmluZGV4IDhjZGM0ZmRhODllOTcuLmM3MTg0OTExOWQwNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuYwpAQCAtMzM4LDcgJiM0MzszMzgsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSkKIHsKIAlzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7CiAJc3RydWN0IGljZV9wZiAqcGYgPSB2c2ktJmd0O2JhY2s7Ci0JaW50IGk7CiAKIAlpZiAodnNpLSZndDt0eXBlID09IElDRV9WU0lfQ0hOTCkKIAkJcmV0dXJuOwpAQCAtMzQ5LDE0ICYjNDM7MzQ4LDE0IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCWlmICghdnNpX3N0YXQpCiAJCXJldHVybjsKIAotCWljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7CiYjNDM7CWZvciAoaW50IGkgPSAwOyBpICZsdDsgdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNfbGVuOyBpJiM0MzsmIzQzOykgewogCQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKIAkJCWtmcmVlX3JjdSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0c1tpXSwgcmN1KTsKIAkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwogCQl9CiAJfQogCi0JaWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c19sZW47IGkmIzQzOyYjNDM7KSB7CiAJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewogCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCByY3UpOwogCQkJV1JJVEVfT05DRSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7CkBAIC01MTMsNTEgJiM0Mzs1MTIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21zaXhfY2xlYW5fcmluZ3MoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0vKioKLSAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5cwotICogQHZzaTogVlNJIHBvaW50ZXIKLSAqLwotc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpCi17Ci0Jc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0OwotCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwotCi0JaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX0NITkwpCi0JCXJldHVybiAwOwotCWlmICghcGYtJmd0O3ZzaV9zdGF0cykKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlpZiAocGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0pCi0JLyogcmVhbGxvYyB3aWxsIGhhcHBlbiBpbiByZWJ1aWxkIHBhdGggKi8KLQkJcmV0dXJuIDA7Ci0KLQl2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7Ci0JaWYgKCF2c2lfc3RhdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyA9Ci0JCWt6YWxsb2Nfb2JqcygqdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMsIHZzaS0mZ3Q7YWxsb2NfdHhxKTsKLQlpZiAoIXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKQotCQlnb3RvIGVycl9hbGxvY190eDsKLQotCXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0KLQkJa3phbGxvY19vYmpzKCp2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cywgdnNpLSZndDthbGxvY19yeHEpOwotCWlmICghdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpCi0JCWdvdG8gZXJyX2FsbG9jX3J4OwotCi0JcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSB2c2lfc3RhdDsKLQotCXJldHVybiAwOwotCi1lcnJfYWxsb2Nfcng6Ci0Ja2ZyZWUodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpOwotZXJyX2FsbG9jX3R4OgotCWtmcmVlKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKTsKLQlrZnJlZSh2c2lfc3RhdCk7Ci0JcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSBOVUxMOwotCXJldHVybiAtRU5PTUVNOwotfQotCiAvKioKICAqIGljZV92c2lfYWxsb2NfZGVmIC0gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhbHJlYWR5IGFsbG9jYXRlZCBWU0kKICAqIEB2c2k6IHB0ciB0byBWU0kKQEAgLTIzMDMsNiAmIzQzOzIyNTcsODUgQEAgc3RhdGljIGludCBpY2VfdnNpX2NmZ190Y19sYW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdnNpICp2c2kpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzCiYjNDM7ICogQHZzaTogVlNJIHBvaW50ZXIKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQomIzQzO3sKJiM0MzsJdTE2IHJlcV90eHEgPSB2c2ktJmd0O3JlcV90eHEgPyB2c2ktJmd0O3JlcV90eHEgOiB2c2ktJmd0O2FsbG9jX3R4cTsKJiM0MzsJdTE2IHJlcV9yeHEgPSB2c2ktJmd0O3JlcV9yeHEgPyB2c2ktJmd0O3JlcV9yeHEgOiB2c2ktJmd0O2FsbG9jX3J4cTsKJiM0MzsJc3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsKJiM0MzsJc3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsKJiM0MzsJc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0OwomIzQzOwlzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS0mZ3Q7YmFjazsKJiM0MzsJdTE2IHByZXZfdHhxLCBwcmV2X3J4cTsKJiM0MzsKJiM0MzsJaWYgKHZzaS0mZ3Q7dHlwZSA9PSBJQ0VfVlNJX0NITkwpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKJiM0MzsJaWYgKCF2c2lfc3RhdCkgewomIzQzOwkJdnNpX3N0YXQgPSBremFsbG9jX29iaigqdnNpX3N0YXQpOwomIzQzOwkJaWYgKCF2c2lfc3RhdCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcmV2X3R4cSA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbjsKJiM0MzsJaWYgKHJlcV90eHEgJmx0OyBwcmV2X3R4cSkgewomIzQzOwkJZm9yIChpbnQgaSA9IHJlcV90eHE7IGkgJmx0OyBwcmV2X3R4cTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0pIHsKJiM0MzsJCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwomIzQzOwkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJdHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzOwomIzQzOwl2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyA9CiYjNDM7CQlrcmVhbGxvY19hcnJheSh2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cywgcmVxX3R4cSwKJiM0MzsJCQkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyksCiYjNDM7CQkJICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKJiM0MzsJaWYgKCF2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cykgewomIzQzOwkJdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzOwomIzQzOwkJZ290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0OwomIzQzOwl9CiYjNDM7CXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzX2xlbiA9IHJlcV90eHE7CiYjNDM7CiYjNDM7CXByZXZfcnhxID0gdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNfbGVuOwomIzQzOwlpZiAocmVxX3J4cSAmbHQ7IHByZXZfcnhxKSB7CiYjNDM7CQlmb3IgKGludCBpID0gcmVxX3J4cTsgaSAmbHQ7IHByZXZfcnhxOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewomIzQzOwkJCQlrZnJlZV9yY3UodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0sIHJjdSk7CiYjNDM7CQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHM7CiYjNDM7CXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0KJiM0MzsJCWtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzLCByZXFfcnhxLAomIzQzOwkJCSAgICAgICBzaXplb2YoKnZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSwKJiM0MzsJCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwomIzQzOwlpZiAoIXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSB7CiYjNDM7CQl2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7CiYjNDM7CQlnb3RvIGVycl9mcmVlX3BhcnRpYWxfdnNpX3N0YXQ7CiYjNDM7CX0KJiM0MzsJdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHNfbGVuID0gcmVxX3J4cTsKJiM0MzsKJiM0MzsJcGYtJmd0O3ZzaV9zdGF0c1t2c2ktJmd0O2lkeF0gPSB2c2lfc3RhdDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDoKJiM0MzsJaWYgKCFwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XSkgewomIzQzOwkJLyogdnNpX3N0YXQgd2FzIG5vdCB2aXNpYmxlIGJlZm9yZSBjdXJyZW50IGFsbG9jIGF0dGVtcHQgKi8KJiM0MzsJCWtmcmVlKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzKTsKJiM0MzsJCWtmcmVlKHZzaV9zdGF0KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gLUVOT01FTTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGljZV92c2lfY2ZnX2RlZiAtIGNvbmZpZ3VyZSBkZWZhdWx0IFZTSSBiYXNlZCBvbiB0aGUgdHlwZQogICogQHZzaTogcG9pbnRlciB0byBWU0kKQEAgLTIzMjAsNyAmIzQzOzIzNTMsNyBAQCBzdGF0aWMgaW50IGljZV92c2lfY2ZnX2RlZihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQogCQlyZXR1cm4gcmV0OwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBUeC9SeCByaW5nIHN0YXQgcG9pbnRlcnMgKi8KLQlyZXQgPSBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHZzaSk7CiYjNDM7CXJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpOwogCWlmIChyZXQpCiAJCWdvdG8gdW5yb2xsX3ZzaV9hbGxvYzsKIApAQCAtMzAxMSw2NiAmIzQzOzMwNDQsNiBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksCiAJfQogfQogCi0vKioKLSAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXMKLSAqIEB2c2k6IFZTSSBwb2ludGVyCi0gKi8KLXN0YXRpYyBpbnQKLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKQotewotCXUxNiByZXFfdHhxID0gdnNpLSZndDtyZXFfdHhxID8gdnNpLSZndDtyZXFfdHhxIDogdnNpLSZndDthbGxvY190eHE7Ci0JdTE2IHJlcV9yeHEgPSB2c2ktJmd0O3JlcV9yeHEgPyB2c2ktJmd0O3JlcV9yeHEgOiB2c2ktJmd0O2FsbG9jX3J4cTsKLQlzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKip0eF9yaW5nX3N0YXRzOwotCXN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7Ci0Jc3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0OwotCXN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLSZndDtiYWNrOwotCXUxNiBwcmV2X3R4cSA9IHZzaS0mZ3Q7YWxsb2NfdHhxOwotCXUxNiBwcmV2X3J4cSA9IHZzaS0mZ3Q7YWxsb2NfcnhxOwotCWludCBpOwotCi0JdnNpX3N0YXQgPSBwZi0mZ3Q7dnNpX3N0YXRzW3ZzaS0mZ3Q7aWR4XTsKLQotCWlmIChyZXFfdHhxICZsdDsgcHJldl90eHEpIHsKLQkJZm9yIChpID0gcmVxX3R4cTsgaSAmbHQ7IHByZXZfdHhxOyBpJiM0MzsmIzQzOykgewotCQkJaWYgKHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldKSB7Ci0JCQkJa2ZyZWVfcmN1KHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzW2ldLCByY3UpOwotCQkJCVdSSVRFX09OQ0UodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpOwotCQkJfQotCQl9Ci0JfQotCi0JdHhfcmluZ19zdGF0cyA9IHZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzOwotCXZzaV9zdGF0LSZndDt0eF9yaW5nX3N0YXRzID0KLQkJa3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMsIHJlcV90eHEsCi0JCQkgICAgICAgc2l6ZW9mKCp2c2lfc3RhdC0mZ3Q7dHhfcmluZ19zdGF0cyksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwotCWlmICghdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMpIHsKLQkJdnNpX3N0YXQtJmd0O3R4X3Jpbmdfc3RhdHMgPSB0eF9yaW5nX3N0YXRzOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlpZiAocmVxX3J4cSAmbHQ7IHByZXZfcnhxKSB7Ci0JCWZvciAoaSA9IHJlcV9yeHE7IGkgJmx0OyBwcmV2X3J4cTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmICh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSkgewotCQkJCWtmcmVlX3JjdSh2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0c1tpXSwgcmN1KTsKLQkJCQlXUklURV9PTkNFKHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTsKLQkJCX0KLQkJfQotCX0KLQotCXJ4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0czsKLQl2c2lfc3RhdC0mZ3Q7cnhfcmluZ19zdGF0cyA9Ci0JCWtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzLCByZXFfcnhxLAotCQkJICAgICAgIHNpemVvZigqdnNpX3N0YXQtJmd0O3J4X3Jpbmdfc3RhdHMpLAotCQkJICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKLQlpZiAoIXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzKSB7Ci0JCXZzaV9zdGF0LSZndDtyeF9yaW5nX3N0YXRzID0gcnhfcmluZ19zdGF0czsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogaWNlX3ZzaV9yZWJ1aWxkIC0gUmVidWlsZCBWU0kgYWZ0ZXIgcmVzZXQKICAqIEB2c2k6IFZTSSB0byBiZSByZWJ1aWxkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMKaW5kZXggZTA0ZGUwMjE1NTk2Ni4uNTU4OTM3ODk5ODE4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYwpAQCAtMTM2Niw2ICYjNDM7MTM2NiwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKQogCXJldHVybiBfX2ljZV9zZXRfdmZfbWFjKGljZV9uZXRkZXZfdG9fcGYobmV0ZGV2KSwgdmZfaWQsIG1hYyk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2Vfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXQKJiM0MzsgKiBAdmY6IFZGIHRvIGNvbmZpZ3VyZQomIzQzOyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nCiYjNDM7ICoKJiM0MzsgKiBVcGRhdGUgVkYgZmxhZ3Mgd2hlbiBjaGFuZ2luZyB0cnVzdCB3aXRob3V0IHBlcmZvcm1pbmcgYSBWRiByZXNldC4KJiM0MzsgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQmIzM5O3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkCiYjNDM7ICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpCiYjNDM7ewomIzQzOwlpZiAoc2V0dGluZykKJiM0MzsJCXNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsICZhbXA7dmYtJmd0O3ZmX2NhcHMpOwomIzQzOwllbHNlCiYjNDM7CQljbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsICZhbXA7dmYtJmd0O3ZmX2NhcHMpOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX3NldF92Zl90cnVzdAogICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQwMSwxMSAmIzQzOzE0MTgsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpCiAKIAltdXRleF9sb2NrKCZhbXA7dmYtJmd0O2NmZ19sb2NrKTsKIAotCXdoaWxlICghdHJ1c3RlZCAmYW1wOyZhbXA7IHZmLSZndDtudW1fbWFjX2xsZHApCi0JCWljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTsKLQotCXZmLSZndDt0cnVzdGVkID0gdHJ1c3RlZDsKLQlpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpOwomIzQzOwkvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqLwomIzQzOwlpZiAoIXRydXN0ZWQgJmFtcDsmYW1wOwomIzQzOwkgICAgKHZmLSZndDtudW1fbWFjX2xsZHAgJmd0OyAwIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLSZndDt2Zl9zdGF0ZXMpIHx8CiYjNDM7CSAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX01DX1BST01JU0MsIHZmLSZndDt2Zl9zdGF0ZXMpKSkgewomIzQzOwkJd2hpbGUgKHZmLSZndDtudW1fbWFjX2xsZHApCiYjNDM7CQkJaWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpOwomIzQzOwkJdmYtJmd0O3RydXN0ZWQgPSB0cnVzdGVkOwomIzQzOwkJaWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXZmLSZndDt0cnVzdGVkID0gdHJ1c3RlZDsKJiM0MzsJCWljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7CiYjNDM7CX0KIAlkZXZfaW5mbyhpY2VfcGZfdG9fZGV2KHBmKSwgJiMzNDtWRiAldSBpcyBub3cgJXN0cnVzdGVkXG4mIzM0OywKIAkJIHZmX2lkLCB0cnVzdGVkID8gJiMzNDsmIzM0OyA6ICYjMzQ7dW4mIzM0Oyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKaW5kZXggMTZmY2M4Y2Y2MTkxOS4uMzkwNDNkOGNhMWJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMKQEAgLTc1ODUsMTEgJiM0Mzs3NTg1LDEzIEBAIHN0YXRpYyBpbnQgX19pZ2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBycG0pCiAJCWVyciA9IF9faWdjX29wZW4obmV0ZGV2LCB0cnVlKTsKIAkJaWYgKCFycG0pCiAJCQlydG5sX3VubG9jaygpOwotCQlpZiAoIWVycikKLQkJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4gZXJyOwomIzQzOwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjU0OAoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgdHdlYWtzIGEgYnVuY2ggb2YgSW50ZWwgZXRoZXJuZXQgZHJpdmVyczogYGk0MGVgLCBgaWF2ZmAsIGBpY2VgLCBhbmQgYGlnY2AuIEl0JiMzOTtzIGFsbCBmdW5jdGlvbmFsIHN0dWZmIOKAkyBmaXhpbmcgbWVtb3J5IGNvbXBhcmlzb25zLCBtZW1vcnkgbGVha3MsIGFuZCBvcHRpbWl6aW5nIHNvbWUgVkYgdHJ1c3QgY29uZmlndXJhdGlvbnMuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBob3cgZWFzeSBpcyB0aGlzIHRvIHRlc3Q/IEFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KCkxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBpNDBlYCwgYGlhdmZgLCBgaWNlYCwgYW5kIGBpZ2NgIGFyZSBhbGwgKnBoeXNpY2FsKiBoYXJkd2FyZSBkcml2ZXJzLiBUaGV5JiMzOTtyZSBtZWFudCB0byB3b3JrIHdpdGggYWN0dWFsIEludGVsIEV0aGVybmV0IGhhcmR3YXJlLiBJIGtub3cgUUVNVSBlbXVsYXRlcyBzb21lIEludGVsIE5JQ3Mg4oCTIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAgc3ByaW5nIHRvIG1pbmQuIEJ1dCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgc3BlY2lmaWMgZGV2aWNlcyB0YXJnZXRlZCBieSB0aGlzIHBhdGNoIHNlcmllcz8KCkkgY2FuJiMzOTt0IGluc3RhbnRseSBzZWFyY2ggUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBidXQgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgbm8sIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSBgaTQwZWAsIGBpY2VgLCBvciBgaWdjYCBvdXQgb2YgdGhlIGJveC4gT2theSwgc28gdGhhdOKAmXMgYSBiaWcgJiMzNDtubyYjMzQ7LiBJJiMzOTttIHByZXR0eSBzdXJlIGBpYXZmYCBpcyBhbHNvIG5vdCBlbXVsYXRlZCwgc2luY2UgaXQmIzM5O3MgYSBWRiBkcml2ZXIsIHdoaWNoIGNvbXBsaWNhdGVzIHRoaW5ncyBmdXJ0aGVyLiBJdCBpcyBpbnRlcmVzdGluZyB0byBsb29rIGlmIFFFTVUgZW11bGF0ZXMgYGlnY2AsIGJ1dCBwcm9iYWJseSBub3QuCgpXYWl0LCBhcmUgdGhlc2UgZHJpdmVycyB0aGUga2luZCBvZiAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzJiMzNDsgdGhhdCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlPyBZZXMsIHRoZXkgYXJlISBUaGV5JiMzOTtyZSBzdGFuZGFyZCBOSUMgZHJpdmVycywgYnV0IHRoZXkgcmVxdWlyZSB0aGUgcGh5c2ljYWwgY2FyZCB0byB3b3JrLiBTbywgZXZlbiBpZiBRRU1VIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGVtdWxhdGUgdGhlbSwgY291bGQgd2UgZnV6eiB0aGVtIHNvbWVob3c/IFN5emthbGxlciBoYXMgc29tZSBQQ0kgZGV2aWNlIGluamVjdGlvbiBjYXBhYmlsaXRpZXMsIGJ1dCBpdCB1c3VhbGx5IHJlbGllcyBvbiBlbXVsYXRlZCBkZXZpY2VzLiBNYXliZSBgc3lzL2xpbnV4L3NvY2tldF9uZXRsaW5rX2dlbmVyaWNfZGV2bGluay50eHRgIGlzIHVzZWZ1bC4gSG93ZXZlciwgaWYgdGhlIFBDSSBkZXZpY2UgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBkcml2ZXImIzM5O3MgYHByb2JlYCBmdW5jdGlvbiB3b24mIzM5O3QgZXZlbiBiZSBjYWxsZWQuIFRoZSBwYXRjaCB3b3VsZCBiZSB1bnJlYWNoYWJsZS4KCkFscmlnaHQsIHdoYXQgYWJvdXQgdmlydHVhbCBvciBlbXVsYXRlZCB3YXlzIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHM/IGBpYXZmYCBpcyBhbiBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSBwcm9taXNpbmcsIGJ1dCBzdGlsbCB0cmlja3kuIEkmIzM5O2QgbmVlZCB0byBjb25maXJtIHdpdGggdGhlIHN5emthbGxlciBzZXR1cCBpZiB0aGV5IGFyZSByZWFjaGFibGUsIHdoaWNoIEkgY2Fubm90IHdpdGggdGhlIHRvb2xzIHRoYXQgSSBoYXZlLiBJIGNhbm5vdCBzZWFyY2ggYHN5cy9saW51eGAgZm9yIHRoZSBkcml2ZXJzIHVzaW5nIHRoZSBjdXJyZW50IHByb21wdCYjMzk7cyBmdW5jdGlvbnMuIFRoZXNlIGFyZSBzdGFuZGFyZCBQQ0kgZHJpdmVycy4KCkdpdmVuIHRoYXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZW0gYW5kIHRoZXkmIzM5O3JlIG1lYW50IGZvciBwaHlzaWNhbCBoYXJkd2FyZSwgaXQgc2VlbXMgdW5saWtlbHkgdGhhdCBJIGNhbiByZWFjaCB0aGVzZSBkcml2ZXIgY2hhbmdlcyB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR0NFLiBJIG5lZWQgYSByZWFsIG1hY2hpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TU9EVUxFX0RFVklDRV9UQUJMRVxcKHBjaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmM9NjU9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGk0MGVfcGNpX3RibFtdID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTAzLX07XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jOjEwNDpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaTQwZV9wY2lfdGJsKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTA1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQzCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDgwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRHJpdmVyIEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgUENJIGRyaXZlcnMgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRob3NlIEludGVsIEV0aGVybmV0IGRyaXZlcnMg4oCTIGBpNDBlYCwgYGljZWAsIGBpYXZmYCwgYW5kIGBpZ2NgLiBUaGUgcHJvYmxlbSBpcywgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGFueSBvZiB0aGVtLiBUaGF0IGltbWVkaWF0ZWx5IHRocm93cyBhIHdyZW5jaCBpbiB0aGUgZnV6emluZyBwcm9jZXNzLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtDYW4gc3l6a2FsbGVyJiMzOTtzIGBzeXpfcGNpX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhciBzaW11bGF0ZSBQQ0kgY29uZmlnIHNwYWNlIGVub3VnaCB0byBnZXQgdGhlc2UgZHJpdmVycyBwcm9iZWQ/JiMzNDsgCgpUaGVuIEkgcmVtZW1iZXJlZCB0aGF0IHN5emthbGxlciAqZG9lcyogaGF2ZSBQQ0kgZnV6emluZyBzdXBwb3J0ISBJdCB1c2VzIGBzeXpfcGNpX3NldHVwYCwgb3IgdGhlIGB2aGNpYCwgb3Igc2ltaWxhciB2aXJ0dWFsIG1lY2hhbmlzbXMuIEJ1dCBob2xkIG9uLCB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpZXMgdGhhdCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgcmVsaWVzIG9uIGEgdmlydHVhbCBQQ0kgaG9zdCBicmlkZ2UsIHdoaWNoIHRoZW4gaW5qZWN0cyBQQ0kgZGV2aWNlcy4KCk9rYXksIGxldCBtZSBjaGVjayB0aGUgJiMzNDtyZWFjaGFibGUmIzM0OyBjcml0ZXJpYSBpbiB0aGUgcHJvbXB0LiBBaCwgaGVyZSBpdCBpczogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciAmIzM0O0NvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuJiMzNDsKClNvLCBhcmUgdGhlc2UgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAmIzM0O3ZlbmRvci1zcGVjaWZpYyYjMzQ7PyBXZWxsLCBgaTQwZWAgaXMgNDAgR2lnYWJpdCwgYGljZWAgaXMgMTAwIEdpZ2FiaXQgKEU4MDAgc2VyaWVzKSwgYW5kIGBpZ2NgIGlzIDIuNSBHaWdhYml0LiBUaGV5JiMzOTtyZSBhbGwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcy4gQW5kIEkgKmtub3cqIFFFTVUgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGVzZSBOSUNzLiBOb3csIHdvdWxkIHN5emthbGxlciBldmVuIGJlIGFibGUgdG8gZ2V0IHRoZW0gZ29pbmc/IE1heWJlLCBidXQgaXQgd291bGQgYmUgcmVhbGx5IHRvdWdoLiBJdCYjMzk7cyB1bmxpa2VseSB0aGF0IHN5emthbGxlciBjb3VsZCBnZXQgcGFzdCB0aGVpciBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBzaW5jZSB0aGV5IHJlcXVpcmUgZmlybXdhcmUsIHJlYWQgc3BlY2lmaWMgaGFyZHdhcmUgcmVnaXN0ZXJzLCBvciByZXF1aXJlIHZhbGlkIE1BQyBhZGRyZXNzZXMgZnJvbSBFRVBST00sIHdoaWNoIHdvdWxkIGFsbCBiZSBhYnNlbnQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBGb3IgaW5zdGFuY2UsIGBpNDBlYCBkZW1hbmRzIGZpcm13YXJlIChBZG1pblEpLiBBIGJhc2ljIFBDSSBmdXp6ZXIgaXMganVzdCBnb2luZyB0byBmYWlsIGF0IHRoZSBgaTQwZV9wcm9iZWAgc3RhZ2UgYmVjYXVzZSBpdCYjMzk7cyBleHBlY3RpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZmlybXdhcmUuIFNhbWUgd2l0aCBgaWNlYCBhbmQgYGlhdmZgLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBidXQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGBpZ2NgLCBpdCBoYXMgYWRkZWQgYGlnYmAgKEludGVsIDgyNTc2KS4gTm90IGBpZ2NgIChJbnRlbCBJMjI1KS4gQW5kIGl0IGFsc28gZG9lc24mIzM5O3QgZW11bGF0ZSBgaTQwZWAgb3IgYGljZWAuIEl0IGRvZXMgZW11bGF0ZSBvdGhlciBOSUNzLCBsaWtlIGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgZXRjLgoKVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgbWVhbnMgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyBzaW1wbGU6IHRoZXNlIGFyZSBwaHlzaWNhbCBQQ0llIE5JQyBkcml2ZXJzIChgaTQwZWAsIGBpYXZmYCwgYGljZWAsIGBpZ2NgKSB0aGF0IG5lZWQgaGFyZHdhcmUgbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGVtIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaTQwZSwgaWF2ZiwgaWNlLCBpZ2MpLiBUaGVzZSBhcmUgZHJpdmVycyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZXNlIGRyaXZlcnMgdHlwaWNhbGx5IHJlcXVpcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW5RKSBkdXJpbmcgcHJvYmUsIG1lYW5pbmcgdGhleSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG9yIHJlYWNoZWQgdmlhIGdlbmVyaWMgUENJIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGk0MGUsIGlhdmYsIGljZSwgaWdjKS4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGVzZSBkcml2ZXJzIHR5cGljYWxseSByZXF1aXJlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgZmlybXdhcmUgKGUuZy4sIEFkbWluUSkgZHVyaW5nIHByb2JlLCBtZWFuaW5nIHRoZXkgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBvciByZWFjaGVkIHZpYSBnZW5lcmljIFBDSSBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjM6MTc6MTQuMjg2NTM1MDg2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI0NzUzMTQ4MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEludGVsIEV0aGVybmV0IGRyaXZlcnMgKGk0MGUsIGlhdmYsIGljZSwgaWdjKS4gVGhlc2UgYXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEZ1cnRoZXJtb3JlLCB0aGVzZSBkcml2ZXJzIHR5cGljYWxseSByZXF1aXJlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggaGFyZHdhcmUgZmlybXdhcmUgKGUuZy4sIEFkbWluUSkgZHVyaW5nIHByb2JlLCBtZWFuaW5nIHRoZXkgY2Fubm90IGJlIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBvciByZWFjaGVkIHZpYSBnZW5lcmljIFBDSSBmdXp6aW5nIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMzoxNzoxNC4yODY1NDAyOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjkyNzQwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNWUxMTNhNGEzMzM1MTMzNmZkNTMwZDM4OGQ5ODg4MTY3YzEwMjkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMjM6MTc6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG5pbmRleCBhMDQ2ODMwMDRhNTY3Li40ZjBmNzYyNjYwNWJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXFxuQEAgLTY5MDcsNyArNjkwNyw3IEBAIHN0YXRpYyBpbnQgaTQwZV9od19zZXRfZGNiX2NvbmZpZyhzdHJ1Y3QgaTQwZV9wZiAqcGYsXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBDaGVjayBpZiBuZWVkIHJlY29uZmlndXJhdGlvbiAqL1xcbi1cXHRpZiAoIW1lbWNtcChcXHUwMDI2bmV3X2NmZywgXFx1MDAyNm9sZF9jZmcsIHNpemVvZihuZXdfY2ZnKSkpIHtcXG4rXFx0aWYgKCFtZW1jbXAobmV3X2NmZywgb2xkX2NmZywgc2l6ZW9mKCpuZXdfY2ZnKSkpIHtcXG4gXFx0XFx0ZGV2X2RiZyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIk5vIENoYW5nZSBpbiBEQ0IgQ29uZmlnIHJlcXVpcmVkLlxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuQEAgLTE0NDk0LDEzICsxNDQ5NCwxNSBAQCBzdHJ1Y3QgaTQwZV92c2kgKmk0MGVfdnNpX3NldHVwKHN0cnVjdCBpNDBlX3BmICpwZiwgdTggdHlwZSxcXG4gXFx0aWYgKHZzaS1cXHUwMDNlbmV0ZGV2X3JlZ2lzdGVyZWQpIHtcXG4gXFx0XFx0dnNpLVxcdTAwM2VuZXRkZXZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xcbiBcXHRcXHR1bnJlZ2lzdGVyX25ldGRldih2c2ktXFx1MDAzZW5ldGRldik7XFxuLVxcdFxcdGZyZWVfbmV0ZGV2KHZzaS1cXHUwMDNlbmV0ZGV2KTtcXG4tXFx0XFx0dnNpLVxcdTAwM2VuZXRkZXYgPSBOVUxMO1xcbiBcXHR9XFxuIGVycl9kbF9wb3J0OlxcbiBcXHRpZiAodnNpLVxcdTAwM2V0eXBlID09IEk0MEVfVlNJX01BSU4pXFxuIFxcdFxcdGk0MGVfZGV2bGlua19kZXN0cm95X3BvcnQocGYpO1xcbiBlcnJfbmV0ZGV2OlxcbitcXHRpZiAodnNpLVxcdTAwM2VuZXRkZXYpIHtcXG4rXFx0XFx0ZnJlZV9uZXRkZXYodnNpLVxcdTAwM2VuZXRkZXYpO1xcbitcXHRcXHR2c2ktXFx1MDAzZW5ldGRldiA9IE5VTEw7XFxuK1xcdH1cXG4gXFx0aTQwZV9hcV9kZWxldGVfZWxlbWVudChcXHUwMDI2cGYtXFx1MDAzZWh3LCB2c2ktXFx1MDAzZXNlaWQsIE5VTEwpO1xcbiBlcnJfdnNpOlxcbiBcXHRpNDBlX3ZzaV9jbGVhcih2c2kpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuaW5kZXggYTI2YzNkNDdlYzE1Ni4uMGNjNDM0YjI2ZWI4OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXFxuQEAgLTQ5NDMsNiArNDk0MywyMyBAQCBpbnQgaTQwZV9uZG9fc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2Zl9pZCwgYm9vbCBlbmFibGUpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpNDBlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXFxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXFxuKyAqXFxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxcbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxcbit7XFxuK1xcdGlmIChzZXR0aW5nKVxcbitcXHRcXHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXFx1MDAyNnZmLVxcdTAwM2V2Zl9jYXBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbGVhcl9iaXQoSTQwRV9WSVJUQ0hOTF9WRl9DQVBfUFJJVklMRUdFLCBcXHUwMDI2dmYtXFx1MDAzZXZmX2NhcHMpO1xcbit9XFxuK1xcbiAvKipcXG4gICogaTQwZV9uZG9fc2V0X3ZmX3RydXN0XFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlIHBmXFxuQEAgLTQ5ODcsMTkgKzUwMDQsMjAgQEAgaW50IGk0MGVfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgc2V0dGluZylcXG4gXFx0c2V0X2JpdChfX0k0MEVfTUFDVkxBTl9TWU5DX1BFTkRJTkcsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHBmLVxcdTAwM2V2c2lbdmYtXFx1MDAzZWxhbl92c2lfaWR4XS1cXHUwMDNlZmxhZ3MgfD0gSTQwRV9WU0lfRkxBR19GSUxURVJfQ0hBTkdFRDtcXG4gXFxuLVxcdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xcbitcXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xcbitcXHRpZiAoIXNldHRpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2Zi1cXHUwMDNlYWRxX2VuYWJsZWQgfHwgdmYtXFx1MDAzZW51bV9jbG91ZF9maWx0ZXJzIFxcdTAwM2UgMCB8fFxcbitcXHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXFx1MDAyNnZmLVxcdTAwM2V2Zl9zdGF0ZXMpIHx8XFxuK1xcdCAgICAgdGVzdF9iaXQoSTQwRV9WRl9TVEFURV9NQ19QUk9NSVNDLCBcXHUwMDI2dmYtXFx1MDAzZXZmX3N0YXRlcykpKSB7XFxuK1xcdFxcdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xcbitcXHRcXHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGk0MGVfc2V0dXBfdmZfdHJ1c3QodmYsIHNldHRpbmcpO1xcbitcXHR9XFxuK1xcbiBcXHRkZXZfaW5mbyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIlZGICV1IGlzIG5vdyAlc3RydXN0ZWRcXFxcblxcXCIsXFxuIFxcdFxcdCB2Zl9pZCwgc2V0dGluZyA/IFxcXCJcXFwiIDogXFxcInVuXFxcIik7XFxuIFxcbi1cXHRpZiAodmYtXFx1MDAzZWFkcV9lbmFibGVkKSB7XFxuLVxcdFxcdGlmICghdmYtXFx1MDAzZXRydXN0ZWQpIHtcXG4tXFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBmLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcdCBcXFwiVkYgJXUgbm8gbG9uZ2VyIFRydXN0ZWQsIGRlbGV0aW5nIGFsbCBjbG91ZCBmaWx0ZXJzXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgdmZfaWQpO1xcbi1cXHRcXHRcXHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbi1cXG4gb3V0OlxcbiBcXHRjbGVhcl9iaXQoX19JNDBFX1ZJUlRDSE5MX09QX1BFTkRJTkcsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcXG5pbmRleCAwNTBmODI0MWVmNWU2Li41ZmNiZmEwY2E4NTUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcXG5AQCAtMjU5LDcgKzI1OSw2IEBAIHN0cnVjdCBpYXZmX2FkYXB0ZXIge1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5xX3Rhc2s7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBmaW5pc2hfY29uZmlnO1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCBkb3duX3dhaXRxdWV1ZTtcXG4tXFx0d2FpdF9xdWV1ZV9oZWFkX3QgdmNfd2FpdHF1ZXVlO1xcbiBcXHRzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3JzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIHZsYW5fZmlsdGVyX2xpc3Q7XFxuIFxcdGludCBudW1fdmxhbl9maWx0ZXJzO1xcbkBAIC01ODgsOCArNTg3LDkgQEAgdm9pZCBpYXZmX2NvbmZpZ3VyZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9lbmFibGVfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbiB2b2lkIGlhdmZfZGlzYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9tYXBfcXVldWVzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbitpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9kZWxfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuK3ZvaWQgaWF2Zl9tYWNfYWRkX3JlamVjdChzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2FkZF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2RlbF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX3NldF9wcm9taXNjdW91cyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG5AQCAtNjA2LDYgKzYwNiwxMyBAQCB2b2lkIGlhdmZfZGlzYWJsZV92bGFuX3N0cmlwcGluZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0XFx0ICAgICAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcGNvZGUsXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gaWF2Zl9zdGF0dXMgdl9yZXR2YWwsIHU4ICptc2csIHUxNiBtc2dsZW4pO1xcbitpbnQgaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcXG4rXFx0XFx0XFx0XFx0Ym9vbCAoKmNvbmRpdGlvbikoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGVudW0gdmlydGNobmxfb3BzIHZfb3ApLFxcbitcXHRcXHRcXHRcXHRjb25zdCB2b2lkICpjb25kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdHVuc2lnbmVkIGludCB0aW1lb3V0X21zKTtcXG4gaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcXG4gdm9pZCBpYXZmX2NmZ19xdWV1ZXNfYncoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XFxuIHZvaWQgaWF2Zl9jZmdfcXVldWVzX3F1YW50YV9zaXplKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbmluZGV4IDI5Yjg0MDNhMDY2YmMuLjNmYTI4OGUzNzk4YWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcXG5AQCAtMTAyOSw2ICsxMDI5LDYwIEBAIHN0YXRpYyBib29sIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBpYXZmX21hY19jaGFuZ2VfZG9uZSAtIENoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxcbisgKiBAdl9vcDogdmlydGNobmwgb3Bjb2RlIGZyb20gcHJvY2Vzc2VkIG1lc3NhZ2VcXG4rICpcXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWQsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2wgaWF2Zl9tYWNfY2hhbmdlX2RvbmUoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXFxuK3tcXG4rXFx0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xcbitcXG4rXFx0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXFx1MDAzZW5ldGRldiwgYWRkcik7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBpYXZmX3NldF9tYWNfc3luYyAtIFN5bmNocm9ub3VzbHkgY2hhbmdlIE1BQyBhZGRyZXNzXFxuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbisgKiBAYWRkcjogTUFDIGFkZHJlc3MgdG8gc2V0XFxuKyAqXFxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cXG4rICogQ2FsbGVyIG11c3QgaG9sZCBuZXRkZXZfbG9jay4gVGhpcyBjYW4gc2xlZXAgZm9yIHVwIHRvIDIuNSBzZWNvbmRzLlxcbisgKiBFdmVudCBidWZmZXIgaXMgYWxsb2NhdGVkIGJlZm9yZSBzZW5kaW5nIHRvIGF2b2lkIHN0YXRlIG1pc21hdGNoIGlmXFxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZVxcbisgKi9cXG4rc3RhdGljIGludCBpYXZmX3NldF9tYWNfc3luYyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyBldmVudDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHRldmVudC5idWZfbGVuID0gSUFWRl9NQVhfQVFfQlVGX1NJWkU7XFxuK1xcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWV2ZW50Lm1zZ19idWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9hZGRfZXRoZXJfYWRkcnMoYWRhcHRlcik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gaWF2Zl9wb2xsX3ZpcnRjaG5sX3Jlc3BvbnNlKGFkYXB0ZXIsIFxcdTAwMjZldmVudCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBpYXZmX21hY19jaGFuZ2VfZG9uZSwgYWRkciwgMjUwMCk7XFxuK1xcbitvdXQ6XFxuK1xcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTA0MiwyOSArMTA5NiwzMCBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKVxcbiBcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cXHUwMDNlc3RhdGUgXFx1MDAzYyBfX0lBVkZfRE9XTilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVxcdTAwM2VzYV9kYXRhKSlcXG4gXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiBcXG4gXFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbi1cXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItXFx1MDAzZXZjX3dhaXRxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKG5ldGRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcXG4tXFxuLVxcdC8qIElmIHJldCBcXHUwMDNjIDAgdGhlbiBpdCBtZWFucyB3YWl0IHdhcyBpbnRlcnJ1cHRlZC5cXG4tXFx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0Llxcbi1cXHQgKiBlbHNlIGl0IG1lYW5zIHdlIGdvdCByZXNwb25zZSBmb3Igc2V0IE1BQyBmcm9tIFBGLFxcbi1cXHQgKiBjaGVjayBpZiBuZXRkZXYgTUFDIHdhcyB1cGRhdGVkIHRvIHJlcXVlc3RlZCBNQUMsXFxuLVxcdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcXG4tXFx0ICovXFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRyZXQgPSBpYXZmX3NldF9tYWNfc3luYyhhZGFwdGVyLCBhZGRyLVxcdTAwM2VzYV9kYXRhKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHQvKiBSb2xsYmFjayBvbmx5IGlmIHNlbmQgZmFpbGVkIChtZXNzYWdlIG5ldmVyIHJlYWNoZWQgUEYpLlxcbitcXHRcXHQgKiBEb24ndCByb2xsYmFjayBvbiB0aW1lb3V0ICgtRUFHQUlOKSBiZWNhdXNlIHRoZSBtZXNzYWdlIHdhc1xcbitcXHRcXHQgKiBzZW50IGFuZCBQRiB3aWxsIGV2ZW50dWFsbHkgcmVzcG9uZC4gV2hlbiB0aGUgcmVzcG9uc2UgYXJyaXZlcyxcXG4rXFx0XFx0ICogaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKCkgd2lsbCBoYW5kbGUgcm9sbGJhY2sgKG9uIFBGIGVycm9yKVxcbitcXHRcXHQgKiBvciBhY2NlcHRhbmNlIChvbiBQRiBzdWNjZXNzKSBhdXRvbWF0aWNhbGx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHJldCAhPSAtRUFHQUlOKSB7XFxuK1xcdFxcdFxcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XFxuK1xcdFxcdFxcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVxcdTAwM2Vody5tYWMuYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghcmV0KVxcbi1cXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCFldGhlcl9hZGRyX2VxdWFsKG5ldGRldi1cXHUwMDNlZGV2X2FkZHIsIGFkZHItXFx1MDAzZXNhX2RhdGEpKVxcbiBcXHRcXHRyZXR1cm4gLUVBQ0NFUztcXG5AQCAtNTM5NCw5ICs1NDQ5LDYgQEAgc3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWRvd25fd2FpdHF1ZXVlKTtcXG4gXFxuLVxcdC8qIFNldHVwIHRoZSB3YWl0IHF1ZXVlIGZvciBpbmRpY2F0aW5nIHZpcnRjaGFubmVsIGV2ZW50cyAqL1xcbi1cXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbi1cXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRzKTtcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2YWRhcHRlci1cXHUwMDNlcHRwLnBoY190aW1lX3dhaXRxdWV1ZSk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5pbmRleCBlYzIzNGNjOGJkOWRiLi5lNmI3ZThmODJjN2MxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmNcXG5AQCAtMiw2ICsyLDcgQEBcXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaWF2Zi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiaWF2Zl9wdHAuaFxcXCJcXG5AQCAtNTU1LDIwICs1NTYsMjMgQEAgaWF2Zl9zZXRfbWFjX2FkZHJfdHlwZShzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkciAqdmlydGNobmxfZXRoZXJfYWRkcixcXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXFxuICAqXFxuICAqIFJlcXVlc3QgdGhhdCB0aGUgUEYgYWRkIG9uZSBvciBtb3JlIGFkZHJlc3NlcyB0byBvdXIgZmlsdGVycy5cXG4tICoqL1xcbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlXFxuKyAqL1xcbitpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgdmlydGNobmxfZXRoZXJfYWRkcl9saXN0ICp2ZWFsO1xcbiBcXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmO1xcbiBcXHRpbnQgaSA9IDAsIGNvdW50ID0gMDtcXG4gXFx0Ym9vbCBtb3JlID0gZmFsc2U7XFxuIFxcdHNpemVfdCBsZW47XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoYWRhcHRlci1cXHUwMDNlY3VycmVudF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XFxuIFxcdFxcdC8qIGJhaWwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHBlbmRpbmcgKi9cXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBcXFwiQ2Fubm90IGFkZCBmaWx0ZXJzLCBjb21tYW5kICVkIHBlbmRpbmdcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZWN1cnJlbnRfb3ApO1xcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuIFxcdH1cXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG5AQCAtNTgwLDcgKzU4NCw3IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFx0aWYgKCFjb3VudCkge1xcbiBcXHRcXHRhZGFwdGVyLVxcdTAwM2VhcV9yZXF1aXJlZCBcXHUwMDI2PSB+SUFWRl9GTEFHX0FRX0FERF9NQUNfRklMVEVSO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfQUREX0VUSF9BRERSO1xcbiBcXG5AQCAtNTk0LDggKzU5OCw5IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFxuIFxcdHZlYWwgPSBremFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghdmVhbCkge1xcbitcXHRcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZW1hY192bGFuX2xpc3RfbG9jayk7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuIFxcdHZlYWwtXFx1MDAzZXZzaV9pZCA9IGFkYXB0ZXItXFx1MDAzZXZzaV9yZXMtXFx1MDAzZXZzaV9pZDtcXG5AQCAtNjE1LDggKzYyMCwxNSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YWRhcHRlci1cXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcXG4gXFxuLVxcdGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pO1xcbitcXHRyZXQgPSBpYXZmX3NlbmRfcGZfbXNnKGFkYXB0ZXIsIFZJUlRDSE5MX09QX0FERF9FVEhfQUREUiwgKHU4ICopdmVhbCwgbGVuKTtcXG4gXFx0a2ZyZWUodmVhbCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiVW5hYmxlIHRvIHNlbmQgQUREX0VUSF9BRERSIG1lc3NhZ2UgdG8gUEYsIGVycm9yICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTcxMiw4ICs3MjQsOCBAQCBzdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfb2soc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXFxuICAqXFxuICAqIFJlbW92ZSBmaWx0ZXJzIGZyb20gbGlzdCBiYXNlZCBvbiBQRiByZXNwb25zZS5cXG4tICoqL1xcbi1zdGF0aWMgdm9pZCBpYXZmX21hY19hZGRfcmVqZWN0KHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXFxuKyAqL1xcbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cXHUwMDNlbmV0ZGV2O1xcbiBcXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcXG5AQCAtMjM2NCw3ICsyMzc2LDYgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcXG4gXFx0XFx0XFx0aWF2Zl9tYWNfYWRkX3JlamVjdChhZGFwdGVyKTtcXG4gXFx0XFx0XFx0LyogcmVzdG9yZSBhZG1pbmlzdHJhdGl2ZWx5IHNldCBNQUMgYWRkcmVzcyAqL1xcbiBcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkoYWRhcHRlci1cXHUwMDNlaHcubWFjLmFkZHIsIG5ldGRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbi1cXHRcXHRcXHR3YWtlX3VwKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBWSVJUQ0hOTF9PUF9ERUxfRVRIX0FERFI6XFxuIFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBkZWxldGUgTUFDIGZpbHRlciwgZXJyb3IgJXNcXFxcblxcXCIsXFxuQEAgLTI1NTUsNyArMjU2Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIGFkYXB0ZXItXFx1MDAzZWh3Lm1hYy5hZGRyKTtcXG4gXFx0XFx0XFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTtcXG4gXFx0XFx0fVxcbi1cXHRcXHR3YWtlX3VwKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2V2Y193YWl0cXVldWUpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBWSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHtcXG4gXFx0XFx0c3RydWN0IGlhdmZfZXRoX3N0YXRzICpzdGF0cyA9XFxuQEAgLTI5NTAsMyArMjk2MCw3MiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbiBcXHR9IC8qIHN3aXRjaCB2X29wY29kZSAqL1xcbiBcXHRhZGFwdGVyLVxcdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfVU5LTk9XTjtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSAtIFBvbGwgYWRtaW4gcXVldWUgZm9yIHZpcnRjaG5sIHJlc3BvbnNlXFxuKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxcbisgKiBAZXZlbnQ6IHByZS1hbGxvY2F0ZWQgZXZlbnQgYnVmZmVyIHRvIHVzZSBmb3IgcG9sbGluZ1xcbisgKiBAY29uZGl0aW9uOiBjYWxsYmFjayB0byBjaGVjayBpZiBkZXNpcmVkIHJlc3BvbnNlIHJlY2VpdmVkXFxuKyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXFxuKyAqIEB0aW1lb3V0X21zOiBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHNcXG4rICpcXG4rICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxcbisgKiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggdmFsaWQgbWVzc2FnZSwgY2FsbHMgdGhlIGNvbmRpdGlvbiBjYWxsYmFjayB0byBjaGVja1xcbisgKiBpZiB0aGUgZXhwZWN0ZWQgcmVzcG9uc2UgaGFzIGJlZW4gcmVjZWl2ZWQuIFRoZSBjYWxsYmFjayByZWNlaXZlcyB0aGUgb3Bjb2RlXFxuKyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xcbisgKiBwb2xsaW5nIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIHRydWUgb3IgdGltZW91dCBleHBpcmVzLlxcbisgKlxcbisgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXFxuKyAqIHN0YXRlIG1pc21hdGNoIGlmIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50LlxcbisgKlxcbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxcbisgKiBwb2xsaW5nIGhhcmR3YXJlLlxcbisgKlxcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxcbisgKi9cXG4raW50IGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgaWF2Zl9hcnFfZXZlbnRfaW5mbyAqZXZlbnQsXFxuK1xcdFxcdFxcdFxcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIHZpcnRjaG5sX29wcyB2X29wKSxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqY29uZF9kYXRhLFxcbitcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcylcXG4re1xcbitcXHRzdHJ1Y3QgaWF2Zl9odyAqaHcgPSBcXHUwMDI2YWRhcHRlci1cXHUwMDNlaHc7XFxuK1xcdGVudW0gdmlydGNobmxfb3BzIHJlY2VpdmVkX29wO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XFxuK1xcdGludCByZXQgPSAtRUFHQUlOO1xcbitcXHR1MTYgcGVuZGluZyA9IDA7XFxuK1xcdHUzMiB2X3JldHZhbDtcXG4rXFxuK1xcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXFx1MDAzZW5ldGRldik7XFxuK1xcbitcXHR0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKCFwZW5kaW5nKVxcbitcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoNTAsIDc1KTtcXG4rXFxuK1xcdFxcdGlmIChpYXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCBldmVudCwgXFx1MDAyNnBlbmRpbmcpID09IElBVkZfU1VDQ0VTUykge1xcbitcXHRcXHRcXHRyZWNlaXZlZF9vcCA9IChlbnVtIHZpcnRjaG5sX29wcylsZTMyX3RvX2NwdShldmVudC1cXHUwMDNlZGVzYy5jb29raWVfaGlnaCk7XFxuK1xcdFxcdFxcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XFxuK1xcdFxcdFxcdFxcdHZfcmV0dmFsID0gbGUzMl90b19jcHUoZXZlbnQtXFx1MDAzZWRlc2MuY29va2llX2xvdyk7XFxuK1xcbitcXHRcXHRcXHRcXHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAoZW51bSBpYXZmX3N0YXR1cyl2X3JldHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGV2ZW50LVxcdTAwM2Vtc2dfYnVmLCBldmVudC1cXHUwMDNlbXNnX2xlbik7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAoY29uZGl0aW9uKGFkYXB0ZXIsIGNvbmRfZGF0YSwgcmVjZWl2ZWRfb3ApKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdG1lbXNldChldmVudC1cXHUwMDNlbXNnX2J1ZiwgMCwgSUFWRl9NQVhfQVFfQlVGX1NJWkUpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHBlbmRpbmcpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uODNkYTViYTZlZWIxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmhcXG5AQCAtMzI4LDYgKzMyOCw4IEBAIGVudW0gaWNlX3ZzaV9zdGF0ZSB7XFxuIHN0cnVjdCBpY2VfdnNpX3N0YXRzIHtcXG4gXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsgIC8qIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi9cXG4gXFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqcnhfcmluZ19zdGF0czsgIC8qIFJ4IHJpbmcgc3RhdHMgYXJyYXkgKi9cXG4rXFx0dTE2IHR4X3Jpbmdfc3RhdHNfbGVuO1xcbitcXHR1MTYgcnhfcmluZ19zdGF0c19sZW47XFxuIH07XFxuIFxcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbmluZGV4IGIwNjllNmM1MTRmYjEuLjZlN2JiYTQ3Mzg5ODkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guY1xcbkBAIC05NSw3ICs5NSw3IEBAIGljZV9lc3dpdGNoX3JlbGVhc2VfcmVwcihzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9yZXByICpyZXByKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpY2VfdnNpX3VwZGF0ZV9zZWN1cml0eSh2c2ksIGljZV92c2lfY3R4X3NldF9hbnRpc3Bvb2YpO1xcbi1cXHRtZXRhZGF0YV9kc3RfZnJlZShyZXByLVxcdTAwM2Vkc3QpO1xcbitcXHRkc3RfcmVsZWFzZShcXHUwMDI2cmVwci1cXHUwMDNlZHN0LVxcdTAwM2Vkc3QpO1xcbiBcXHRyZXByLVxcdTAwM2Vkc3QgPSBOVUxMO1xcbiBcXHRpY2VfZmx0cl9hZGRfbWFjX2FuZF9icm9hZGNhc3QodnNpLCByZXByLVxcdTAwM2VwYXJlbnRfbWFjLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbmluZGV4IDhjZGM0ZmRhODllOTcuLmM3MTg0OTExOWQwNGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmNcXG5AQCAtMzM4LDcgKzMzOCw2IEBAIHN0YXRpYyB2b2lkIGljZV92c2lfZnJlZV9zdGF0cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiB7XFxuIFxcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuLVxcdGludCBpO1xcbiBcXG4gXFx0aWYgKHZzaS1cXHUwMDNldHlwZSA9PSBJQ0VfVlNJX0NITkwpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMzQ5LDE0ICszNDgsMTQgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdGlmICghdnNpX3N0YXQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGljZV9mb3JfZWFjaF9hbGxvY190eHEodnNpLCBpKSB7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcXG4gXFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldKSB7XFxuIFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4gXFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWNlX2Zvcl9lYWNoX2FsbG9jX3J4cSh2c2ksIGkpIHtcXG4rXFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyB2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW47IGkrKykge1xcbiBcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcXG4gXFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbiBcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG5AQCAtNTEzLDUxICs1MTIsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaWNlX21zaXhfY2xlYW5fcmluZ3MoaW50IF9fYWx3YXlzX3VudXNlZCBpcnEsIHZvaWQgKmRhdGEpXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXMgLSBBbGxvY2F0ZSBzdGF0aXN0aWNzIGFycmF5c1xcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxcbi0gKi9cXG4tc3RhdGljIGludCBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuLXtcXG4tXFx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xcbi1cXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cXHUwMDNlYmFjaztcXG4tXFxuLVxcdGlmICh2c2ktXFx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0aWYgKCFwZi1cXHUwMDNldnNpX3N0YXRzKVxcbi1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4tXFxuLVxcdGlmIChwZi1cXHUwMDNldnNpX3N0YXRzW3ZzaS1cXHUwMDNlaWR4XSlcXG4tXFx0LyogcmVhbGxvYyB3aWxsIGhhcHBlbiBpbiByZWJ1aWxkIHBhdGggKi9cXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XFxuLVxcdGlmICghdnNpX3N0YXQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRremFsbG9jX29ianMoKnZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzLCB2c2ktXFx1MDAzZWFsbG9jX3R4cSk7XFxuLVxcdGlmICghdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpXFxuLVxcdFxcdGdvdG8gZXJyX2FsbG9jX3R4O1xcbi1cXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRremFsbG9jX29ianMoKnZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzLCB2c2ktXFx1MDAzZWFsbG9jX3J4cSk7XFxuLVxcdGlmICghdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMpXFxuLVxcdFxcdGdvdG8gZXJyX2FsbG9jX3J4O1xcbi1cXG4tXFx0cGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF0gPSB2c2lfc3RhdDtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi1cXG4tZXJyX2FsbG9jX3J4Olxcbi1cXHRrZnJlZSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyk7XFxuLWVycl9hbGxvY190eDpcXG4tXFx0a2ZyZWUodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xcbi1cXHRrZnJlZSh2c2lfc3RhdCk7XFxuLVxcdHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdID0gTlVMTDtcXG4tXFx0cmV0dXJuIC1FTk9NRU07XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBpY2VfdnNpX2FsbG9jX2RlZiAtIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgVlNJXFxuICAqIEB2c2k6IHB0ciB0byBWU0lcXG5AQCAtMjMwMyw2ICsyMjU3LDg1IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9jZmdfdGNfbGFuKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXNcXG4rICogQHZzaTogVlNJIHBvaW50ZXJcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXFxuKyAqL1xcbitzdGF0aWMgaW50IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbit7XFxuK1xcdHUxNiByZXFfdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxID8gdnNpLVxcdTAwM2VyZXFfdHhxIDogdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuK1xcdHUxNiByZXFfcnhxID0gdnNpLVxcdTAwM2VyZXFfcnhxID8gdnNpLVxcdTAwM2VyZXFfcnhxIDogdnNpLVxcdTAwM2VhbGxvY19yeHE7XFxuK1xcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XFxuK1xcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XFxuK1xcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4rXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuK1xcdHUxNiBwcmV2X3R4cSwgcHJldl9yeHE7XFxuK1xcbitcXHRpZiAodnNpLVxcdTAwM2V0eXBlID09IElDRV9WU0lfQ0hOTClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR2c2lfc3RhdCA9IHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdO1xcbitcXHRpZiAoIXZzaV9zdGF0KSB7XFxuK1xcdFxcdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcXG4rXFx0XFx0aWYgKCF2c2lfc3RhdClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdHByZXZfdHhxID0gdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xcbitcXHRpZiAocmVxX3R4cSBcXHUwMDNjIHByZXZfdHhxKSB7XFxuK1xcdFxcdGZvciAoaW50IGkgPSByZXFfdHhxOyBpIFxcdTAwM2MgcHJldl90eHE7IGkrKykge1xcbitcXHRcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcXG4rXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbitcXHRcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cztcXG4rXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxcbitcXHRcXHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cywgcmVxX3R4cSxcXG4rXFx0XFx0XFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxcbitcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbitcXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKSB7XFxuK1xcdFxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xcbitcXHR9XFxuK1xcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzX2xlbiA9IHJlcV90eHE7XFxuK1xcbitcXHRwcmV2X3J4cSA9IHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcXG4rXFx0aWYgKHJlcV9yeHEgXFx1MDAzYyBwcmV2X3J4cSkge1xcbitcXHRcXHRmb3IgKGludCBpID0gcmVxX3J4cTsgaSBcXHUwMDNjIHByZXZfcnhxOyBpKyspIHtcXG4rXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XFxuK1xcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHM7XFxuK1xcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID1cXG4rXFx0XFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXFxuK1xcdFxcdFxcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKSxcXG4rXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4rXFx0aWYgKCF2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cykge1xcbitcXHRcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDtcXG4rXFx0fVxcbitcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c19sZW4gPSByZXFfcnhxO1xcbitcXG4rXFx0cGYtXFx1MDAzZXZzaV9zdGF0c1t2c2ktXFx1MDAzZWlkeF0gPSB2c2lfc3RhdDtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0OlxcbitcXHRpZiAoIXBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdKSB7XFxuK1xcdFxcdC8qIHZzaV9zdGF0IHdhcyBub3QgdmlzaWJsZSBiZWZvcmUgY3VycmVudCBhbGxvYyBhdHRlbXB0ICovXFxuK1xcdFxcdGtmcmVlKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKTtcXG4rXFx0XFx0a2ZyZWUodnNpX3N0YXQpO1xcbitcXHR9XFxuK1xcdHJldHVybiAtRU5PTUVNO1xcbit9XFxuK1xcbiAvKipcXG4gICogaWNlX3ZzaV9jZmdfZGVmIC0gY29uZmlndXJlIGRlZmF1bHQgVlNJIGJhc2VkIG9uIHRoZSB0eXBlXFxuICAqIEB2c2k6IHBvaW50ZXIgdG8gVlNJXFxuQEAgLTIzMjAsNyArMjM1Myw3IEBAIHN0YXRpYyBpbnQgaWNlX3ZzaV9jZmdfZGVmKHN0cnVjdCBpY2VfdnNpICp2c2kpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHQvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIFR4L1J4IHJpbmcgc3RhdCBwb2ludGVycyAqL1xcbi1cXHRyZXQgPSBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzKHZzaSk7XFxuK1xcdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIHVucm9sbF92c2lfYWxsb2M7XFxuIFxcbkBAIC0zMDExLDY2ICszMDQ0LDYgQEAgaWNlX3ZzaV9yZWJ1aWxkX3NldF9jb2FsZXNjZShzdHJ1Y3QgaWNlX3ZzaSAqdnNpLFxcbiBcXHR9XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMgLSBGcmVlcyB1bnVzZWQgc3RhdCBzdHJ1Y3R1cmVzIG9yIGFsbG9jIG5ldyBvbmVzXFxuLSAqIEB2c2k6IFZTSSBwb2ludGVyXFxuLSAqL1xcbi1zdGF0aWMgaW50XFxuLWljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxcbi17XFxuLVxcdHUxNiByZXFfdHhxID0gdnNpLVxcdTAwM2VyZXFfdHhxID8gdnNpLVxcdTAwM2VyZXFfdHhxIDogdnNpLVxcdTAwM2VhbGxvY190eHE7XFxuLVxcdHUxNiByZXFfcnhxID0gdnNpLVxcdTAwM2VyZXFfcnhxID8gdnNpLVxcdTAwM2VyZXFfcnhxIDogdnNpLVxcdTAwM2VhbGxvY19yeHE7XFxuLVxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XFxuLVxcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7XFxuLVxcdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcXG4tXFx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXFx1MDAzZWJhY2s7XFxuLVxcdHUxNiBwcmV2X3R4cSA9IHZzaS1cXHUwMDNlYWxsb2NfdHhxO1xcbi1cXHR1MTYgcHJldl9yeHEgPSB2c2ktXFx1MDAzZWFsbG9jX3J4cTtcXG4tXFx0aW50IGk7XFxuLVxcbi1cXHR2c2lfc3RhdCA9IHBmLVxcdTAwM2V2c2lfc3RhdHNbdnNpLVxcdTAwM2VpZHhdO1xcbi1cXG4tXFx0aWYgKHJlcV90eHEgXFx1MDAzYyBwcmV2X3R4cSkge1xcbi1cXHRcXHRmb3IgKGkgPSByZXFfdHhxOyBpIFxcdTAwM2MgcHJldl90eHE7IGkrKykge1xcbi1cXHRcXHRcXHRpZiAodnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcXG4tXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xcbi1cXHRcXHRcXHRcXHRXUklURV9PTkNFKHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuLVxcdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cztcXG4tXFx0dnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMgPVxcbi1cXHRcXHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cXHUwMDNldHhfcmluZ19zdGF0cywgcmVxX3R4cSxcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXFx1MDAzZXR4X3Jpbmdfc3RhdHMpLFxcbi1cXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pO1xcbi1cXHRpZiAoIXZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzKSB7XFxuLVxcdFxcdHZzaV9zdGF0LVxcdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChyZXFfcnhxIFxcdTAwM2MgcHJldl9yeHEpIHtcXG4tXFx0XFx0Zm9yIChpID0gcmVxX3J4cTsgaSBcXHUwMDNjIHByZXZfcnhxOyBpKyspIHtcXG4tXFx0XFx0XFx0aWYgKHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XFxuLVxcdFxcdFxcdFxcdGtmcmVlX3JjdSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcXG4tXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHM7XFxuLVxcdHZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzID1cXG4tXFx0XFx0a3JlYWxsb2NfYXJyYXkodnNpX3N0YXQtXFx1MDAzZXJ4X3Jpbmdfc3RhdHMsIHJlcV9yeHEsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVxcdTAwM2VyeF9yaW5nX3N0YXRzKSxcXG4tXFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcXG4tXFx0aWYgKCF2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cykge1xcbi1cXHRcXHR2c2lfc3RhdC1cXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gLyoqXFxuICAqIGljZV92c2lfcmVidWlsZCAtIFJlYnVpbGQgVlNJIGFmdGVyIHJlc2V0XFxuICAqIEB2c2k6IFZTSSB0byBiZSByZWJ1aWxkXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xcbmluZGV4IGUwNGRlMDIxNTU5NjYuLjU1ODkzNzg5OTgxODEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zcmlvdi5jXFxuQEAgLTEzNjYsNiArMTM2NiwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxcbiBcXHRyZXR1cm4gX19pY2Vfc2V0X3ZmX21hYyhpY2VfbmV0ZGV2X3RvX3BmKG5ldGRldiksIHZmX2lkLCBtYWMpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XFxuKyAqIEB2ZjogVkYgdG8gY29uZmlndXJlXFxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXFxuKyAqXFxuKyAqIFVwZGF0ZSBWRiBmbGFncyB3aGVuIGNoYW5naW5nIHRydXN0IHdpdGhvdXQgcGVyZm9ybWluZyBhIFZGIHJlc2V0LlxcbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpY2Vfc2V0dXBfdmZfdHJ1c3Qoc3RydWN0IGljZV92ZiAqdmYsIGJvb2wgc2V0dGluZylcXG4re1xcbitcXHRpZiAoc2V0dGluZylcXG4rXFx0XFx0c2V0X2JpdChJQ0VfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXFx1MDAyNnZmLVxcdTAwM2V2Zl9jYXBzKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFxcdTAwMjZ2Zi1cXHUwMDNldmZfY2Fwcyk7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XFxuICAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmVcXG5AQCAtMTQwMSwxMSArMTQxOCwxOSBAQCBpbnQgaWNlX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgdHJ1c3RlZClcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnZmLVxcdTAwM2VjZmdfbG9jayk7XFxuIFxcbi1cXHR3aGlsZSAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjYgdmYtXFx1MDAzZW51bV9tYWNfbGxkcClcXG4tXFx0XFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xcbi1cXG4tXFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbi1cXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xcbitcXHRpZiAoIXRydXN0ZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICh2Zi1cXHUwMDNlbnVtX21hY19sbGRwIFxcdTAwM2UgMCB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9VQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSB8fFxcbitcXHQgICAgIHRlc3RfYml0KElDRV9WRl9TVEFURV9NQ19QUk9NSVNDLCB2Zi1cXHUwMDNldmZfc3RhdGVzKSkpIHtcXG4rXFx0XFx0d2hpbGUgKHZmLVxcdTAwM2VudW1fbWFjX2xsZHApXFxuK1xcdFxcdFxcdGljZV92Zl91cGRhdGVfbWFjX2xsZHBfbnVtKHZmLCBpY2VfZ2V0X3ZmX3ZzaSh2ZiksIGZhbHNlKTtcXG4rXFx0XFx0dmYtXFx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xcbitcXHRcXHRpY2VfcmVzZXRfdmYodmYsIElDRV9WRl9SRVNFVF9OT1RJRlkpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR2Zi1cXHUwMDNldHJ1c3RlZCA9IHRydXN0ZWQ7XFxuK1xcdFxcdGljZV9zZXR1cF92Zl90cnVzdCh2ZiwgdHJ1c3RlZCk7XFxuK1xcdH1cXG4gXFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFxcXCJWRiAldSBpcyBub3cgJXN0cnVzdGVkXFxcXG5cXFwiLFxcbiBcXHRcXHQgdmZfaWQsIHRydXN0ZWQgPyBcXFwiXFxcIiA6IFxcXCJ1blxcXCIpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbmluZGV4IDE2ZmNjOGNmNjE5MTkuLjM5MDQzZDhjYTFiZjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uY1xcbkBAIC03NTg1LDExICs3NTg1LDEzIEBAIHN0YXRpYyBpbnQgX19pZ2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBycG0pXFxuIFxcdFxcdGVyciA9IF9faWdjX29wZW4obmV0ZGV2LCB0cnVlKTtcXG4gXFx0XFx0aWYgKCFycG0pXFxuIFxcdFxcdFxcdHJ0bmxfdW5sb2NrKCk7XFxuLVxcdFxcdGlmICghZXJyKVxcbi1cXHRcXHRcXHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMzoxNzoxNS40NTY2OTgzMDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTMwNTE0NjM1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaTQwZSwgaWF2ZiwgaWNlLCBpZ2MpLiBUaGVzZSBhcmUgZHJpdmVycyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZXNlIGRyaXZlcnMgdHlwaWNhbGx5IHJlcXVpcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW5RKSBkdXJpbmcgcHJvYmUsIG1lYW5pbmcgdGhleSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG9yIHJlYWNoZWQgdmlhIGdlbmVyaWMgUENJIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1ZTExM2E0YTMzMzUxMzM2ZmQ1MzBkMzg4ZDk4ODgxNjdjMTAyOTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDIzOjE3OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbmluZGV4IGEwNDY4MzAwNGE1NjcuLjRmMGY3NjI2NjA1YmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5AQCAtNjkwNyw3ICs2OTA3LDcgQEAgc3RhdGljIGludCBpNDBlX2h3X3NldF9kY2JfY29uZmlnKHN0cnVjdCBpNDBlX3BmICpwZixcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBDaGVjayBpZiBuZWVkIHJlY29uZmlndXJhdGlvbiAqL1xuLVx0aWYgKCFtZW1jbXAoXHUwMDI2bmV3X2NmZywgXHUwMDI2b2xkX2NmZywgc2l6ZW9mKG5ld19jZmcpKSkge1xuK1x0aWYgKCFtZW1jbXAobmV3X2NmZywgb2xkX2NmZywgc2l6ZW9mKCpuZXdfY2ZnKSkpIHtcbiBcdFx0ZGV2X2RiZyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJObyBDaGFuZ2UgaW4gRENCIENvbmZpZyByZXF1aXJlZC5cXG5cIik7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTE0NDk0LDEzICsxNDQ5NCwxNSBAQCBzdHJ1Y3QgaTQwZV92c2kgKmk0MGVfdnNpX3NldHVwKHN0cnVjdCBpNDBlX3BmICpwZiwgdTggdHlwZSxcbiBcdGlmICh2c2ktXHUwMDNlbmV0ZGV2X3JlZ2lzdGVyZWQpIHtcbiBcdFx0dnNpLVx1MDAzZW5ldGRldl9yZWdpc3RlcmVkID0gZmFsc2U7XG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2KHZzaS1cdTAwM2VuZXRkZXYpO1xuLVx0XHRmcmVlX25ldGRldih2c2ktXHUwMDNlbmV0ZGV2KTtcbi1cdFx0dnNpLVx1MDAzZW5ldGRldiA9IE5VTEw7XG4gXHR9XG4gZXJyX2RsX3BvcnQ6XG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSTQwRV9WU0lfTUFJTilcbiBcdFx0aTQwZV9kZXZsaW5rX2Rlc3Ryb3lfcG9ydChwZik7XG4gZXJyX25ldGRldjpcbitcdGlmICh2c2ktXHUwMDNlbmV0ZGV2KSB7XG4rXHRcdGZyZWVfbmV0ZGV2KHZzaS1cdTAwM2VuZXRkZXYpO1xuK1x0XHR2c2ktXHUwMDNlbmV0ZGV2ID0gTlVMTDtcbitcdH1cbiBcdGk0MGVfYXFfZGVsZXRlX2VsZW1lbnQoXHUwMDI2cGYtXHUwMDNlaHcsIHZzaS1cdTAwM2VzZWlkLCBOVUxMKTtcbiBlcnJfdnNpOlxuIFx0aTQwZV92c2lfY2xlYXIodnNpKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5pbmRleCBhMjZjM2Q0N2VjMTU2Li4wY2M0MzRiMjZlYjg4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3ZpcnRjaG5sX3BmLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jXG5AQCAtNDk0Myw2ICs0OTQzLDIzIEBAIGludCBpNDBlX25kb19zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIGVuYWJsZSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGk0MGVfc2V0dXBfdmZfdHJ1c3QgLSBFbmFibGUvZGlzYWJsZSBWRiB0cnVzdCBtb2RlIHdpdGhvdXQgcmVzZXRcbisgKiBAdmY6IFZGIHRvIGNvbmZpZ3VyZVxuKyAqIEBzZXR0aW5nOiB0cnVzdCBzZXR0aW5nXG4rICpcbisgKiBVcGRhdGUgVkYgZmxhZ3Mgd2hlbiBjaGFuZ2luZyB0cnVzdCB3aXRob3V0IHBlcmZvcm1pbmcgYSBWRiByZXNldC5cbisgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvIHNraXAgdGhlIHJlc2V0IChWRiBoYXMgbm8gYWR2YW5jZWRcbisgKiBmZWF0dXJlcyBjb25maWd1cmVkIHRoYXQgbmVlZCBjbGVhbnVwKS5cbisgKi9cbitzdGF0aWMgdm9pZCBpNDBlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpNDBlX3ZmICp2ZiwgYm9vbCBzZXR0aW5nKVxuK3tcbitcdGlmIChzZXR0aW5nKVxuK1x0XHRzZXRfYml0KEk0MEVfVklSVENITkxfVkZfQ0FQX1BSSVZJTEVHRSwgXHUwMDI2dmYtXHUwMDNldmZfY2Fwcyk7XG4rXHRlbHNlXG4rXHRcdGNsZWFyX2JpdChJNDBFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK31cbitcbiAvKipcbiAgKiBpNDBlX25kb19zZXRfdmZfdHJ1c3RcbiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlIG9mIHRoZSBwZlxuQEAgLTQ5ODcsMTkgKzUwMDQsMjAgQEAgaW50IGk0MGVfbmRvX3NldF92Zl90cnVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmZfaWQsIGJvb2wgc2V0dGluZylcbiBcdHNldF9iaXQoX19JNDBFX01BQ1ZMQU5fU1lOQ19QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRwZi1cdTAwM2V2c2lbdmYtXHUwMDNlbGFuX3ZzaV9pZHhdLVx1MDAzZWZsYWdzIHw9IEk0MEVfVlNJX0ZMQUdfRklMVEVSX0NIQU5HRUQ7XG4gXG4tXHRpNDBlX3ZjX3Jlc2V0X3ZmKHZmLCB0cnVlKTtcbitcdC8qIFJlc2V0IG9ubHkgaWYgcmV2b2tpbmcgdHJ1c3QgYW5kIFZGIGhhcyBhZHZhbmNlZCBmZWF0dXJlcyBjb25maWd1cmVkICovXG4rXHRpZiAoIXNldHRpbmcgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHZmLVx1MDAzZWFkcV9lbmFibGVkIHx8IHZmLVx1MDAzZW51bV9jbG91ZF9maWx0ZXJzIFx1MDAzZSAwIHx8XG4rXHQgICAgIHRlc3RfYml0KEk0MEVfVkZfU1RBVEVfVUNfUFJPTUlTQywgXHUwMDI2dmYtXHUwMDNldmZfc3RhdGVzKSB8fFxuK1x0ICAgICB0ZXN0X2JpdChJNDBFX1ZGX1NUQVRFX01DX1BST01JU0MsIFx1MDAyNnZmLVx1MDAzZXZmX3N0YXRlcykpKSB7XG4rXHRcdGk0MGVfdmNfcmVzZXRfdmYodmYsIHRydWUpO1xuK1x0XHRpNDBlX2RlbF9hbGxfY2xvdWRfZmlsdGVycyh2Zik7XG4rXHR9IGVsc2Uge1xuK1x0XHRpNDBlX3NldHVwX3ZmX3RydXN0KHZmLCBzZXR0aW5nKTtcbitcdH1cbitcbiBcdGRldl9pbmZvKFx1MDAyNnBmLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcIlZGICV1IGlzIG5vdyAlc3RydXN0ZWRcXG5cIixcbiBcdFx0IHZmX2lkLCBzZXR0aW5nID8gXCJcIiA6IFwidW5cIik7XG4gXG4tXHRpZiAodmYtXHUwMDNlYWRxX2VuYWJsZWQpIHtcbi1cdFx0aWYgKCF2Zi1cdTAwM2V0cnVzdGVkKSB7XG4tXHRcdFx0ZGV2X2luZm8oXHUwMDI2cGYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0XHQgXCJWRiAldSBubyBsb25nZXIgVHJ1c3RlZCwgZGVsZXRpbmcgYWxsIGNsb3VkIGZpbHRlcnNcXG5cIixcbi1cdFx0XHRcdCB2Zl9pZCk7XG4tXHRcdFx0aTQwZV9kZWxfYWxsX2Nsb3VkX2ZpbHRlcnModmYpO1xuLVx0XHR9XG4tXHR9XG4tXG4gb3V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9WSVJUQ0hOTF9PUF9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRyZXR1cm4gcmV0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbmluZGV4IDA1MGY4MjQxZWY1ZTYuLjVmY2JmYTBjYTg1NTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmLmhcbkBAIC0yNTksNyArMjU5LDYgQEAgc3RydWN0IGlhdmZfYWRhcHRlciB7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5xX3Rhc2s7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluaXNoX2NvbmZpZztcbiBcdHdhaXRfcXVldWVfaGVhZF90IGRvd25fd2FpdHF1ZXVlO1xuLVx0d2FpdF9xdWV1ZV9oZWFkX3QgdmNfd2FpdHF1ZXVlO1xuIFx0c3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9ycztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgdmxhbl9maWx0ZXJfbGlzdDtcbiBcdGludCBudW1fdmxhbl9maWx0ZXJzO1xuQEAgLTU4OCw4ICs1ODcsOSBAQCB2b2lkIGlhdmZfY29uZmlndXJlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGlzYWJsZV9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX21hcF9xdWV1ZXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4tdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbitpbnQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2RlbF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG4gdm9pZCBpYXZmX2FkZF92bGFucyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfZGVsX3ZsYW5zKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpO1xuIHZvaWQgaWF2Zl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcik7XG5AQCAtNjA2LDYgKzYwNiwxMyBAQCB2b2lkIGlhdmZfZGlzYWJsZV92bGFuX3N0cmlwcGluZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdCAgICAgIGVudW0gdmlydGNobmxfb3BzIHZfb3Bjb2RlLFxuIFx0XHRcdCAgICAgIGVudW0gaWF2Zl9zdGF0dXMgdl9yZXR2YWwsIHU4ICptc2csIHUxNiBtc2dsZW4pO1xuK2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbitcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbitcdFx0XHRcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4rXHRcdFx0XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLFxuK1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4rXHRcdFx0XHRjb25zdCB2b2lkICpjb25kX2RhdGEsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcyk7XG4gaW50IGlhdmZfY29uZmlnX3JzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19idyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbiB2b2lkIGlhdmZfY2ZnX3F1ZXVlc19xdWFudGFfc2l6ZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xuaW5kZXggMjliODQwM2EwNjZiYy4uM2ZhMjg4ZTM3OThhZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC0xMDI5LDYgKzEwMjksNjAgQEAgc3RhdGljIGJvb2wgaWF2Zl9pc19tYWNfc2V0X2hhbmRsZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIGlhdmZfbWFjX2NoYW5nZV9kb25lIC0gQ2hlY2sgaWYgTUFDIGNoYW5nZSBjb21wbGV0ZWRcbisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKiBAZGF0YTogTUFDIGFkZHJlc3MgYmVpbmcgY2hlY2tlZCAoYXMgY29uc3Qgdm9pZCAqKVxuKyAqIEB2X29wOiB2aXJ0Y2hubCBvcGNvZGUgZnJvbSBwcm9jZXNzZWQgbWVzc2FnZVxuKyAqXG4rICogQ2FsbGJhY2sgZm9yIGlhdmZfcG9sbF92aXJ0Y2hubF9yZXNwb25zZSgpIHRvIGNoZWNrIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIE1BQyBjaGFuZ2UgY29tcGxldGVkLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbCBpYXZmX21hY19jaGFuZ2VfZG9uZShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuK1x0XHRcdFx0IGNvbnN0IHZvaWQgKmRhdGEsIGVudW0gdmlydGNobmxfb3BzIHZfb3ApXG4re1xuK1x0Y29uc3QgdTggKmFkZHIgPSBkYXRhO1xuK1xuK1x0cmV0dXJuIGlhdmZfaXNfbWFjX3NldF9oYW5kbGVkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2LCBhZGRyKTtcbit9XG4rXG4rLyoqXG4rICogaWF2Zl9zZXRfbWFjX3N5bmMgLSBTeW5jaHJvbm91c2x5IGNoYW5nZSBNQUMgYWRkcmVzc1xuKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuKyAqIEBhZGRyOiBNQUMgYWRkcmVzcyB0byBzZXRcbisgKlxuKyAqIFNlbmQgTUFDIGNoYW5nZSByZXF1ZXN0IHRvIFBGIGFuZCBwb2xsIGFkbWluIHF1ZXVlIGZvciByZXNwb25zZS5cbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gMi41IHNlY29uZHMuXG4rICogRXZlbnQgYnVmZmVyIGlzIGFsbG9jYXRlZCBiZWZvcmUgc2VuZGluZyB0byBhdm9pZCBzdGF0ZSBtaXNtYXRjaCBpZlxuKyAqIGFsbG9jYXRpb24gZmFpbHMgYWZ0ZXIgbWVzc2FnZSBpcyBzZW50IHRvIFBGLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmVcbisgKi9cbitzdGF0aWMgaW50IGlhdmZfc2V0X21hY19zeW5jKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHU4ICphZGRyKVxuK3tcbitcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvIGV2ZW50O1xuK1x0aW50IHJldDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KTtcbitcbitcdGV2ZW50LmJ1Zl9sZW4gPSBJQVZGX01BWF9BUV9CVUZfU0laRTtcbitcdGV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFldmVudC5tc2dfYnVmKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHJldCA9IGlhdmZfYWRkX2V0aGVyX2FkZHJzKGFkYXB0ZXIpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UoYWRhcHRlciwgXHUwMDI2ZXZlbnQsXG4rXHRcdFx0XHRcdCAgaWF2Zl9tYWNfY2hhbmdlX2RvbmUsIGFkZHIsIDI1MDApO1xuK1xuK291dDpcbitcdGtmcmVlKGV2ZW50Lm1zZ19idWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogaWF2Zl9zZXRfbWFjIC0gTkRPIGNhbGxiYWNrIHRvIHNldCBwb3J0IE1BQyBhZGRyZXNzXG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTEwNDIsMjkgKzEwOTYsMzAgQEAgc3RhdGljIGludCBpYXZmX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcClcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4gXHRpbnQgcmV0O1xuIFxuK1x0aWYgKGlhdmZfaXNfcmVzZXRfaW5fcHJvZ3Jlc3MoYWRhcHRlcikgfHwgYWRhcHRlci1cdTAwM2VzdGF0ZSBcdTAwM2MgX19JQVZGX0RPV04pXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0cmV0ID0gaWF2Zl9yZXBsYWNlX3ByaW1hcnlfbWFjKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4tXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0cmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoYWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUsXG4tXHRcdFx0XHRcdCAgICAgICBpYXZmX2lzX21hY19zZXRfaGFuZGxlZChuZXRkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSksXG4tXHRcdFx0XHRcdCAgICAgICBtc2Vjc190b19qaWZmaWVzKDI1MDApKTtcbi1cbi1cdC8qIElmIHJldCBcdTAwM2MgMCB0aGVuIGl0IG1lYW5zIHdhaXQgd2FzIGludGVycnVwdGVkLlxuLVx0ICogSWYgcmV0ID09IDAgdGhlbiBpdCBtZWFucyB3ZSBnb3QgYSB0aW1lb3V0LlxuLVx0ICogZWxzZSBpdCBtZWFucyB3ZSBnb3QgcmVzcG9uc2UgZm9yIHNldCBNQUMgZnJvbSBQRixcbi1cdCAqIGNoZWNrIGlmIG5ldGRldiBNQUMgd2FzIHVwZGF0ZWQgdG8gcmVxdWVzdGVkIE1BQyxcbi1cdCAqIGlmIHllcyB0aGVuIHNldCBNQUMgc3VjY2VlZGVkIG90aGVyd2lzZSBpdCBmYWlsZWQgcmV0dXJuIC1FQUNDRVNcbi1cdCAqL1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbitcdHJldCA9IGlhdmZfc2V0X21hY19zeW5jKGFkYXB0ZXIsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdC8qIFJvbGxiYWNrIG9ubHkgaWYgc2VuZCBmYWlsZWQgKG1lc3NhZ2UgbmV2ZXIgcmVhY2hlZCBQRikuXG4rXHRcdCAqIERvbid0IHJvbGxiYWNrIG9uIHRpbWVvdXQgKC1FQUdBSU4pIGJlY2F1c2UgdGhlIG1lc3NhZ2Ugd2FzXG4rXHRcdCAqIHNlbnQgYW5kIFBGIHdpbGwgZXZlbnR1YWxseSByZXNwb25kLiBXaGVuIHRoZSByZXNwb25zZSBhcnJpdmVzLFxuK1x0XHQgKiBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oKSB3aWxsIGhhbmRsZSByb2xsYmFjayAob24gUEYgZXJyb3IpXG4rXHRcdCAqIG9yIGFjY2VwdGFuY2UgKG9uIFBGIHN1Y2Nlc3MpIGF1dG9tYXRpY2FsbHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocmV0ICE9IC1FQUdBSU4pIHtcbitcdFx0XHRpYXZmX21hY19hZGRfcmVqZWN0KGFkYXB0ZXIpO1xuK1x0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0XHR9XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0cmV0dXJuIC1FQUdBSU47XG4rXHR9XG4gXG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwobmV0ZGV2LVx1MDAzZWRldl9hZGRyLCBhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBQ0NFUztcbkBAIC01Mzk0LDkgKzU0NDksNiBAQCBzdGF0aWMgaW50IGlhdmZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHQvKiBTZXR1cCB0aGUgd2FpdCBxdWV1ZSBmb3IgaW5kaWNhdGluZyB0cmFuc2l0aW9uIHRvIGRvd24gc3RhdHVzICovXG4gXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNlZG93bl93YWl0cXVldWUpO1xuIFxuLVx0LyogU2V0dXAgdGhlIHdhaXQgcXVldWUgZm9yIGluZGljYXRpbmcgdmlydGNoYW5uZWwgZXZlbnRzICovXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbi1cbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFkYXB0ZXItXHUwMDNlcHRwLmFxX2NtZHMpO1xuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5waGNfdGltZV93YWl0cXVldWUpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZhZGFwdGVyLVx1MDAzZXB0cC5hcV9jbWRfbG9jayk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3ZpcnRjaG5sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuaW5kZXggZWMyMzRjYzhiZDlkYi4uZTZiN2U4ZjgyYzdjMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl92aXJ0Y2hubC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdmlydGNobmwuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE4IEludGVsIENvcnBvcmF0aW9uLiAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldC9pbnRlbC9saWJpZS9yeC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImlhdmYuaFwiXG4gI2luY2x1ZGUgXCJpYXZmX3B0cC5oXCJcbkBAIC01NTUsMjAgKzU1NiwyMyBAQCBpYXZmX3NldF9tYWNfYWRkcl90eXBlKHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyICp2aXJ0Y2hubF9ldGhlcl9hZGRyLFxuICAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuICAqXG4gICogUmVxdWVzdCB0aGF0IHRoZSBQRiBhZGQgb25lIG9yIG1vcmUgYWRkcmVzc2VzIHRvIG91ciBmaWx0ZXJzLlxuLSAqKi9cbi12b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZVxuKyAqL1xuK2ludCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIHtcbiBcdHN0cnVjdCB2aXJ0Y2hubF9ldGhlcl9hZGRyX2xpc3QgKnZlYWw7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmO1xuIFx0aW50IGkgPSAwLCBjb3VudCA9IDA7XG4gXHRib29sIG1vcmUgPSBmYWxzZTtcbiBcdHNpemVfdCBsZW47XG4rXHRpbnQgcmV0O1xuIFxuIFx0aWYgKGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4gXHRcdC8qIGJhaWwgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgYSBjb21tYW5kIHBlbmRpbmcgKi9cbiBcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcIkNhbm5vdCBhZGQgZmlsdGVycywgY29tbWFuZCAlZCBwZW5kaW5nXFxuXCIsXG4gXHRcdFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbkBAIC01ODAsNyArNTg0LDcgQEAgdm9pZCBpYXZmX2FkZF9ldGhlcl9hZGRycyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0aWYgKCFjb3VudCkge1xuIFx0XHRhZGFwdGVyLVx1MDAzZWFxX3JlcXVpcmVkIFx1MDAyNj0gfklBVkZfRkxBR19BUV9BRERfTUFDX0ZJTFRFUjtcbiBcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VtYWNfdmxhbl9saXN0X2xvY2spO1xuLVx0XHRyZXR1cm47XG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0YWRhcHRlci1cdTAwM2VjdXJyZW50X29wID0gVklSVENITkxfT1BfQUREX0VUSF9BRERSO1xuIFxuQEAgLTU5NCw4ICs1OTgsOSBAQCB2b2lkIGlhdmZfYWRkX2V0aGVyX2FkZHJzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gXG4gXHR2ZWFsID0ga3phbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCF2ZWFsKSB7XG4rXHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbiBcdHZlYWwtXHUwMDNldnNpX2lkID0gYWRhcHRlci1cdTAwM2V2c2lfcmVzLVx1MDAzZXZzaV9pZDtcbkBAIC02MTUsOCArNjIwLDE1IEBAIHZvaWQgaWF2Zl9hZGRfZXRoZXJfYWRkcnMoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmFkYXB0ZXItXHUwMDNlbWFjX3ZsYW5fbGlzdF9sb2NrKTtcbiBcbi1cdGlhdmZfc2VuZF9wZl9tc2coYWRhcHRlciwgVklSVENITkxfT1BfQUREX0VUSF9BRERSLCAodTggKil2ZWFsLCBsZW4pO1xuK1x0cmV0ID0gaWF2Zl9zZW5kX3BmX21zZyhhZGFwdGVyLCBWSVJUQ0hOTF9PUF9BRERfRVRIX0FERFIsICh1OCAqKXZlYWwsIGxlbik7XG4gXHRrZnJlZSh2ZWFsKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiVW5hYmxlIHRvIHNlbmQgQUREX0VUSF9BRERSIG1lc3NhZ2UgdG8gUEYsIGVycm9yICVkXFxuXCIsIHJldCk7XG4rXHRcdGFkYXB0ZXItXHUwMDNlY3VycmVudF9vcCA9IFZJUlRDSE5MX09QX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC03MTIsOCArNzI0LDggQEAgc3RhdGljIHZvaWQgaWF2Zl9tYWNfYWRkX29rKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIpXG4gICogQGFkYXB0ZXI6IGFkYXB0ZXIgc3RydWN0dXJlXG4gICpcbiAgKiBSZW1vdmUgZmlsdGVycyBmcm9tIGxpc3QgYmFzZWQgb24gUEYgcmVzcG9uc2UuXG4tICoqL1xuLXN0YXRpYyB2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbisgKi9cbit2b2lkIGlhdmZfbWFjX2FkZF9yZWplY3Qoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci1cdTAwM2VuZXRkZXY7XG4gXHRzdHJ1Y3QgaWF2Zl9tYWNfZmlsdGVyICpmLCAqZnRtcDtcbkBAIC0yMzY0LDcgKzIzNzYsNiBAQCB2b2lkIGlhdmZfdmlydGNobmxfY29tcGxldGlvbihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0XHRcdGlhdmZfbWFjX2FkZF9yZWplY3QoYWRhcHRlcik7XG4gXHRcdFx0LyogcmVzdG9yZSBhZG1pbmlzdHJhdGl2ZWx5IHNldCBNQUMgYWRkcmVzcyAqL1xuIFx0XHRcdGV0aGVyX2FkZHJfY29weShhZGFwdGVyLVx1MDAzZWh3Lm1hYy5hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuLVx0XHRcdHdha2VfdXAoXHUwMDI2YWRhcHRlci1cdTAwM2V2Y193YWl0cXVldWUpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFZJUlRDSE5MX09QX0RFTF9FVEhfQUREUjpcbiBcdFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIGRlbGV0ZSBNQUMgZmlsdGVyLCBlcnJvciAlc1xcblwiLFxuQEAgLTI1NTUsNyArMjU2Niw2IEBAIHZvaWQgaWF2Zl92aXJ0Y2hubF9jb21wbGV0aW9uKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4gXHRcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgYWRhcHRlci1cdTAwM2Vody5tYWMuYWRkcik7XG4gXHRcdFx0bmV0aWZfYWRkcl91bmxvY2tfYmgobmV0ZGV2KTtcbiBcdFx0fVxuLVx0XHR3YWtlX3VwKFx1MDAyNmFkYXB0ZXItXHUwMDNldmNfd2FpdHF1ZXVlKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFZJUlRDSE5MX09QX0dFVF9TVEFUUzoge1xuIFx0XHRzdHJ1Y3QgaWF2Zl9ldGhfc3RhdHMgKnN0YXRzID1cbkBAIC0yOTUwLDMgKzI5NjAsNzIgQEAgdm9pZCBpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbiBcdH0gLyogc3dpdGNoIHZfb3Bjb2RlICovXG4gXHRhZGFwdGVyLVx1MDAzZWN1cnJlbnRfb3AgPSBWSVJUQ0hOTF9PUF9VTktOT1dOO1xuIH1cbitcbisvKipcbisgKiBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2UgLSBQb2xsIGFkbWluIHF1ZXVlIGZvciB2aXJ0Y2hubCByZXNwb25zZVxuKyAqIEBhZGFwdGVyOiBhZGFwdGVyIHN0cnVjdHVyZVxuKyAqIEBldmVudDogcHJlLWFsbG9jYXRlZCBldmVudCBidWZmZXIgdG8gdXNlIGZvciBwb2xsaW5nXG4rICogQGNvbmRpdGlvbjogY2FsbGJhY2sgdG8gY2hlY2sgaWYgZGVzaXJlZCByZXNwb25zZSByZWNlaXZlZFxuKyAqIEBjb25kX2RhdGE6IGNvbnRleHQgZGF0YSBwYXNzZWQgdG8gY29uZGl0aW9uIGNhbGxiYWNrXG4rICogQHRpbWVvdXRfbXM6IG1heGltdW0gdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kc1xuKyAqXG4rICogUG9sbHMgdGhlIGFkbWluIHF1ZXVlIGFuZCBwcm9jZXNzZXMgYWxsIGluY29taW5nIHZpcnRjaG5sIG1lc3NhZ2VzLlxuKyAqIEFmdGVyIHByb2Nlc3NpbmcgZWFjaCB2YWxpZCBtZXNzYWdlLCBjYWxscyB0aGUgY29uZGl0aW9uIGNhbGxiYWNrIHRvIGNoZWNrXG4rICogaWYgdGhlIGV4cGVjdGVkIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgdGhlIG9wY29kZVxuKyAqIG9mIHRoZSBwcm9jZXNzZWQgbWVzc2FnZSB0byBpZGVudGlmeSB3aGljaCByZXNwb25zZSB3YXMgcmVjZWl2ZWQuIENvbnRpbnVlc1xuKyAqIHBvbGxpbmcgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSBvciB0aW1lb3V0IGV4cGlyZXMuXG4rICpcbisgKiBDYWxsZXIgbXVzdCBhbGxvY2F0ZSBldmVudCBidWZmZXIgYmVmb3JlIHNlbmRpbmcgYW55IG1lc3NhZ2VzIHRvIFBGIHRvIGF2b2lkXG4rICogc3RhdGUgbWlzbWF0Y2ggaWYgYWxsb2NhdGlvbiBmYWlscyBhZnRlciBtZXNzYWdlIGlzIHNlbnQuXG4rICpcbisgKiBDYWxsZXIgbXVzdCBob2xkIG5ldGRldl9sb2NrLiBUaGlzIGNhbiBzbGVlcCBmb3IgdXAgdG8gdGltZW91dF9tcyB3aGlsZVxuKyAqIHBvbGxpbmcgaGFyZHdhcmUuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyAoY29uZGl0aW9uIG1ldCksIC1FQUdBSU4gb24gdGltZW91dCwgb3IgZXJyb3IgY29kZVxuKyAqL1xuK2ludCBpYXZmX3BvbGxfdmlydGNobmxfcmVzcG9uc2Uoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcixcbitcdFx0XHRcdHN0cnVjdCBpYXZmX2FycV9ldmVudF9pbmZvICpldmVudCxcbitcdFx0XHRcdGJvb2wgKCpjb25kaXRpb24pKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXG4rXHRcdFx0XHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLFxuK1x0XHRcdFx0XHRcdCAgZW51bSB2aXJ0Y2hubF9vcHMgdl9vcCksXG4rXHRcdFx0XHRjb25zdCB2b2lkICpjb25kX2RhdGEsXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgdGltZW91dF9tcylcbit7XG4rXHRzdHJ1Y3QgaWF2Zl9odyAqaHcgPSBcdTAwMjZhZGFwdGVyLVx1MDAzZWh3O1xuK1x0ZW51bSB2aXJ0Y2hubF9vcHMgcmVjZWl2ZWRfb3A7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4rXHRpbnQgcmV0ID0gLUVBR0FJTjtcbitcdHUxNiBwZW5kaW5nID0gMDtcbitcdHUzMiB2X3JldHZhbDtcbitcbitcdG5ldGRldl9hc3NlcnRfbG9ja2VkKGFkYXB0ZXItXHUwMDNlbmV0ZGV2KTtcbitcbitcdHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcbitcdGRvIHtcbitcdFx0aWYgKCFwZW5kaW5nKVxuK1x0XHRcdHVzbGVlcF9yYW5nZSg1MCwgNzUpO1xuK1xuK1x0XHRpZiAoaWF2Zl9jbGVhbl9hcnFfZWxlbWVudChodywgZXZlbnQsIFx1MDAyNnBlbmRpbmcpID09IElBVkZfU1VDQ0VTUykge1xuK1x0XHRcdHJlY2VpdmVkX29wID0gKGVudW0gdmlydGNobmxfb3BzKWxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZWRlc2MuY29va2llX2hpZ2gpO1xuK1x0XHRcdGlmIChyZWNlaXZlZF9vcCAhPSBWSVJUQ0hOTF9PUF9VTktOT1dOKSB7XG4rXHRcdFx0XHR2X3JldHZhbCA9IGxlMzJfdG9fY3B1KGV2ZW50LVx1MDAzZWRlc2MuY29va2llX2xvdyk7XG4rXG4rXHRcdFx0XHRpYXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgcmVjZWl2ZWRfb3AsXG4rXHRcdFx0XHRcdFx0XHQgKGVudW0gaWF2Zl9zdGF0dXMpdl9yZXR2YWwsXG4rXHRcdFx0XHRcdFx0XHQgZXZlbnQtXHUwMDNlbXNnX2J1ZiwgZXZlbnQtXHUwMDNlbXNnX2xlbik7XG4rXG4rXHRcdFx0XHRpZiAoY29uZGl0aW9uKGFkYXB0ZXIsIGNvbmRfZGF0YSwgcmVjZWl2ZWRfb3ApKSB7XG4rXHRcdFx0XHRcdHJldCA9IDA7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbitcdFx0XHRtZW1zZXQoZXZlbnQtXHUwMDNlbXNnX2J1ZiwgMCwgSUFWRl9NQVhfQVFfQlVGX1NJWkUpO1xuK1xuK1x0XHRcdGlmIChwZW5kaW5nKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuaW5kZXggZmM5MWI2NjY1ZjkwNS4uODNkYTViYTZlZWIxNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oXG5AQCAtMzI4LDYgKzMyOCw4IEBAIGVudW0gaWNlX3ZzaV9zdGF0ZSB7XG4gc3RydWN0IGljZV92c2lfc3RhdHMge1xuIFx0c3RydWN0IGljZV9yaW5nX3N0YXRzICoqdHhfcmluZ19zdGF0czsgIC8qIFR4IHJpbmcgc3RhdHMgYXJyYXkgKi9cbiBcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnJ4X3Jpbmdfc3RhdHM7ICAvKiBSeCByaW5nIHN0YXRzIGFycmF5ICovXG4rXHR1MTYgdHhfcmluZ19zdGF0c19sZW47XG4rXHR1MTYgcnhfcmluZ19zdGF0c19sZW47XG4gfTtcbiBcbiAvKiBzdHJ1Y3QgdGhhdCBkZWZpbmVzIGEgVlNJLCBhc3NvY2lhdGVkIHdpdGggYSBkZXYgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2Vzd2l0Y2guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5pbmRleCBiMDY5ZTZjNTE0ZmIxLi42ZTdiYmE0NzM4OTg5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9lc3dpdGNoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXN3aXRjaC5jXG5AQCAtOTUsNyArOTUsNyBAQCBpY2VfZXN3aXRjaF9yZWxlYXNlX3JlcHIoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfcmVwciAqcmVwcilcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWNlX3ZzaV91cGRhdGVfc2VjdXJpdHkodnNpLCBpY2VfdnNpX2N0eF9zZXRfYW50aXNwb29mKTtcbi1cdG1ldGFkYXRhX2RzdF9mcmVlKHJlcHItXHUwMDNlZHN0KTtcbitcdGRzdF9yZWxlYXNlKFx1MDAyNnJlcHItXHUwMDNlZHN0LVx1MDAzZWRzdCk7XG4gXHRyZXByLVx1MDAzZWRzdCA9IE5VTEw7XG4gXHRpY2VfZmx0cl9hZGRfbWFjX2FuZF9icm9hZGNhc3QodnNpLCByZXByLVx1MDAzZXBhcmVudF9tYWMsXG4gXHRcdFx0XHQgICAgICAgSUNFX0ZXRF9UT19WU0kpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2xpYi5jXG5pbmRleCA4Y2RjNGZkYTg5ZTk3Li5jNzE4NDkxMTlkMDRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9saWIuY1xuQEAgLTMzOCw3ICszMzgsNiBAQCBzdGF0aWMgdm9pZCBpY2VfdnNpX2ZyZWVfc3RhdHMoc3RydWN0IGljZV92c2kgKnZzaSlcbiB7XG4gXHRzdHJ1Y3QgaWNlX3ZzaV9zdGF0cyAqdnNpX3N0YXQ7XG4gXHRzdHJ1Y3QgaWNlX3BmICpwZiA9IHZzaS1cdTAwM2ViYWNrO1xuLVx0aW50IGk7XG4gXG4gXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuIFx0XHRyZXR1cm47XG5AQCAtMzQ5LDE0ICszNDgsMTQgQEAgc3RhdGljIHZvaWQgaWNlX3ZzaV9mcmVlX3N0YXRzKHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRpZiAoIXZzaV9zdGF0KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpY2VfZm9yX2VhY2hfYWxsb2NfdHhxKHZzaSwgaSkge1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcbiBcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbiBcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiBcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRpY2VfZm9yX2VhY2hfYWxsb2NfcnhxKHZzaSwgaSkge1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuOyBpKyspIHtcbiBcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0pIHtcbiBcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbiBcdFx0XHRXUklURV9PTkNFKHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNbaV0sIE5VTEwpO1xuQEAgLTUxMyw1MSArNTEyLDYgQEAgc3RhdGljIGlycXJldHVybl90IGljZV9tc2l4X2NsZWFuX3JpbmdzKGludCBfX2Fsd2F5c191bnVzZWQgaXJxLCB2b2lkICpkYXRhKVxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfdnNpX2FsbG9jX3N0YXRfYXJyYXlzIC0gQWxsb2NhdGUgc3RhdGlzdGljcyBhcnJheXNcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxuLSAqL1xuLXN0YXRpYyBpbnQgaWNlX3ZzaV9hbGxvY19zdGF0X2FycmF5cyhzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuLXtcbi1cdHN0cnVjdCBpY2VfdnNpX3N0YXRzICp2c2lfc3RhdDtcbi1cdHN0cnVjdCBpY2VfcGYgKnBmID0gdnNpLVx1MDAzZWJhY2s7XG4tXG4tXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuLVx0XHRyZXR1cm4gMDtcbi1cdGlmICghcGYtXHUwMDNldnNpX3N0YXRzKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmIChwZi1cdTAwM2V2c2lfc3RhdHNbdnNpLVx1MDAzZWlkeF0pXG4tXHQvKiByZWFsbG9jIHdpbGwgaGFwcGVuIGluIHJlYnVpbGQgcGF0aCAqL1xuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHZzaV9zdGF0ID0ga3phbGxvY19vYmooKnZzaV9zdGF0KTtcbi1cdGlmICghdnNpX3N0YXQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuLVx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4tXHRcdGt6YWxsb2Nfb2JqcygqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cywgdnNpLVx1MDAzZWFsbG9jX3R4cSk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpXG4tXHRcdGdvdG8gZXJyX2FsbG9jX3R4O1xuLVxuLVx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9XG4tXHRcdGt6YWxsb2Nfb2JqcygqdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cywgdnNpLVx1MDAzZWFsbG9jX3J4cSk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpXG4tXHRcdGdvdG8gZXJyX2FsbG9jX3J4O1xuLVxuLVx0cGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdID0gdnNpX3N0YXQ7XG4tXG4tXHRyZXR1cm4gMDtcbi1cbi1lcnJfYWxsb2Nfcng6XG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzKTtcbi1lcnJfYWxsb2NfdHg6XG4tXHRrZnJlZSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzKTtcbi1cdGtmcmVlKHZzaV9zdGF0KTtcbi1cdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IE5VTEw7XG4tXHRyZXR1cm4gLUVOT01FTTtcbi19XG4tXG4gLyoqXG4gICogaWNlX3ZzaV9hbGxvY19kZWYgLSBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGFscmVhZHkgYWxsb2NhdGVkIFZTSVxuICAqIEB2c2k6IHB0ciB0byBWU0lcbkBAIC0yMzAzLDYgKzIyNTcsODUgQEAgc3RhdGljIGludCBpY2VfdnNpX2NmZ190Y19sYW4oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfdnNpICp2c2kpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyoqXG4rICogaWNlX3ZzaV9yZWFsbG9jX3N0YXRfYXJyYXlzIC0gRnJlZXMgdW51c2VkIHN0YXQgc3RydWN0dXJlcyBvciBhbGxvYyBuZXcgb25lc1xuKyAqIEB2c2k6IFZTSSBwb2ludGVyXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuXG4rICovXG4rc3RhdGljIGludCBpY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbit7XG4rXHR1MTYgcmVxX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID8gdnNpLVx1MDAzZXJlcV90eHEgOiB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuK1x0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbitcdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4rXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xuK1x0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuK1x0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbitcdHUxNiBwcmV2X3R4cSwgcHJldl9yeHE7XG4rXG4rXHRpZiAodnNpLVx1MDAzZXR5cGUgPT0gSUNFX1ZTSV9DSE5MKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHZzaV9zdGF0ID0gcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdO1xuK1x0aWYgKCF2c2lfc3RhdCkge1xuK1x0XHR2c2lfc3RhdCA9IGt6YWxsb2Nfb2JqKCp2c2lfc3RhdCk7XG4rXHRcdGlmICghdnNpX3N0YXQpXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRwcmV2X3R4cSA9IHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNfbGVuO1xuK1x0aWYgKHJlcV90eHEgXHUwMDNjIHByZXZfdHhxKSB7XG4rXHRcdGZvciAoaW50IGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4rXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbitcdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuK1x0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzO1xuK1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4rXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHJlcV90eHEsXG4rXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyksXG4rXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbitcdGlmICghdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cykge1xuK1x0XHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcbitcdFx0Z290byBlcnJfZnJlZV9wYXJ0aWFsX3ZzaV9zdGF0O1xuK1x0fVxuK1x0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0c19sZW4gPSByZXFfdHhxO1xuK1xuK1x0cHJldl9yeHEgPSB2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzX2xlbjtcbitcdGlmIChyZXFfcnhxIFx1MDAzYyBwcmV2X3J4cSkge1xuK1x0XHRmb3IgKGludCBpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkrKykge1xuK1x0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4rXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbitcdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cztcbitcdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuK1x0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuK1x0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxuK1x0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4rXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbitcdFx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDtcbitcdH1cbitcdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHNfbGVuID0gcmVxX3J4cTtcbitcbitcdHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XSA9IHZzaV9zdGF0O1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfcGFydGlhbF92c2lfc3RhdDpcbitcdGlmICghcGYtXHUwMDNldnNpX3N0YXRzW3ZzaS1cdTAwM2VpZHhdKSB7XG4rXHRcdC8qIHZzaV9zdGF0IHdhcyBub3QgdmlzaWJsZSBiZWZvcmUgY3VycmVudCBhbGxvYyBhdHRlbXB0ICovXG4rXHRcdGtmcmVlKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMpO1xuK1x0XHRrZnJlZSh2c2lfc3RhdCk7XG4rXHR9XG4rXHRyZXR1cm4gLUVOT01FTTtcbit9XG4rXG4gLyoqXG4gICogaWNlX3ZzaV9jZmdfZGVmIC0gY29uZmlndXJlIGRlZmF1bHQgVlNJIGJhc2VkIG9uIHRoZSB0eXBlXG4gICogQHZzaTogcG9pbnRlciB0byBWU0lcbkBAIC0yMzIwLDcgKzIzNTMsNyBAQCBzdGF0aWMgaW50IGljZV92c2lfY2ZnX2RlZihzdHJ1Y3QgaWNlX3ZzaSAqdnNpKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0LyogYWxsb2NhdGUgbWVtb3J5IGZvciBUeC9SeCByaW5nIHN0YXQgcG9pbnRlcnMgKi9cbi1cdHJldCA9IGljZV92c2lfYWxsb2Nfc3RhdF9hcnJheXModnNpKTtcbitcdHJldCA9IGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyh2c2kpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byB1bnJvbGxfdnNpX2FsbG9jO1xuIFxuQEAgLTMwMTEsNjYgKzMwNDQsNiBAQCBpY2VfdnNpX3JlYnVpbGRfc2V0X2NvYWxlc2NlKHN0cnVjdCBpY2VfdnNpICp2c2ksXG4gXHR9XG4gfVxuIFxuLS8qKlxuLSAqIGljZV92c2lfcmVhbGxvY19zdGF0X2FycmF5cyAtIEZyZWVzIHVudXNlZCBzdGF0IHN0cnVjdHVyZXMgb3IgYWxsb2MgbmV3IG9uZXNcbi0gKiBAdnNpOiBWU0kgcG9pbnRlclxuLSAqL1xuLXN0YXRpYyBpbnRcbi1pY2VfdnNpX3JlYWxsb2Nfc3RhdF9hcnJheXMoc3RydWN0IGljZV92c2kgKnZzaSlcbi17XG4tXHR1MTYgcmVxX3R4cSA9IHZzaS1cdTAwM2VyZXFfdHhxID8gdnNpLVx1MDAzZXJlcV90eHEgOiB2c2ktXHUwMDNlYWxsb2NfdHhxO1xuLVx0dTE2IHJlcV9yeHEgPSB2c2ktXHUwMDNlcmVxX3J4cSA/IHZzaS1cdTAwM2VyZXFfcnhxIDogdnNpLVx1MDAzZWFsbG9jX3J4cTtcbi1cdHN0cnVjdCBpY2VfcmluZ19zdGF0cyAqKnR4X3Jpbmdfc3RhdHM7XG4tXHRzdHJ1Y3QgaWNlX3Jpbmdfc3RhdHMgKipyeF9yaW5nX3N0YXRzO1xuLVx0c3RydWN0IGljZV92c2lfc3RhdHMgKnZzaV9zdGF0O1xuLVx0c3RydWN0IGljZV9wZiAqcGYgPSB2c2ktXHUwMDNlYmFjaztcbi1cdHUxNiBwcmV2X3R4cSA9IHZzaS1cdTAwM2VhbGxvY190eHE7XG4tXHR1MTYgcHJldl9yeHEgPSB2c2ktXHUwMDNlYWxsb2NfcnhxO1xuLVx0aW50IGk7XG4tXG4tXHR2c2lfc3RhdCA9IHBmLVx1MDAzZXZzaV9zdGF0c1t2c2ktXHUwMDNlaWR4XTtcbi1cbi1cdGlmIChyZXFfdHhxIFx1MDAzYyBwcmV2X3R4cSkge1xuLVx0XHRmb3IgKGkgPSByZXFfdHhxOyBpIFx1MDAzYyBwcmV2X3R4cTsgaSsrKSB7XG4tXHRcdFx0aWYgKHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHNbaV0pIHtcbi1cdFx0XHRcdGtmcmVlX3JjdSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCByY3UpO1xuLVx0XHRcdFx0V1JJVEVfT05DRSh2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzW2ldLCBOVUxMKTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cdH1cbi1cbi1cdHR4X3Jpbmdfc3RhdHMgPSB2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzO1xuLVx0dnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyA9XG4tXHRcdGtyZWFsbG9jX2FycmF5KHZzaV9zdGF0LVx1MDAzZXR4X3Jpbmdfc3RhdHMsIHJlcV90eHEsXG4tXHRcdFx0ICAgICAgIHNpemVvZigqdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cyksXG4tXHRcdFx0ICAgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTtcbi1cdGlmICghdnNpX3N0YXQtXHUwMDNldHhfcmluZ19zdGF0cykge1xuLVx0XHR2c2lfc3RhdC1cdTAwM2V0eF9yaW5nX3N0YXRzID0gdHhfcmluZ19zdGF0cztcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXHR9XG4tXG4tXHRpZiAocmVxX3J4cSBcdTAwM2MgcHJldl9yeHEpIHtcbi1cdFx0Zm9yIChpID0gcmVxX3J4cTsgaSBcdTAwM2MgcHJldl9yeHE7IGkrKykge1xuLVx0XHRcdGlmICh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzW2ldKSB7XG4tXHRcdFx0XHRrZnJlZV9yY3UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgcmN1KTtcbi1cdFx0XHRcdFdSSVRFX09OQ0UodnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0c1tpXSwgTlVMTCk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHRyeF9yaW5nX3N0YXRzID0gdnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cztcbi1cdHZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMgPVxuLVx0XHRrcmVhbGxvY19hcnJheSh2c2lfc3RhdC1cdTAwM2VyeF9yaW5nX3N0YXRzLCByZXFfcnhxLFxuLVx0XHRcdCAgICAgICBzaXplb2YoKnZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpLFxuLVx0XHRcdCAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7XG4tXHRpZiAoIXZzaV9zdGF0LVx1MDAzZXJ4X3Jpbmdfc3RhdHMpIHtcbi1cdFx0dnNpX3N0YXQtXHUwMDNlcnhfcmluZ19zdGF0cyA9IHJ4X3Jpbmdfc3RhdHM7XG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qKlxuICAqIGljZV92c2lfcmVidWlsZCAtIFJlYnVpbGQgVlNJIGFmdGVyIHJlc2V0XG4gICogQHZzaTogVlNJIHRvIGJlIHJlYnVpbGRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbmluZGV4IGUwNGRlMDIxNTU5NjYuLjU1ODkzNzg5OTgxODEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NyaW92LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3Jpb3YuY1xuQEAgLTEzNjYsNiArMTM2NiwyMyBAQCBpbnQgaWNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCB1OCAqbWFjKVxuIFx0cmV0dXJuIF9faWNlX3NldF92Zl9tYWMoaWNlX25ldGRldl90b19wZihuZXRkZXYpLCB2Zl9pZCwgbWFjKTtcbiB9XG4gXG4rLyoqXG4rICogaWNlX3NldHVwX3ZmX3RydXN0IC0gRW5hYmxlL2Rpc2FibGUgVkYgdHJ1c3QgbW9kZSB3aXRob3V0IHJlc2V0XG4rICogQHZmOiBWRiB0byBjb25maWd1cmVcbisgKiBAc2V0dGluZzogdHJ1c3Qgc2V0dGluZ1xuKyAqXG4rICogVXBkYXRlIFZGIGZsYWdzIHdoZW4gY2hhbmdpbmcgdHJ1c3Qgd2l0aG91dCBwZXJmb3JtaW5nIGEgVkYgcmVzZXQuXG4rICogVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIGl0J3Mgc2FmZSB0byBza2lwIHRoZSByZXNldCAoVkYgaGFzIG5vIGFkdmFuY2VkXG4rICogZmVhdHVyZXMgY29uZmlndXJlZCB0aGF0IG5lZWQgY2xlYW51cCkuXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX3NldHVwX3ZmX3RydXN0KHN0cnVjdCBpY2VfdmYgKnZmLCBib29sIHNldHRpbmcpXG4re1xuK1x0aWYgKHNldHRpbmcpXG4rXHRcdHNldF9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK1x0ZWxzZVxuK1x0XHRjbGVhcl9iaXQoSUNFX1ZJUlRDSE5MX1ZGX0NBUF9QUklWSUxFR0UsIFx1MDAyNnZmLVx1MDAzZXZmX2NhcHMpO1xuK31cbitcbiAvKipcbiAgKiBpY2Vfc2V0X3ZmX3RydXN0XG4gICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZVxuQEAgLTE0MDEsMTEgKzE0MTgsMTkgQEAgaW50IGljZV9zZXRfdmZfdHJ1c3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmX2lkLCBib29sIHRydXN0ZWQpXG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnZmLVx1MDAzZWNmZ19sb2NrKTtcbiBcbi1cdHdoaWxlICghdHJ1c3RlZCBcdTAwMjZcdTAwMjYgdmYtXHUwMDNlbnVtX21hY19sbGRwKVxuLVx0XHRpY2VfdmZfdXBkYXRlX21hY19sbGRwX251bSh2ZiwgaWNlX2dldF92Zl92c2kodmYpLCBmYWxzZSk7XG4tXG4tXHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbi1cdGljZV9yZXNldF92Zih2ZiwgSUNFX1ZGX1JFU0VUX05PVElGWSk7XG4rXHQvKiBSZXNldCBvbmx5IGlmIHJldm9raW5nIHRydXN0IGFuZCBWRiBoYXMgYWR2YW5jZWQgZmVhdHVyZXMgY29uZmlndXJlZCAqL1xuK1x0aWYgKCF0cnVzdGVkIFx1MDAyNlx1MDAyNlxuK1x0ICAgICh2Zi1cdTAwM2VudW1fbWFjX2xsZHAgXHUwMDNlIDAgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX1VDX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykgfHxcbitcdCAgICAgdGVzdF9iaXQoSUNFX1ZGX1NUQVRFX01DX1BST01JU0MsIHZmLVx1MDAzZXZmX3N0YXRlcykpKSB7XG4rXHRcdHdoaWxlICh2Zi1cdTAwM2VudW1fbWFjX2xsZHApXG4rXHRcdFx0aWNlX3ZmX3VwZGF0ZV9tYWNfbGxkcF9udW0odmYsIGljZV9nZXRfdmZfdnNpKHZmKSwgZmFsc2UpO1xuK1x0XHR2Zi1cdTAwM2V0cnVzdGVkID0gdHJ1c3RlZDtcbitcdFx0aWNlX3Jlc2V0X3ZmKHZmLCBJQ0VfVkZfUkVTRVRfTk9USUZZKTtcbitcdH0gZWxzZSB7XG4rXHRcdHZmLVx1MDAzZXRydXN0ZWQgPSB0cnVzdGVkO1xuK1x0XHRpY2Vfc2V0dXBfdmZfdHJ1c3QodmYsIHRydXN0ZWQpO1xuK1x0fVxuIFx0ZGV2X2luZm8oaWNlX3BmX3RvX2RldihwZiksIFwiVkYgJXUgaXMgbm93ICVzdHJ1c3RlZFxcblwiLFxuIFx0XHQgdmZfaWQsIHRydXN0ZWQgPyBcIlwiIDogXCJ1blwiKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2MvaWdjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5pbmRleCAxNmZjYzhjZjYxOTE5Li4zOTA0M2Q4Y2ExYmY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdjL2lnY19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYy9pZ2NfbWFpbi5jXG5AQCAtNzU4NSwxMSArNzU4NSwxMyBAQCBzdGF0aWMgaW50IF9faWdjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgcnBtKVxuIFx0XHRlcnIgPSBfX2lnY19vcGVuKG5ldGRldiwgdHJ1ZSk7XG4gXHRcdGlmICghcnBtKVxuIFx0XHRcdHJ0bmxfdW5sb2NrKCk7XG4tXHRcdGlmICghZXJyKVxuLVx0XHRcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGVycjtcbitcdG5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGlnY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjM6MTc6MTUuNDU2Njk5Nzc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc2MTM4MDA4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgSW50ZWwgRXRoZXJuZXQgRHJpdmVyIFBhdGNoZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0IHR3ZWFrcyBhIGJ1bmNoIG9mIEludGVsIGV0aGVybmV0IGRyaXZlcnM6IGBpNDBlYCwgYGlhdmZgLCBgaWNlYCwgYW5kIGBpZ2NgLiBJdCdzIGFsbCBmdW5jdGlvbmFsIHN0dWZmIOKAkyBmaXhpbmcgbWVtb3J5IGNvbXBhcmlzb25zLCBtZW1vcnkgbGVha3MsIGFuZCBvcHRpbWl6aW5nIHNvbWUgVkYgdHJ1c3QgY29uZmlndXJhdGlvbnMuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBob3cgZWFzeSBpcyB0aGlzIHRvIHRlc3Q/IEFyZSB0aGVzZSBkcml2ZXJzIGV2ZW4gcmVhY2hhYmxlIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuTGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgaTQwZWAsIGBpYXZmYCwgYGljZWAsIGFuZCBgaWdjYCBhcmUgYWxsICpwaHlzaWNhbCogaGFyZHdhcmUgZHJpdmVycy4gVGhleSdyZSBtZWFudCB0byB3b3JrIHdpdGggYWN0dWFsIEludGVsIEV0aGVybmV0IGhhcmR3YXJlLiBJIGtub3cgUUVNVSBlbXVsYXRlcyBzb21lIEludGVsIE5JQ3Mg4oCTIGBlMTAwMGAsIGBlMTAwMGVgLCBhbmQgYGlnYmAgc3ByaW5nIHRvIG1pbmQuIEJ1dCBkb2VzIFFFTVUgZW11bGF0ZSB0aGUgc3BlY2lmaWMgZGV2aWNlcyB0YXJnZXRlZCBieSB0aGlzIHBhdGNoIHNlcmllcz9cblxuSSBjYW4ndCBpbnN0YW50bHkgc2VhcmNoIFFFTVUgc291cmNlIHJpZ2h0IG5vdywgYnV0IGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IG5vLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBgaTQwZWAsIGBpY2VgLCBvciBgaWdjYCBvdXQgb2YgdGhlIGJveC4gT2theSwgc28gdGhhdOKAmXMgYSBiaWcgXCJub1wiLiBJJ20gcHJldHR5IHN1cmUgYGlhdmZgIGlzIGFsc28gbm90IGVtdWxhdGVkLCBzaW5jZSBpdCdzIGEgVkYgZHJpdmVyLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MgZnVydGhlci4gSXQgaXMgaW50ZXJlc3RpbmcgdG8gbG9vayBpZiBRRU1VIGVtdWxhdGVzIGBpZ2NgLCBidXQgcHJvYmFibHkgbm90LlxuXG5XYWl0LCBhcmUgdGhlc2UgZHJpdmVycyB0aGUga2luZCBvZiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCByZXF1aXJlIGFjdHVhbCBQQ0llIGhhcmR3YXJlPyBZZXMsIHRoZXkgYXJlISBUaGV5J3JlIHN0YW5kYXJkIE5JQyBkcml2ZXJzLCBidXQgdGhleSByZXF1aXJlIHRoZSBwaHlzaWNhbCBjYXJkIHRvIHdvcmsuIFNvLCBldmVuIGlmIFFFTVUgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIHRoZW0sIGNvdWxkIHdlIGZ1enogdGhlbSBzb21laG93PyBTeXprYWxsZXIgaGFzIHNvbWUgUENJIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0aWVzLCBidXQgaXQgdXN1YWxseSByZWxpZXMgb24gZW11bGF0ZWQgZGV2aWNlcy4gTWF5YmUgYHN5cy9saW51eC9zb2NrZXRfbmV0bGlua19nZW5lcmljX2RldmxpbmsudHh0YCBpcyB1c2VmdWwuIEhvd2V2ZXIsIGlmIHRoZSBQQ0kgZGV2aWNlIGlzbid0IHByZXNlbnQsIHRoZSBkcml2ZXIncyBgcHJvYmVgIGZ1bmN0aW9uIHdvbid0IGV2ZW4gYmUgY2FsbGVkLiBUaGUgcGF0Y2ggd291bGQgYmUgdW5yZWFjaGFibGUuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgdmlydHVhbCBvciBlbXVsYXRlZCB3YXlzIHRvIHJlYWNoIHRoZXNlIGNvZGUgcGF0aHM/IGBpYXZmYCBpcyBhbiBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlciwgc28gdGhhdCBjb3VsZCBiZSBwcm9taXNpbmcsIGJ1dCBzdGlsbCB0cmlja3kuIEknZCBuZWVkIHRvIGNvbmZpcm0gd2l0aCB0aGUgc3l6a2FsbGVyIHNldHVwIGlmIHRoZXkgYXJlIHJlYWNoYWJsZSwgd2hpY2ggSSBjYW5ub3Qgd2l0aCB0aGUgdG9vbHMgdGhhdCBJIGhhdmUuIEkgY2Fubm90IHNlYXJjaCBgc3lzL2xpbnV4YCBmb3IgdGhlIGRyaXZlcnMgdXNpbmcgdGhlIGN1cnJlbnQgcHJvbXB0J3MgZnVuY3Rpb25zLiBUaGVzZSBhcmUgc3RhbmRhcmQgUENJIGRyaXZlcnMuXG5cbkdpdmVuIHRoYXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgdGhlbSBhbmQgdGhleSdyZSBtZWFudCBmb3IgcGh5c2ljYWwgaGFyZHdhcmUsIGl0IHNlZW1zIHVubGlrZWx5IHRoYXQgSSBjYW4gcmVhY2ggdGhlc2UgZHJpdmVyIGNoYW5nZXMgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdDRS4gSSBuZWVkIGEgcmVhbCBtYWNoaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjU0OCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQyMzoxNzozMy4wNzA1MDMxNDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3MTMwNTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1PRFVMRV9ERVZJQ0VfVEFCTEVcXFxcKHBjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jPTY1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpNDBlX3BjaV90YmxbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMtMTAzLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYzoxMDQ6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGk0MGVfcGNpX3RibCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYy0xMDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDIzOjE3OjMzLjcwNzY0MTM1OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDU0MTY2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBEcml2ZXIgRnV6emluZyBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgUENJIGRyaXZlcnMgaGVyZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyDigJMgYGk0MGVgLCBgaWNlYCwgYGlhdmZgLCBhbmQgYGlnY2AuIFRoZSBwcm9ibGVtIGlzLCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBhbnkgb2YgdGhlbS4gVGhhdCBpbW1lZGlhdGVseSB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIGZ1enppbmcgcHJvY2VzcywgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiQ2FuIHN5emthbGxlcidzIGBzeXpfcGNpX3NldHVwYCBvciBzb21ldGhpbmcgc2ltaWxhciBzaW11bGF0ZSBQQ0kgY29uZmlnIHNwYWNlIGVub3VnaCB0byBnZXQgdGhlc2UgZHJpdmVycyBwcm9iZWQ/XCIgXG5cblRoZW4gSSByZW1lbWJlcmVkIHRoYXQgc3l6a2FsbGVyICpkb2VzKiBoYXZlIFBDSSBmdXp6aW5nIHN1cHBvcnQhIEl0IHVzZXMgYHN5el9wY2lfc2V0dXBgLCBvciB0aGUgYHZoY2lgLCBvciBzaW1pbGFyIHZpcnR1YWwgbWVjaGFuaXNtcy4gQnV0IGhvbGQgb24sIHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmllcyB0aGF0IHN5emthbGxlcidzIFBDSSBmdXp6aW5nIHJlbGllcyBvbiBhIHZpcnR1YWwgUENJIGhvc3QgYnJpZGdlLCB3aGljaCB0aGVuIGluamVjdHMgUENJIGRldmljZXMuXG5cbk9rYXksIGxldCBtZSBjaGVjayB0aGUgXCJyZWFjaGFibGVcIiBjcml0ZXJpYSBpbiB0aGUgcHJvbXB0LiBBaCwgaGVyZSBpdCBpczogdGhlIHByb21wdCBleHBsaWNpdGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMuLi4gdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuU28sIGFyZSB0aGVzZSBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIFwidmVuZG9yLXNwZWNpZmljXCI/IFdlbGwsIGBpNDBlYCBpcyA0MCBHaWdhYml0LCBgaWNlYCBpcyAxMDAgR2lnYWJpdCAoRTgwMCBzZXJpZXMpLCBhbmQgYGlnY2AgaXMgMi41IEdpZ2FiaXQuIFRoZXkncmUgYWxsIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMuIEFuZCBJICprbm93KiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGVzZSBOSUNzLiBOb3csIHdvdWxkIHN5emthbGxlciBldmVuIGJlIGFibGUgdG8gZ2V0IHRoZW0gZ29pbmc/IE1heWJlLCBidXQgaXQgd291bGQgYmUgcmVhbGx5IHRvdWdoLiBJdCdzIHVubGlrZWx5IHRoYXQgc3l6a2FsbGVyIGNvdWxkIGdldCBwYXN0IHRoZWlyIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHNpbmNlIHRoZXkgcmVxdWlyZSBmaXJtd2FyZSwgcmVhZCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMsIG9yIHJlcXVpcmUgdmFsaWQgTUFDIGFkZHJlc3NlcyBmcm9tIEVFUFJPTSwgd2hpY2ggd291bGQgYWxsIGJlIGFic2VudCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEZvciBpbnN0YW5jZSwgYGk0MGVgIGRlbWFuZHMgZmlybXdhcmUgKEFkbWluUSkuIEEgYmFzaWMgUENJIGZ1enplciBpcyBqdXN0IGdvaW5nIHRvIGZhaWwgYXQgdGhlIGBpNDBlX3Byb2JlYCBzdGFnZSBiZWNhdXNlIGl0J3MgZXhwZWN0aW5nIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGZpcm13YXJlLiBTYW1lIHdpdGggYGljZWAgYW5kIGBpYXZmYC5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBidXQgUUVNVSBkb2Vzbid0IGVtdWxhdGUgYGlnY2AsIGl0IGhhcyBhZGRlZCBgaWdiYCAoSW50ZWwgODI1NzYpLiBOb3QgYGlnY2AgKEludGVsIEkyMjUpLiBBbmQgaXQgYWxzbyBkb2Vzbid0IGVtdWxhdGUgYGk0MGVgIG9yIGBpY2VgLiBJdCBkb2VzIGVtdWxhdGUgb3RoZXIgTklDcywgbGlrZSBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGV0Yy5cblxuVGhlIGJvdHRvbSBsaW5lIGlzIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyBhcmUgaW4gcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgbWVhbnMgdGhlIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgZW11bGF0aW9uLiBUaGVyZWZvcmUsIEkgd2lsbCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIE15IHJlYXNvbmluZyBpcyBzaW1wbGU6IHRoZXNlIGFyZSBwaHlzaWNhbCBQQ0llIE5JQyBkcml2ZXJzIChgaTQwZWAsIGBpYXZmYCwgYGljZWAsIGBpZ2NgKSB0aGF0IG5lZWQgaGFyZHdhcmUgbm90IGZvdW5kIGluIHN0YW5kYXJkIFFFTVUsIG1ha2luZyB0aGVtIHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDY0MywiT3V0cHV0VG9rZW5zIjoxMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMjM6MTc6NDYuNzYxODA5OTA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJbnRlbCBFdGhlcm5ldCBkcml2ZXJzIChpNDBlLCBpYXZmLCBpY2UsIGlnYykuIFRoZXNlIGFyZSBkcml2ZXJzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBGdXJ0aGVybW9yZSwgdGhlc2UgZHJpdmVycyB0eXBpY2FsbHkgcmVxdWlyZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIGZpcm13YXJlIChlLmcuLCBBZG1pblEpIGR1cmluZyBwcm9iZSwgbWVhbmluZyB0aGV5IGNhbm5vdCBiZSBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgb3IgcmVhY2hlZCB2aWEgZ2VuZXJpYyBQQ0kgZnV6emluZyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSW50ZWwgRXRoZXJuZXQgZHJpdmVycyAoaTQwZSwgaWF2ZiwgaWNlLCBpZ2MpLiBUaGVzZSBhcmUgZHJpdmVycyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRnVydGhlcm1vcmUsIHRoZXNlIGRyaXZlcnMgdHlwaWNhbGx5IHJlcXVpcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBoYXJkd2FyZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW5RKSBkdXJpbmcgcHJvYmUsIG1lYW5pbmcgdGhleSBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIG9yIHJlYWNoZWQgdmlhIGdlbmVyaWMgUENJIGZ1enppbmcgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowg676x[1] Phase: Running StartedAt: 2026-08-04 23:17:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg676x[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 23:17:58 +0000 UTC FinishedAt: 2026-08-04 23:18:01 +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,}