Name: series-workflowx2kgq Phase: Failed StartedAt: 2026-07-09 17:20:32 +0000 UTC FinishedAt: 2026-07-09 17:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2kgq[0] Phase: Succeeded StartedAt: 2026-07-09 17:20:32 +0000 UTC FinishedAt: 2026-07-09 17:52:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2kgq[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 17:20:33 +0000 UTC FinishedAt: 2026-07-09 17:52:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBNRElPIGRldmljZS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU1ZDI2YTc2MjA0NzdlMjRmZjFlZWZkZjBmY2E1Yjc5NDg5NWUzNTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE3OjUxOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gXG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcJiMzNDtcbiYjNDM7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wmIzM0O1xuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wmIzM0O1xuQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwxNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuJiM0MztcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuJiM0MztcdCAgY2hpcC5cbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4mIzQzO1x0Ym9vbCBcJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwmIzM0O1xuJiM0MztcdGRlZmF1bHQgeVxuJiM0MztcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuJiM0MztcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDUgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uNTUzZWZhY2Q0ZjVlZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyAmIzQzOzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt5dDkyMXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCYjMzQ7LCByZXMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICYjNDM7NDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDU1NTA0NjUyNjY2OTUyLi42NTcwYWU1OTAyYWRlYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC04NTAsOCAmIzQzOzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXHRcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cdFx0OFxuIFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4mIzQzO1xuIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0MTFcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9NQ1VcdFx0MTBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuIFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG5AQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDY3NDliNTdmZWUzY2Rcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICYjNDM7MSw2MzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChncm91cCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbiYjNDM7XHRib29sIHVzZV9jeWNsZTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4mIzQzO1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuJiM0MztcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4mIzQzO1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuJiM0MztcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4mIzQzO1x0XHRcdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbiYjNDM7XHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdGlmICh2YWwgIT0gY3RybCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4mIzQzO1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4mIzQzO1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbiYjNDM7XHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4mIzQzO1x0XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmZsYWdzcCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuJiM0MztcdFx0XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2ZHAtXHUwMDNldXNlci1cdTAwM2VkZXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcbiYjNDM7XHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4mIzQzO1x0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICppbnZfbWFza3AsIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0aW50IHBvbGFyaXR5O1xuJiM0MztcdHUzMiBncm91cDtcbiYjNDM7XHRib29sIG9uO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O05vIExFRHMgZm9yIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNmdyb3VwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwmIzM0OywgZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcbiYjNDM7XHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1oaWdoXCYjMzQ7KTtcbiYjNDM7XHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWxvd1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0R1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwb3J0LCBncm91cCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4mIzQzO1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4mIzQzO1xuJiM0MztcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcdTAwMjZvbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzID0gb247XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gXCYjMzQ7bmV0ZGV2XCYjMzQ7O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXCYjMzQ7LSV1OiUwMmQ6JTAydVwmIzM0OyxcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWRzLmluZGV4LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbiYjNDM7XHRcdC5md25vZGUgPSBmd25vZGUsXG4mIzQzO1x0XHQuZGV2aWNlbmFtZSA9IG5hbWUsXG4mIzQzO1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuJiM0MztcdH07XG4mIzQzO1x0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFx1MDAyNmluaXRfZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocG9sYXJpdHkpIHtcbiYjNDM7XHRcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRcdCppbnZfbWFza3AgfD0gYml0O1xuJiM0MztcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuJiM0MztcdFx0XHQqaW52X2N0cmxwIHw9IGJpdDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChsZWQpXG4mIzQzO1x0XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChsZWQpIHtcbiYjNDM7XHRcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIGludl9jdHJsID0gMDtcbiYjNDM7XHR1MzIgaW52X21hc2sgPSAwO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcbiYjNDM7XHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkcC1cdTAwM2VkbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2aW52X21hc2ssIFx1MDAyNmludl9jdHJsKTtcbiYjNDM7XHRcdFx0aWYgKHJlcykge1xuJiM0MztcdFx0XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZW5kO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuJiM0MztcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGludl9tYXNrKVxuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnZfY3RybCk7XG4mIzQzO1xuJiM0MztlbmQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX0xFRFNfSFxuJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICYjNDM7IDE4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxNikpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuJiM0MztcbiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4mIzQzO1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlOjE7XG4mIzQzO1x0Ym9vbCB1c2VfZHV0eToxO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7XG4mIzQzOyNlbHNlXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICYjNDM7MSwxNTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbiYjNDM7XHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4mIzQzO1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4mIzQzO1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0KnZhbHAgPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdHUzMiB2O1xuJiM0MztcdHUzMiB1O1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0dSA9IHY7XG4mIzQzO1x0dSBcdTAwMjY9IH5tYXNrO1xuJiM0MztcdHUgfD0gdmFsO1xuJiM0MztcdGlmICh1ID09IHYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdHUgfD0gdmFsc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX1NNSV9IXG4mIzQzOyNkZWZpbmUgX1lUX1NNSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWwpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4mIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4mIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbiYjNDM7e1xuJiM0MztcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBNRElPIGRldmljZS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTVkMjZhNzYyMDQ3N2UyNGZmMWVlZmRmMGZjYTViNzk0ODk1ZTM1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTc6NTE6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06CURhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAotRjoJZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qCiYjNDM7RjoJZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8KIEY6CW5ldC9kc2EvdGFnX3l0OTIxeC5jCiAKIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwppbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjAKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnJiMzNDsKIAomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyYjMzQ7CiYjNDM7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWcmIzM0OwogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZyYjMzQ7CkBAIC0xNTgsMTIgJiM0MzsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1CiAJICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlcgogCSAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS4KLQotY29uZmlnIE5FVF9EU0FfWVQ5MjFYCi0JdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwotCXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKLQlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKLQkgIGNoaXAuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogb2JqLXkJCQkJJiM0Mzs9IGI1My8KIG9iai15CQkJCSYjNDM7PSBoaXJzY2htYW5uLwogb2JqLXkJCQkJJiM0Mzs9IGxhbnRpcS8KIG9iai15CQkJCSYjNDM7PSBtaWNyb2NoaXAvCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1vdG9yY29tbS8KIG9iai15CQkJCSYjNDM7PSBtdjg4ZTZ4eHgvCiBvYmoteQkJCQkmIzQzOz0gbXhsODYyeHgvCiBvYmoteQkJCQkmIzQzOz0gbmV0Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwomIzQzOwlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCiYjNDM7CXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCiYjNDM7CSAgY2hpcC4KJiM0MzsKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEUwomIzQzOwlib29sICYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTUmIzM0OwomIzQzOwlkZWZhdWx0IHkKJiM0MzsJZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWAomIzQzOwlkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlCiYjNDM7CSAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDUgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0MztvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwomIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAubwomIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vCiYjNDM7eXQ5MjF4LW9ianMgJiM0Mzs9IHNtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ3ODYsNiAmIzQzOzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxuJiMzNDssIHJlcyk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4ODYsNiAmIzQzOzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKIAkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSBZVDkyMVhfQUNMX05VTQkJKFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspCiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNCQk4CiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNCTMKJiM0MzsKIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqLwotI2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVCQkxMAomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwogCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgJmx0OyA4KQogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCAmbHQ7PSAocG9ydCkgJmFtcDsmYW1wOyAocG9ydCkgJmx0OyA5KQpAQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHsKIAlzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7CiAJdTY0IHJ4X2ZyYW1lczsKIAl1NjQgdHhfZnJhbWVzOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5OwomIzQzOwl1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7CiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Njc0OWI1N2ZlZTNjZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCkBAIC0wLDAgJiM0MzsxLDYzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bGVkcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldikKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLSZndDtwb3J0KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS0mZ3Q7aW5kZXhdKQomIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktJmd0O2RzLmRldikKJiM0MzsKJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGdyb3VwKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqb25wID0gKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT0KJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDoKJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLAomIzQzOwkJCQkgICAgICBjdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbiwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCwKJiM0MzsJCQl1bnNpZ25lZCBjaGFyICpkdXR5cCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNiksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNCksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMyksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMiksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV91cHBlcjsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHlfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5OwomIzQzOwomIzQzOwljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYOwomIzQzOwljeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICYjNDM7IDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi8KJiM0MzsJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCAmYW1wO2N5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlmb3IgKDsgY3ljbGUgJmd0OyBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgJmd0OyZndDs9IDEsIGN5Y2xlICZndDsmZ3Q7PSAxKQomIzQzOwkJaWYgKGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlciAmZ3Q7Jmd0OyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkqY3ljbGVwID0gY3ljbGU7CiYjNDM7CiYjNDM7CWR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICoKJiM0MzsJCQkJICAgICAob24gJmd0OyBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pCiYjNDM7CQlpZiAoaSA9PSAwIHx8IGR1dHlfcmVxICZndDs9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikgewomIzQzOwkJCWR1dHkgPSBkdXR5c1tpXTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJaWYgKG9uICZndDsgb2ZmKQomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7CiYjNDM7CSpkdXR5cCA9IGR1dHk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZHV0eTsKJiM0MzsJYm9vbCB1c2VfY3ljbGU7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKCEqb25wICZhbXA7JmFtcDsgISpvZmZwKSB7CiYjNDM7CQljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmIChpICE9IGdyb3VwICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0gJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpIHsKJiM0MzsJCQkJZHV0eSA9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlib29sIGNoYW5nZV9jeWNsZTsKJiM0MzsJCWJvb2wgY2hhbmdlX2R1dHk7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQljaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgJmFtcDsmYW1wOyBjeWNsZSAhPSBwcC0mZ3Q7bGVkX2N5Y2xlOwomIzQzOwkJY2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCWlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpCiYjNDM7CQkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsKJiM0MzsJCQkgICAgIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChpID09IGdyb3VwIHx8ICFwcC0mZ3Q7bGVkc1tpXSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoKGNoYW5nZV9jeWNsZSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfY3ljbGUpIHx8CiYjNDM7CQkJCSAgICAoY2hhbmdlX2R1dHkgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpKQomIzQzOwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwlpZiAodmFsICE9IGN0cmwpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlzd2l0Y2ggKGR1dHkgJmd0Oz0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoZHV0eSAmbHQ7IFlUOTIxWF9MRURfRFVUWSgxLCAyKSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CWlmICh1c2VfY3ljbGUpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpOwomIzQzOwl9CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHwKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7CiYjNDM7CWVsc2UKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gdXNlX2N5Y2xlOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJcHAtJmd0O2xlZF9jeWNsZSA9IGN5Y2xlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gdHJ1ZTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5ID0gZHV0eTsKJiM0MzsKJiM0MzsJKm9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTsKJiM0MzsJKm9mZnAgPSBjeWNsZSAtICpvbnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBtYXNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7CiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkJCWludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICghZmxhZ3MpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmICgodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPQomIzQzOwkgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7CiYjNDM7CQkqZmxhZ3NwID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChncm91cCAhPSAyKSB7CiYjNDM7CQlhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmZsYWdzcCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgodmFsICZhbXA7IG1hcC0mZ3Q7bWFzaykgPT0gbWFwLSZndDttYXNrKQomIzQzOwkJCSpmbGFnc3AgfD0gbWFwLSZndDtmbGFnczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgbWFwLSZndDtmbGFncykgPT0gbWFwLSZndDtmbGFncykgewomIzQzOwkJCWZsYWdzICZhbXA7PSB+bWFwLSZndDtmbGFnczsKJiM0MzsJCQljdHJsIHw9IG1hcC0mZ3Q7bWFzazsKJiM0MzsJCQlpZiAoIWZsYWdzKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NOwomIzQzOwlpZiAoZ3JvdXAgPT0gMikgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwl9CiYjNDM7CWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLAomIzQzOwkJCQkJICAgICBtYXNrLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGJyaWdodG5lc3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAomIzQzOwkJICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGRlbGF5X29uLAomIzQzOwkJCQkgICBkZWxheV9vZmYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CiYjNDM7CWRwID0gZHNhX3RvX3BvcnQoJmFtcDtwcml2LSZndDtkcywgcHAtJmd0O2luZGV4KTsKJiM0MzsJaWYgKCFkcCB8fCAhZHAtJmd0O3VzZXIpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuICZhbXA7ZHAtJmd0O3VzZXItJmd0O2RldjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsKJiM0MzsJaWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzcCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICppbnZfbWFza3AsIHUzMiAqaW52X2N0cmxwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhOwomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjsKJiM0MzsJY2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTsKJiM0MzsJZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZDsKJiM0MzsJYm9vbCBmb3JjZV9oaWdoOwomIzQzOwlib29sIGZvcmNlX2xvdzsKJiM0MzsJaW50IHBvbGFyaXR5OwomIzQzOwl1MzIgZ3JvdXA7CiYjNDM7CWJvb2wgb247CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7Tm8gTEVEcyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtncm91cCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlpZiAoZ3JvdXAgJmd0Oz0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxuJiMzNDssIGdyb3VwLCBwb3J0KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmIChwcC0mZ3Q7bGVkc1tncm91cF0pCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJZm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1oaWdoJiMzNDspOwomIzQzOwlmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtbG93JiMzNDspOwomIzQzOwlpZiAoZm9yY2VfaGlnaCAmYW1wOyZhbXA7IGZvcmNlX2xvdykgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIGdyb3VwKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7CiYjNDM7CiYjNDM7CWxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbGVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWxlZC0mZ3Q7cG9ydCA9IHBwOwomIzQzOwlsZWQtJmd0O2dyb3VwID0gZ3JvdXA7CiYjNDM7CiYjNDM7CXN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PRkY6CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PTjoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJbGVkX2NkZXYgPSAmYW1wO2xlZC0mZ3Q7Y2RldjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3MgPSBvbjsKJiM0MzsJbGVkX2NkZXYtJmd0O21heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJbGVkX2NkZXYtJmd0O2ZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7CiYjNDM7CWxlZF9jZGV2LSZndDtibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7CiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSAmIzM0O25ldGRldiYjMzQ7OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FICYjMzQ7LSV1OiUwMmQ6JTAydSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2RzLmluZGV4LCBwb3J0LCBncm91cCk7CiYjNDM7CWluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7CiYjNDM7CQkuZndub2RlID0gZndub2RlLAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCXUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpOwomIzQzOwomIzQzOwkJKmludl9tYXNrcCB8PSBiaXQ7CiYjNDM7CQlpZiAocG9sYXJpdHkgJmd0OyAwKQomIzQzOwkJCSppbnZfY3RybHAgfD0gYml0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IFlUOTIxWF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwomIzQzOwkJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwomIzQzOwkJCWlmIChsZWQpCiYjNDM7CQkJCWRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCAmYW1wO2xlZC0mZ3Q7Y2Rldik7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQkJaWYgKGxlZCkgewomIzQzOwkJCQlwcC0mZ3Q7bGVkc1tncm91cF0gPSBOVUxMOwomIzQzOwkJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXUzMiBpbnZfY3RybCA9IDA7CiYjNDM7CXUzMiBpbnZfbWFzayA9IDA7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJCWlmICghbGVkc19ucCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJCXJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwKJiM0MzsJCQkJCSAgICAgICBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksCiYjNDM7CQkJCQkgICAgICAgJmFtcDtpbnZfbWFzaywgJmFtcDtpbnZfY3RybCk7CiYjNDM7CQkJaWYgKHJlcykgewomIzQzOwkJCQlvZl9ub2RlX3B1dChsZWRzX25wKTsKJiM0MzsJCQkJZ290byBlcnI7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47CiYjNDM7CWN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsKJiM0MzsJLyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy4KJiM0MzsJICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy4KJiM0MzsJICovCiYjNDM7CWlmIChpbnZfbWFzaykKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzaywKJiM0MzsJCQkJCSAgICAgaW52X2N0cmwpOwomIzQzOwomIzQzO2VuZDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJeXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOCQkJQklUKDIxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00JR0VOTUFTSygyMCwgMTkpCS8qIGN5Y2xlID0gNTEyICogeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00JCUdFTk1BU0soMTYsIDEzKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTQkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCkJCSgweGQwMDA0ICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTcsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTCUJJVCgxNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESQlCSVQoMTYpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KQkJKDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00JCUdFTk1BU0soMzEsIDMwKQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTQkJR0VOTUFTSygyOSwgMjgpCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUAlCSVQoMjcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00JCUdFTk1BU0soMjYsIDI1KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzMJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KQkJKDB4ZDAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycCkJCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE5LCA0ICogKGdycCkgJiM0MzsgMTgpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE3LCA0ICogKGdycCkgJiM0MzsgMTYpCS8qIGN5Y2xlID0gNTEyICZsdDsmbHQ7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE2KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LCQlCSVQoMTUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOSwlCSVQoMTQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LCUJJVCgxMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTAlCSVQoMTIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYJQklUKDExKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LCQlCSVQoMTApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTksJCUJJVCg5KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYCQlCSVQoOCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWAkJQklUKDcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0JCUJJVCg2KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0JCUJJVCg1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTQkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LCUJJVCgzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LCUJJVCgyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTksJQklUKDEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkwJCTB4ZDAxMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOSwkJR0VOTUFTSygyNSwgMjQpCS8qIGRlbGF5PyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPVwkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00JCUdFTk1BU0soMSwgMCkJLyogI2dycCAtIDEgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpCSgweGQwMTA0ICYjNDM7IDggKiAoMiAtIChncnApKSAmIzQzOyA0ICogKChwb3J0KSAvIDUpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFMJCTB4ZDAxYzQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVgkJMHhkMDFjOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpCUJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydCkJKDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyA1LCA2ICogKGdycCkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyAxLCA2ICogKGdycCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkpKQomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU4JNjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGCTUxMgomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVgJMjA0OAomIzQzOwomIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTQkJMjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKQkoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGdyb3VwOwomIzQzOwomIzQzOwlib29sIHVzZV9jeWNsZToxOwomIzQzOwlib29sIHVzZV9kdXR5OjE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzOwomIzQzOyNlbHNlCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwpAQCAtMCwwICYjNDM7MSwxNTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7d3JpdGUocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAomIzQzOwkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKJiM0MzsJCQkJWVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsCiYjNDM7CQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqdmFscCA9IHZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwl1MzIgdjsKJiM0MzsJdTMyIHU7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwl1ID0gdjsKJiM0MzsJdSAmYW1wOz0gfm1hc2s7CiYjNDM7CXUgfD0gdmFsOwomIzQzOwlpZiAodSA9PSB2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCiYjNDM7CQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksICZhbXA7dmFsc1tpXSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQl1IHw9IHZhbHNbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaApAQCAtMCwwICYjNDM7MSw4OCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX1NNSV9ICiYjNDM7I2RlZmluZSBfWVRfU01JX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywKJiM0MzsJCQkgICB1MzIgdmFsKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLgomIzQzOyAqCiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwomIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS4KJiM0MzsgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CSpsbyAmYW1wOz0gfmxvd2VyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7CiYjNDM7CSpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IExFRCBTdXBwb3J0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHNwZWNpZmljYWxseSBhZGRpbmcgZmlsZXMgbGlrZSBgbGVkcy5jYCwgYGxlZHMuaGAsIGBzbWkuY2AsIGBzbWkuaGAsIGFuZCB0aGVuIHVwZGF0aW5nIGBjaGlwLmNgLCBgY2hpcC5oYCwgYEtjb25maWdgLCBhbmQgYE1ha2VmaWxlYC4gVGhlIGNvcmUgb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTYC4gU28sIGl0JiMzOTtzIGEgaGFyZHdhcmUgZHJpdmVyLCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlciBzcGVjaWZpY2FsbHksIGZvciB0aGlzIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIENhbiBJIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IERTQSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gc3BlY2lmaWMgc3dpdGNoIGNoaXBzLCB0eXBpY2FsbHkgbmVlZCB0aGUgcmVhbCBoYXJkd2FyZSBvciBhIHJlYWxseSBnb29kIGVtdWxhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGRyaXZlciBnZXRzIGluaXRpYWxpemVkIOKAkyBEU0EgZHJpdmVycyB1c3VhbGx5IHByb2JlIHRocm91Z2ggdGhlIGRldmljZSB0cmVlIG9yIHRoZSBNRElPIGJ1cy4gU28sIHdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgTURJTyBwcm9iZSB3aWxsIGp1c3QgZmFpbCwgYW5kIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gYmUgaW5pdGlhbGl6ZWQsIHJpZ2h0PwoKSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgc3dpdGNoLiBQcm9iYWJseSBub3QsIGJ1dCBpdCYjMzk7cyB3b3J0aCBhIGNoZWNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHBhdGggdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgd2l0aG91dCB0aGUgaGFyZHdhcmUuCgpMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCBhbmQgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBwcm9iZS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcHJvYmUgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGRyaXZlciYjMzk7cyBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE4OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB5dDkyMXhfbWRpb19wcm9iZWAgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWU6CgoqKkRpc3NlY3RpbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvciBzZXR1cCBvZiBzb21ldGhpbmcgcmVsYXRlZCB0byBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgeXQ5MjF4YCBkZXZpY2UuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IE1ESU8gaXMgdXN1YWxseSBob3cgdGhlIHN5c3RlbSB0YWxrcyB0byBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBvdGhlciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgY29tcG9uZW50cy4gU28sIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmUgcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlOiBkZXRlY3RpbmcgdGhlIFBIWSwgY29uZmlndXJpbmcgaXRzIHJlZ2lzdGVycywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBvciBpbnRlcnJ1cHQgbGluZXMgZm9yIGNvbW11bmljYXRpb24sIGFuZCBmaW5hbGx5LCBnZXR0aW5nIHRoZSBkZXZpY2UgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0IGRvZXMgdGhvc2UgdGhpbmdzLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcxODpcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuNDcxOTpcdHtcbjQ3MjA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuNDcyMTpcdFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbjQ3MjI6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbjQ3MjM6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbjQ3MjQ6XHRcbjQ3MjU6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbjQ3MjY6XHRcdGlmICghcHJpdilcbjQ3Mjc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NzI4Olx0XG40NzI5Olx0XHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XG40NzMwOlx0XHRpZiAoIW1kaW8pXG40NzMxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDczMjpcdFxuNDczMzpcdFx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjQ3MzQ6XHRcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbjQ3MzU6XHRcdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuNDczNjpcdFxuNDczNzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ3Mzg6XHRcbjQ3Mzk6XHRcdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG40NzQwOlx0XHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuNDc0MTpcdFxuNDc0MjpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG40NzQzOlx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDc0NDpcdFxuNDc0NTpcdFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG40NzQ2Olx0XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuNDc0NzpcdFx0fVxuNDc0ODpcdFxuNDc0OTpcdFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuNDc1MDpcdFx0ZHMtXHUwMDNlZGV2ID0gZGV2O1xuNDc1MTpcdFx0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuNDc1MjpcdFx0ZHMtXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbjQ3NTM6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuNDc1NDpcdFx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xuNDc1NTpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG40NzU2Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcbjQ3NTc6XHRcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XG40NzU4Olx0XHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xuNDc1OTpcdFx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xuNDc2MDpcdFxuNDc2MTpcdFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcbjQ3NjI6XHRcbjQ3NjM6XHRcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbjQ3NjQ6XHR9XG40NzY1Olx0XG40NzY2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XG40NzY3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzExCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gRHJpdmVyIEFzc2Vzc21lbnQ6IFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBhbiBNRElPIGRldmljZSBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIFRoZSBNRElPIGJ1cyB3b24mIzM5O3QgZGV0ZWN0IHRoZSBkZXZpY2UsIGFuZCB0aGUgcHJvYmUgZnVuY3Rpb24gZWl0aGVyIHdvbiYjMzk7dCBiZSBjYWxsZWQsIG9yIGlmIGl0IGlzIChzYXksIHRocm91Z2ggYSBkZXZpY2UgdHJlZSBvdmVybGF5KSwgYW55IGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgdG8gTURJTyByZWdpc3RlcnMgd2lsbCBmYWlsIG9yIHRpbWUgb3V0LgoKSSBzdGFydCB0byBjb25zaWRlciBpZiBmdXp6aW5nIGlzIGV2ZW4gYSB2YWxpZCBhcHByb2FjaCBoZXJlLiBUeXBpY2FsbHksIGRyaXZlcnMgdGhhdCBhcmUgaGVhdmlseSBoYXJkd2FyZS1kZXBlbmRlbnQgYXJlbiYjMzk7dCBmdXp6ZWQgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSDigJMgdGhpbmsgYG1hYzgwMjExX2h3c2ltYCBvciBzb21ldGhpbmcgc2ltaWxhciBmb3Igb3RoZXIgaGFyZHdhcmUuIEluIHJhcmUgY2FzZXMsIHdlIGNhbiBzb21ldGltZXMgaW5zdGFudGlhdGUgYSBkZXZpY2UgYW5kIGNvdmVyIGEgZGVjZW50IGFtb3VudCBvZiBjb2RlIGV2ZW4gd2l0aG91dCB0aGUgaGFyZHdhcmUgcHJlc2VudC4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBmb3IgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSBhZGRpbmcgTEVEIHN1cHBvcnQgdG8gYSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGUgTEVEIGNvZGUgdXNlcyBgeXQ5MjF4X3JlZ19yZWFkYCBhbmQgYHl0OTIxeF9yZWdfd3JpdGVgLCB3aGljaCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGVzZSB3aWxsIGZhaWwsIG9yIGlmIHdlIHRyeSB0byBtb2NrIHRoZW0sIHRoZSByZXN1bHRpbmcgbG9naWMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHNwZWNpZmljIGhhcmR3YXJlIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIHRoYXTigJlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFNpbmNlIHRoaXMgaXMgZm9yIGEgc3BlY2lmaWMgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgYW5kIGFzIGZhciBhcyBJIGtub3csIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBjaGlwIGluIHRoZSBMaW51eCBrZXJuZWwgb3IgYW55d2hlcmUgZWxzZSwgdGhlIGNvZGUgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTbywgYmFzZWQgb24gdGhhdCwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBhdmFpbGFibGUgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbD0yND1wcm9wZXJ0aWVzOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI1LSAgY29tcGF0aWJsZTpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDoyNjogICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0yNy1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw9NTk9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTY3LSAgICAgICAgc3dpdGNoQDFkIHtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo2ODogICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC02OS0gICAgICAgICAgICAvKiBkZWZhdWx0IDB4MWQsIGFsdGVybmF0ZSAweDAgKi9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2NzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzY4LVx0e31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyMAoJCQkJCQkJb3V0cHV0OiA5NAoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYW4gZW11bGF0aW9uIGxheWVyOyBpdCYjMzk7cyBhIGRpcmVjdCBoYXJkd2FyZSBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUgdW50ZXN0YWJsZSB3aXRoIGZ1enppbmcuCgpUaGUgZHJpdmVyIHByb3ZpZGVzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCDigJMgYSB2ZXJ5IHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlLiBJdCYjMzk7cyBhbiBNRElPIGRldmljZSwgbWVhbmluZyBpdCB0YWxrcyBkaXJlY3RseSB0byB0aGUgaGFyZHdhcmUuIEFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhpcyBjaGlwIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIGNvZGUgc2ltcGx5IHdvbiYjMzk7dCBiZSByZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgcnVucyBpbiB0aG9zZSB2aXJ0dWFsaXplZCBzZXR1cHMuCgpMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZHJpdmVyIGRvZXNuJiMzOTt0IHRvdWNoIGFueSBnZW5lcmljIGNvZGUuIEFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgTUFJTlRBSU5FUlNgLCBgZHJpdmVycy9uZXQvZHNhL0tjb25maWdgLCBgZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlYCwgdGhlIGBtb3RvcmNvbW1gIGRpcmVjdG9yeSYjMzk7cyBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAsIGFuZCB0aGVuIHRoZSByZW5hbWVkIGRyaXZlciBzb3VyY2UgZmlsZXM6IGBjaGlwLmNgLCBgY2hpcC5oYCwgYGxlZHMuY2AsIGBsZWRzLmhgLCBgc21pLmNgLCBgc21pLmhgLiBUaGlzIGlzIGFsbCBjb25maW5lZCB0byB0aGUgWVQ5MjE1IHN3aXRjaCBhbmQgaXRzIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCgpTbywgKmRlZmluaXRlbHkqIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIE1ESU8gZGV2aWNlLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgY2hpcCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gTURJTyBkZXZpY2UuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBjaGlwIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo0OS41MTU1OTA3NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ2NzQwOTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIE1ESU8gZGV2aWNlLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgY2hpcCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo0OS41MTU2MDcxMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzIwMzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1ZDI2YTc2MjA0NzdlMjRmZjFlZWZkZjBmY2E1Yjc5NDg5NWUzNTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxNzo1MTo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyMzAsNyArMTgyMzAsNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiBcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuK1xcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1xcXCJcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcXFwiXFxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcXG4gXFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxcbiBcXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXFxuLVxcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4tXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbi1cXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbi1cXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfaHNyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5AQCAtMjYsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxcS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ5dDkyMXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbiBcXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIFxcdHt9XFxuIH07XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuLVxcbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbiAgKlxcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuIFxcdHJldHVybiAoYWRkcls0XSBcXHUwMDNjXFx1MDAzYyA4KSB8IGFkZHJbNV07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXdyaXRlKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbi17XFxuLVxcdHUzMiB2YWw7XFxuLVxcdGludCByZXM7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4tXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4tXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuLVxcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0KnZhbHAgPSB2YWw7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXHR1MzIgdjtcXG4tXFx0dTMyIHU7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHR1ID0gdjtcXG4tXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4tXFx0dSB8PSB2YWw7XFxuLVxcdGlmICh1ID09IHYpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbi19XFxuLVxcbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuLSAqXFxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuLXtcXG4tXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuLVxcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXFx1MDAyNnZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4tXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHR1IHw9IHZhbHNbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuKyNlbmRpZlxcbitcXG4gXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuc2ltaWxhcml0eSBpbmRleCA5OSVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5pbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDggKzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdDExXFxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXFx0XFx0MTBcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbiBcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCBcXHUwMDNjPSAocG9ydCkgXFx1MDAyNlxcdTAwMjYgKHBvcnQpIFxcdTAwM2MgOSlcXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XFxuIFxcdHU2NCByeF9mcmFtZXM7XFxuIFxcdHU2NCB0eF9mcmFtZXM7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xcbitcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Njc0OWI1N2ZlZTNjZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xcbkBAIC0wLDAgKzEsNjMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VsZWRzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuK1xcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVxcdTAwM2Vwb3J0KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXFx1MDAzZWluZGV4XSlcXG4rI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cXHUwMDNlZHMuZGV2KVxcbitcXG4rc3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxcbit7XFxuK1xcdHN3aXRjaCAoZ3JvdXApIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Km9ucCA9ICh2YWwgXFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBjdHJsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICpkdXR5cClcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0ge1xcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDMpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHlfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5O1xcbitcXG4rXFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDtcXG4rXFx0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiArIDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi9cXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGZvciAoOyBjeWNsZSBcXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZT0gMSwgY3ljbGUgXFx1MDAzZVxcdTAwM2U9IDEpXFxuK1xcdFxcdGlmIChjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdCpjeWNsZXAgPSBjeWNsZTtcXG4rXFxuK1xcdGR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICpcXG4rXFx0XFx0XFx0XFx0ICAgICAob24gXFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXFxuK1xcdFxcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXFx1MDAzZT0gKGR1dHlzW2kgLSAxXSArIGR1dHlzW2ldKSAvIDIpIHtcXG4rXFx0XFx0XFx0ZHV0eSA9IGR1dHlzW2ldO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRpZiAob24gXFx1MDAzZSBvZmYpXFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xcbitcXHQqZHV0eXAgPSBkdXR5O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1bnNpZ25lZCBzaG9ydCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgY2hhciBkdXR5O1xcbitcXHRib29sIHVzZV9jeWNsZTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0aWYgKCEqb25wIFxcdTAwMjZcXHUwMDI2ICEqb2ZmcCkge1xcbitcXHRcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpKyspXFxuK1xcdFxcdFxcdGlmIChpICE9IGdyb3VwIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpIHtcXG4rXFx0XFx0XFx0XFx0ZHV0eSA9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRib29sIGNoYW5nZV9jeWNsZTtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfZHV0eTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcXHUwMDI2Y3ljbGUsIFxcdTAwMjZkdXR5KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGN5Y2xlIFxcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBjeWNsZSAhPSBwcC1cXHUwMDNlbGVkX2N5Y2xlO1xcbitcXHRcXHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxcbitcXHRcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNO1xcbitcXHRcXHRcXHQgICAgIGkrKykge1xcbitcXHRcXHRcXHRcXHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXFx1MDAzZWxlZHNbaV0pXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRcXHRpZiAoKGNoYW5nZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2N5Y2xlKSB8fFxcbitcXHRcXHRcXHRcXHQgICAgKGNoYW5nZV9kdXR5IFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0aWYgKHZhbCAhPSBjdHJsKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0c3dpdGNoIChkdXR5IFxcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChkdXR5IFxcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRpZiAodXNlX2N5Y2xlKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XFxuK1xcdH1cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XFxuK1xcdFxcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0cHAtXFx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcXG4rXFxuK1xcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XFxuK1xcdCpvZmZwID0gY3ljbGUgLSAqb25wO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1MzIgbWFzaztcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tdID0ge1xcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxcbitcXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRn0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfUlgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS30sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxcbitcXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sXFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdGlmICghZmxhZ3MpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgbWFwLVxcdTAwM2VmbGFncykgPT0gbWFwLVxcdTAwM2VmbGFncykge1xcbitcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+bWFwLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGlmICgodmFsIFxcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9XFxuK1xcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcXG4rXFx0XFx0KmZsYWdzcCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFxcdTAwMjZ2YWwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHQqZmxhZ3NwID0gMDtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcbitcXHRcXHRpZiAoKHZhbCBcXHUwMDI2IG1hcC1cXHUwMDNlbWFzaykgPT0gbWFwLVxcdTAwM2VtYXNrKVxcbitcXHRcXHRcXHQqZmxhZ3NwIHw9IG1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0Y3RybCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGN0cmwgfD0gbWFwLVxcdTAwM2VtYXNrO1xcbitcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChmbGFncylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xcbitcXG4rXFx0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xcbitcXHRpZiAoZ3JvdXAgPT0gMikge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0fVxcbitcXHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGlmIChncm91cCAhPSAyKSB7XFxuK1xcdFxcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBtYXNrLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBkZWxheV9vbixcXG4rXFx0XFx0XFx0XFx0ICAgZGVsYXlfb2ZmKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRldmljZSAqIF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcbitcXHRkcCA9IGRzYV90b19wb3J0KFxcdTAwMjZwcml2LVxcdTAwM2VkcywgcHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKCFkcCB8fCAhZHAtXFx1MDAzZXVzZXIpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4gXFx1MDAyNmRwLVxcdTAwM2V1c2VyLVxcdTAwM2VkZXY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFxuK1xcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3NwKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XFxuK1xcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XFxuK1xcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XFxuK1xcdGJvb2wgZm9yY2VfaGlnaDtcXG4rXFx0Ym9vbCBmb3JjZV9sb3c7XFxuK1xcdGludCBwb2xhcml0eTtcXG4rXFx0dTMyIGdyb3VwO1xcbitcXHRib29sIG9uO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0aWYgKHBvcnQgPT0gWVQ5MjFYX1BPUlRfTUNVKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiTm8gTEVEcyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNmdyb3VwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0aWYgKGdyb3VwIFxcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxcXG5cXFwiLCBncm91cCwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmIChwcC1cXHUwMDNlbGVkc1tncm91cF0pXFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXG4rXFx0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcXFwiYWN0aXZlLWhpZ2hcXFwiKTtcXG4rXFx0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtbG93XFxcIik7XFxuK1xcdGlmIChmb3JjZV9oaWdoIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2xvdykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkR1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XFxuK1xcbitcXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGxlZC1cXHUwMDNlcG9ydCA9IHBwO1xcbitcXHRsZWQtXFx1MDAzZWdyb3VwID0gZ3JvdXA7XFxuK1xcbitcXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT046XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXFx1MDAyNm9uKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0bGVkX2NkZXYgPSBcXHUwMDI2bGVkLVxcdTAwM2VjZGV2O1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcXFwibmV0ZGV2XFxcIjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDtcXG4rI2VuZGlmXFxuK1xcbitcXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFxcXCItJXU6JTAyZDolMDJ1XFxcIixcXG4rXFx0XFx0IHByaXYtXFx1MDAzZWRzLmluZGV4LCBwb3J0LCBncm91cCk7XFxuK1xcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XFxuK1xcdFxcdC5md25vZGUgPSBmd25vZGUsXFxuK1xcdFxcdC5kZXZpY2VuYW1lID0gbmFtZSxcXG4rXFx0XFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcXG4rXFx0fTtcXG4rXFx0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFxcdTAwMjZpbml0X2RhdGEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChwb2xhcml0eSkge1xcbitcXHRcXHR1MzIgYml0ID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTtcXG4rXFxuK1xcdFxcdCppbnZfbWFza3AgfD0gYml0O1xcbitcXHRcXHRpZiAocG9sYXJpdHkgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHQqaW52X2N0cmxwIHw9IGJpdDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQrKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXG4rXFx0XFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRcXHRpZiAobGVkKVxcbitcXHRcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBpbnZfY3RybCA9IDA7XFxuK1xcdHUzMiBpbnZfbWFzayA9IDA7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdFxcdGlmICghbGVkc19ucClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRcXHRpZiAocmVzKSB7XFxuK1xcdFxcdFxcdFxcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxcbitcXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChpbnZfbWFzaylcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludl9jdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo1MC40MzM3NjYwNDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTQ5MjIxNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gTURJTyBkZXZpY2UuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBjaGlwIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVkMjZhNzYyMDQ3N2UyNGZmMWVlZmRmMGZjYTViNzk0ODk1ZTM1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTc6NTE6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uYTNjOGQ4YTAxYzZiYTcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODIzMCw3ICsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuK0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCJcbiBcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcIlxuK1xuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wiXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcIlxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0Kz0gYjUzL1xuIG9iai15XHRcdFx0XHQrPSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQrPSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCs9IG1pY3JvY2hpcC9cbitvYmoteVx0XHRcdFx0Kz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQrPSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCs9IG14bDg2Mnh4L1xuIG9iai15XHRcdFx0XHQrPSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICsxLDE3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4rXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4rXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4rXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4rXHQgIGNoaXAuXG4rXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbitcdGJvb2wgXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwiXG4rXHRkZWZhdWx0IHlcbitcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbitcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuK1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCArMSw1IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cbit5dDkyMXgtb2JqcyArPSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICsxMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9oc3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG5AQCAtMjYsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcInl0OTIxeC5oXCJcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuIFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbi1cbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXHQ0MDk1XG4gXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuLVxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4gICpcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0ZGV2X3dhcm4oZGV2LCBcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwiLCByZXMpO1xuKyNlbmRpZlxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4rI2VuZGlmXG4rXG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4rXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXHRcdDEwXG4rXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuIFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2NzQ5YjU3ZmVlM2NkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2MzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBtYXNrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXG4rfTtcbitcbitzdGF0aWMgYm9vbFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpZiAoIWZsYWdzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbitcdFx0XHQqZmxhZ3NwIHw9IG1hcC1cdTAwM2VmbGFncztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGZsYWdzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuK1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbitcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuK1x0Ym9vbCBmb3JjZV9oaWdoO1xuK1x0Ym9vbCBmb3JjZV9sb3c7XG4rXHRpbnQgcG9sYXJpdHk7XG4rXHR1MzIgZ3JvdXA7XG4rXHRib29sIG9uO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJObyBMRURzIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwicmVnXCIsIFx1MDAyNmdyb3VwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cIiwgZ3JvdXAsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWhpZ2hcIik7XG4rXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCJhY3RpdmUtbG93XCIpO1xuK1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xuK1xuK1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbGVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4rXHRkZWZhdWx0OlxuK1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcdTAwMjZvbik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuK1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuK1x0fTtcbitcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAocG9sYXJpdHkpIHtcbitcdFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4rXG4rXHRcdCppbnZfbWFza3AgfD0gYml0O1xuK1x0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4rXHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKSB7XG4rXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1xuK1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0XHRpZiAobGVkKVxuK1x0XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbitcdFx0fVxuK1xuK1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0XHRpZiAobGVkKSB7XG4rXHRcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbit9XG4rXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdHUzMiBpbnZfY3RybCA9IDA7XG4rXHR1MzIgaW52X21hc2sgPSAwO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdGludCByZXM7XG4rXG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4rXHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcbitcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcbitcdFx0aWYgKCFkcC1cdTAwM2VkbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcImxlZHNcIik7XG4rXHRcdGlmICghbGVkc19ucClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4rXHRcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxuK1x0XHRcdFx0XHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2aW52X21hc2ssIFx1MDAyNmludl9jdHJsKTtcbitcdFx0XHRpZiAocmVzKSB7XG4rXHRcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0XHRcdGdvdG8gZXJyO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4rXHRjdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlbmQ7XG4rXG4rXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuK1x0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cbitcdCAqL1xuK1x0aWYgKGludl9tYXNrKVxuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4rXHRcdFx0XHRcdCAgICAgaW52X2N0cmwpO1xuK1xuK2VuZDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuK1x0cmV0dXJuIHJlcztcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgKzEsMTIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTEVEU19IXG4rI2RlZmluZSBfWVRfTEVEU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTlx0XHRcdEJJVCgyMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVx0XHRHRU5NQVNLKDE2LCAxMylcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXHRcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcdEJJVCgxNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXHRcdEdFTk1BU0soMjksIDI4KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXHRcdEdFTk1BU0soMjYsIDI1KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcdFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1x0XHRCSVQoMTUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXHRCSVQoMTIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcdFx0QklUKDkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cdFx0QklUKDYpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXHRCSVQoMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcdFx0MHhkMDFjOFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApKSlcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcdDUxMlxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbitcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4rc3RydWN0IHl0OTIxeF9sZWQge1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgY2hhciBncm91cDtcbitcbitcdGJvb2wgdXNlX2N5Y2xlOjE7XG4rXHRib29sIHVzZV9kdXR5OjE7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCArMSwxNTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4rXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4rXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCp2YWxwID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4re1xuK1x0aW50IHJlcztcbitcdHUzMiB2O1xuK1x0dTMyIHU7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHR1ID0gdjtcbitcdHUgXHUwMDI2PSB+bWFzaztcbitcdHUgfD0gdmFsO1xuK1x0aWYgKHUgPT0gdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0dSB8PSB2YWxzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICsxLDg4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfU01JX0hcbisjZGVmaW5lIF9ZVF9TTUlfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4rXHRcdFx0ICAgdTMyIHZhbCk7XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuK31cbitcbisvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4rICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuKyAqXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuKyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbisgKi9cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbit7XG4rXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbitcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbitcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuK1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4rfVxuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6NTE6NTAuNDMzNzY4NTA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNjA5NDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBZVDkyMTUgTEVEIFN1cHBvcnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHNwZWNpZmljYWxseSBhZGRpbmcgZmlsZXMgbGlrZSBgbGVkcy5jYCwgYGxlZHMuaGAsIGBzbWkuY2AsIGBzbWkuaGAsIGFuZCB0aGVuIHVwZGF0aW5nIGBjaGlwLmNgLCBgY2hpcC5oYCwgYEtjb25maWdgLCBhbmQgYE1ha2VmaWxlYC4gVGhlIGNvcmUgb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTYC4gU28sIGl0J3MgYSBoYXJkd2FyZSBkcml2ZXIsIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZHJpdmVyIHNwZWNpZmljYWxseSwgZm9yIHRoaXMgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2guXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHRoZSB0ZXN0aW5nIGVudmlyb25tZW50LiBDYW4gSSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBEU0EgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSB0aWVkIHRvIHNwZWNpZmljIHN3aXRjaCBjaGlwcywgdHlwaWNhbGx5IG5lZWQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgYSByZWFsbHkgZ29vZCBlbXVsYXRpb24uIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGRyaXZlciBnZXRzIGluaXRpYWxpemVkIOKAkyBEU0EgZHJpdmVycyB1c3VhbGx5IHByb2JlIHRocm91Z2ggdGhlIGRldmljZSB0cmVlIG9yIHRoZSBNRElPIGJ1cy4gU28sIHdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgTURJTyBwcm9iZSB3aWxsIGp1c3QgZmFpbCwgYW5kIHRoZSBkcml2ZXIgd29uJ3QgZXZlbiBiZSBpbml0aWFsaXplZCwgcmlnaHQ/XG5cbkkgd29uZGVyIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgc3dpdGNoLiBQcm9iYWJseSBub3QsIGJ1dCBpdCdzIHdvcnRoIGEgY2hlY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBwYXRoIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBmdXp6aW5nIHdpdGhvdXQgdGhlIGhhcmR3YXJlLlxuXG5MZXQncyBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgIGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIHByb2JlLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSBsb2NhdGUgdGhlIHByb2JlIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiB1bmRlcnN0YW5kIHRoZSBkcml2ZXIncyBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjUxOjU2Ljc1OTg2NzExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzcyOTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjgyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MTg6c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3NC1cXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo1Ny4xMDc2MDgxOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwNjM1MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHl0OTIxeF9tZGlvX3Byb2JlYCBiYXNlZCBvbiB3aGF0IEkgY2FuIHNlZTpcblxuKipEaXNzZWN0aW5nIGB5dDkyMXhfbWRpb19wcm9iZWAqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9yIHNldHVwIG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGNvbW11bmljYXRpb24sIHNwZWNpZmljYWxseSBmb3IgdGhlIGB5dDkyMXhgIGRldmljZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgTURJTyBpcyB1c3VhbGx5IGhvdyB0aGUgc3lzdGVtIHRhbGtzIHRvIFBIWXMgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVycykgYW5kIG90aGVyIGxvdy1sZXZlbCBuZXR3b3JrIGludGVyZmFjZSBjb21wb25lbnRzLiBTbywgSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2U6IGRldGVjdGluZyB0aGUgUEhZLCBjb25maWd1cmluZyBpdHMgcmVnaXN0ZXJzLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgY2xvY2tzIG9yIGludGVycnVwdCBsaW5lcyBmb3IgY29tbXVuaWNhdGlvbiwgYW5kIGZpbmFsbHksIGdldHRpbmcgdGhlIGRldmljZSByZWFkeSBmb3IgZGF0YSB0cmFuc2Zlci4gSSdsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiAqaG93KiBpdCBkb2VzIHRob3NlIHRoaW5ncywgYnV0IHRoYXQncyBteSB3b3JraW5nIGh5cG90aGVzaXMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTUzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6NTI6MDAuNzM4MjQ4NDg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MTg6XFx0c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuNDcxOTpcXHR7XFxuNDcyMDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjQ3MjE6XFx0XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG40NzIyOlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcXG40NzIzOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG40NzI0OlxcdFxcbjQ3MjU6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjQ3MjY6XFx0XFx0aWYgKCFwcml2KVxcbjQ3Mjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDcyODpcXHRcXG40NzI5OlxcdFxcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG40NzMwOlxcdFxcdGlmICghbWRpbylcXG40NzMxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3MzI6XFx0XFxuNDczMzpcXHRcXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuNDczNDpcXHRcXHRtZGlvLVxcdTAwM2VhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG40NzM1OlxcdFxcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG40NzM2OlxcdFxcbjQ3Mzc6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ3Mzg6XFx0XFxuNDczOTpcXHRcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuNDc0MDpcXHRcXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG40NzQxOlxcdFxcbjQ3NDI6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuNDc0MzpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ3NDQ6XFx0XFxuNDc0NTpcXHRcXHRcXHRwcC1cXHUwMDNlaW5kZXggPSBpO1xcbjQ3NDY6XFx0XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcXG40NzQ3OlxcdFxcdH1cXG40NzQ4OlxcdFxcbjQ3NDk6XFx0XFx0ZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDc1MDpcXHRcXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbjQ3NTE6XFx0XFx0ZHMtXFx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcXG40NzUyOlxcdFxcdGRzLVxcdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xcbjQ3NTM6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbjQ3NTQ6XFx0XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XFxuNDc1NTpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XFxuNDc1NjpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XFxuNDc1NzpcXHRcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XFxuNDc1ODpcXHRcXHRkcy1cXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcXG40NzU5OlxcdFxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XFxuNDc2MDpcXHRcXG40NzYxOlxcdFxcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XFxuNDc2MjpcXHRcXG40NzYzOlxcdFxcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcXG40NzY0OlxcdH1cXG40NzY1OlxcdFxcbjQ3NjY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XFxuNDc2NzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjUyOjAwLjczODgwMzU3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjk3NjE2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEcml2ZXIgQXNzZXNzbWVudDogV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBhbiBNRElPIGRldmljZSBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIGl0J3MgYSBub24tc3RhcnRlci4gVGhlIE1ESU8gYnVzIHdvbid0IGRldGVjdCB0aGUgZGV2aWNlLCBhbmQgdGhlIHByb2JlIGZ1bmN0aW9uIGVpdGhlciB3b24ndCBiZSBjYWxsZWQsIG9yIGlmIGl0IGlzIChzYXksIHRocm91Z2ggYSBkZXZpY2UgdHJlZSBvdmVybGF5KSwgYW55IGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgdG8gTURJTyByZWdpc3RlcnMgd2lsbCBmYWlsIG9yIHRpbWUgb3V0LlxuXG5JIHN0YXJ0IHRvIGNvbnNpZGVyIGlmIGZ1enppbmcgaXMgZXZlbiBhIHZhbGlkIGFwcHJvYWNoIGhlcmUuIFR5cGljYWxseSwgZHJpdmVycyB0aGF0IGFyZSBoZWF2aWx5IGhhcmR3YXJlLWRlcGVuZGVudCBhcmVuJ3QgZnV6emVkIHVubGVzcyB0aGVyZSdzIGEgc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSDigJMgdGhpbmsgYG1hYzgwMjExX2h3c2ltYCBvciBzb21ldGhpbmcgc2ltaWxhciBmb3Igb3RoZXIgaGFyZHdhcmUuIEluIHJhcmUgY2FzZXMsIHdlIGNhbiBzb21ldGltZXMgaW5zdGFudGlhdGUgYSBkZXZpY2UgYW5kIGNvdmVyIGEgZGVjZW50IGFtb3VudCBvZiBjb2RlIGV2ZW4gd2l0aG91dCB0aGUgaGFyZHdhcmUgcHJlc2VudC4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBmb3IgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSBhZGRpbmcgTEVEIHN1cHBvcnQgdG8gYSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGUgTEVEIGNvZGUgdXNlcyBgeXQ5MjF4X3JlZ19yZWFkYCBhbmQgYHl0OTIxeF9yZWdfd3JpdGVgLCB3aGljaCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGVzZSB3aWxsIGZhaWwsIG9yIGlmIHdlIHRyeSB0byBtb2NrIHRoZW0sIHRoZSByZXN1bHRpbmcgbG9naWMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHNwZWNpZmljIGhhcmR3YXJlIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGNvZGUgdGhhdOKAmXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gU2luY2UgdGhpcyBpcyBmb3IgYSBzcGVjaWZpYyBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLCBhbmQgYXMgZmFyIGFzIEkga25vdywgdGhlcmUgaXMgbm8gZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdGhlIExpbnV4IGtlcm5lbCBvciBhbnl3aGVyZSBlbHNlLCB0aGUgY29kZSBpcyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJ3MgYW55IGF2YWlsYWJsZSBlbXVsYXRpb24gZm9yIHRoaXMgcGFydGljdWxhciBjaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjUyOjA3LjkwODU2OTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjkxMTc2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW90b3Jjb21tLHl0OTIxNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTI0PXByb3BlcnRpZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI1LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6MjY6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTU5PWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTY3LSAgICAgICAgc3dpdGNoQDFkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Njg6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNjktICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjgtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6NTI6MTQuNDc3NzAzMjg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUwNTIzMjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGFuIGVtdWxhdGlvbiBsYXllcjsgaXQncyBhIGRpcmVjdCBoYXJkd2FyZSBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUgdW50ZXN0YWJsZSB3aXRoIGZ1enppbmcuXG5cblRoZSBkcml2ZXIgcHJvdmlkZXMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIOKAkyBhIHZlcnkgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUuIEl0J3MgYW4gTURJTyBkZXZpY2UsIG1lYW5pbmcgaXQgdGFsa3MgZGlyZWN0bHkgdG8gdGhlIGhhcmR3YXJlLiBBbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhpcyBjaGlwIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIGNvZGUgc2ltcGx5IHdvbid0IGJlIHJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBydW5zIGluIHRob3NlIHZpcnR1YWxpemVkIHNldHVwcy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGRyaXZlciBkb2Vzbid0IHRvdWNoIGFueSBnZW5lcmljIGNvZGUuIEFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgTUFJTlRBSU5FUlNgLCBgZHJpdmVycy9uZXQvZHNhL0tjb25maWdgLCBgZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlYCwgdGhlIGBtb3RvcmNvbW1gIGRpcmVjdG9yeSdzIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCwgYW5kIHRoZW4gdGhlIHJlbmFtZWQgZHJpdmVyIHNvdXJjZSBmaWxlczogYGNoaXAuY2AsIGBjaGlwLmhgLCBgbGVkcy5jYCwgYGxlZHMuaGAsIGBzbWkuY2AsIGBzbWkuaGAuIFRoaXMgaXMgYWxsIGNvbmZpbmVkIHRvIHRoZSBZVDkyMTUgc3dpdGNoIGFuZCBpdHMgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS5cblxuU28sICpkZWZpbml0ZWx5KiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyMCwiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MjoxOS45ODI5NDE4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBNRElPIGRldmljZS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIE1ESU8gZGV2aWNlLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgY2hpcCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2kgq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 17:20:33 +0000 UTC FinishedAt: 2026-07-09 17:52:21 +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+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBNRElPIGRldmljZS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU1ZDI2YTc2MjA0NzdlMjRmZjFlZWZkZjBmY2E1Yjc5NDg5NWUzNTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDE3OjUxOjQ3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gXG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcJiMzNDtcbiYjNDM7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wmIzM0O1xuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wmIzM0O1xuQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwxNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuJiM0MztcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuJiM0MztcdCAgY2hpcC5cbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4mIzQzO1x0Ym9vbCBcJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwmIzM0O1xuJiM0MztcdGRlZmF1bHQgeVxuJiM0MztcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuJiM0MztcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDUgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uNTUzZWZhY2Q0ZjVlZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyAmIzQzOzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt5dDkyMXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCYjMzQ7LCByZXMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg4Niw2ICYjNDM7NDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4gXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbmluZGV4IDU1NTA0NjUyNjY2OTUyLi42NTcwYWU1OTAyYWRlYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbkBAIC04NTAsOCAmIzQzOzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXHRcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cdFx0OFxuIFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4mIzQzO1xuIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0MTFcbiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9NQ1VcdFx0MTBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuIFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG5AQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHtcbiBcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcbiBcdHU2NCByeF9mcmFtZXM7XG4gXHR1NjQgdHhfZnJhbWVzO1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcbiYjNDM7XHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDY3NDliNTdmZWUzY2Rcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICYjNDM7MSw2MzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxuJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cdTAwM2VpbmRleF0pXG4mIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChncm91cCkge1xuJiM0MztcdGNhc2UgMDpcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMTpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbiYjNDM7XHRjYXNlIDI6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICBjdHJsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxuJiM0MztcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbiYjNDM7e1xuJiM0MztcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfdXBwZXI7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5O1xuJiM0MztcbiYjNDM7XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xuJiM0MztcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuJiM0MztcdGlmIChjaGVja19hZGRfb3ZlcmZsb3cob24sIG9mZiwgXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlcilcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Zm9yICg7IGN5Y2xlIFx1MDAzZSBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlPSAxLCBjeWNsZSBcdTAwM2VcdTAwM2U9IDEpXG4mIzQzO1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdCpjeWNsZXAgPSBjeWNsZTtcbiYjNDM7XG4mIzQzO1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuJiM0MztcdFx0XHRcdCAgICAgKG9uIFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbiYjNDM7XHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICYjNDM7IGR1dHlzW2ldKSAvIDIpIHtcbiYjNDM7XHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRpZiAob24gXHUwMDNlIG9mZilcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuJiM0MztcdCpkdXR5cCA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZHV0eTtcbiYjNDM7XHRib29sIHVzZV9jeWNsZTtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4mIzQzO1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuJiM0MztcdFx0XHRcdGR1dHkgPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRib29sIGNoYW5nZV9jeWNsZTtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4mIzQzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFx1MDAyNmN5Y2xlLCBcdTAwMjZkdXR5KTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuJiM0MztcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4mIzQzO1x0XHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXHUwMDNlbGVkX2R1dHk7XG4mIzQzO1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuJiM0MztcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4mIzQzO1x0XHRcdCAgICAgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0XHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXHUwMDNlbGVkc1tpXSlcbiYjNDM7XHRcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbiYjNDM7XHRcdFx0XHQgICAgKGNoYW5nZV9kdXR5IFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSlcbiYjNDM7XHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdGlmICh2YWwgIT0gY3RybCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4mIzQzO1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4mIzQzO1x0XHRmYWxsdGhyb3VnaDtcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpIHtcbiYjNDM7XHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4mIzQzO1x0XHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncm91cCkpO1xuJiM0MztcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbiYjNDM7XHRpZiAodXNlX2N5Y2xlKVxuJiM0MztcdFx0cHAtXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4mIzQzO1xuJiM0MztcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4mIzQzO1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX0ZVTExfRFVQTEVYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuJiM0MztcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXG4mIzQzO1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbiYjNDM7XHR7QklUKFRSSUdHRVJfTkVUREVWX1RYX0VSUikgfCBCSVQoVFJJR0dFUl9ORVRERVZfUlhfRVJSKSxcbiYjNDM7XHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuJiM0MztcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHRcdGlmICghZmxhZ3MpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX2dldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGFkZHI7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbiYjNDM7XHQgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7XG4mIzQzO1x0XHQqZmxhZ3NwID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwICE9IDIpIHtcbiYjNDM7XHRcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KmZsYWdzcCA9IDA7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICgodmFsIFx1MDAyNiBtYXAtXHUwMDNlbWFzaykgPT0gbWFwLVx1MDAzZW1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gbWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbiYjNDM7XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+bWFwLVx1MDAzZWZsYWdzO1xuJiM0MztcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuJiM0MztcdFx0XHRpZiAoIWZsYWdzKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpZiAoZmxhZ3MpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xuJiM0MztcdGlmIChncm91cCA9PSAyKSB7XG4mIzQzO1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0fVxuJiM0MztcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChncm91cCAhPSAyKSB7XG4mIzQzO1x0XHRtYXNrID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgbWFzaywgY3RybCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBicmlnaHRuZXNzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBkZWxheV9vbixcbiYjNDM7XHRcdFx0XHQgICBkZWxheV9vZmYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1xuJiM0MztcdGRwID0gZHNhX3RvX3BvcnQoXHUwMDI2cHJpdi1cdTAwM2VkcywgcHAtXHUwMDNlaW5kZXgpO1xuJiM0MztcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2ZHAtXHUwMDNldXNlci1cdTAwM2VkZXY7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcbiYjNDM7XHRpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4mIzQzO1x0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICppbnZfbWFza3AsIHUzMiAqaW52X2N0cmxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0aW50IHBvbGFyaXR5O1xuJiM0MztcdHUzMiBncm91cDtcbiYjNDM7XHRib29sIG9uO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O05vIExFRHMgZm9yIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNmdyb3VwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwmIzM0OywgZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcbiYjNDM7XHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1oaWdoXCYjMzQ7KTtcbiYjNDM7XHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWxvd1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0R1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRwb3J0LCBncm91cCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4mIzQzO1x0bGVkLVx1MDAzZWdyb3VwID0gZ3JvdXA7XG4mIzQzO1xuJiM0MztcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcdTAwMjZvbik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzID0gb247XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VicmlnaHRuZXNzX3NldF9ibG9ja2luZyA9IHl0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gXCYjMzQ7bmV0ZGV2XCYjMzQ7O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgWVQ5MjFYX05BTUUgXCYjMzQ7LSV1OiUwMmQ6JTAydVwmIzM0OyxcbiYjNDM7XHRcdCBwcml2LVx1MDAzZWRzLmluZGV4LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbiYjNDM7XHRcdC5md25vZGUgPSBmd25vZGUsXG4mIzQzO1x0XHQuZGV2aWNlbmFtZSA9IG5hbWUsXG4mIzQzO1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuJiM0MztcdH07XG4mIzQzO1x0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFx1MDAyNmluaXRfZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocG9sYXJpdHkpIHtcbiYjNDM7XHRcdHUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHRcdCppbnZfbWFza3AgfD0gYml0O1xuJiM0MztcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuJiM0MztcdFx0XHQqaW52X2N0cmxwIHw9IGJpdDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChsZWQpXG4mIzQzO1x0XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChsZWQpIHtcbiYjNDM7XHRcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0XHRcdFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIGludl9jdHJsID0gMDtcbiYjNDM7XHR1MzIgaW52X21hc2sgPSAwO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcbiYjNDM7XHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkcC1cdTAwM2VkbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2aW52X21hc2ssIFx1MDAyNmludl9jdHJsKTtcbiYjNDM7XHRcdFx0aWYgKHJlcykge1xuJiM0MztcdFx0XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XG4mIzQzO1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZW5kO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuJiM0MztcdCAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGludl9tYXNrKVxuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxuJiM0MztcdFx0XHRcdFx0ICAgICBpbnZfY3RybCk7XG4mIzQzO1xuJiM0MztlbmQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdHl0OTIxeF9sZWRzX3JlbW92ZShwcml2KTtcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgJiM0MzsxLDEyMSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX0xFRFNfSFxuJiM0MzsjZGVmaW5lIF9ZVF9MRURTX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cdEdFTk1BU0soMjAsIDE5KVx0LyogY3ljbGUgPSA1MTIgKiB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcdFx0XHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS19JTkRJXHRCSVQoMTYpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXHRcdEdFTk1BU0soMzEsIDMwKVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxOSwgNCAqIChncnApICYjNDM7IDE4KVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICYjNDM7IDE4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSAmIzQzOyAxNywgNCAqIChncnApICYjNDM7IDE2KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNjXHUwMDNjIHggbXMgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxNikpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXHRCSVQoMTQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlx0QklUKDExKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LXHRCSVQoMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXHRcdDB4ZDAxMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVx0XHRHRU5NQVNLKDEsIDApXHQvKiAjZ3JwIC0gMSAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCAmIzQzOyA4ICogKDIgLSAoZ3JwKSkgJiM0MzsgNCAqICgocG9ydCkgLyA1KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpKSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcdEJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgNSwgNiAqIChncnApICYjNDM7IDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSAmIzQzOyAyKSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgJiM0MzsgMSwgNiAqIChncnApKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01BWFx0MjA0OFxuJiM0MztcbiYjNDM7LyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVx0XHQyNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfbGVkIHtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4mIzQzO1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlOjE7XG4mIzQzO1x0Ym9vbCB1c2VfZHV0eToxO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1xuJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTtcbiYjNDM7XG4mIzQzOyNlbHNlXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikge31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICYjNDM7MSwxNTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y2hpcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbiYjNDM7XHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4mIzQzO1x0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4mIzQzO1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0KnZhbHAgPSB2YWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdHUzMiB2O1xuJiM0MztcdHUzMiB1O1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0dSA9IHY7XG4mIzQzO1x0dSBcdTAwMjY9IH5tYXNrO1xuJiM0MztcdHUgfD0gdmFsO1xuJiM0MztcdGlmICh1ID09IHYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdHUgfD0gdmFsc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbiYjNDM7e1xuJiM0MztcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuJiM0MztcdHUzMiB2c1s0XTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiB1ID0gdnNbaV07XG4mIzQzO1xuJiM0MztcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbiYjNDM7XHRcdGlmICh1ICE9IHZzW2ldKVxuJiM0MztcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0XHR2c1tpXSA9IHU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWNoYW5nZWQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICYjNDM7MSw4OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX1lUX1NNSV9IXG4mIzQzOyNkZWZpbmUgX1lUX1NNSV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjtcbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4mIzQzO1x0XHRcdCAgIHUzMiB2YWwpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4mIzQzOyAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuJiM0MzsgKlxuJiM0MzsgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4mIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbiYjNDM7e1xuJiM0MztcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuJiM0MztcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4mIzQzO1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4mIzQzO1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCAgICBjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4mIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBNRElPIGRldmljZS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTVkMjZhNzYyMDQ3N2UyNGZmMWVlZmRmMGZjYTViNzk0ODk1ZTM1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTc6NTE6NDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06CURhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbAotRjoJZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qCiYjNDM7RjoJZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS8KIEY6CW5ldC9kc2EvdGFnX3l0OTIxeC5jCiAKIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZwppbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjAKIAogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnJiMzNDsKIAomIzQzO3NvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyYjMzQ7CiYjNDM7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWcmIzM0OwogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZyYjMzQ7CkBAIC0xNTgsMTIgJiM0MzsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0KIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1CiAJICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlcgogCSAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS4KLQotY29uZmlnIE5FVF9EU0FfWVQ5MjFYCi0JdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwotCXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKLQlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgotCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKLQkgIGNoaXAuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1jb3JlLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwogb2JqLXkJCQkJJiM0Mzs9IGI1My8KIG9iai15CQkJCSYjNDM7PSBoaXJzY2htYW5uLwogb2JqLXkJCQkJJiM0Mzs9IGxhbnRpcS8KIG9iai15CQkJCSYjNDM7PSBtaWNyb2NoaXAvCiYjNDM7b2JqLXkJCQkJJiM0Mzs9IG1vdG9yY29tbS8KIG9iai15CQkJCSYjNDM7PSBtdjg4ZTZ4eHgvCiBvYmoteQkJCQkmIzQzOz0gbXhsODYyeHgvCiBvYmoteQkJCQkmIzQzOz0gbmV0Yy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwomIzQzOwlzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYCiYjNDM7CXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoCiYjNDM7CSAgY2hpcC4KJiM0MzsKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyMVhfTEVEUwomIzQzOwlib29sICYjMzQ7TEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTUmIzM0OwomIzQzOwlkZWZhdWx0IHkKJiM0MzsJZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWAomIzQzOwlkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYCiYjNDM7CWhlbHAKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlCiYjNDM7CSAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCkBAIC0wLDAgJiM0MzsxLDUgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MKJiM0MztvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICYjNDM7PSB5dDkyMXgubwomIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAubwomIzQzO3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSAmIzQzOz0gbGVkcy5vCiYjNDM7eXQ5MjF4LW9ianMgJiM0Mzs9IHNtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKcmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCkBAIC0xMyw3ICYjNDM7MTMsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2JyaWRnZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2hzci5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX3ZsYW4uaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZGlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKQEAgLTI2LDcgJiM0MzsyNSw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L2llZWU4MDIxcS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9wa3RfY2xzLmgmZ3Q7CiAKLSNpbmNsdWRlICYjMzQ7eXQ5MjF4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiAKIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgewogCXVuc2lnbmVkIGludCBzaXplOwpAQCAtMTUxLDEzICYjNDM7MTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHsKIAl7fQogfTsKIAotI2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7Ci0KICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkUJNDA5NQogCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCi0KIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuCiAgKgogICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcApAQCAtMTk2LDIwOCAmIzQzOzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpCiAJcmV0dXJuIChhZGRyWzRdICZsdDsmbHQ7IDgpIHwgYWRkcls1XTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpCi17Ci0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spKTsKLQotCXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDt3cml0ZShwcml2LSZndDtyZWdfY3R4LCByZWcsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCi17Ci0JdTMyIHZhbDsKLQlpbnQgcmVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKLQkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKLQkJCQlZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUywKLQkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JKnZhbHAgPSB2YWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKLXsKLQlpbnQgcmVzOwotCXUzMiB2OwotCXUzMiB1OwotCi0JcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgJmFtcDt2KTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JdSA9IHY7Ci0JdSAmYW1wOz0gfm1hc2s7Ci0JdSB8PSB2YWw7Ci0JaWYgKHUgPT0gdikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwotfQotCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwotfQotCi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uCi0gKgotICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwotICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLgotICovCi0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCi17Ci0JKmxvICZhbXA7PSB+bG93ZXJfMzJfYml0cyhtYXNrKTsKLQkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwotCSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7Ci0JKmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKLQkJIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgJmFtcDt2YWxzW2ldKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAotCQkgIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlpbnQgcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCXUgfD0gdmFsc1tpXTsKLQkJaWYgKHUgIT0gdnNbaV0pCi0JCQljaGFuZ2VkID0gdHJ1ZTsKLQotCQl2c1tpXSA9IHU7Ci0JfQotCi0JaWYgKCFjaGFuZ2VkKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCXUzMiB2c1s0XTsKLQlpbnQgcmVzOwotCi0JQlVJTERfQlVHX09OKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpOwotCi0JcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7Ci0JCXUzMiB1ID0gdnNbaV07Ci0KLQkJdSAmYW1wOz0gfm1hc2tzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAotCQkJIGNvbnN0IHUzMiAqdmFscykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwotfQotCiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscCkKIHsKIAlzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDsKQEAgLTQ3ODYsNiAmIzQzOzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X3dhcm4oZGV2LCAmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxuJiMzNDssIHJlcyk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4ODYsNiAmIzQzOzQ2ODYsMTAgQEAgc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldikKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKIAkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogI2RlZmluZSBZVDkyMVhfQUNMX05VTQkJKFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspCiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNCQk4CiAKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNCTMKJiM0MzsKIC8qIDggaW50ZXJuYWwgJiM0MzsgMiBleHRlcm5hbCAmIzQzOyAxIG1jdSAqLwotI2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNCQkxMQomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVCQkxMAomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwogCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgJmx0OyA4KQogI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCAmbHQ7PSAocG9ydCkgJmFtcDsmYW1wOyAocG9ydCkgJmx0OyA5KQpAQCAtOTM4LDYgJiM0Mzs5NDMsMTMgQEAgc3RydWN0IHl0OTIxeF9wb3J0IHsKIAlzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7CiAJdTY0IHJ4X2ZyYW1lczsKIAl1NjQgdHhfZnJhbWVzOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKQomIzQzOwl1bnNpZ25lZCBjaGFyIGxlZF9kdXR5OwomIzQzOwl1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7CiYjNDM7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWRzW1lUOTIxWF9MRURfR1JPVVBfTlVNXTsKJiM0MzsjZW5kaWYKIH07CiAKIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Njc0OWI1N2ZlZTNjZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jCkBAIC0wLDAgJiM0MzsxLDYzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bGVkcy5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2xlZHMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtzbWkuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KSBcCiYjNDM7CWNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldikKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLSZndDtwb3J0KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS0mZ3Q7aW5kZXhdKQomIzQzOyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktJmd0O2RzLmRldikKJiM0MzsKJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGdyb3VwKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTsKJiM0MzsJY2FzZSAxOgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDI6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqb25wID0gKHZhbCAmYW1wOyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT0KJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwomIzQzOwlsZWQtJmd0O3VzZV9jeWNsZSA9IGZhbHNlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gZmFsc2U7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDoKJiM0MzsJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLAomIzQzOwkJCQkgICAgICBjdHJsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbiwKJiM0MzsJCQl1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCwKJiM0MzsJCQl1bnNpZ25lZCBjaGFyICpkdXR5cCkKJiM0Mzt7CiYjNDM7CXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNiksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgNCksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMyksCiYjNDM7CQlZVDkyMVhfTEVEX0RVVFkoMSwgMiksCiYjNDM7CX07CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZV91cHBlcjsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3JlcTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHlfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGludCBkdXR5OwomIzQzOwomIzQzOwljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYOwomIzQzOwljeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICYjNDM7IDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi8KJiM0MzsJaWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCAmYW1wO2N5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlmb3IgKDsgY3ljbGUgJmd0OyBZVDkyMVhfTEVEX0JMSU5LX01JTjsgY3ljbGVfdXBwZXIgJmd0OyZndDs9IDEsIGN5Y2xlICZndDsmZ3Q7PSAxKQomIzQzOwkJaWYgKGN5Y2xlX3JlcSAmZ3Q7PSBjeWNsZV91cHBlciAmZ3Q7Jmd0OyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkqY3ljbGVwID0gY3ljbGU7CiYjNDM7CiYjNDM7CWR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICoKJiM0MzsJCQkJICAgICAob24gJmd0OyBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pCiYjNDM7CQlpZiAoaSA9PSAwIHx8IGR1dHlfcmVxICZndDs9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikgewomIzQzOwkJCWR1dHkgPSBkdXR5c1tpXTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJaWYgKG9uICZndDsgb2ZmKQomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7CiYjNDM7CSpkdXR5cCA9IGR1dHk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgc2hvcnQgY3ljbGU7CiYjNDM7CXVuc2lnbmVkIGNoYXIgZHV0eTsKJiM0MzsJYm9vbCB1c2VfY3ljbGU7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKCEqb25wICZhbXA7JmFtcDsgISpvZmZwKSB7CiYjNDM7CQljeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGOwomIzQzOwkJZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmIChpICE9IGdyb3VwICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0gJmFtcDsmYW1wOwomIzQzOwkJCSAgICBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpIHsKJiM0MzsJCQkJZHV0eSA9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlib29sIGNoYW5nZV9jeWNsZTsKJiM0MzsJCWJvb2wgY2hhbmdlX2R1dHk7CiYjNDM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgJmFtcDtjeWNsZSwgJmFtcDtkdXR5KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJCXVzZV9jeWNsZSA9IGN5Y2xlICZsdDsgWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQljaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgJmFtcDsmYW1wOyBjeWNsZSAhPSBwcC0mZ3Q7bGVkX2N5Y2xlOwomIzQzOwkJY2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLSZndDtsZWRfZHV0eTsKJiM0MzsJCWlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpCiYjNDM7CQkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsKJiM0MzsJCQkgICAgIGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChpID09IGdyb3VwIHx8ICFwcC0mZ3Q7bGVkc1tpXSkKJiM0MzsJCQkJCWNvbnRpbnVlOwomIzQzOwkJCQlpZiAoKGNoYW5nZV9jeWNsZSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfY3ljbGUpIHx8CiYjNDM7CQkJCSAgICAoY2hhbmdlX2R1dHkgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXS0mZ3Q7dXNlX2R1dHkpKQomIzQzOwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwlpZiAodmFsICE9IGN0cmwpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QOwomIzQzOwlzd2l0Y2ggKGR1dHkgJmd0Oz0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6CiYjNDM7CQlZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMiwgMyk6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180OwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwlpZiAoZHV0eSAmbHQ7IFlUOTIxWF9MRURfRFVUWSgxLCAyKSkKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CWlmICh1c2VfY3ljbGUpIHsKJiM0MzsJCW1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpOwomIzQzOwl9CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IHZhbCAmYW1wOyB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHwKJiM0MzsJCSAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7CiYjNDM7CWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7CiYjNDM7CWVsc2UKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gdXNlX2N5Y2xlOwomIzQzOwlpZiAodXNlX2N5Y2xlKQomIzQzOwkJcHAtJmd0O2xlZF9jeWNsZSA9IGN5Y2xlOwomIzQzOwlsZWQtJmd0O3VzZV9kdXR5ID0gdHJ1ZTsKJiM0MzsJcHAtJmd0O2xlZF9kdXR5ID0gZHV0eTsKJiM0MzsKJiM0MzsJKm9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTsKJiM0MzsJKm9mZnAgPSBjeWNsZSAtICpvbnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBtYXNrOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7CiYjNDM7CXtCSVQoVFJJR0dFUl9ORVRERVZfTElOSyksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME19LAomIzQzOwl7QklUKFRSSUdHRVJfTkVUREVWX0xJTktfMTAwMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSwKJiM0MzsJe0JJVChUUklHR0VSX05FVERFVl9UWF9FUlIpIHwgQklUKFRSSUdHRVJfTkVUREVWX1JYX0VSUiksCiYjNDM7CSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTkt9LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkJCWludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CWlmICghZmxhZ3MpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSAmYW1wO3l0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldOwomIzQzOwomIzQzOwkJaWYgKChmbGFncyAmYW1wOyBtYXAtJmd0O2ZsYWdzKSA9PSBtYXAtJmd0O2ZsYWdzKSB7CiYjNDM7CQkJZmxhZ3MgJmFtcDs9IH5tYXAtJmd0O2ZsYWdzOwomIzQzOwkJCWlmICghZmxhZ3MpCiYjNDM7CQkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmICgodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSAhPQomIzQzOwkgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApKSB7CiYjNDM7CQkqZmxhZ3NwID0gMDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChncm91cCAhPSAyKSB7CiYjNDM7CQlhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKmZsYWdzcCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgodmFsICZhbXA7IG1hcC0mZ3Q7bWFzaykgPT0gbWFwLSZndDttYXNrKQomIzQzOwkJCSpmbGFnc3AgfD0gbWFwLSZndDtmbGFnczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdTMyIGFkZHI7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJY3RybCA9IDA7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gJmFtcDt5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTsKJiM0MzsKJiM0MzsJCWlmICgoZmxhZ3MgJmFtcDsgbWFwLSZndDtmbGFncykgPT0gbWFwLSZndDtmbGFncykgewomIzQzOwkJCWZsYWdzICZhbXA7PSB+bWFwLSZndDtmbGFnczsKJiM0MzsJCQljdHJsIHw9IG1hcC0mZ3Q7bWFzazsKJiM0MzsJCQlpZiAoIWZsYWdzKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoZmxhZ3MpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NOwomIzQzOwlpZiAoZ3JvdXAgPT0gMikgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApOwomIzQzOwl9CiYjNDM7CWFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKGdyb3VwICE9IDIpIHsKJiM0MzsJCW1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLAomIzQzOwkJCQkJICAgICBtYXNrLCBjdHJsKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGJyaWdodG5lc3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAomIzQzOwkJICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGRlbGF5X29uLAomIzQzOwkJCQkgICBkZWxheV9vZmYpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2Uoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CiYjNDM7CWRwID0gZHNhX3RvX3BvcnQoJmFtcDtwcml2LSZndDtkcywgcHAtJmd0O2luZGV4KTsKJiM0MzsJaWYgKCFkcCB8fCAhZHAtJmd0O3VzZXIpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJcmV0dXJuICZhbXA7ZHAtJmd0O3VzZXItJmd0O2RldjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAomIzQzOwkJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsKJiM0MzsJaWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzcCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsCiYjNDM7CQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgdTMyICppbnZfbWFza3AsIHUzMiAqaW52X2N0cmxwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJc3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhOwomIzQzOwlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjsKJiM0MzsJY2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTsKJiM0MzsJZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZDsKJiM0MzsJYm9vbCBmb3JjZV9oaWdoOwomIzQzOwlib29sIGZvcmNlX2xvdzsKJiM0MzsJaW50IHBvbGFyaXR5OwomIzQzOwl1MzIgZ3JvdXA7CiYjNDM7CWJvb2wgb247CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7Tm8gTEVEcyBmb3IgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgJiMzNDtyZWcmIzM0OywgJmFtcDtncm91cCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlpZiAoZ3JvdXAgJmd0Oz0gWVQ5MjFYX0xFRF9HUk9VUF9OVU0pIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxuJiMzNDssIGdyb3VwLCBwb3J0KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmIChwcC0mZ3Q7bGVkc1tncm91cF0pCiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsKJiM0MzsJZm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1oaWdoJiMzNDspOwomIzQzOwlmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgJiMzNDthY3RpdmUtbG93JiMzNDspOwomIzQzOwlpZiAoZm9yY2VfaGlnaCAmYW1wOyZhbXA7IGZvcmNlX2xvdykgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcbiYjMzQ7LAomIzQzOwkJCXBvcnQsIGdyb3VwKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7CiYjNDM7CiYjNDM7CWxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbGVkKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWxlZC0mZ3Q7cG9ydCA9IHBwOwomIzQzOwlsZWQtJmd0O2dyb3VwID0gZ3JvdXA7CiYjNDM7CiYjNDM7CXN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PRkY6CiYjNDM7CWNhc2UgTEVEU19ERUZTVEFURV9PTjoKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJbGVkX2NkZXYgPSAmYW1wO2xlZC0mZ3Q7Y2RldjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3MgPSBvbjsKJiM0MzsJbGVkX2NkZXYtJmd0O21heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJbGVkX2NkZXYtJmd0O2ZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7CiYjNDM7CWxlZF9jZGV2LSZndDtibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7CiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSAmIzM0O25ldGRldiYjMzQ7OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FICYjMzQ7LSV1OiUwMmQ6JTAydSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2RzLmluZGV4LCBwb3J0LCBncm91cCk7CiYjNDM7CWluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7CiYjNDM7CQkuZndub2RlID0gZndub2RlLAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCXUzMiBiaXQgPSBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JvdXAsIHBvcnQpOwomIzQzOwomIzQzOwkJKmludl9tYXNrcCB8PSBiaXQ7CiYjNDM7CQlpZiAocG9sYXJpdHkgJmd0OyAwKQomIzQzOwkJCSppbnZfY3RybHAgfD0gYml0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwomIzQzOwlmb3IgKGludCBwb3J0ID0gMDsgcG9ydCAmbHQ7IFlUOTIxWF9QT1JUX05VTTsgcG9ydCYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwomIzQzOwkJZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwomIzQzOwkJCWlmIChsZWQpCiYjNDM7CQkJCWRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCAmYW1wO2xlZC0mZ3Q7Y2Rldik7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQkJaWYgKGxlZCkgewomIzQzOwkJCQlwcC0mZ3Q7bGVkc1tncm91cF0gPSBOVUxMOwomIzQzOwkJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXUzMiBpbnZfY3RybCA9IDA7CiYjNDM7CXUzMiBpbnZfbWFzayA9IDA7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJCWlmICghbGVkc19ucCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJCXJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCwKJiM0MzsJCQkJCSAgICAgICBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksCiYjNDM7CQkJCQkgICAgICAgJmFtcDtpbnZfbWFzaywgJmFtcDtpbnZfY3RybCk7CiYjNDM7CQkJaWYgKHJlcykgewomIzQzOwkJCQlvZl9ub2RlX3B1dChsZWRzX25wKTsKJiM0MzsJCQkJZ290byBlcnI7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwomIzQzOwkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47CiYjNDM7CWN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8CiYjNDM7CSAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVuZDsKJiM0MzsKJiM0MzsJLyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy4KJiM0MzsJICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy4KJiM0MzsJICovCiYjNDM7CWlmIChpbnZfbWFzaykKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzaywKJiM0MzsJCQkJCSAgICAgaW52X2N0cmwpOwomIzQzOwomIzQzO2VuZDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJeXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTIxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOCQkJQklUKDIxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00JR0VOTUFTSygyMCwgMTkpCS8qIGN5Y2xlID0gNTEyICogeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00JCUdFTk1BU0soMTYsIDEzKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTQkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCkJCSgweGQwMDA0ICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTcsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTCUJJVCgxNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESQlCSVQoMTYpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KQkJKDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00JCUdFTk1BU0soMzEsIDMwKQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTQkJR0VOTUFTSygyOSwgMjgpCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUAlCSVQoMjcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00JCUdFTk1BU0soMjYsIDI1KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzMJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KQkJKDB4ZDAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycCkJCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE5LCA0ICogKGdycCkgJiM0MzsgMTgpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE3LCA0ICogKGdycCkgJiM0MzsgMTYpCS8qIGN5Y2xlID0gNTEyICZsdDsmbHQ7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE2KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LCQlCSVQoMTUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOSwlCSVQoMTQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LCUJJVCgxMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTAlCSVQoMTIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYJQklUKDExKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LCQlCSVQoMTApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTksJCUJJVCg5KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYCQlCSVQoOCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWAkJQklUKDcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0JCUJJVCg2KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0JCUJJVCg1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTQkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LCUJJVCgzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LCUJJVCgyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTksJQklUKDEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkwJCTB4ZDAxMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOSwkJR0VOTUFTSygyNSwgMjQpCS8qIGRlbGF5PyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPVwkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00JCUdFTk1BU0soMSwgMCkJLyogI2dycCAtIDEgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpCSgweGQwMTA0ICYjNDM7IDggKiAoMiAtIChncnApKSAmIzQzOyA0ICogKChwb3J0KSAvIDUpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFMJCTB4ZDAxYzQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVgkJMHhkMDFjOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpCUJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydCkJKDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyA1LCA2ICogKGdycCkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyAxLCA2ICogKGdycCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkpKQomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU4JNjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGCTUxMgomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVgJMjA0OAomIzQzOwomIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTQkJMjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKQkoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGdyb3VwOwomIzQzOwomIzQzOwlib29sIHVzZV9jeWNsZToxOwomIzQzOwlib29sIHVzZV9kdXR5OjE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0Mzt2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpOwomIzQzOwomIzQzOyNlbHNlCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYwpAQCAtMCwwICYjNDM7MSwxNTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9wb2xsLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21pLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMJMTAwMDAwCiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcHJpdi0mZ3Q7cmVnX29wcy0mZ3Q7d3JpdGUocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKJiM0Mzt7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAomIzQzOwkJCQlyZXMgfHwgKHZhbCAmYW1wOyBtYXNrKSA9PSAqdmFscCwKJiM0MzsJCQkJWVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsCiYjNDM7CQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqdmFscCA9IHZhbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwl1MzIgdjsKJiM0MzsJdTMyIHU7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsICZhbXA7dik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwl1ID0gdjsKJiM0MzsJdSAmYW1wOz0gfm1hc2s7CiYjNDM7CXUgfD0gdmFsOwomIzQzOwlpZiAodSA9PSB2KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsCiYjNDM7CQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCAqIGksICZhbXA7dmFsc1tpXSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLAomIzQzOwkJICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCiYjNDM7ewomIzQzOwlib29sIGNoYW5nZWQgPSBmYWxzZTsKJiM0MzsJdTMyIHZzWzRdOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzICZndDsgQVJSQVlfU0laRSh2cykpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiB1ID0gdnNbaV07CiYjNDM7CiYjNDM7CQl1ICZhbXA7PSB+bWFza3NbaV07CiYjNDM7CQl1IHw9IHZhbHNbaV07CiYjNDM7CQlpZiAodSAhPSB2c1tpXSkKJiM0MzsJCQljaGFuZ2VkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJCXZzW2ldID0gdTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWNoYW5nZWQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaApAQCAtMCwwICYjNDM7MSw4OCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1lUX1NNSV9ICiYjNDM7I2RlZmluZSBfWVRfU01JX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29yZHBhcnQuaCZndDsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywKJiM0MzsJCQkgICB1MzIgdmFsKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKJiM0MzsgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24mIzM5O3QgYmVjb21lCiYjNDM7ICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLgomIzQzOyAqCiYjNDM7ICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0bwomIzQzOyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS4KJiM0MzsgKi8KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKJiM0Mzt7CiYjNDM7CSpsbyAmYW1wOz0gfmxvd2VyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7CiYjNDM7CSpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7CiYjNDM7CSpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7CiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7eXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcywKJiM0MzsJCQkgY29uc3QgdTMyICp2YWxzKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IExFRCBTdXBwb3J0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHNwZWNpZmljYWxseSBhZGRpbmcgZmlsZXMgbGlrZSBgbGVkcy5jYCwgYGxlZHMuaGAsIGBzbWkuY2AsIGBzbWkuaGAsIGFuZCB0aGVuIHVwZGF0aW5nIGBjaGlwLmNgLCBgY2hpcC5oYCwgYEtjb25maWdgLCBhbmQgYE1ha2VmaWxlYC4gVGhlIGNvcmUgb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTYC4gU28sIGl0JiMzOTtzIGEgaGFyZHdhcmUgZHJpdmVyLCBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGRyaXZlciBzcGVjaWZpY2FsbHksIGZvciB0aGlzIE1vdG9yY29tbSBZVDkyMTUgc3dpdGNoLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIENhbiBJIGFjdHVhbGx5ICpyZWFjaCogdGhpcyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IERTQSBkcml2ZXJzLCBlc3BlY2lhbGx5IHRob3NlIHRpZWQgdG8gc3BlY2lmaWMgc3dpdGNoIGNoaXBzLCB0eXBpY2FsbHkgbmVlZCB0aGUgcmVhbCBoYXJkd2FyZSBvciBhIHJlYWxseSBnb29kIGVtdWxhdGlvbi4gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIGRyaXZlciBnZXRzIGluaXRpYWxpemVkIOKAkyBEU0EgZHJpdmVycyB1c3VhbGx5IHByb2JlIHRocm91Z2ggdGhlIGRldmljZSB0cmVlIG9yIHRoZSBNRElPIGJ1cy4gU28sIHdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgTURJTyBwcm9iZSB3aWxsIGp1c3QgZmFpbCwgYW5kIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gYmUgaW5pdGlhbGl6ZWQsIHJpZ2h0PwoKSSB3b25kZXIgaWYgdGhlcmUmIzM5O3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgc3dpdGNoLiBQcm9iYWJseSBub3QsIGJ1dCBpdCYjMzk7cyB3b3J0aCBhIGNoZWNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHBhdGggdG8gYXNzZXNzIHRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgd2l0aG91dCB0aGUgaGFyZHdhcmUuCgpMZXQmIzM5O3MgZGlnIGludG8gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCBhbmQgc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBwcm9iZS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBxdWlja2x5IGxvY2F0ZSB0aGUgcHJvYmUgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGRyaXZlciYjMzk7cyBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE4OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc3Mj1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzQtXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTUzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB5dDkyMXhfbWRpb19wcm9iZWAgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWU6CgoqKkRpc3NlY3RpbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvciBzZXR1cCBvZiBzb21ldGhpbmcgcmVsYXRlZCB0byBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgeXQ5MjF4YCBkZXZpY2UuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IE1ESU8gaXMgdXN1YWxseSBob3cgdGhlIHN5c3RlbSB0YWxrcyB0byBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBvdGhlciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgY29tcG9uZW50cy4gU28sIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmUgcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlOiBkZXRlY3RpbmcgdGhlIFBIWSwgY29uZmlndXJpbmcgaXRzIHJlZ2lzdGVycywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBvciBpbnRlcnJ1cHQgbGluZXMgZm9yIGNvbW11bmljYXRpb24sIGFuZCBmaW5hbGx5LCBnZXR0aW5nIHRoZSBkZXZpY2UgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0IGRvZXMgdGhvc2UgdGhpbmdzLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDcxODpcdHN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuNDcxOTpcdHtcbjQ3MjA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuNDcyMTpcdFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbjQ3MjI6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbjQ3MjM6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbjQ3MjQ6XHRcbjQ3MjU6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbjQ3MjY6XHRcdGlmICghcHJpdilcbjQ3Mjc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG40NzI4Olx0XG40NzI5Olx0XHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XG40NzMwOlx0XHRpZiAoIW1kaW8pXG40NzMxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDczMjpcdFxuNDczMzpcdFx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbjQ3MzQ6XHRcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbjQ3MzU6XHRcdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuNDczNjpcdFxuNDczNzpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ3Mzg6XHRcbjQ3Mzk6XHRcdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG40NzQwOlx0XHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuNDc0MTpcdFxuNDc0MjpcdFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG40NzQzOlx0XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuNDc0NDpcdFxuNDc0NTpcdFx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG40NzQ2Olx0XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuNDc0NzpcdFx0fVxuNDc0ODpcdFxuNDc0OTpcdFx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuNDc1MDpcdFx0ZHMtXHUwMDNlZGV2ID0gZGV2O1xuNDc1MTpcdFx0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuNDc1MjpcdFx0ZHMtXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbjQ3NTM6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuNDc1NDpcdFx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xuNDc1NTpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG40NzU2Olx0XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcbjQ3NTc6XHRcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XG40NzU4Olx0XHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xuNDc1OTpcdFx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xuNDc2MDpcdFxuNDc2MTpcdFx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcbjQ3NjI6XHRcbjQ3NjM6XHRcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbjQ3NjQ6XHR9XG40NzY1Olx0XG40NzY2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XG40NzY3Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNzExCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1ESU8gRHJpdmVyIEFzc2Vzc21lbnQ6IFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBhbiBNRElPIGRldmljZSBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIFRoZSBNRElPIGJ1cyB3b24mIzM5O3QgZGV0ZWN0IHRoZSBkZXZpY2UsIGFuZCB0aGUgcHJvYmUgZnVuY3Rpb24gZWl0aGVyIHdvbiYjMzk7dCBiZSBjYWxsZWQsIG9yIGlmIGl0IGlzIChzYXksIHRocm91Z2ggYSBkZXZpY2UgdHJlZSBvdmVybGF5KSwgYW55IGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgdG8gTURJTyByZWdpc3RlcnMgd2lsbCBmYWlsIG9yIHRpbWUgb3V0LgoKSSBzdGFydCB0byBjb25zaWRlciBpZiBmdXp6aW5nIGlzIGV2ZW4gYSB2YWxpZCBhcHByb2FjaCBoZXJlLiBUeXBpY2FsbHksIGRyaXZlcnMgdGhhdCBhcmUgaGVhdmlseSBoYXJkd2FyZS1kZXBlbmRlbnQgYXJlbiYjMzk7dCBmdXp6ZWQgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSDigJMgdGhpbmsgYG1hYzgwMjExX2h3c2ltYCBvciBzb21ldGhpbmcgc2ltaWxhciBmb3Igb3RoZXIgaGFyZHdhcmUuIEluIHJhcmUgY2FzZXMsIHdlIGNhbiBzb21ldGltZXMgaW5zdGFudGlhdGUgYSBkZXZpY2UgYW5kIGNvdmVyIGEgZGVjZW50IGFtb3VudCBvZiBjb2RlIGV2ZW4gd2l0aG91dCB0aGUgaGFyZHdhcmUgcHJlc2VudC4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBmb3IgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSBhZGRpbmcgTEVEIHN1cHBvcnQgdG8gYSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGUgTEVEIGNvZGUgdXNlcyBgeXQ5MjF4X3JlZ19yZWFkYCBhbmQgYHl0OTIxeF9yZWdfd3JpdGVgLCB3aGljaCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGVzZSB3aWxsIGZhaWwsIG9yIGlmIHdlIHRyeSB0byBtb2NrIHRoZW0sIHRoZSByZXN1bHRpbmcgbG9naWMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHNwZWNpZmljIGhhcmR3YXJlIGZ1bmN0aW9uYWxpdHkuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggb25seSBpbmNsdWRlcyBjb2RlIHRoYXTigJlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIFNpbmNlIHRoaXMgaXMgZm9yIGEgc3BlY2lmaWMgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCwgYW5kIGFzIGZhciBhcyBJIGtub3csIHRoZXJlIGlzIG5vIGVtdWxhdGlvbiBmb3IgdGhpcyBjaGlwIGluIHRoZSBMaW51eCBrZXJuZWwgb3IgYW55d2hlcmUgZWxzZSwgdGhlIGNvZGUgaXMgZnVuZGFtZW50YWxseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTbywgYmFzZWQgb24gdGhhdCwgdGhlIGFuc3dlciBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBhdmFpbGFibGUgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgY2hpcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbD0yND1wcm9wZXJ0aWVzOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI1LSAgY29tcGF0aWJsZTpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDoyNjogICAgY29uc3Q6IG1vdG9yY29tbSx5dDkyMTVcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0yNy1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw9NTk9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTY3LSAgICAgICAgc3dpdGNoQDFkIHtcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbDo2ODogICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OztcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC02OS0gICAgICAgICAgICAvKiBkZWZhdWx0IDB4MWQsIGFsdGVybmF0ZSAweDAgKi9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2NzpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzY4LVx0e31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzkyMAoJCQkJCQkJb3V0cHV0OiA5NAoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIqKgoKT2theSwgc28gdGhpcyBpc24mIzM5O3QgYW4gZW11bGF0aW9uIGxheWVyOyBpdCYjMzk7cyBhIGRpcmVjdCBoYXJkd2FyZSBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUgdW50ZXN0YWJsZSB3aXRoIGZ1enppbmcuCgpUaGUgZHJpdmVyIHByb3ZpZGVzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCDigJMgYSB2ZXJ5IHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlLiBJdCYjMzk7cyBhbiBNRElPIGRldmljZSwgbWVhbmluZyBpdCB0YWxrcyBkaXJlY3RseSB0byB0aGUgaGFyZHdhcmUuIEFuZCB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhpcyBjaGlwIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIGNvZGUgc2ltcGx5IHdvbiYjMzk7dCBiZSByZWFjaGFibGUgZHVyaW5nIGZ1enppbmcgcnVucyBpbiB0aG9zZSB2aXJ0dWFsaXplZCBzZXR1cHMuCgpMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgZHJpdmVyIGRvZXNuJiMzOTt0IHRvdWNoIGFueSBnZW5lcmljIGNvZGUuIEFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgTUFJTlRBSU5FUlNgLCBgZHJpdmVycy9uZXQvZHNhL0tjb25maWdgLCBgZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlYCwgdGhlIGBtb3RvcmNvbW1gIGRpcmVjdG9yeSYjMzk7cyBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAsIGFuZCB0aGVuIHRoZSByZW5hbWVkIGRyaXZlciBzb3VyY2UgZmlsZXM6IGBjaGlwLmNgLCBgY2hpcC5oYCwgYGxlZHMuY2AsIGBsZWRzLmhgLCBgc21pLmNgLCBgc21pLmhgLiBUaGlzIGlzIGFsbCBjb25maW5lZCB0byB0aGUgWVQ5MjE1IHN3aXRjaCBhbmQgaXRzIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCgpTbywgKmRlZmluaXRlbHkqIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIE1ESU8gZGV2aWNlLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgY2hpcCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gTURJTyBkZXZpY2UuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBjaGlwIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo0OS41MTU1OTA3NDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ2NzQwOTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIE1ESU8gZGV2aWNlLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgY2hpcCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo0OS41MTU2MDcxMzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzIwMzQ2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU1ZDI2YTc2MjA0NzdlMjRmZjFlZWZkZjBmY2E1Yjc5NDg5NWUzNTBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxNzo1MTo0NyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMTgyMzAsNyArMTgyMzAsNyBAQCBNOlxcdERhdmlkIFlhbmcgXFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVxcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxcbi1GOlxcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxcbitGOlxcdGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vXFxuIEY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4gXFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuaW5kZXggNGFiNTY3YzViYmFmYzYuLjk4ZTliYmU0N2RlN2IxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtNzIsNiArNzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXFxcIlxcbiBcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcXFwiXFxuK1xcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1xcXCJcXG4gXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcXFwiXFxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTVcXG4gXFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxcbiBcXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXFxuLVxcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcXG4tXFx0dHJpc3RhdGUgXFxcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4tXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbi1cXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbi1cXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk0pICs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gYjUzL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGhpcnNjaG1hbm4vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbGFudGlxL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG1pY3JvY2hpcC9cXG4rb2JqLXlcXHRcXHRcXHRcXHQrPSBtb3RvcmNvbW0vXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXY4OGU2eHh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG14bDg2Mnh4L1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IG5ldGMvXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM0MzhlMGIxNDM2MTFhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxcbitcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbitcXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuK1xcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuK1xcdCAgY2hpcC5cXG4rXFxuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXFxuK1xcdGJvb2wgXFxcIkxFRCBzdXBwb3J0IGZvciBNb3RvcmNvbW0gWVQ5MjE1XFxcIlxcbitcXHRkZWZhdWx0IHlcXG4rXFx0ZGVwZW5kcyBvbiBORVRfRFNBX1lUOTIxWFxcbitcXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIExFRHMgYXR0YWNoZWQgdG8gdGhlXFxuK1xcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG4reXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbit5dDkyMXgtb2JqcyArPSBzbWkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xcbnNpbWlsYXJpdHkgaW5kZXggOTYlXFxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYTQuLjU1M2VmYWNkNGY1ZWUzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuQEAgLTEzLDcgKzEzLDYgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfaHNyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21kaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2YuaFxcdTAwM2VcXG5AQCAtMjYsNyArMjUsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2llZWU4MDIxcS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gXFxuLSNpbmNsdWRlIFxcXCJ5dDkyMXguaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNoaXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImxlZHMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInNtaS5oXFxcIlxcbiBcXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuIFxcdHVuc2lnbmVkIGludCBzaXplO1xcbkBAIC0xNTEsMTMgKzE1Miw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuIFxcdHt9XFxuIH07XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXFx0XFxcInl0OTIxeFxcXCJcXG4tXFxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcXHQ0MDk1XFxuIFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXFx0MTAwMDBcXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXFx0MTAwMDAwXFxuLVxcbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxcbiAgKlxcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuIFxcdHJldHVybiAoYWRkcls0XSBcXHUwMDNjXFx1MDAzYyA4KSB8IGFkZHJbNV07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxcbi17XFxuLVxcdFdBUk5fT04oIW11dGV4X2lzX2xvY2tlZChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spKTtcXG4tXFxuLVxcdHJldHVybiBwcml2LVxcdTAwM2VyZWdfb3BzLVxcdTAwM2VyZWFkKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXdyaXRlKHByaXYtXFx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxcbi17XFxuLVxcdHUzMiB2YWw7XFxuLVxcdGludCByZXM7XFxuLVxcdGludCByZXQ7XFxuLVxcbi1cXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcXG4tXFx0XFx0XFx0XFx0cmVzIHx8ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcXG4tXFx0XFx0XFx0XFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXFxuLVxcdFxcdFxcdFxcdGZhbHNlLCBwcml2LCByZWcsIFxcdTAwMjZ2YWwpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0KnZhbHAgPSB2YWw7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXHR1MzIgdjtcXG4tXFx0dTMyIHU7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHR1ID0gdjtcXG4tXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4tXFx0dSB8PSB2YWw7XFxuLVxcdGlmICh1ID09IHYpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xcbi19XFxuLVxcbi0vKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXFxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXFxuLSAqXFxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxcbi0gKi9cXG4tXFxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuLXtcXG4tXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbi1cXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuLVxcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcXG4tXFx0XFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXFx1MDAyNnZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4tXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4tXFx0XFx0aWYgKHJlcylcXG4tXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHR1IHw9IHZhbHNbaV07XFxuLVxcdFxcdGlmICh1ICE9IHZzW2ldKVxcbi1cXHRcXHRcXHRjaGFuZ2VkID0gdHJ1ZTtcXG4tXFxuLVxcdFxcdHZzW2ldID0gdTtcXG4tXFx0fVxcbi1cXG4tXFx0aWYgKCFjaGFuZ2VkKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuLXtcXG4tXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuLVxcdHUzMiB2c1s0XTtcXG4tXFx0aW50IHJlcztcXG4tXFxuLVxcdEJVSUxEX0JVR19PTihudW1fcmVncyBcXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi1cXHRpZiAocmVzKVxcbi1cXHRcXHRyZXR1cm4gcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHUzMiB1ID0gdnNbaV07XFxuLVxcbi1cXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0XFx0IGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiBcXHRpZiAocmVzKVxcbiBcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuKyNlbmRpZlxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbiBcXHRpZiAoIXByaXYpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuKyNlbmRpZlxcbitcXG4gXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4gXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXFxuc2ltaWxhcml0eSBpbmRleCA5OSVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5pbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5AQCAtODUwLDggKzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVxcdFxcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXFx0XFx0OFxcbiBcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0dST1VQX05VTVxcdDNcXG4rXFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdDExXFxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXFx0XFx0MTBcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbiBcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFxcdTAwM2MgOClcXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoOCBcXHUwMDNjPSAocG9ydCkgXFx1MDAyNlxcdTAwMjYgKHBvcnQpIFxcdTAwM2MgOSlcXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XFxuIFxcdHU2NCByeF9mcmFtZXM7XFxuIFxcdHU2NCB0eF9mcmFtZXM7XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0dW5zaWduZWQgY2hhciBsZWRfZHV0eTtcXG4rXFx0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xcbitcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xcbisjZW5kaWZcXG4gfTtcXG4gXFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi40Njc0OWI1N2ZlZTNjZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xcbkBAIC0wLDAgKzEsNjMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VsZWRzLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuK1xcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVxcdTAwM2Vwb3J0KVxcbisjZGVmaW5lIHRvX3l0OTIxeF9wcml2KHBwKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXFx1MDAzZWluZGV4XSlcXG4rI2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cXHUwMDNlZHMuZGV2KVxcbitcXG4rc3RhdGljIHUzMiB5dDkyMXhfbGVkX3JlZ2FkZHIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwKVxcbit7XFxuK1xcdHN3aXRjaCAoZ3JvdXApIHtcXG4rXFx0Y2FzZSAwOlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMTpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xcbitcXHRjYXNlIDI6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFxcdTAwMjZ2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Km9ucCA9ICh2YWwgXFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcXG4rXFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncm91cCk7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxcbitcXHRcXHRcXHRcXHQgICAgICBjdHJsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBjaGFyICpkdXR5cClcXG4re1xcbitcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0ge1xcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDMpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXFxuK1xcdH07XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHlfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGU7XFxuK1xcdHVuc2lnbmVkIGludCBkdXR5O1xcbitcXG4rXFx0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDtcXG4rXFx0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiArIDE7ICAvKiBNX1NRUlQyICogY3ljbGUgKi9cXG4rXFx0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcXHUwMDI2Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGZvciAoOyBjeWNsZSBcXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZT0gMSwgY3ljbGUgXFx1MDAzZVxcdTAwM2U9IDEpXFxuK1xcdFxcdGlmIChjeWNsZV9yZXEgXFx1MDAzZT0gY3ljbGVfdXBwZXIgXFx1MDAzZVxcdTAwM2UgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdCpjeWNsZXAgPSBjeWNsZTtcXG4rXFxuK1xcdGR1dHlfcmVxID0gRElWX1JPVU5EX0NMT1NFU1QoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICpcXG4rXFx0XFx0XFx0XFx0ICAgICAob24gXFx1MDAzZSBvZmYgPyBvZmYgOiBvbiksIGN5Y2xlX3JlcSk7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXFxuK1xcdFxcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXFx1MDAzZT0gKGR1dHlzW2kgLSAxXSArIGR1dHlzW2ldKSAvIDIpIHtcXG4rXFx0XFx0XFx0ZHV0eSA9IGR1dHlzW2ldO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRpZiAob24gXFx1MDAzZSBvZmYpXFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xcbitcXHQqZHV0eXAgPSBkdXR5O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1bnNpZ25lZCBzaG9ydCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgY2hhciBkdXR5O1xcbitcXHRib29sIHVzZV9jeWNsZTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0aWYgKCEqb25wIFxcdTAwMjZcXHUwMDI2ICEqb2ZmcCkge1xcbitcXHRcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xcbitcXHRcXHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xcbitcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpKyspXFxuK1xcdFxcdFxcdGlmIChpICE9IGdyb3VwIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2R1dHkpIHtcXG4rXFx0XFx0XFx0XFx0ZHV0eSA9IHBwLVxcdTAwM2VsZWRfZHV0eTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRib29sIGNoYW5nZV9jeWNsZTtcXG4rXFx0XFx0Ym9vbCBjaGFuZ2VfZHV0eTtcXG4rXFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcXHUwMDI2Y3ljbGUsIFxcdTAwMjZkdXR5KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdFxcdHVzZV9jeWNsZSA9IGN5Y2xlIFxcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBjeWNsZSAhPSBwcC1cXHUwMDNlbGVkX2N5Y2xlO1xcbitcXHRcXHRjaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxcbitcXHRcXHRcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNO1xcbitcXHRcXHRcXHQgICAgIGkrKykge1xcbitcXHRcXHRcXHRcXHRpZiAoaSA9PSBncm91cCB8fCAhcHAtXFx1MDAzZWxlZHNbaV0pXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRcXHRcXHRpZiAoKGNoYW5nZV9jeWNsZSBcXHUwMDI2XFx1MDAyNiBwcC1cXHUwMDNlbGVkc1tpXS1cXHUwMDNldXNlX2N5Y2xlKSB8fFxcbitcXHRcXHRcXHRcXHQgICAgKGNoYW5nZV9kdXR5IFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkpXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0aWYgKHZhbCAhPSBjdHJsKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcXG4rXFx0c3dpdGNoIChkdXR5IFxcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZhbGx0aHJvdWdoO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgxLCAyKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFlUOTIxWF9MRURfRFVUWSg1LCA2KTpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGlmIChkdXR5IFxcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRpZiAodXNlX2N5Y2xlKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XFxuK1xcdH1cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRjdHJsID0gdmFsIFxcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XFxuK1xcdFxcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcXG4rXFx0aWYgKHVzZV9jeWNsZSlcXG4rXFx0XFx0cHAtXFx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcXG4rXFx0cHAtXFx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcXG4rXFxuK1xcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XFxuK1xcdCpvZmZwID0gY3ljbGUgLSAqb25wO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHR1MzIgbWFzaztcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tdID0ge1xcbitcXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxcbitcXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcXG4rXFx0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTX0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRn0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS30sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfUlgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS30sXFxuK1xcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxcbitcXHQgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LfSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sXFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0aW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdGlmICghZmxhZ3MpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcbitcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgbWFwLVxcdTAwM2VmbGFncykgPT0gbWFwLVxcdTAwM2VmbGFncykge1xcbitcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+bWFwLVxcdTAwM2VmbGFncztcXG4rXFx0XFx0XFx0aWYgKCFmbGFncylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGlmICgodmFsIFxcdTAwMjYgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkpICE9XFxuK1xcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcXG4rXFx0XFx0KmZsYWdzcCA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoZ3JvdXAgIT0gMikge1xcbitcXHRcXHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFxcdTAwMjZ2YWwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHQqZmxhZ3NwID0gMDtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcXHUwMDI2eXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XFxuK1xcbitcXHRcXHRpZiAoKHZhbCBcXHUwMDI2IG1hcC1cXHUwMDNlbWFzaykgPT0gbWFwLVxcdTAwM2VtYXNrKVxcbitcXHRcXHRcXHQqZmxhZ3NwIHw9IG1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0Y3RybCA9IDA7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbGVkX3RyaWdnZXJfbWFwcyk7IGkrKykge1xcbitcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcCAqbWFwID0gXFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXG4rXFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IG1hcC1cXHUwMDNlZmxhZ3MpID09IG1hcC1cXHUwMDNlZmxhZ3MpIHtcXG4rXFx0XFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfm1hcC1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdFxcdGN0cmwgfD0gbWFwLVxcdTAwM2VtYXNrO1xcbitcXHRcXHRcXHRpZiAoIWZsYWdzKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdGlmIChmbGFncylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xcbitcXG4rXFx0bWFzayA9ICFncm91cCA/IFlUOTIxWF9MRUQwX1BPUlRfQUNUX00gOiBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NO1xcbitcXHRpZiAoZ3JvdXAgPT0gMikge1xcbitcXHRcXHRtYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0fVxcbitcXHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBhZGRyLCBtYXNrLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGlmIChncm91cCAhPSAyKSB7XFxuK1xcdFxcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBtYXNrLCBjdHJsKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2NsZWRfYmxpbmtfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpkZWxheV9vbixcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBkZWxheV9vbixcXG4rXFx0XFx0XFx0XFx0ICAgZGVsYXlfb2ZmKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IGRldmljZSAqIF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcbitcXHRkcCA9IGRzYV90b19wb3J0KFxcdTAwMjZwcml2LVxcdTAwM2VkcywgcHAtXFx1MDAzZWluZGV4KTtcXG4rXFx0aWYgKCFkcCB8fCAhZHAtXFx1MDAzZXVzZXIpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4gXFx1MDAyNmRwLVxcdTAwM2V1c2VyLVxcdTAwM2VkZXY7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFxuK1xcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3NwKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGZsYWdzKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG4rXFx0XFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XFxuK1xcdGNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07XFxuK1xcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XFxuK1xcdGJvb2wgZm9yY2VfaGlnaDtcXG4rXFx0Ym9vbCBmb3JjZV9sb3c7XFxuK1xcdGludCBwb2xhcml0eTtcXG4rXFx0dTMyIGdyb3VwO1xcbitcXHRib29sIG9uO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0aWYgKHBvcnQgPT0gWVQ5MjFYX1BPUlRfTUNVKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiTm8gTEVEcyBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNmdyb3VwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0aWYgKGdyb3VwIFxcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiSW52YWxpZCBMRUQgcmVnICV1IGZvciBwb3J0ICVkXFxcXG5cXFwiLCBncm91cCwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmIChwcC1cXHUwMDNlbGVkc1tncm91cF0pXFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXG4rXFx0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcXFwiYWN0aXZlLWhpZ2hcXFwiKTtcXG4rXFx0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtbG93XFxcIik7XFxuK1xcdGlmIChmb3JjZV9oaWdoIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2xvdykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkR1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRwb3J0LCBncm91cCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XFxuK1xcbitcXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGxlZC1cXHUwMDNlcG9ydCA9IHBwO1xcbitcXHRsZWQtXFx1MDAzZWdyb3VwID0gZ3JvdXA7XFxuK1xcbitcXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT046XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdG9uID0gc3RhdGUgPT0gTEVEU19ERUZTVEFURV9PTjtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxcbitcXHRcXHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXFx1MDAyNm9uKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0bGVkX2NkZXYgPSBcXHUwMDI2bGVkLVxcdTAwM2VjZGV2O1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcXG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcXFwibmV0ZGV2XFxcIjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfZ2V0X2RldmljZSA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZTtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0O1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9zZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX3NldDtcXG4rI2VuZGlmXFxuK1xcbitcXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFxcXCItJXU6JTAyZDolMDJ1XFxcIixcXG4rXFx0XFx0IHByaXYtXFx1MDAzZWRzLmluZGV4LCBwb3J0LCBncm91cCk7XFxuK1xcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XFxuK1xcdFxcdC5md25vZGUgPSBmd25vZGUsXFxuK1xcdFxcdC5kZXZpY2VuYW1lID0gbmFtZSxcXG4rXFx0XFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcXG4rXFx0fTtcXG4rXFx0cmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsIFxcdTAwMjZpbml0X2RhdGEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChwb2xhcml0eSkge1xcbitcXHRcXHR1MzIgYml0ID0gWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdyb3VwLCBwb3J0KTtcXG4rXFxuK1xcdFxcdCppbnZfbWFza3AgfD0gYml0O1xcbitcXHRcXHRpZiAocG9sYXJpdHkgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHQqaW52X2N0cmxwIHw9IGJpdDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2VycjpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xcbitcXHRyZXR1cm4gcmVzO1xcbit9XFxuK1xcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXG4rXFx0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQrKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbitcXG4rXFx0XFx0Zm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCBcXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBncm91cCsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcbitcXHRcXHRcXHRpZiAobGVkKVxcbitcXHRcXHRcXHRcXHRkZXZtX2xlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKGRldiwgXFx1MDAyNmxlZC1cXHUwMDNlY2Rldik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgXFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXFx1MDAzZWxlZHNbZ3JvdXBdO1xcbitcXG4rXFx0XFx0XFx0aWYgKGxlZCkge1xcbitcXHRcXHRcXHRcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBpbnZfY3RybCA9IDA7XFxuK1xcdHUzMiBpbnZfbWFzayA9IDA7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdFxcdGlmICghbGVkc19ucClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmludl9tYXNrLCBcXHUwMDI2aW52X2N0cmwpO1xcbitcXHRcXHRcXHRpZiAocmVzKSB7XFxuK1xcdFxcdFxcdFxcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxcbitcXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChpbnZfbWFzaylcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludl9jdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XFxuK1xcdHJldHVybiByZXM7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjY3MzczYTE5MGM4ZjRiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxuQEAgLTAsMCArMSwxMjEgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9MRURTX0hcXG4rI2RlZmluZSBfWVRfTEVEU19IXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tjb25maWcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xlZHMuaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXFx0XFx0XFx0MHhkMDAwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cXHRcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX01cXHRHRU5NQVNLKDIwLCAxOSlcXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXFx0XFx0R0VOTUFTSygxNiwgMTMpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXFx0XFx0XFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTcsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1xcdEJJVCgxNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcXHRCSVQoMTYpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA0MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVxcdFxcdEdFTk1BU0soMzEsIDMwKVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2VcXHUwMDNlIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXFx0XFx0R0VOTUFTSygyOSwgMjgpXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcXHRcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcXHRCSVQoMjcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXFx0XFx0R0VOTUFTSygyNiwgMjUpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDIpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XFx0XFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcXHRcXHQoMHhkMDA4MCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVxcdFxcdEdFTk1BU0soNCAqIChncnApICsgMTksIDQgKiAoZ3JwKSArIDE4KVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdycClcXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNjXFx1MDAzYyB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTYpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1xcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1xcdEJJVCgxNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LXFx0QklUKDEzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFxcdEJJVCgxMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcXHRCSVQoMTEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LXFx0XFx0QklUKDEwKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1xcdFxcdEJJVCg5KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWFxcdFxcdEJJVCg3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVxcdFxcdEJJVCg2KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTVxcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcXHRCSVQoMylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcXHRCSVQoMilcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1xcdEJJVCgxKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9DVFJMXFx0XFx0MHhkMDEwMFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOS1xcdFxcdEdFTk1BU0soMjUsIDI0KVxcdC8qIGRlbGF5PyAqL1xcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcXHRcXHRCSVQoNClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cXHRcXHRHRU5NQVNLKDEsIDApXFx0LyogI2dycCAtIDEgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXFx0KDB4ZDAxMDQgKyA4ICogKDIgLSAoZ3JwKSkgKyA0ICogKChwb3J0KSAvIDUpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXFx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICsgMSwgNiAqICgocG9ydCkgJSA1KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX1BPUlRTXFx0XFx0MHhkMDFjNFxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlxcdFxcdDB4ZDAxYzhcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfSU5WX0lOVm5tKGdycCwgcG9ydClcXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXFx0KDB4ZDAxZDAgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVxcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyAxLCA2ICogKGdycCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoZ3JwKSkpXFxuK1xcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXFx0NjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlxcdDUxMlxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXFx0MjA0OFxcbitcXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTVxcdFxcdDI0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZKG5vbSwgZGVub20pXFx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcXG4rXFxuK3N0cnVjdCB5dDkyMXhfcHJpdjtcXG4rXFxuK3N0cnVjdCB5dDkyMXhfbGVkIHtcXG4rXFx0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBvcnQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XFxuK1xcbitcXHRib29sIHVzZV9jeWNsZToxO1xcbitcXHRib29sIHVzZV9kdXR5OjE7XFxuK307XFxuK1xcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFxuK3ZvaWQgeXQ5MjF4X2xlZHNfcmVtb3ZlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xcbitcXG4rI2Vsc2VcXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB5dDkyMXhfbGVkc19yZW1vdmUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KSB7fVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo1MC40MzM3NjYwNDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTQ5MjIxNTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciBmb3IgYW4gTURJTyBkZXZpY2UuIFRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBjaGlwIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLCBtYWtpbmcgdGhlIGNvZGUgaW1wb3NzaWJsZSB0byByZWFjaCBhbmQgdGVzdCBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTVkMjZhNzYyMDQ3N2UyNGZmMWVlZmRmMGZjYTViNzk0ODk1ZTM1MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTc6NTE6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uYTNjOGQ4YTAxYzZiYTcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xODIzMCw3ICsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuK0Y6XHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xuIEY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuIFxuIE1PWEEgU01BUlRJTy9JTkRVU1RJTy9JTlRFTExJTyBTRVJJQUwgQ0FSRFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuQEAgLTcyLDYgKzcyLDggQEAgY29uZmlnIE5FVF9EU0FfTVY4OEU2MDYwXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCJcbiBcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcIlxuK1xuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wiXG4gXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L0tjb25maWdcIlxuQEAgLTE1OCwxMiArMTYwLDQgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgVml0ZXNzZSBWU0M3Mzg1LCBWU0M3Mzg4LCBWU0M3Mzk1XG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4tXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSArMTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSArPSB2aXRlc3NlLXZzYzczeHgtcGxhdGZvcm0ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0Kz0gYjUzL1xuIG9iai15XHRcdFx0XHQrPSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQrPSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCs9IG1pY3JvY2hpcC9cbitvYmoteVx0XHRcdFx0Kz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQrPSBtdjg4ZTZ4eHgvXG4gb2JqLXlcdFx0XHRcdCs9IG14bDg2Mnh4L1xuIG9iai15XHRcdFx0XHQrPSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICsxLDE3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4rXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFwiXG4rXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4rXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuK1x0aGVscFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4rXHQgIGNoaXAuXG4rXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcbitcdGJvb2wgXCJMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwiXG4rXHRkZWZhdWx0IHlcbitcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbitcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuK1x0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZVxuQEAgLTAsMCArMSw1IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuK3l0OTIxeC0kKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKSArPSBsZWRzLm9cbit5dDkyMXgtb2JqcyArPSBzbWkub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbmluZGV4IDE1OWIxNjYwNmY2Y2E0Li41NTNlZmFjZDRmNWVlMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcbkBAIC0xMyw3ICsxMyw2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9oc3IuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZi5oXHUwMDNlXG5AQCAtMjYsNyArMjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcInl0OTIxeC5oXCJcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuIFxuIHN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuIFx0dW5zaWduZWQgaW50IHNpemU7XG5AQCAtMTUxLDEzICsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbi1cbiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFXHQ0MDk1XG4gXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9TTEVFUF9VU1x0MTAwMDBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcdDEwMDAwMFxuLVxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXG4gICpcbiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbid0IGJlY29tZVxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cbi0gKlxuLSAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXG4tICovXG4tXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbi17XG4tXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuLVx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbi1cdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuLVx0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGludCByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuLVx0XHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgKyA0ICogaSwgdmFsc1tpXSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuIHJlcztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuLXtcbi1cdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuLVx0dTMyIHZzWzRdO1xuLVx0aW50IHJlcztcbi1cbi1cdEJVSUxEX0JVR19PTihudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdGlmICh1ICE9IHZzW2ldKVxuLVx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuLVxuLVx0XHR2c1tpXSA9IHU7XG4tXHR9XG4tXG4tXHRpZiAoIWNoYW5nZWQpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0O1xuQEAgLTQ3ODYsNiArNDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0ZGV2X3dhcm4oZGV2LCBcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwiLCByZXMpO1xuKyNlbmRpZlxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4ODYsNiArNDY4NiwxMCBAQCBzdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuIFx0aWYgKCFwcml2KVxuIFx0XHRyZXR1cm47XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR5dDkyMXhfbGVkc19yZW1vdmUocHJpdik7XG4rI2VuZGlmXG4rXG4gXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiBcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gI2RlZmluZSBZVDkyMVhfQUNMX05VTVx0XHQoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSylcbiAjZGVmaW5lIFlUOTIxWF9VREZfTlVNXHRcdDhcbiBcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXHQzXG4rXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuLSNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbisjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTUNVXHRcdDEwXG4rXG4rI2RlZmluZSBZVDkyMVhfTkFNRVx0XCJ5dDkyMXhcIlxuIFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFx1MDAzYz0gKHBvcnQpIFx1MDAyNlx1MDAyNiAocG9ydCkgXHUwMDNjIDkpXG5AQCAtOTM4LDYgKzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuK1x0dW5zaWduZWQgc2hvcnQgbGVkX2N5Y2xlO1xuK1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuKyNlbmRpZlxuIH07XG4gXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2NzQ5YjU3ZmVlM2NkXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xuQEAgLTAsMCArMSw2MzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bGVkcy5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4rI2RlZmluZSB0b195dDkyMXhfcG9ydChsZWQpICgobGVkKS1cdTAwM2Vwb3J0KVxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXG4rXHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbitcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4re1xuK1x0c3dpdGNoIChncm91cCkge1xuK1x0Y2FzZSAwOlxuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpO1xuK1x0Y2FzZSAxOlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDI6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2VfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCAqb25wKVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpvbnAgPSAodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgPT1cbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgPSBvbiA/IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKSA6XG4rXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuK1x0XHRcdFx0ICAgICAgY3RybCk7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgb24sXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4rXHRcdFx0dW5zaWduZWQgY2hhciAqZHV0eXApXG4re1xuK1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDYpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNCksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDIpLFxuK1x0fTtcbitcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbitcdHVuc2lnbmVkIGludCBjeWNsZV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XG4rXHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBpbnQgZHV0eTtcbitcbitcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4rXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xuK1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbitcdFx0aWYgKGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZSAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0KmN5Y2xlcCA9IGN5Y2xlO1xuK1xuK1x0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxuK1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSBBUlJBWV9TSVpFKGR1dHlzKSAtIDE7OyBpLS0pXG4rXHRcdGlmIChpID09IDAgfHwgZHV0eV9yZXEgXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xuK1x0XHRcdGR1dHkgPSBkdXR5c1tpXTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0aWYgKG9uIFx1MDAzZSBvZmYpXG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5O1xuK1x0KmR1dHlwID0gZHV0eTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xuK1x0dW5zaWduZWQgY2hhciBkdXR5O1xuK1x0Ym9vbCB1c2VfY3ljbGU7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoISpvbnAgXHUwMDI2XHUwMDI2ICEqb2ZmcCkge1xuK1x0XHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcbitcdFx0XHRpZiAoaSAhPSBncm91cCBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkge1xuK1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHR1c2VfY3ljbGUgPSBmYWxzZTtcbitcdH0gZWxzZSB7XG4rXHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuK1x0XHRib29sIGNoYW5nZV9kdXR5O1xuK1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGN5Y2xlIFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcbitcdFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFx1MDAyNlx1MDAyNiBjeWNsZSAhPSBwcC1cdTAwM2VsZWRfY3ljbGU7XG4rXHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbitcdFx0aWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSlcbitcdFx0XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XG4rXHRcdFx0ICAgICBpKyspIHtcbitcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuK1x0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRcdGlmICgoY2hhbmdlX2N5Y2xlIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9jeWNsZSkgfHxcbitcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuK1x0XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdFx0fVxuK1x0fVxuK1xuK1x0LyogVGhlIGNoaXAgc2VlbXMgdG8gamFtIGEgd2hpbGUgaWYgY2hhbmdpbmcgZHV0eSBkaXJlY3RseSAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSB2YWwgXHUwMDI2IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbitcdHN3aXRjaCAoZHV0eSBcdTAwM2U9IFlUOTIxWF9MRURfRFVUWSgxLCAyKSA/IGR1dHkgOlxuK1x0XHRZVDkyMVhfTEVEX0RVVFlfREVOT00gLSBkdXR5KSB7XG4rXHRkZWZhdWx0OlxuK1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzM7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180O1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRpZiAoZHV0eSBcdTAwM2MgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0aWYgKHVzZV9jeWNsZSkge1xuK1x0XHRtYXNrIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTTtcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKDkgLSBfX2ZscyhjeWNsZSkpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfihZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSB8XG4rXHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4rXHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdyb3VwKTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuK1x0ZWxzZVxuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdyb3VwLCBfX2ZscyhjeWNsZSkgLSA5KTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSB1c2VfY3ljbGU7XG4rXHRpZiAodXNlX2N5Y2xlKVxuK1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IHRydWU7XG4rXHRwcC1cdTAwM2VsZWRfZHV0eSA9IGR1dHk7XG4rXG4rXHQqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pO1xuK1x0Km9mZnAgPSBjeWNsZSAtICpvbnA7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBtYXNrO1xuK307XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW10gPSB7XG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX0xJTkspLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEx9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9MSU5LXzEwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDApLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfTElOS18xMDAwKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME19LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVgpLCBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTH0sXG4rXHR7QklUKFRSSUdHRVJfTkVUREVWX1RYKSwgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTkt9LFxuK1x0e0JJVChUUklHR0VSX05FVERFVl9SWCksIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LfSxcbitcdHtCSVQoVFJJR0dFUl9ORVRERVZfVFhfRVJSKSB8IEJJVChUUklHR0VSX05FVERFVl9SWF9FUlIpLFxuK1x0IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS30sXG4rfTtcbitcbitzdGF0aWMgYm9vbFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdGludCBncm91cCwgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRpZiAoIWZsYWdzKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKChmbGFncyBcdTAwMjYgbWFwLVx1MDAzZWZsYWdzKSA9PSBtYXAtXHUwMDNlZmxhZ3MpIHtcbitcdFx0XHRmbGFncyBcdTAwMjY9IH5tYXAtXHUwMDNlZmxhZ3M7XG4rXHRcdFx0aWYgKCFmbGFncylcbitcdFx0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCxcbitcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbit7XG4rXHR1MzIgYWRkcjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmICgodmFsIFx1MDAyNiBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKSkgIT1cbitcdCAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCkpIHtcbitcdFx0KmZsYWdzcCA9IDA7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0aWYgKGdyb3VwICE9IDIpIHtcbitcdFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHQqZmxhZ3NwID0gMDtcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzKTsgaSsrKSB7XG4rXHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwICptYXAgPSBcdTAwMjZ5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKCh2YWwgXHUwMDI2IG1hcC1cdTAwM2VtYXNrKSA9PSBtYXAtXHUwMDNlbWFzaylcbitcdFx0XHQqZmxhZ3NwIHw9IG1hcC1cdTAwM2VmbGFncztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHMpOyBpKyspIHtcbitcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXAgKm1hcCA9IFx1MDAyNnl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xuK1xuK1x0XHRpZiAoKGZsYWdzIFx1MDAyNiBtYXAtXHUwMDNlZmxhZ3MpID09IG1hcC1cdTAwM2VmbGFncykge1xuK1x0XHRcdGZsYWdzIFx1MDAyNj0gfm1hcC1cdTAwM2VmbGFncztcbitcdFx0XHRjdHJsIHw9IG1hcC1cdTAwM2VtYXNrO1xuK1x0XHRcdGlmICghZmxhZ3MpXG4rXHRcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1x0aWYgKGZsYWdzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIHUzMiAqaW52X21hc2twLCB1MzIgKmludl9jdHJscClcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xuK1x0Y2hhciBuYW1lW0xFRF9NQVhfTkFNRV9TSVpFXTtcbitcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xuK1x0Ym9vbCBmb3JjZV9oaWdoO1xuK1x0Ym9vbCBmb3JjZV9sb3c7XG4rXHRpbnQgcG9sYXJpdHk7XG4rXHR1MzIgZ3JvdXA7XG4rXHRib29sIG9uO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJObyBMRURzIGZvciBwb3J0ICVkXFxuXCIsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdHJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsIFwicmVnXCIsIFx1MDAyNmdyb3VwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcXG5cIiwgZ3JvdXAsIHBvcnQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdGlmIChwcC1cdTAwM2VsZWRzW2dyb3VwXSlcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXG4rXHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWhpZ2hcIik7XG4rXHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCJhY3RpdmUtbG93XCIpO1xuK1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxcblwiLFxuK1x0XHRcdHBvcnQsIGdyb3VwKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXHRwb2xhcml0eSA9IGZvcmNlX2hpZ2ggPyAxIDogZm9yY2VfbG93ID8gLTEgOiAwO1xuK1xuK1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbGVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcdHN3aXRjaCAoc3RhdGUpIHtcbitcdGNhc2UgTEVEU19ERUZTVEFURV9PRkY6XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4rXHRkZWZhdWx0OlxuK1x0XHRvbiA9IHN0YXRlID09IExFRFNfREVGU1RBVEVfT047XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6XG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2VfZ2V0KHByaXYsIHBvcnQsIGdyb3VwLCBcdTAwMjZvbik7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzcyA9IG9uO1xuK1x0bGVkX2NkZXYtXHUwMDNlbWF4X2JyaWdodG5lc3MgPSAxO1xuK1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuK1x0bGVkX2NkZXYtXHUwMDNlYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSB5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZztcbitcdGxlZF9jZGV2LVx1MDAzZWJsaW5rX3NldCA9IHl0OTIxeF9jbGVkX2JsaW5rX3NldDtcbisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfdHJpZ2dlciA9IFwibmV0ZGV2XCI7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XG4rI2VuZGlmXG4rXG4rXHRzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FIFwiLSV1OiUwMmQ6JTAydVwiLFxuK1x0XHQgcHJpdi1cdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xuK1x0aW5pdF9kYXRhID0gKHR5cGVvZihpbml0X2RhdGEpKXtcbitcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbitcdFx0LmRldmljZW5hbWUgPSBuYW1lLFxuK1x0XHQuZGV2bmFtZV9tYW5kYXRvcnkgPSB0cnVlLFxuK1x0fTtcbitcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcdTAwMjZpbml0X2RhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRpZiAocG9sYXJpdHkpIHtcbitcdFx0dTMyIGJpdCA9IFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncm91cCwgcG9ydCk7XG4rXG4rXHRcdCppbnZfbWFza3AgfD0gYml0O1xuK1x0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4rXHRcdFx0Kmludl9jdHJscCB8PSBiaXQ7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKSB7XG4rXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1xuK1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0XHRpZiAobGVkKVxuK1x0XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbitcdFx0fVxuK1xuK1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0XHRpZiAobGVkKSB7XG4rXHRcdFx0XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4rXHRcdFx0XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbit9XG4rXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdHUzMiBpbnZfY3RybCA9IDA7XG4rXHR1MzIgaW52X21hc2sgPSAwO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcdGludCByZXM7XG4rXG4rXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3BvcnQoZHAsIGRzKSB7XG4rXHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcbitcdFx0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcbitcdFx0aWYgKCFkcC1cdTAwM2VkbilcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcImxlZHNcIik7XG4rXHRcdGlmICghbGVkc19ucClcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4rXHRcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxuK1x0XHRcdFx0XHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2aW52X21hc2ssIFx1MDAyNmludl9jdHJsKTtcbitcdFx0XHRpZiAocmVzKSB7XG4rXHRcdFx0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdFx0XHRcdGdvdG8gZXJyO1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbitcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRtYXNrID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfTSB8IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4rXHRjdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTShZVDkyMVhfUE9SVF9OVU0gLSAxKSB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuK1x0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlbmQ7XG4rXG4rXHQvKiBJbnZlcnNpb24gaXMgaW50ZXJuYWwgLSBmb3JjZSBvbiB3aWxsIGdpdmUgbG93IGxvZ2ljLlxuK1x0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cbitcdCAqL1xuK1x0aWYgKGludl9tYXNrKVxuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4rXHRcdFx0XHRcdCAgICAgaW52X2N0cmwpO1xuK1xuK2VuZDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0eXQ5MjF4X2xlZHNfcmVtb3ZlKHByaXYpO1xuK1x0cmV0dXJuIHJlcztcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42NzM3M2ExOTBjOGY0YlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbkBAIC0wLDAgKzEsMTIxIEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfTEVEU19IXG4rI2RlZmluZSBfWVRfTEVEU19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tjb25maWcuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlZHMuaFx1MDAzZVxuK1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9DVFJMXHRcdFx0MHhkMDAwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTlx0XHRcdEJJVCgyMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTVx0XHRHRU5NQVNLKDE2LCAxMylcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX01cdFx0XHRHRU5NQVNLKDEsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfU0VSSUFMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMilcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXHRcdCgweGQwMDA0ICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNywgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9MSU5LX1RSWV9ESVNcdEJJVCgxNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydClcdFx0KDB4ZDAwNDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NXHRcdEdFTk1BU0soMjksIDI4KVx0LyogY3ljbGUgPSA1MTIgXHUwMDNlXHUwMDNlIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFx0QklUKDI3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NXHRcdEdFTk1BU0soMjYsIDI1KVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zXHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgzKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydClcdFx0KDB4ZDAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JwKVx0XHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE5LCA0ICogKGdycCkgKyAxOClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNCAqIChncnApICsgMTgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApXHRHRU5NQVNLKDQgKiAoZ3JwKSArIDE3LCA0ICogKGdycCkgKyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE2KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX01cdFx0XHRHRU5NQVNLKDE1LCAwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0VFRV9CTElOS1x0XHRCSVQoMTUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0FDVElWRV9CTElOS1x0QklUKDEzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXHRCSVQoMTIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9UWF9CTElOS1x0XHRCSVQoMTApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTktcdFx0QklUKDkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhcdFx0QklUKDcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1cdFx0QklUKDYpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1cdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LXHRCSVQoMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTV9CTElOS1x0QklUKDEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9VTktcdFx0R0VOTUFTSygyNSwgMjQpXHQvKiBkZWxheT8gKi9cbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0FDVElWRV9MT1dcdFx0QklUKDQpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00sICh4KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcdCgweGQwMTA0ICsgOCAqICgyIC0gKGdycCkpICsgNCAqICgocG9ydCkgLyA1KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKChwb3J0KSAlIDUpICsgMikpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDEsIDYgKiAoKHBvcnQpICUgNSkpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9QT1JUU1x0XHQweGQwMWM0XG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9JTlZcdFx0MHhkMDFjOFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSArIChwb3J0KSlcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcdCgweGQwMWQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKVx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgMSwgNiAqIChncnApKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRUQoZ3JwLCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqIChncnApKSlcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUlOXHQ2NFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19ERUZcdDUxMlxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbitcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbisjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKVx0KFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqIChub20pIC8gKGRlbm9tKSlcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4rc3RydWN0IHl0OTIxeF9sZWQge1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0O1xuK1x0dW5zaWduZWQgY2hhciBncm91cDtcbitcbitcdGJvb2wgdXNlX2N5Y2xlOjE7XG4rXHRib29sIHVzZV9kdXR5OjE7XG4rfTtcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcbit2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpO1xuK1xuKyNlbHNlXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHl0OTIxeF9sZWRzX3JlbW92ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpIHt9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xuQEAgLTAsMCArMSwxNTcgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiY2hpcC5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbitcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4rXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4rXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbitcdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCp2YWxwID0gdmFsO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4re1xuK1x0aW50IHJlcztcbitcdHUzMiB2O1xuK1x0dTMyIHU7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHR1ID0gdjtcbitcdHUgXHUwMDI2PSB+bWFzaztcbitcdHUgfD0gdmFsO1xuK1x0aWYgKHUgPT0gdilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFx1MDAyNnZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGludCByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbit7XG4rXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbitcdHUzMiB2c1s0XTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbitcdFx0dTMyIHUgPSB2c1tpXTtcbitcbitcdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbitcdFx0dSB8PSB2YWxzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHRpZiAodSAhPSB2c1tpXSlcbitcdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbitcbitcdFx0dnNbaV0gPSB1O1xuK1x0fVxuK1xuK1x0aWYgKCFjaGFuZ2VkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJlOTU2MDY1ZWI5MGVlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXG5AQCAtMCwwICsxLDg4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbisvKlxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4rICovXG4rXG4rI2lmbmRlZiBfWVRfU01JX0hcbisjZGVmaW5lIF9ZVF9TTUlfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JkcGFydC5oXHUwMDNlXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4raW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApO1xuK2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssXG4rXHRcdFx0ICAgdTMyIHZhbCk7XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spO1xuK31cbitcbisvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXG4rICogdmlzaWJsZSwgdW50aWwgdGhlIGxhc3Qgd29yZCBpcyB3cml0dGVuLlxuKyAqXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xuKyAqIGVsaW1pbmF0ZSBwb3RlbnRpYWwgaXNzdWVzLCBhbHRob3VnaCBwYXJ0aWFsIHJlYWRzL3dyaXRlcyBhcmUgYWxzbyBwb3NzaWJsZS5cbisgKi9cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcbit7XG4rXHQqbG8gXHUwMDI2PSB+bG93ZXJfMzJfYml0cyhtYXNrKTtcbitcdCpoaSBcdTAwMjY9IH51cHBlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbitcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxuK1x0XHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuK1x0XHQgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0ICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4re1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XG4rfVxuK1xuKyNlbmRpZlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6NTE6NTAuNDMzNzY4NTA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMyNjA5NDM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1vdG9yY29tbSBZVDkyMTUgTEVEIFN1cHBvcnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIEl0IGxvb2tzIGxpa2UgdGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgd2l0aGluIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2AsIHNwZWNpZmljYWxseSBhZGRpbmcgZmlsZXMgbGlrZSBgbGVkcy5jYCwgYGxlZHMuaGAsIGBzbWkuY2AsIGBzbWkuaGAsIGFuZCB0aGVuIHVwZGF0aW5nIGBjaGlwLmNgLCBgY2hpcC5oYCwgYEtjb25maWdgLCBhbmQgYE1ha2VmaWxlYC4gVGhlIGNvcmUgb2YgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IHNlZW1zIHRvIGJlIGNvbnRyb2xsZWQgYnkgYENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTYC4gU28sIGl0J3MgYSBoYXJkd2FyZSBkcml2ZXIsIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgZHJpdmVyIHNwZWNpZmljYWxseSwgZm9yIHRoaXMgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2guXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIGFib3V0IHRoZSB0ZXN0aW5nIGVudmlyb25tZW50LiBDYW4gSSBhY3R1YWxseSAqcmVhY2gqIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBEU0EgZHJpdmVycywgZXNwZWNpYWxseSB0aG9zZSB0aWVkIHRvIHNwZWNpZmljIHN3aXRjaCBjaGlwcywgdHlwaWNhbGx5IG5lZWQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgYSByZWFsbHkgZ29vZCBlbXVsYXRpb24uIEknbSB0aGlua2luZyBhYm91dCBob3cgdGhlIGRyaXZlciBnZXRzIGluaXRpYWxpemVkIOKAkyBEU0EgZHJpdmVycyB1c3VhbGx5IHByb2JlIHRocm91Z2ggdGhlIGRldmljZSB0cmVlIG9yIHRoZSBNRElPIGJ1cy4gU28sIHdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGUgTURJTyBwcm9iZSB3aWxsIGp1c3QgZmFpbCwgYW5kIHRoZSBkcml2ZXIgd29uJ3QgZXZlbiBiZSBpbml0aWFsaXplZCwgcmlnaHQ/XG5cbkkgd29uZGVyIGlmIHRoZXJlJ3MgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBhdmFpbGFibGUgZm9yIHRoaXMgc3BlY2lmaWMgc3dpdGNoLiBQcm9iYWJseSBub3QsIGJ1dCBpdCdzIHdvcnRoIGEgY2hlY2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBwYXRoIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGZvciBmdXp6aW5nIHdpdGhvdXQgdGhlIGhhcmR3YXJlLlxuXG5MZXQncyBkaWcgaW50byBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgIGFuZCBzZWUgaG93IGl0IGhhbmRsZXMgdGhlIHByb2JlLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gcXVpY2tseSBsb2NhdGUgdGhlIHByb2JlIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBJIGNhbiB1bmRlcnN0YW5kIHRoZSBkcml2ZXIncyBkZXBlbmRlbmNpZXMgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgaW4gYSB2aXJ0dWFsaXplZCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjUxOjU2Ljc1OTg2NzExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NzcyOTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjgyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MTg6c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzcyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzM6XFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3NC1cXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MTo1Ny4xMDc2MDgxOTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjMwNjM1MjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHl0OTIxeF9tZGlvX3Byb2JlYCBiYXNlZCBvbiB3aGF0IEkgY2FuIHNlZTpcblxuKipEaXNzZWN0aW5nIGB5dDkyMXhfbWRpb19wcm9iZWAqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIG9yIHNldHVwIG9mIHNvbWV0aGluZyByZWxhdGVkIHRvIE1ESU8gKE1hbmFnZW1lbnQgRGF0YSBJbnB1dC9PdXRwdXQpIGNvbW11bmljYXRpb24sIHNwZWNpZmljYWxseSBmb3IgdGhlIGB5dDkyMXhgIGRldmljZS4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgTURJTyBpcyB1c3VhbGx5IGhvdyB0aGUgc3lzdGVtIHRhbGtzIHRvIFBIWXMgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVycykgYW5kIG90aGVyIGxvdy1sZXZlbCBuZXR3b3JrIGludGVyZmFjZSBjb21wb25lbnRzLiBTbywgSSBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZSByZXNwb25zaWJsZSBmb3IgdGhpbmdzIGxpa2U6IGRldGVjdGluZyB0aGUgUEhZLCBjb25maWd1cmluZyBpdHMgcmVnaXN0ZXJzLCBzZXR0aW5nIHVwIHRoZSBuZWNlc3NhcnkgY2xvY2tzIG9yIGludGVycnVwdCBsaW5lcyBmb3IgY29tbXVuaWNhdGlvbiwgYW5kIGZpbmFsbHksIGdldHRpbmcgdGhlIGRldmljZSByZWFkeSBmb3IgZGF0YSB0cmFuc2Zlci4gSSdsbCBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiAqaG93KiBpdCBkb2VzIHRob3NlIHRoaW5ncywgYnV0IHRoYXQncyBteSB3b3JraW5nIGh5cG90aGVzaXMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTUzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6NTI6MDAuNzM4MjQ4NDg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MTgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MTg6XFx0c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuNDcxOTpcXHR7XFxuNDcyMDpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjQ3MjE6XFx0XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG40NzIyOlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcXG40NzIzOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG40NzI0OlxcdFxcbjQ3MjU6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjQ3MjY6XFx0XFx0aWYgKCFwcml2KVxcbjQ3Mjc6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDcyODpcXHRcXG40NzI5OlxcdFxcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG40NzMwOlxcdFxcdGlmICghbWRpbylcXG40NzMxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3MzI6XFx0XFxuNDczMzpcXHRcXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuNDczNDpcXHRcXHRtZGlvLVxcdTAwM2VhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG40NzM1OlxcdFxcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG40NzM2OlxcdFxcbjQ3Mzc6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ3Mzg6XFx0XFxuNDczOTpcXHRcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuNDc0MDpcXHRcXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG40NzQxOlxcdFxcbjQ3NDI6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuNDc0MzpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ3NDQ6XFx0XFxuNDc0NTpcXHRcXHRcXHRwcC1cXHUwMDNlaW5kZXggPSBpO1xcbjQ3NDY6XFx0XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcXG40NzQ3OlxcdFxcdH1cXG40NzQ4OlxcdFxcbjQ3NDk6XFx0XFx0ZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDc1MDpcXHRcXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbjQ3NTE6XFx0XFx0ZHMtXFx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcXG40NzUyOlxcdFxcdGRzLVxcdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xcbjQ3NTM6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbjQ3NTQ6XFx0XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XFxuNDc1NTpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XFxuNDc1NjpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XFxuNDc1NzpcXHRcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XFxuNDc1ODpcXHRcXHRkcy1cXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcXG40NzU5OlxcdFxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XFxuNDc2MDpcXHRcXG40NzYxOlxcdFxcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XFxuNDc2MjpcXHRcXG40NzYzOlxcdFxcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcXG40NzY0OlxcdH1cXG40NzY1OlxcdFxcbjQ3NjY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XFxuNDc2NzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjUyOjAwLjczODgwMzU3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNjk3NjE2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEcml2ZXIgQXNzZXNzbWVudDogV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBhbiBNRElPIGRldmljZSBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIGl0J3MgYSBub24tc3RhcnRlci4gVGhlIE1ESU8gYnVzIHdvbid0IGRldGVjdCB0aGUgZGV2aWNlLCBhbmQgdGhlIHByb2JlIGZ1bmN0aW9uIGVpdGhlciB3b24ndCBiZSBjYWxsZWQsIG9yIGlmIGl0IGlzIChzYXksIHRocm91Z2ggYSBkZXZpY2UgdHJlZSBvdmVybGF5KSwgYW55IGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgdG8gTURJTyByZWdpc3RlcnMgd2lsbCBmYWlsIG9yIHRpbWUgb3V0LlxuXG5JIHN0YXJ0IHRvIGNvbnNpZGVyIGlmIGZ1enppbmcgaXMgZXZlbiBhIHZhbGlkIGFwcHJvYWNoIGhlcmUuIFR5cGljYWxseSwgZHJpdmVycyB0aGF0IGFyZSBoZWF2aWx5IGhhcmR3YXJlLWRlcGVuZGVudCBhcmVuJ3QgZnV6emVkIHVubGVzcyB0aGVyZSdzIGEgc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSDigJMgdGhpbmsgYG1hYzgwMjExX2h3c2ltYCBvciBzb21ldGhpbmcgc2ltaWxhciBmb3Igb3RoZXIgaGFyZHdhcmUuIEluIHJhcmUgY2FzZXMsIHdlIGNhbiBzb21ldGltZXMgaW5zdGFudGlhdGUgYSBkZXZpY2UgYW5kIGNvdmVyIGEgZGVjZW50IGFtb3VudCBvZiBjb2RlIGV2ZW4gd2l0aG91dCB0aGUgaGFyZHdhcmUgcHJlc2VudC4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBmb3IgYW4gTURJTyBkZXZpY2UsIHNwZWNpZmljYWxseSBhZGRpbmcgTEVEIHN1cHBvcnQgdG8gYSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGUgTEVEIGNvZGUgdXNlcyBgeXQ5MjF4X3JlZ19yZWFkYCBhbmQgYHl0OTIxeF9yZWdfd3JpdGVgLCB3aGljaCBhcmUgaW5oZXJlbnRseSB0aWVkIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMuIFdpdGhvdXQgdGhlIGhhcmR3YXJlLCB0aGVzZSB3aWxsIGZhaWwsIG9yIGlmIHdlIHRyeSB0byBtb2NrIHRoZW0sIHRoZSByZXN1bHRpbmcgbG9naWMgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIHNwZWNpZmljIGhhcmR3YXJlIGZ1bmN0aW9uYWxpdHkuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBvbmx5IGluY2x1ZGVzIGNvZGUgdGhhdOKAmXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gU2luY2UgdGhpcyBpcyBmb3IgYSBzcGVjaWZpYyBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLCBhbmQgYXMgZmFyIGFzIEkga25vdywgdGhlcmUgaXMgbm8gZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdGhlIExpbnV4IGtlcm5lbCBvciBhbnl3aGVyZSBlbHNlLCB0aGUgY29kZSBpcyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGUgYW5zd2VyIGlzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSdsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlJ3MgYW55IGF2YWlsYWJsZSBlbXVsYXRpb24gZm9yIHRoaXMgcGFydGljdWxhciBjaGlwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcxMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE3OjUyOjA3LjkwODU2OTAyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjkxMTc2NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW90b3Jjb21tLHl0OTIxNVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTI0PXByb3BlcnRpZXM6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI1LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6MjY6ICAgIGNvbnN0OiBtb3RvcmNvbW0seXQ5MjE1XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTI3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sPTU5PWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTY3LSAgICAgICAgc3dpdGNoQDFkIHtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWw6Njg6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNjktICAgICAgICAgICAgLyogZGVmYXVsdCAweDFkLCBhbHRlcm5hdGUgMHgwICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Njc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIiB9LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjgtXFx0e31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTc6NTI6MTQuNDc3NzAzMjg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUwNTIzMjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIERlY2lzaW9uIGZvciBNb3RvcmNvbW0gWVQ5MjE1IExFRCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzbid0IGFuIGVtdWxhdGlvbiBsYXllcjsgaXQncyBhIGRpcmVjdCBoYXJkd2FyZSBkcml2ZXIuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgZ29pbmcgdG8gYmUgdW50ZXN0YWJsZSB3aXRoIGZ1enppbmcuXG5cblRoZSBkcml2ZXIgcHJvdmlkZXMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIOKAkyBhIHZlcnkgc3BlY2lmaWMgcGllY2Ugb2YgaGFyZHdhcmUuIEl0J3MgYW4gTURJTyBkZXZpY2UsIG1lYW5pbmcgaXQgdGFsa3MgZGlyZWN0bHkgdG8gdGhlIGhhcmR3YXJlLiBBbmQgdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgdGhpcyBjaGlwIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFLiBUaGlzIGNvZGUgc2ltcGx5IHdvbid0IGJlIHJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBydW5zIGluIHRob3NlIHZpcnR1YWxpemVkIHNldHVwcy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGlzIGRyaXZlciBkb2Vzbid0IHRvdWNoIGFueSBnZW5lcmljIGNvZGUuIEFscmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgTUFJTlRBSU5FUlNgLCBgZHJpdmVycy9uZXQvZHNhL0tjb25maWdgLCBgZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlYCwgdGhlIGBtb3RvcmNvbW1gIGRpcmVjdG9yeSdzIGBLY29uZmlnYCBhbmQgYE1ha2VmaWxlYCwgYW5kIHRoZW4gdGhlIHJlbmFtZWQgZHJpdmVyIHNvdXJjZSBmaWxlczogYGNoaXAuY2AsIGBjaGlwLmhgLCBgbGVkcy5jYCwgYGxlZHMuaGAsIGBzbWkuY2AsIGBzbWkuaGAuIFRoaXMgaXMgYWxsIGNvbmZpbmVkIHRvIHRoZSBZVDkyMTUgc3dpdGNoIGFuZCBpdHMgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS5cblxuU28sICpkZWZpbml0ZWx5KiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkyMCwiT3V0cHV0VG9rZW5zIjo5NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNzo1MjoxOS45ODI5NDE4MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgTEVEIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIGZvciBhbiBNRElPIGRldmljZS4gVGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGNoaXAgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UsIG1ha2luZyB0aGUgY29kZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGFuZCB0ZXN0IGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgZm9yIGFuIE1ESU8gZGV2aWNlLiBUaGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgY2hpcCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSwgbWFraW5nIHRoZSBjb2RlIGltcG9zc2libGUgdG8gcmVhY2ggYW5kIHRlc3QgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx2kgq[1] Phase: Running StartedAt: 2026-07-09 17:52:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx2kgq[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-09 17:52:56 +0000 UTC FinishedAt: 2026-07-09 17:53:20 +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,}