Name: series-workflowgmf27 Phase: Failed StartedAt: 2026-07-03 17:07:23 +0000 UTC FinishedAt: 2026-07-03 17:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmf27[0] Phase: Succeeded StartedAt: 2026-07-03 17:07:23 +0000 UTC FinishedAt: 2026-07-03 17:20:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmf27[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 17:07:23 +0000 UTC FinishedAt: 2026-07-03 17:20:12 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0Egc3dpdGNoIGRyaXZlciBhbmQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgaXQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgTW90b3Jjb21tIHN3aXRjaCBjaGlwIHRvIGJlIHByZXNlbnQgb24gYW4gTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCB2aWEgTURJTyBpbiBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VL3N5emthbGxlciwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkwN2U3OWNmOTI4Y2ZiNDYxMTg1ZjNjZGVmZDE0YzVlOWNiMzVhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDE3OjE2OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gXG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcJiMzNDtcbiYjNDM7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wmIzM0O1xuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wmIzM0O1xuQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwxNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuJiM0MztcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuJiM0MztcdCAgY2hpcC5cbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4mIzQzO1x0Ym9vbCBcJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwmIzM0O1xuJiM0MztcdGRlZmF1bHQgeVxuJiM0MztcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuJiM0MztcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDUgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uYTM1MTIxMzYzODNiMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyAmIzQzOzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt5dDkyMXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCYjMzQ7LCByZXMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX01DVVx0XHQxMFxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4gXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iMDY2YTdlODRmZTZiY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDYwNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGR1dHk7XG4mIzQzO1xuJiM0MztcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4mIzQzO1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4mIzQzO1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbiYjNDM7XHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0KmN5Y2xlcCA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4mIzQzO1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuJiM0MztcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikge1xuJiM0MztcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4mIzQzO1x0KmR1dHlwID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4mIzQzO1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbiYjNDM7XHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4mIzQzO1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbiYjNDM7XHRcdFx0ICAgICBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuJiM0MztcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSkge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX0xJTktdXHRcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfFxuJiM0MztcdFx0XHRcdFx0ICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX1RYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9SWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXG4mIzQzO1x0XHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHUzMiBhZGRyO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpmbGFnc3AgPSAwO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IG1hc2spID09IG1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gQklUKGkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWCkge1xuJiM0MztcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbiYjNDM7XHRpZiAoZ3JvdXAgPT0gMikge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdH1cbiYjNDM7XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIG1hc2ssIGN0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4mIzQzO1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIGludCAqcG9sYXJpdHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0aW50IHBvbGFyaXR5O1xuJiM0MztcdHUzMiBncm91cDtcbiYjNDM7XHRib29sIG9uO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O05vIExFRHMgZm9yIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNmdyb3VwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwmIzM0OywgZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1oaWdoXCYjMzQ7KTtcbiYjNDM7XHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWxvd1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0R1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRncm91cCwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuJiM0MztcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4mIzQzO1x0XHRvbiA9IHN0YXRlICE9IExFRFNfREVGU1RBVEVfT0ZGO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcJiMzNDtuZXRkZXZcJiMzNDs7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcJiMzNDstJXU6JTAyZDolMDJ1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xuJiM0MztcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbiYjNDM7XHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbiYjNDM7XHRcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdCpwb2xhcml0eXAgPSBwb2xhcml0eTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfdGVhcmRvd24oc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghbGVkKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdFx0XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfUE9SVFMsIDApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHwgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2spO1xuJiM0MztcbiYjNDM7ZW5kOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gdGVhcmRvd24gTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIGludl9jdHJsID0gMDtcbiYjNDM7XHR1MzIgaW52X21hc2sgPSAwO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcbiYjNDM7XHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkcC1cdTAwM2VkbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRcdGludCBwb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2cG9sYXJpdHkpO1xuJiM0MztcdFx0XHRpZiAocmVzKSB7XG4mIzQzO1x0XHRcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwb2xhcml0eSkge1xuJiM0MztcdFx0XHRcdGludl9tYXNrIHw9IEJJVChwb3J0KTtcbiYjNDM7XHRcdFx0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0XHRpbnZfY3RybCB8PSBCSVQocG9ydCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1xuJiM0MztcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4mIzQzO1x0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW52X21hc2spXG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbiYjNDM7XG4mIzQzO2VuZDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0eXQ5MjF4X2xlZHNfdGVhcmRvd24ocHJpdik7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmJkMjA3ZTA5YThkZjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICYjNDM7MSwxMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0hcbiYjNDM7I2RlZmluZSBfWVRfTEVEU19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTA1NDg5NmU0Y2QxMmJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgJiM0MzsxLDE1NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuJiM0MztcdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbiYjNDM7XHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbiYjNDM7XHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHQqdmFscCA9IHZhbDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0dTMyIHY7XG4mIzQzO1x0dTMyIHU7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHR1ID0gdjtcbiYjNDM7XHR1IFx1MDAyNj0gfm1hc2s7XG4mIzQzO1x0dSB8PSB2YWw7XG4mIzQzO1x0aWYgKHUgPT0gdilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbiYjNDM7XHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuJiM0MztcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4mIzQzO1x0dTMyIHZzWzRdO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHUgPSB2c1tpXTtcbiYjNDM7XG4mIzQzO1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuJiM0MztcdFx0dSB8PSB2YWxzW2ldO1xuJiM0MztcdFx0aWYgKHUgIT0gdnNbaV0pXG4mIzQzO1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHZzW2ldID0gdTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbmdlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4mIzQzO1x0dTMyIHZzWzRdO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHUgPSB2c1tpXTtcbiYjNDM7XG4mIzQzO1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuJiM0MztcdFx0aWYgKHUgIT0gdnNbaV0pXG4mIzQzO1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHZzW2ldID0gdTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbmdlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgJiM0MzsxLDg4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfU01JX0hcbiYjNDM7I2RlZmluZSBfWVRfU01JX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9wcml2O1xuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4mIzQzOyAqXG4mIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbiYjNDM7XHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDdlNzljZjkyOGNmYjQ2MTE4NWYzY2RlZmQxNGM1ZTljYjM1YTA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxNzoxNjozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTgyMzAsNyAmIzQzOzE4MjMwLDcgQEAgTToJRGF2aWQgWWFuZyAmbHQ7bW15YW5nZmxAZ21haWwuY29tJmd0OwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCi1GOglkcml2ZXJzL25ldC9kc2EveXQ5MjF4LioKJiM0MztGOglkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLwogRjoJbmV0L2RzYS90YWdfeXQ5MjF4LmMKIAogTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWcmIzM0OwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnJiMzNDsKJiM0MzsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZyYjMzQ7CiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDsKQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTUKIAkgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyCiAJICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLgotCi1jb25maWcgTkVUX0RTQV9ZVDkyMVgKLQl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7Ci0Jc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAotCXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQppbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiBvYmoteQkJCQkmIzQzOz0gYjUzLwogb2JqLXkJCQkJJiM0Mzs9IGhpcnNjaG1hbm4vCiBvYmoteQkJCQkmIzQzOz0gbGFudGlxLwogb2JqLXkJCQkJJiM0Mzs9IG1pY3JvY2hpcC8KJiM0MztvYmoteQkJCQkmIzQzOz0gbW90b3Jjb21tLwogb2JqLXkJCQkJJiM0Mzs9IG12ODhlNnh4eC8KIG9iai15CQkJCSYjNDM7PSBteGw4NjJ4eC8KIG9iai15CQkJCSYjNDM7PSBuZXRjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwxNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWAomIzQzOwl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKJiM0MzsJc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKJiM0MzsJICBjaGlwLgomIzQzOwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTCiYjNDM7CWJvb2wgJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNSYjMzQ7CiYjNDM7CWRlZmF1bHQgeQomIzQzOwlkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CWRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVgKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYTQuLmEzNTEyMTM2MzgzYjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKQEAgLTEzLDcgJiM0MzsxMyw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYnJpZGdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfaHNyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwpAQCAtMjYsNyAmIzQzOzI1LDkgQEAKICNpbmNsdWRlICZsdDtuZXQvaWVlZTgwMjFxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKIAotI2luY2x1ZGUgJiMzNDt5dDkyMXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKIAogc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0gewogCXt9CiB9OwogCi0jZGVmaW5lIFlUOTIxWF9OQU1FCSYjMzQ7eXQ5MjF4JiMzNDsKLQogI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRQk0MDk1CiAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKLQogLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4KICAqCiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwCkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIAlyZXR1cm4gKGFkZHJbNF0gJmx0OyZsdDsgOCkgfCBhZGRyWzVdOwogfQogCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKLXsKLQl1MzIgdmFsOwotCWludCByZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAotCQkJCXJlcyB8fCAodmFsICZhbXA7IG1hc2spID09ICp2YWxwLAotCQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAotCQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQkqdmFscCA9IHZhbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCWludCByZXM7Ci0JdTMyIHY7Ci0JdTMyIHU7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQl1ID0gdjsKLQl1ICZhbXA7PSB+bWFzazsKLQl1IHw9IHZhbDsKLQlpZiAodSA9PSB2KQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7Ci19Ci0KLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KLSAqCi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCi0gKi8KLQotc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKLXsKLQkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwotCSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7Ci0JKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKLQkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAotCQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCi0JCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQljb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQl1MzIgdnNbNF07Ci0JaW50IHJlczsKLQotCUJVSUxEX0JVR19PTihudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKTsKLQotCXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQl1MzIgdSA9IHZzW2ldOwotCi0JCXUgJmFtcDs9IH5tYXNrc1tpXTsKLQkJdSB8PSB2YWxzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCWlmICh1ICE9IHZzW2ldKQotCQkJY2hhbmdlZCA9IHRydWU7Ci0KLQkJdnNbaV0gPSB1OwotCX0KLQotCWlmICghY2hhbmdlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQkgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQotewotCXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7Ci19Ci0KIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKQogewogCXN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0OwpAQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJcmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaAppbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaApAQCAtODUwLDggJiM0Mzs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7CiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNCQkoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSykKICNkZWZpbmUgWVQ5MjFYX1VERl9OVU0JCTgKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU0JMwomIzQzOwogLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovCi0jZGVmaW5lIFlUOTIxWF9QT1JUX05VTQkJCTExCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCTExCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9NQ1UJCTEwCiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7CiAKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSAmbHQ7IDgpCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4ICZsdDs9IChwb3J0KSAmYW1wOyZhbXA7IChwb3J0KSAmbHQ7IDkpCkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCXN0cnVjdCB5dDkyMXhfbWliIG1pYjsKIAl1NjQgcnhfZnJhbWVzOwogCXU2NCB0eF9mcmFtZXM7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTsKJiM0MzsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IHl0OTIxeF9yZWdfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIwNjZhN2U4NGZlNmJjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKQEAgLTAsMCAmIzQzOzEsNjA3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VsZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktJmd0O3BvcnQpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLSZndDtpbmRleF0pCiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS0mZ3Q7ZHMuZGV2KQomIzQzOwomIzQzO3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZ3JvdXApIHsKJiM0MzsJY2FzZSAwOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDE6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CSpvbnAgPSAodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PQomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwljdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOgomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssCiYjNDM7CQkJCSAgICAgIGN0cmwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLAomIzQzOwkJCXVuc2lnbmVkIGNoYXIgKmR1dHlwKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHsKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA2KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA0KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAzKSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAyKSwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHk7CiYjNDM7CiYjNDM7CWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7CiYjNDM7CWN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqLwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsICZhbXA7Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWZvciAoOyBjeWNsZSAmZ3Q7IFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciAmZ3Q7Jmd0Oz0gMSwgY3ljbGUgJmd0OyZndDs9IDEpCiYjNDM7CQlpZiAoY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyICZndDsmZ3Q7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CSpjeWNsZXAgPSBjeWNsZTsKJiM0MzsKJiM0MzsJZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKgomIzQzOwkJCQkgICAgIChvbiAmZ3Q7IG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSkKJiM0MzsJCWlmIChpID09IDAgfHwgZHV0eV9yZXEgJmd0Oz0gKGR1dHlzW2kgLSAxXSAmIzQzOyBkdXR5c1tpXSkgLyAyKSB7CiYjNDM7CQkJZHV0eSA9IGR1dHlzW2ldOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwlpZiAob24gJmd0OyBvZmYpCiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTsKJiM0MzsJKmR1dHlwID0gZHV0eTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1bnNpZ25lZCBzaG9ydCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgY2hhciBkdXR5OwomIzQzOwlib29sIHVzZV9jeWNsZTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoISpvbnAgJmFtcDsmYW1wOyAhKm9mZnApIHsKJiM0MzsJCWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKGkgIT0gZ3JvdXAgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkgewomIzQzOwkJCQlkdXR5ID0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJvb2wgY2hhbmdlX2N5Y2xlOwomIzQzOwkJYm9vbCBjaGFuZ2VfZHV0eTsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCAmYW1wO2N5Y2xlLCAmYW1wO2R1dHkpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gY3ljbGUgJmx0OyBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSAmYW1wOyZhbXA7IGN5Y2xlICE9IHBwLSZndDtsZWRfY3ljbGU7CiYjNDM7CQljaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJaWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSkKJiM0MzsJCQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOwomIzQzOwkJCSAgICAgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQkJaWYgKGkgPT0gZ3JvdXAgfHwgIXBwLSZndDtsZWRzW2ldKQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCWlmICgoY2hhbmdlX2N5Y2xlICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9jeWNsZSkgfHwKJiM0MzsJCQkJICAgIChjaGFuZ2VfZHV0eSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkpCiYjNDM7CQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CWlmICh2YWwgIT0gY3RybCkgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CXN3aXRjaCAoZHV0eSAmZ3Q7PSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDoKJiM0MzsJCVlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChkdXR5ICZsdDsgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJaWYgKHVzZV9jeWNsZSkgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007CiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7CiYjNDM7CX0KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfAomIzQzOwkJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTsKJiM0MzsJZWxzZQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSB1c2VfY3ljbGU7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQlwcC0mZ3Q7bGVkX2N5Y2xlID0gY3ljbGU7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSB0cnVlOwomIzQzOwlwcC0mZ3Q7bGVkX2R1dHkgPSBkdXR5OwomIzQzOwomIzQzOwkqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pOwomIzQzOwkqb2ZmcCA9IGN5Y2xlIC0gKm9ucDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1MzIgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbX19UUklHR0VSX05FVERFVl9NQVhdID0gewomIzQzOwlbVFJJR0dFUl9ORVRERVZfTElOS10JCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfAomIzQzOwkJCQkJICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktfMTBdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfTElOS18xMDBdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktfMTAwMF0JPSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVhdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsCiYjNDM7CVtUUklHR0VSX05FVERFVl9UWF0JCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgsCiYjNDM7CVtUUklHR0VSX05FVERFVl9SWF0JCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCQkJaW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoaSwgJmFtcDtmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpCiYjNDM7CQlpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApCiYjNDM7ewomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAobWFzayAmYW1wOyZhbXA7ICh2YWwgJmFtcDsgbWFzaykgPT0gbWFzaykKJiM0MzsJCQkqZmxhZ3NwIHw9IEJJVChpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSAwOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7CiYjNDM7CQlpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJCWN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwIHx8ICFkcC0mZ3Q7dXNlcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCBpbnQgKnBvbGFyaXR5cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiYjNDM7CWNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07CiYjNDM7CWVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7CiYjNDM7CWJvb2wgZm9yY2VfaGlnaDsKJiM0MzsJYm9vbCBmb3JjZV9sb3c7CiYjNDM7CWludCBwb2xhcml0eTsKJiM0MzsJdTMyIGdyb3VwOwomIzQzOwlib29sIG9uOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAocG9ydCA9PSBZVDkyMVhfUE9SVF9NQ1UpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O05vIExFRHMgZm9yIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsICYjMzQ7cmVnJiMzNDssICZhbXA7Z3JvdXApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJaWYgKGdyb3VwICZndDs9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcbiYjMzQ7LCBncm91cCwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWhpZ2gmIzM0Oyk7CiYjNDM7CWZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChmb3JjZV9oaWdoICZhbXA7JmFtcDsgZm9yY2VfbG93KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJZ3JvdXAsIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwomIzQzOwlsZWQtJmd0O3BvcnQgPSBwcDsKJiM0MzsJbGVkLSZndDtncm91cCA9IGdyb3VwOwomIzQzOwomIzQzOwlzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwkJb24gPSBzdGF0ZSAhPSBMRURTX0RFRlNUQVRFX09GRjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJbGVkX2NkZXYgPSAmYW1wO2xlZC0mZ3Q7Y2RldjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3MgPSBvbjsKJiM0MzsJbGVkX2NkZXYtJmd0O21heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJbGVkX2NkZXYtJmd0O2ZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7CiYjNDM7CWxlZF9jZGV2LSZndDtibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7CiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSAmIzM0O25ldGRldiYjMzQ7OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FICYjMzQ7LSV1OiUwMmQ6JTAydSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2RzLmluZGV4LCBwb3J0LCBncm91cCk7CiYjNDM7CWluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7CiYjNDM7CQkuZndub2RlID0gZndub2RlLAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkqcG9sYXJpdHlwID0gcG9sYXJpdHk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3RlYXJkb3duKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CiYjNDM7CQlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQkJaWYgKCFsZWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCAmYW1wO2xlZC0mZ3Q7Y2Rldik7CiYjNDM7CQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX1BPUlRTLCAwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZW5kOwomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfCBZVDkyMVhfTEVEX0NUUkxfRU47CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2spOwomIzQzOwomIzQzO2VuZDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHRlYXJkb3duIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXUzMiBpbnZfY3RybCA9IDA7CiYjNDM7CXUzMiBpbnZfbWFzayA9IDA7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJCWlmICghbGVkc19ucCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJCWludCBwb2xhcml0eTsKJiM0MzsKJiM0MzsJCQlyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsCiYjNDM7CQkJCQkgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLAomIzQzOwkJCQkJICAgICAgICZhbXA7cG9sYXJpdHkpOwomIzQzOwkJCWlmIChyZXMpIHsKJiM0MzsJCQkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQkJCWdvdG8gZXJyOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCQkJaW52X21hc2sgfD0gQklUKHBvcnQpOwomIzQzOwkJCQlpZiAocG9sYXJpdHkgJmd0OyAwKQomIzQzOwkJCQkJaW52X2N0cmwgfD0gQklUKHBvcnQpOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwljdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHwKJiM0MzsJICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlbmQ7CiYjNDM7CiYjNDM7CS8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuCiYjNDM7CSAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW52X21hc2spCiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssCiYjNDM7CQkJCQkgICAgIGludl9jdHJsKTsKJiM0MzsKJiM0MztlbmQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXl0OTIxeF9sZWRzX3RlYXJkb3duKHByaXYpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJiZDIwN2UwOWE4ZGYzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOCQkJQklUKDIxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00JR0VOTUFTSygyMCwgMTkpCS8qIGN5Y2xlID0gNTEyICogeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00JCUdFTk1BU0soMTYsIDEzKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTQkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCkJCSgweGQwMDA0ICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTcsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTCUJJVCgxNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESQlCSVQoMTYpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KQkJKDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00JCUdFTk1BU0soMzEsIDMwKQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTQkJR0VOTUFTSygyOSwgMjgpCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUAlCSVQoMjcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00JCUdFTk1BU0soMjYsIDI1KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzMJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KQkJKDB4ZDAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycCkJCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE5LCA0ICogKGdycCkgJiM0MzsgMTgpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE3LCA0ICogKGdycCkgJiM0MzsgMTYpCS8qIGN5Y2xlID0gNTEyICZsdDsmbHQ7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE2KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LCQlCSVQoMTUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOSwlCSVQoMTQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LCUJJVCgxMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTAlCSVQoMTIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYJQklUKDExKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LCQlCSVQoMTApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTksJCUJJVCg5KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYCQlCSVQoOCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWAkJQklUKDcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0JCUJJVCg2KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0JCUJJVCg1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTQkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LCUJJVCgzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LCUJJVCgyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTksJQklUKDEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkwJCTB4ZDAxMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOSwkJR0VOTUFTSygyNSwgMjQpCS8qIGRlbGF5PyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPVwkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00JCUdFTk1BU0soMSwgMCkJLyogI2dycCAtIDEgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpCSgweGQwMTA0ICYjNDM7IDggKiAoMiAtIChncnApKSAmIzQzOyA0ICogKChwb3J0KSAvIDUpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFMJCTB4ZDAxYzQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVgkJMHhkMDFjOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpCUJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydCkJKDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyA1LCA2ICogKGdycCkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyAxLCA2ICogKGdycCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkpKQomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU4JNjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGCTUxMgomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVgJMjA0OAomIzQzOwomIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTQkJMjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKQkoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGdyb3VwOwomIzQzOwomIzQzOwlib29sIHVzZV9jeWNsZToxOwomIzQzOwlib29sIHVzZV9kdXR5OjE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKQEAgLTAsMCAmIzQzOzEsMTU3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKQEAgLTAsMCAmIzQzOzEsODggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSAomIzQzOyNkZWZpbmUgX1lUX1NNSV9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmRwYXJ0LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssCiYjNDM7CQkJICAgdTMyIHZhbCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZQomIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KJiM0MzsgKgomIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG8KJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCiYjNDM7ewomIzQzOwkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpOwomIzQzOwkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCiYjNDM7CQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQ4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBZVDkyMTUgTEVEIERyaXZlcioqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIHBhdGNoIGludHJvZHVjaW5nIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgYW5kIHJlbGF0ZWQgZmlsZXMsIGFuZCBpdCBzZWVtcyB0byBpbnRyb2R1Y2UgYENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTYCBhbmQgbW92ZSB0aGUgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGV0aGVybmV0IHN3aXRjaCBjaGlwLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHksIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBvciBzaW11bGF0ZWQgZW52aXJvbm1lbnQuIERTQSBkcml2ZXJzLCBieSB0aGVpciBuYXR1cmUsIGdlbmVyYWxseSByZWx5IG9uIHNwZWNpZmljIGhhcmR3YXJlIOKAkyB0aGUgc3dpdGNoIGNoaXAgaXRzZWxmIGNvbm5lY3RlZCB2aWEgTURJTywgU1BJLCBvciBhIHNpbWlsYXIgaW50ZXJmYWNlLgoKVW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgb2JzY3VyZSBzb2Z0d2FyZSBlbXVsYXRvciBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgWVQ5MjE1IGNoaXAgKHdoaWNoIGlzIGhpZ2hseSBpbXByb2JhYmxlKSwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwgdG8gZmluZCB0aGUgcmVxdWlyZWQgaGFyZHdhcmUuIEl0JiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgb24gYSBidXMgdGhhdCBzaW1wbHkgd29uJiMzOTt0IGV4aXN0IGluIGEgdmlydHVhbCBtYWNoaW5lIG9yIG1vc3QgdGVzdGluZyBlbnZpcm9ubWVudHMuIEV2ZW4gaWYgd2Ugc29tZWhvdyBmb3JjZSB0aGUgZHJpdmVyIHRvIGxvYWQsIHBlcmhhcHMgYnkgYWRkaW5nIGEgZGV2aWNlIHRyZWUgbm9kZSwgaXQmIzM5O2xsIGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBNRElPIG9yIFNQSSBidXMsIGFuZCB0aG9zZSByZWFkcyB3aWxsIGZhaWwgb3IgdGltZW91dCwgdWx0aW1hdGVseSBjYXVzaW5nIHRoZSBwcm9iZSB0byBmYWlsLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIHNvbWVob3cgKmZ1enoqIHRoaXMgY29kZT8gQ291bGQgd2UgcGVyaGFwcyBtb2NrIGFuIE1ESU8gYnVzIHRvIHNpbXVsYXRlIGNvbW11bmljYXRpb24/IFRoZSBpc3N1ZSBpcyB0aGF0IHN0YW5kYXJkIGZ1enppbmcgdG9vbHMsIGxpa2Ugc3l6a2FsbGVyLCBnZW5lcmFsbHkgZG9uJiMzOTt0IG9mZmVyIGdlbmVyaWMgTURJTyBvciBTUEkgbW9ja3MgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byBwcm9iZSBhbiBhcmJpdHJhcnkgRFNBIHN3aXRjaCB3aXRob3V0IGV4cGxpY2l0IHN1cHBvcnQuIEhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBsYWNrIHByb3BlciBlbXVsYXRpb24gY2FwYWJpbGl0aWVzIGFyZSB1c3VhbGx5IGNvbnNpZGVyZWQgdW5yZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBub3Qgd29ydGggZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciBgeXQ5MjF4YCBpcyBldmVuIHJlYWNoYWJsZSBhdCBhbGwuIEkgd2lsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBtZW50aW9ucyBvZiBgeXQ5MjF4YCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHBvdGVudGlhbCByZWFjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI1OTAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zLS0tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuLS1cbk1BSU5UQUlORVJTPTE4MjMxPVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoxODIzMjpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5NQUlOVEFJTkVSUy0xODIzMy1GOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbk1BSU5UQUlORVJTOjE4MjM0OkY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuTUFJTlRBSU5FUlMtMTgyMzUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjM6eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjQ6eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NTp5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyOnN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMtXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQxOi8qIE11c3QgYWdyZWUgd2l0aCB5dDkyMXhfbWliXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mi0gKlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2LSAqL1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgtXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNULCBOVUxMKSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk5OnN0cnVjdCB5dDkyMXhfaW5mbyB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDAtXHRjb25zdCBjaGFyICpuYW1lO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNi1cdHUxNiBpbnRlcm5hbF9tYXNrO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA3Olx0LyogVE9ETzogc2VlIGNvbW1lbnRzIGluIHl0OTIxeF9kc2FfcGh5bGlua19nZXRfY2FwcygpICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDgtXHR1MTYgZXh0ZXJuYWxfbWFzaztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTY6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cdHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xNjQtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxNjU6c3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xNjYtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE4MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE4MjojZGVmaW5lIHRvX3l0OTIxeF9wcml2KF9kcykgY29udGFpbmVyX29mX2NvbnN0KF9kcywgc3RydWN0IHl0OTIxeF9wcml2LCBkcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE4My0jZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xOTA9c3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTQtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTU6c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTYte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTk3Olx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTgtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM2OnN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3dyaXRlKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzcte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM4Olx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjcxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgeXQ5MjF4X3JlZ19vcHNfbWRpbyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3MzpcdC5yZWFkID0geXQ5MjF4X3JlZ19tZGlvX3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzQ6XHQud3JpdGUgPSB5dDkyMXhfcmVnX21kaW9fd3JpdGUsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzUtfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzgtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzk6c3RhdGljIGludCB5dDkyMXhfaW50aWZfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yODAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI4MzpcdHJldHVybiB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4NC1cdFx0XHQgICAgICAgXHUwMDI2dmFsKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0yODc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjg4Onl0OTIxeF9pbnRpZl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWcsIHUxNiAqdmFscClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjk1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjk2Olx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yOTctXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwMy1cdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1JFQUQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDQ6XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwNS1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDYtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDc6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9JTlRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMTE6XHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMTQ6XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0RJTiwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxNS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MzI2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyNzp5dDkyMXhfaW50aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMyOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzMzOlx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0MC1cdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1dSSVRFO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQxOlx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfSU5UX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDItXHRpZiAocmVzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQzLVx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQ0Olx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfRE9VVCwgdmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0NS1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDYtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDc6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9JTlRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTE6XHRyZXR1cm4geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTItfVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzUzLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzU0OnN0YXRpYyBpbnQgeXQ5MjF4X21idXNfaW50X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzU1LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1NjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Ny1cdHUxNiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzYzLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM2NDpcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM2NS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zNzI9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzczOnl0OTIxeF9tYnVzX2ludF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzc0LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM3NTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM3Ni1cdGludCByZXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgxLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM4MjpcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozODk6eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM5MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDAxLVx0bWJ1cy1cdTAwM2Vwcml2ID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwMjpcdG1idXMtXHUwMDNlcmVhZCA9IHl0OTIxeF9tYnVzX2ludF9yZWFkO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDAzOlx0bWJ1cy1cdTAwM2V3cml0ZSA9IHl0OTIxeF9tYnVzX2ludF93cml0ZTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwNC1cdG1idXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQxNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQxNjpzdGF0aWMgaW50IHl0OTIxeF9leHRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDIwOlx0cmV0dXJuIHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfRVhUX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJULFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDIxLVx0XHRcdCAgICAgICBcdTAwMjZ2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyND1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjU6eXQ5MjF4X2V4dGlmX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MzM6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQzNC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQwLVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfVFlQRV9DMjIgfCBZVDkyMVhfTUJVU19DVFJMX1JFQUQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDE6XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9FWFRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0Mi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDQ6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDg6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0OS1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTAtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTE6XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RJTiwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mi1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDYzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2NDp5dDkyMXhfZXh0aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcwOlx0cmVzID0geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzEtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3Ny1cdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1RZUEVfQzIyIHwgWVQ5MjFYX01CVVNfQ1RSTF9XUklURTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3ODpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc5LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4MC1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4MTpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RPVVQsIHZhbCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODItXHRpZiAocmVzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgzLVx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg0Olx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4NS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg4Olx0cmV0dXJuIHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg5LX1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5MC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5MTpzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2V4dF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Mi17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTM6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTQtXHR1MTYgdmFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Ny1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTg6XHRyZXMgPSB5dDkyMXhfZXh0aWZfcmVhZChwcml2LCBwb3J0LCByZWcsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTktXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTA2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUwNzp5dDkyMXhfbWJ1c19leHRfd3JpdGUoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUwOC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MDk6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTAtXHRpbnQgcmVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxMi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MTM6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd3JpdGUocHJpdiwgcG9ydCwgcmVnLCBkYXRhKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxNC1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTIwOnl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MjEte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzMy1cdC8qIFRPRE86IGM0NT8gKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUzNDpcdG1idXMtXHUwMDNlcmVhZCA9IHl0OTIxeF9tYnVzX2V4dF9yZWFkO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM1Olx0bWJ1cy1cdTAwM2V3cml0ZSA9IHl0OTIxeF9tYnVzX2V4dF93cml0ZTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzNi1cdG1idXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0Ny0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NDg6c3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0OS17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTA6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1MS1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1MjpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTMtXHRpbnQgcmVzID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1NTpcdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQmIzM5O3MgdmFpblxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU2LVx0ICogdG8ga2VlcCBpdHMgY29uc2lzdGVuY3ksIHNpbmNlIHdlIGhhdmUgdG8gcmVhZCByZWdpc3RlcnMgb25lIGJ5IG9uZVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2Mi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU2MzpcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTY0Olx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2NS1cdFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtXHUwMDNlb2Zmc2V0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2OS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU3MDpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dmFsMCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NzEtXHRcdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTgyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTgzOlx0XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCwgXHUwMDI2dmFsMSk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01ODQtXHRcdFx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MDc6c3RhdGljIHZvaWQgeXQ5MjF4X3BvbGxfbWliKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwOC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MDk6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gY29udGFpbmVyX29mX2NvbnN0KHdvcmssIHN0cnVjdCB5dDkyMXhfcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMC1cdFx0XHRcdFx0XHQgICAgbWliX3JlYWQud29yayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTE6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSAodm9pZCAqKShwcCAtIHBwLVx1MDAzZWluZGV4KSAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTI6XHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMy1cdHVuc2lnbmVkIGxvbmcgZGVsYXkgPSBZVDkyMVhfU1RBVFNfSU5URVJWQUxfSklGRklFUztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTctXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjE4Olx0cmVzID0geXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjE5LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTYyNj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjI3Onl0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYyOC1cdFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjMyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjMzOlx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MzQ6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjM1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTY0MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQyOnl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDMte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ0Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ1Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDY6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ3LVx0c2l6ZV90IGo7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ5LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1MDpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1MS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NTMtXHRqID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1NDpcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjU1Olx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NjQtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NjU6c3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjY2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NzI6XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY3MzpcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjgyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODM6eXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg0LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg1LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4NjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4NzpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg4Olx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4OS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY5MC1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2OTE6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02OTItXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzE4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MTk6eXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMC1cdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMS17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjI6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjM6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyNDpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjYtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzI3Olx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzI4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTczNC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjczNTpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzM2LVx0eyAwLCA2NCB9LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTc0Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzQ3Onl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc0OC1cdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzUwLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MjpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUzOlx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1NS1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTY6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTctXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTgtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTk6XHQqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzYwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTc4Mz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg0Onl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc4NS1cdFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03ODYte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg3Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg4Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODk6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzkwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTgxOT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODIwOnl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjEtXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODIyLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyMzpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyNDpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI1Olx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyNy1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Mjg6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjktXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODM1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgzNjp5dDkyMXhfc2V0X2VlZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODM3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NDktXHRpZiAoISFuZXdfbWFzayAhPSAhIXByaXYtXHUwMDNlZWVlX3BvcnRzX21hc2spIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg1MDpcdFx0cmVzID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfUE9OX1NUUkFQX0ZVTkMsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTEtXHRcdFx0XHRcdCAgICAgWVQ5MjFYX1BPTl9TVFJBUF9FRUUsICEhbmV3X21hc2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1My1cdFx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODU0Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfVkFMLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODU1LVx0XHRcdFx0XHQgICAgIFlUOTIxWF9QT05fU1RSQVBfRUVFLCAhIW5ld19tYXNrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjItXHQvKiBFbmFibGUgLyBkaXNhYmxlIHBvcnQgRUVFICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NjM6XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9FRUVfQ1RSTCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2NC1cdFx0XHRcdCAgICAgWVQ5MjFYX0VFRV9DVFJMX0VObihwb3J0KSwgZW5hYmxlKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjYtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Njc6XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9FRUVuX1ZBTChwb3J0KSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2OC1cdFx0XHRcdCAgICAgWVQ5MjFYX0VFRV9WQUxfREFUQSwgZW5hYmxlKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04NzU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODc2Onl0OTIxeF9kc2Ffc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg3Ny17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Nzg6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NzktXHRpbnQgcmVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4MS1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4ODI6XHRyZXMgPSB5dDkyMXhfc2V0X2VlZShwcml2LCBwb3J0LCBlKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4My1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4ODg6c3RhdGljIGludCB5dDkyMXhfbXR1X2ZldGNoKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTg5NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4OTY6eXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04OTcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkwMjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMy1cdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTExLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkxMjpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX01BQ25fRlJBTUUocG9ydCksXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTMtXHRcdFx0XHQgICAgIFlUOTIxWF9NQUNfRlJBTUVfU0laRV9NLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxOS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkyMDpzdGF0aWMgaW50IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MjEte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTk1Mz1zdGF0aWMgdTY0IHRva2VuMmJ1cnN0KHUzMiB0b2tlbiwgaW50IHVuaXQsIGludCBDKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk1ODpzdHJ1Y3QgeXQ5MjF4X21hcmtlciB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NTktXHR1MzIgY2lyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTk2OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NzA6eXQ5MjF4X21hcmtlcl90Zm0oc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3MS1cdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzbG90X25zLCB1MzIgY2lyX21heCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MjpcdFx0ICB1MzIgY2JzX21heCwgaW50IHVuaXRfbWF4LCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTczLVx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzctXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5Nzg6XHRzdHJ1Y3QgeXQ5MjF4X21hcmtlciBtO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTc5LVx0dTY0IGJ1cnN0X2VzdDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OTktXHRlbHNlXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDAwOlx0XHRidXJzdF9zdWcgJiM0Mzs9IEVUSF9ITEVOICYjNDM7IHl0OTIxeF9tdHVfZmV0Y2gocHJpdiwgcG9ydCkgJiM0MztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwMDEtXHRcdFx0ICAgICBFVEhfRkNTX0xFTjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDU5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNjA6eXQ5MjF4X21hcmtlcl90Zm1fcG9saWNlKHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDYxLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDYyOlx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDYzLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA3My1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNzQ6XHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDc1LVx0XHRcdFx0IHByaXYtXHUwMDNlbWV0ZXJfc2xvdF9ucywgWVQ5MjFYX01FVEVSX0NJUl9NQVgsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA4MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgxOnl0OTIxeF9tYXJrZXJfdGZtX3NoYXBlKHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIsIHU2NCByYXRlLCB1NjQgYnVyc3QsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgyOlx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwODMtXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4NC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDg1Olx0cmV0dXJuIHl0OTIxeF9tYXJrZXJfdGZtKG1hcmtlciwgcmF0ZSwgYnVyc3QsIGZsYWdzLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4Ni1cdFx0XHRcdCBwcml2LVx1MDAzZXBvcnRfc2hhcGVfc2xvdF9ucywgWVQ5MjFYX1NIQVBFX0NJUl9NQVgsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA5MT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDkyOnl0OTIxeF9wb2xpY2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uX3BvbGljZSAqcG9saWNlLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA5My1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExMjc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTEyODp5dDkyMXhfbWV0ZXJfY29uZmlnKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTEyOTpcdFx0ICAgIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTMwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTQ3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE0ODpcdHJldHVybiB5dDkyMXhfcmVnOTZfd3JpdGUocHJpdiwgWVQ5MjFYX01FVEVSbl9DVFJMKGlkKSwgY3RybHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE0OS19XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MTpzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTIte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MzpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTQtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1Ny1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTU4Olx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fTUVURVIocG9ydCksIDApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1OS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTY2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjc6eXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTY4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3MC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcxOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE3MjpcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG1hcmtlcjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzMtXHR1MzIgY3RybDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE3NjpcdHJlcyA9IHl0OTIxeF9wb2xpY2VfdmFsaWRhdGUocG9saWNlLCBOVUxMLCBOVUxMLCBleHRhY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3Ny1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3OS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODA6XHRyZXMgPSB5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2UoXHUwMDI2bWFya2VyLCBwb2xpY2UsIDAsIHByaXYsIHBvcnQsIGV4dGFjayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTgxLVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTg0LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODU6XHRyZXMgPSB5dDkyMXhfbWV0ZXJfY29uZmlnKHByaXYsIHBvcnQgJiM0MzsgWVQ5MjFYX01FVEVSX05VTSwgXHUwMDI2bWFya2VyKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODYtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODktXHRjdHJsID0gWVQ5MjFYX1BPUlRfTUVURVJfSUQocG9ydCkgfCBZVDkyMVhfUE9SVF9NRVRFUl9FTjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExOTA6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9QT1JUbl9NRVRFUihwb3J0KSwgY3RybCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTkxLWVuZDpcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDAzNgoJCQkJCQkJb3V0cHV0OiAwCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzc0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIE1vdG9yY29tbSBMRUQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcywgd2hpY2ggYWRkcyBMRUQgc3VwcG9ydCB0byB0aGUgTW90b3Jjb21tIERTQSBkcml2ZXIgKGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2ApLCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB3b3J0aCBmdXp6aW5nLiBJdCBhcHBlYXJzIHRvIGJlIGEgc3RyYWlnaHQtZm9yd2FyZCBkcml2ZXIgZmVhdHVyZSwgcmVnaXN0ZXJpbmcgTEVEIGNsYXNzIGRldmljZXMgYW5kIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGJsaW5raW5nIGFuZCBicmlnaHRuZXNzLiBGdW5jdGlvbmFsbHksIGFic29sdXRlbHkgeWVzLCB0aGlzIGlzIGEgY29kZSBwYXRoIHRoYXQgbmVlZHMgc2NydXRpbnkuIEJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgaXQgKnJlYWNoYWJsZSo/CgpUaGlzIGlzIGEgRFNBIHN3aXRjaCBkcml2ZXIsIHNvIGl0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHN3aXRjaCBoYXJkd2FyZS4gIFJlYWxpc3RpY2FsbHksIHRoaXMgbWVhbnMgYW4gTURJTyBidXMgaXMgaW52b2x2ZWQsIGFuZCBEU0EgZHJpdmVycyBhcmUgdHlwaWNhbGx5IG5vdCBlYXNpbHkgZW11bGF0ZWQgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoZSBoYXJkd2FyZS4gIEkgbmVlZCB0byB0aGluayBhYm91dCBzeXprYWxsZXImIzM5O3MgY2FwYWJpbGl0aWVzIGhlcmUuICBDYW4gaXQgaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UgbGlrZSB0aGlzPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHN5emthbGxlciAqY2FuKiBmdXp6IE1ESU8gZGV2aWNlcywgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhIG5ldGxpbmsgb3Igc3lzZnMgaW50ZXJmYWNlIGludm9sdmVkLiBBbmQgYmluZ28sIExFRCBjbGFzcyBkZXZpY2VzIGFyZSBleHBvc2VkIHZpYSBgL3N5cy9jbGFzcy9sZWRzL2AhIFNvLCBpZiB0aGUgZHJpdmVyIHByb2JlcywgdGhlIExFRHMgYXJlIHJlZ2lzdGVyZWQsIGFuZCBjb250cm9sIGNhbiBiZSBkb25lIHZpYSBzeXNmcy4gVGhpcyBpcyB0aGUga2V5LgoKU28sIGNhbiB0aGUgZHJpdmVyICpwcm9iZSo/IEl0JiMzOTtzIGEgYHl0OTIxeGAgZGV2aWNlLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCBvciwgdGhlIG9yaWdpbmFsIGZpbGUsIGB5dDkyMXguY2AuIEl0JiMzOTtzIE1ESU8gb3IgU1BJIGJhc2VkLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgcHJvYmUgZmFpbHMuIE5vIHByb2JlLCBubyBMRURzLiBUaGVyZWZvcmUsIGl0JiMzOTtzIG5vdCBwcmVzZW50IGZvciBzeXprYWxsZXIgdG8gdXNlLgoKVGhlIHJlYWwgY3J1eCBpczogQ2FuIHN5emthbGxlciBpbnN0YW50aWF0ZSB0aGlzIGRldmljZT8gIEkmIzM5O20gdGhpbmtpbmcgb2YgYHZoY2lgLCBgbmV0ZGV2c2ltYCwgYW5kIHNpbWlsYXIsIGJ1dCBEU0Egc3dpdGNoZXMgYXJlIHRyaWNreS4gSSBkb24mIzM5O3QgdGhpbmsgaXQgY2FuIGp1c3QgZWFzaWx5IGluc3RhbnRpYXRlIGFyYml0cmFyeSBNRElPIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBNRElPIGJ1cyB3aGVyZSB3ZSBjYW4gaW5qZWN0IG5vZGVzLCBvciBtYXliZSB1c2luZyBgZHNhX2xvb3BgLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWUgbWVudGlvbiBvZiBkZXZpY2UgdHJlZSBpbmplY3Rpb24gc3VwcG9ydCBpbiBzeXprYWxsZXIsIGJ1dCBJIGRvdWJ0IGl0IGlzIHN1cHBvcnRlZC4gTm8sIGBkc2FfbG9vcGAgaXMgYSBzcGVjaWZpYyBkcml2ZXIsIG5vdCBhIGdlbmVyYWwgdmlydHVhbGl6ZXIuCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBraWNrZXIgZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHdoYXQgSSBhbSB3b3JyaWVkIGFib3V0LgoKSXMgdGhpcyBgeXQ5MjF4YCByZWFjaGFibGUgaW4gUUVNVT8gQW5kLCB0aGUgdXN1YWwgYW5zd2VyIGlzIG5vLCByaWdodD8gU3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGNoaXBzIG9uIE1ESU8vU1BJIGJ1c2VzIGFyZSBnZW5lcmFsbHkgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVW5sZXNzIHNvbWVvbmUmIzM5O3Mgc3BlY2lmaWNhbGx5IGFkZGVkIGVtdWxhdGlvbiBmb3IgYHl0OTIxeGAsIG9yIHRoZXJlJiMzOTtzIHNvbWUgY2xldmVyIHNvZnR3YXJlIGZhbGxiYWNrLCBpdCYjMzk7cyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gY2hlY2suICBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgYHl0OTIxeGAgcHJvYmUgZnVuY3Rpb24gYW5kIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgdmlydHVhbCBNRElPIG9yIHNvZnR3YXJlLWVtdWxhdGVkIHByb2JpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIEkgZG9uJiMzOTt0IHdhc3RlIHRpbWUgbG9va2luZyBmb3IgYSBidWcgdGhhdCBkb2VzbiYjMzk7dCBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxMjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTW90b3Jjb21tIERTQSBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGlzIE1vdG9yY29tbSBEU0EgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGltcGxlbWVudGF0aW9uIHdpdGhpbiBgY2hpcC5jYC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZXNlIGRyaXZlcnMsIGlzIHRvIGxvb2sgZm9yIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3Igc3RydWN0dXJlIHJlbGF0ZWQgdG8gbW9kdWxlcywgbGlrZWx5IHRoZSBkcml2ZXImIzM5O3MgY29yZSBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGxvZ2ljLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgbW9kdWxlX2Ag4oCTIHRoYXQgcHJlZml4IGlzIGEgcHJldHR5IHN0YW5kYXJkIGluZGljYXRvciBvZiBtb2R1bGUtcmVsYXRlZCBjb2RlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHVzdWFsbHkgZW5jb21wYXNzZXMgZnVuY3Rpb25zIGxpa2UgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCBwb3RlbnRpYWxseSBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nLCBvciByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGUmIzM5O3Mgc3RydWN0dXJlIGl0c2VsZi4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIG9yZ2FuaXplZCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfLipkcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzc4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIERyaXZlciBhbmQgSXRzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGlzIGFuIE1ESU8gZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMgZGlyZWN0bHk/IFByb2JhYmx5IG5vdCwgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgc3BlY2lhbCBNRElPLXNwZWNpZmljIGZ1enplciBvciBzb21lIHRyaWNrIHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24uIFRob3VnaCwgd2FpdCwgaXNuJiMzOTt0IHRoZXJlICpzb21lKiBsaW1pdGVkIG5ldGxpbmsgb3Igc3lzZnMgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIGRldmljZXMgaW4gc3l6a2FsbGVyPyBObywgdHlwaWNhbGx5IE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLgoKSG1tLCBjYW4gSSB0cmlnZ2VyIHRoZSBMRUQgY29kZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBkZXZpY2UgYmVpbmcgcHJlc2VudD8gTm8sIGJlY2F1c2UgYHl0OTIxeF9sZWRzX3NldHVwYCBpcyBjbGVhcmx5IGNhbGxlZCBmcm9tIGB5dDkyMXhfZHNhX3NldHVwYCwgd2hpY2ggaXMgb25seSB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBEU0Egc3dpdGNoIHNldHVwLiBUaGF0IG1lYW5zLCBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcm9iZWQsIHRoYXQgY29kZSYjMzk7cyB1bnJlYWNoYWJsZS4KCk9rYXksIGlzIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IHRoYXQgbWlnaHQgaGVscD8gTm90aGluZyBpbiB0aGUga2VybmVsIG9yIFFFTVUsIGFzIGZhciBhcyBJIGtub3cuIFNvLCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhpcyBjb2RlIHBhdGggaXMgcHJldHR5IG11Y2ggZGVhZC4KCldhaXQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbW9yZSB0aW1lLCBtYXliZSB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgd2F5IHRvIGhpdCBNRElPIGRyaXZlcnMuLi4gQWgsIHRoZSBgZHNhX2xvb3BgIGRyaXZlciwgYnV0IHRoYXQmIzM5O3MgZm9yIGEgZml4ZWQgZHVtbXkgc3dpdGNoLiBPa2F5LCB3aGF0IGFib3V0IGBtZGlvLW1vY2t1cGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9ja3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwOTYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbiBmcm9tIFVzZXJzcGFjZTogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBNRElPIGRldmljZXMgYW5kIGhvdyB3ZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZWlyIGluc3RhbnRpYXRpb24gZnJvbSB1c2Vyc3BhY2UuIFRoZSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgd2UgY2FuIGRpcmVjdGx5IG1hbmlwdWxhdGUgYC9zeXMvYnVzL21kaW9fYnVzL2RldmljZXMvLi4uYCwgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBGcm9tIG15IGV4cGVyaWVuY2UsIE1ESU8gZGV2aWNlcyBhcmUgdHlwaWNhbGx5IGJyb3VnaHQgb25saW5lIGJ5IHRoZSBNRElPIGJ1cyBjb250cm9sbGVyIGl0c2VsZiwgZWl0aGVyIHRocm91Z2ggaGFyZHdhcmUgcHJvYmluZywgcmVhZGluZyB0aG9zZSBjcnVjaWFsIFBIWSBJRCByZWdpc3RlcnMsIG9yIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLgoKVGhlIGludGVyZXN0aW5nIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgTURJTyBidXMsIHNvbWV0aGluZyBsaWtlIGBmaXhlZC1tZGlvYCBvciBtYXliZSBldmVuIHRoZSBNRElPIGJ1cyB3aXRoaW4gYGRzYV9sb29wYCwgaXMgdGhlcmUgYSB3YXkgdG8gdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHByb2JpbmcgYSB2aXJ0dWFsIGRldmljZT8gQ291bGQgd2UgcG90ZW50aWFsbHkgbW9jayB0aGUgcmVhZCBvZiB0aGUgUEhZIElEIHJlZ2lzdGVyPyBJZiB3ZSBjb3VsZCBzaW11bGF0ZSB0aGF0IHJlYWQsIHdvdWxkIGl0IHRyaWNrIHRoZSBzeXN0ZW0gdG8gbG9hZCBkcml2ZXJzPwoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRyaXZlciBtYXRjaGluZyBzY2hlbWUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgZnVuY3Rpb25zLCB0byBzZWUgaWYgbW9ja2luZyB0aGUgUEhZIElEIG1pZ2h0IHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9tZGlvX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3NjY9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY4OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2OS1cdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzc4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3NDAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cyBhbmQgSSBhbSBhbiBleHBlcnQgaW4gbXkgZmllbGQuCgoqKk1hdGNoaW5nIENyaXRlcmlhIGFuZCBUYWJsZSBJZGVudGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbnRlcm5hbCBwcm9jZXNzIGlzIGNvbmZpcm1pbmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgYG9mX21hdGNoX3RhYmxlYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJJiMzOTttIHJlbHlpbmcgb24gdGhhdCBzcGVjaWZpYyB0YWJsZSwgdGhlIGB5dDkyMXhfb2ZfbWF0Y2hgLCB0byBkZXRlcm1pbmUgaWYgYSBtYXRjaCBpcyB2YWxpZC4gTXkgZm9jdXMgbm93IGlzIHB1cmVseSBvbiB0aGUgb3V0cHV0IG9mIGB5dDkyMXhfb2ZfbWF0Y2hgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfb2ZfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzE0PXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzYyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2My1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2NS19O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2NjpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3Njg9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3My1cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzQ6XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzUtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzI4NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFlUOTIxNSBEcml2ZXImIzM5O3MgUHJvYmFibGUgQmVoYXZpb3IqKgoKT2theSwgc28gdGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpZGVudGlmaWVzIGl0c2VsZiB2aWEgdGhlIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7LiBSaWdodCBub3csIEkgY2FuJiMzOTt0IHNlZSB0aGlzIGRyaXZlciBnZXR0aW5nIGxvYWRlZCB3aXRoIHRoZSBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXAgYmVjYXVzZSBpdCBjYW4mIzM5O3QgaW5qZWN0IGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyB5ZXQuIFdoaWxlIHRoZXJlJiMzOTtzIHdvcmsgYmVpbmcgZG9uZSBvbiBEVCBvdmVybGF5cywgdGhhdCYjMzk7cyBub3QgYSBnby10byBzb2x1dGlvbiBmb3IgZXZlcnkgZHJpdmVyLiBTbywgaW5pdGlhbCBwcm9iaW5nIGlzIHVubGlrZWx5LgoKSG93ZXZlciwgbGV0JiMzOTtzIGFzc3VtZSwgZm9yIHRoZSBzYWtlIG9mIGFyZ3VtZW50LCB0aGF0IGl0ICpkb2VzKiBzb21laG93IG1hbmFnZSB0byBwcm9iZS4gSWYgdGhhdCBoYXBwZW5zLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGB5dDkyMXhfbWRpb19wcm9iZWAgb3IgYHl0OTIxeF9zZXR1cGAgZnVuY3Rpb25zLiBUaGlzIGlzIGJlY2F1c2UsIGV2ZW4gaWYgaXQmIzM5O3MgdGhlcmUsIHRoZSBkcml2ZXImIzM5O3MgZ29pbmcgdG8gYXR0ZW1wdCB0byB2ZXJpZnkgdGhlIGNoaXAgSUQgYnkgcmVhZGluZyByZWdpc3RlcnMgdGhyb3VnaCBNRElPLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IE1ESU8gaW50ZXJhY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBHb3R0YSBmb2xsb3cgdGhhdCBNRElPIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X21kaW9fcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjgyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxMy1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MTQ6c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2OTpcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MC1cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTE2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB5dDkyMXhfbWRpb19wcm9iZWAgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWU6CgoqKkRpc3NlY3RpbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvciBzZXR1cCBvZiBzb21ldGhpbmcgcmVsYXRlZCB0byBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgeXQ5MjF4YCBkZXZpY2UuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IE1ESU8gaXMgdXN1YWxseSBob3cgdGhlIHN5c3RlbSB0YWxrcyB0byBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBvdGhlciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgY29tcG9uZW50cy4gU28sIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmUgcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlOiBkZXRlY3RpbmcgdGhlIFBIWSwgY29uZmlndXJpbmcgaXRzIHJlZ2lzdGVycywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBvciBpbnRlcnJ1cHQgbGluZXMgZm9yIGNvbW11bmljYXRpb24sIGFuZCBmaW5hbGx5LCBnZXR0aW5nIHRoZSBkZXZpY2UgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0IGRvZXMgdGhvc2UgdGhpbmdzLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzE0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3MTQ6XHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ3MTU6XHR7XG40NzE2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjQ3MTc6XHRcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG40NzE4Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG40NzE5Olx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG40NzIwOlx0XG40NzIxOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG40NzIyOlx0XHRpZiAoIXByaXYpXG40NzIzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDcyNDpcdFxuNDcyNTpcdFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuNDcyNjpcdFx0aWYgKCFtZGlvKVxuNDcyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3Mjg6XHRcbjQ3Mjk6XHRcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG40NzMwOlx0XHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG40NzMxOlx0XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbjQ3MzI6XHRcbjQ3MzM6XHRcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NzM0Olx0XG40NzM1Olx0XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuNDczNjpcdFx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbjQ3Mzc6XHRcbjQ3Mzg6XHRcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpJiM0MzsmIzQzOykge1xuNDczOTpcdFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbjQ3NDA6XHRcbjQ3NDE6XHRcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuNDc0MjpcdFx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbjQ3NDM6XHRcdH1cbjQ3NDQ6XHRcbjQ3NDU6XHRcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbjQ3NDY6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjQ3NDc6XHRcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbjQ3NDg6XHRcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG40NzQ5Olx0XHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbjQ3NTA6XHRcdGRzLVx1MDAzZW9wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcbjQ3NTE6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xuNDc1MjpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XG40NzUzOlx0XHRkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xuNDc1NDpcdFx0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcbjQ3NTU6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcbjQ3NTY6XHRcbjQ3NTc6XHRcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG40NzU4Olx0XG40NzU5Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG40NzYwOlx0fVxuNDc2MTpcdFxuNDc2MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuNDc2MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDsgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNzQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGVjb2RpbmcgVGhpcyBEU0EgU3dpdGNoIFJlZ2lzdHJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgcHJvY2VzcyBiZWdpbnMgd2l0aCBhIGNhbGwgdG8gYGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBzdGVwIGluIGdldHRpbmcgdGhpcyBzd2l0Y2ggaW50ZWdyYXRlZC4gIE5vdywgSSYjMzk7bSBleHBlY3RpbmcgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHRvIHRoZW4gY2FsbCB0aGUgc2V0dXAgZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhlIHN3aXRjaCBoYXJkd2FyZSwgd2hpY2gsIGluIHRoaXMgY2FzZSwgaXMgYHl0OTIxeF9kc2Ffc2V0dXBgLiAgSXQmIzM5O3MgbGlrZWx5IHRoYXQgYGRzLSZndDtvcHNgIGhvbGRzIHRoZSBmdW5jdGlvbiBwb2ludGVycywgc28gaXQmIzM5O3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24sIHBhc3NlZCB0aHJvdWdoIHRoZSBgZHNgIHN0cnVjdHVyZS4gUmlnaHQsIGBkcy0mZ3Q7b3BzYCBpcyB0aGUga2V5LiAgTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB5dDkyMXhfZHNhX3NldHVwYCBhY3R1YWxseSAqZG9lcyouIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2RzYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ0OTU9c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1Mzc6c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY2OC1cdC8qIGNoaXAgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjcwLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjM0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgdGhlIENoaXAgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZSB2ZXJpZmljYXRpb24gaXMgb2NjdXJyaW5nIHdpdGhpbiB0aGUgc2V0dXAgcm91dGluZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gZWl0aGVyIGB5dDkyMXhfY2hpcF9zZXR1cGAgb3IgYHl0OTIxeF9kc2Ffc2V0dXBgLiBUaGVzZSBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMsIGdpdmVuIHRoZWlyIHJvbGUgaW4gaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNvbWV3aGVyZSBpbiBvbmUgb2YgdGhvc2UsIHdlJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyB0aGF0JiMzOTtzIGRpcmVjdGx5IGludGVycm9nYXRpbmcgdGhlIHJlZ2lzdGVycyB0byBjb25maXJtIHRoZSBjaGlwJiMzOTtzIHByZXNlbmNlIGFuZCBwcm9wZXIgY29uZmlndXJhdGlvbi4gVGhpcyBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaW4gdHJhY2tpbmcgZG93biB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDk1Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG40NDk2Olx0e1xuNDQ5NzpcdFx0dTMyIGN0cmw7XG40NDk4Olx0XHRpbnQgcmVzO1xuNDQ5OTpcdFxuNDUwMDpcdFx0Y3RybCA9IFlUOTIxWF9GVU5DX01JQiB8IFlUOTIxWF9GVU5DX0FDTCB8IFlUOTIxWF9GVU5DX01FVEVSO1xuNDUwMTpcdFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMVhfRlVOQywgY3RybCk7XG40NTAyOlx0XHRpZiAocmVzKVxuNDUwMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDUwNDpcdFxuNDUwNTpcdFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXBfZHNhKHByaXYpO1xuNDUwNjpcdFx0aWYgKHJlcylcbjQ1MDc6XHRcdFx0cmV0dXJuIHJlcztcbjQ1MDg6XHRcbjQ1MDk6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX3RjKHByaXYpO1xuNDUxMDpcdFx0aWYgKHJlcylcbjQ1MTE6XHRcdFx0cmV0dXJuIHJlcztcbjQ1MTI6XHRcbjQ1MTM6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX2FjbChwcml2KTtcbjQ1MTQ6XHRcdGlmIChyZXMpXG40NTE1Olx0XHRcdHJldHVybiByZXM7XG40NTE2Olx0XG40NTE3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0RDQilcbjQ1MTg6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX3Fvcyhwcml2KTtcbjQ1MTk6XHRcdGlmIChyZXMpXG40NTIwOlx0XHRcdHJldHVybiByZXM7XG40NTIxOlx0I2VuZGlmXG40NTIyOlx0XG40NTIzOlx0XHQvKiBDbGVhciBNSUIgKi9cbjQ1MjQ6XHRcdGN0cmwgPSBZVDkyMVhfTUlCX0NUUkxfQ0xFQU4gfCBZVDkyMVhfTUlCX0NUUkxfQUxMX1BPUlQ7XG40NTI1Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9NSUJfQ1RSTCwgY3RybCk7XG40NTI2Olx0XHRpZiAocmVzKVxuNDUyNzpcdFx0XHRyZXR1cm4gcmVzO1xuNDUyODpcdFxuNDUyOTpcdFx0LyogTWlzY2VsbGFuZW91cyAqL1xuNDUzMDpcdFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMVhfU0VOU09SLCBZVDkyMVhfU0VOU09SX1RFTVApO1xuNDUzMTpcdFx0aWYgKHJlcylcbjQ1MzI6XHRcdFx0cmV0dXJuIHJlcztcbjQ1MzM6XHRcbjQ1MzQ6XHRcdHJldHVybiAwO1xuNDUzNTpcdH1cbjQ1MzY6XHRcbjQ1Mzc6XHRzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuNDUzODpcdHtcbjQ1Mzk6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbjQ1NDA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQ1NDE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXHUwMDNlb2Zfbm9kZTtcbjQ1NDI6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XG40NTQzOlx0XHRpbnQgcmVzO1xuNDU0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYzNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgWVQ5MjF4IERyaXZlcioqCgpIbW0sIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgdGhlIGB5dDkyMXhfY2hpcF9zZXR1cGAgZnVuY3Rpb24gaXNuJiMzOTt0IHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHB1bGxpbmcgdGhlIGNoaXAgSUQuIFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHRoaXMgd291bGQgYmUgd2hlcmUgaXQgbGl2ZWQuIE9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCB0YWtlIGEgbG9vayBhdCBgeXQ5MjF4X2RzYV9zZXR1cGAgaW5zdGVhZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHJlbGV2YW50IGluaXRpYWxpemF0aW9uIGFuZCBpZGVudGlmaWNhdGlvbiBzdGVwcyBhY3R1YWxseSBvY2N1ci4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIGJlY2F1c2UgdGhlIGFyY2hpdGVjdHVyZSBzZWVtcyBzbGlnaHRseSB1bnVzdWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTM3Olx0c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbjQ1Mzg6XHR7XG40NTM5Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG40NTQwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40NTQxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG40NTQyOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuNDU0MzpcdFx0aW50IHJlcztcbjQ1NDQ6XHRcbjQ1NDU6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ2Olx0XHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbjQ1NDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1NDg6XHRcbjQ1NDk6XHRcdGlmIChyZXMpXG40NTUwOlx0XHRcdHJldHVybiByZXM7XG40NTUxOlx0XG40NTUyOlx0XHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxuNDU1MzpcdFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxuNDU1NDpcdFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXG40NTU1Olx0XHQgKi9cbjQ1NTY6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuNDU1NzpcdFx0aWYgKGNoaWxkKSB7XG40NTU4Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1NTk6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2MDpcdFx0XHRpZiAocmVzKVxuNDU2MTpcdFx0XHRcdHJldHVybiByZXM7XG40NTYyOlx0XHR9XG40NTYzOlx0XG40NTY0Olx0XHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xuNDU2NTpcdFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpby1leHRlcm5hbFwmIzM0Oyk7XG40NTY2Olx0XHRpZiAoY2hpbGQpIHtcbjQ1Njc6XHRcdFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xuNDU2ODpcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG40NTY5Olx0XHRcdGlmIChyZXMpXG40NTcwOlx0XHRcdFx0cmV0dXJuIHJlcztcbjQ1NzE6XHRcbjQ1NzI6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VudGVzdGVkIGV4dGVybmFsIG1kaW8gYnVzXFxuXCYjMzQ7KTtcbjQ1NzM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40NTc0Olx0XHR9XG40NTc1Olx0XG40NTc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3NzpcdFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXAocHJpdik7XG40NTc4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTc5Olx0XG40NTgwOlx0XHRpZiAocmVzKVxuNDU4MTpcdFx0XHRyZXR1cm4gcmVzO1xuNDU4MjpcdFxuNDU4MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuNDU4NDpcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG40NTg1Olx0XHRpZiAocmVzKVxuNDU4NjpcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwmIzM0OywgcmVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2NTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ2hpcCBSZXNldCBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBpbml0aWF0aW5nIGEgcmVzZXQgd2l0aCBgeXQ5MjF4X2NoaXBfcmVzZXQocHJpdilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVzZXQg4oCTIGlzIGl0IGEgZnVsbCBwb3dlciBjeWNsZSwgYSBzb2Z0IHJlc2V0LCBhIHJlZ2lzdGVyIGNsZWFyLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0JiMzOTtzIHRoZSBgcHJpdmAgYXJndW1lbnQ/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGRhdGEgc3RydWN0dXJlIGl0IGhvbGRzIOKAkyB0aGF0JiMzOTtsbCBnaXZlIG1lIGNvbnRleHQgb24gd2hhdCBoYXJkd2FyZSByZXNvdXJjZXMgdGhpcyByZXNldCBtaWdodCBiZSBhZmZlY3RpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHdyaXRlcywgZGVsYXlzLCBpbnRlcnJ1cHQgZGlzYWJsZS9lbmFibGUgc2VxdWVuY2VzIOKAkyBhbnl0aGluZyB0aGF0IG1pZ2h0IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSByZXNldCYjMzk7cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBkZXZpY2UgZnVuY3Rpb25hbGl0eSBvciBkYXRhIGludGVncml0eS4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2VxdWVuY2luZywgdG9vOyB0aGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zIGNhbiBiZSBhcyBpbXBvcnRhbnQgYXMgdGhlIG9wZXJhdGlvbnMgdGhlbXNlbHZlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBwcm9iYWJseSBzb21ldGhpbmcgZmFpcmx5IHN0YW5kYXJkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHNwZWNpZmljIGhhbmRsaW5nIG9mIHRoaXMgcGFydGljdWxhciBjaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfY2hpcF9yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Mjk0OnN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDUtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU0NjpcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0Ny1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyMzEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6CgoqKlRpbWUgdG8gRGlhZ25vc2U6IGB5dDkyMXhgIFJlc2V0IGFuZCBEZXRlY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgZXNzZW50aWFscyBmb3IgYSBzeXN0ZW0gbGlrZSB0aGlzLiBCZWZvcmUgSSBzdGFydCBnb2luZyBkb3duIGFueSByYWJiaXQgaG9sZXMgd2l0aCBtb3JlIGNvbXBsZXggZGVidWdnaW5nLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBmaXJzdCBwYXNzIG9uIHRoZSBvYnZpb3VzLiBUaGUgY29yZSBvZiBteSBhbmFseXNpcyBhbHdheXMgc3RhcnRzIGZyb20gYmFzaWNzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGV2aWNlIGlzIHJlc2V0IHByb3Blcmx5LCBhbmQgd2hldGhlciB0aGUgc3lzdGVtIGlzIGRldGVjdGluZyB0aGUgaW50ZW5kZWQgY2hpcC4gU28sIGZpcnN0IG9uIG15IGxpc3Q6IGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb25zIGB5dDkyMXhfY2hpcF9yZXNldGAgYW5kIGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjaGlwIGlzIGdldHRpbmcgYSBzb2xpZCByZXNldCBzaWduYWwsIGFuZCB0aGF0IHRoZSBkZXZpY2UgZGV0ZWN0aW9uIHJvdXRpbmUgaXMgZXZlbiBwaWNraW5nIHVwIG9uIGl0cyBwcmVzZW5jZS4gVGhpcyBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjI3Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDIyODpcdHtcbjQyMjk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyMzA6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbztcbjQyMzE6XHRcdHU4IGV4dG1vZGU7XG40MjMyOlx0XHR1MzIgY2hpcGlkO1xuNDIzMzpcdFx0dTMyIG1ham9yO1xuNDIzNDpcdFx0dTMyIG1vZGU7XG40MjM1Olx0XHR1MzIgdmFsO1xuNDIzNjpcdFx0aW50IHJlcztcbjQyMzc6XHRcbjQyMzg6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXHUwMDI2Y2hpcGlkKTtcbjQyMzk6XHRcdGlmIChyZXMpXG40MjQwOlx0XHRcdHJldHVybiByZXM7XG40MjQxOlx0XG40MjQyOlx0XHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcbjQyNDM6XHRcbjQyNDQ6XHRcdGZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNDU6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IpXG40MjQ2Olx0XHRcdFx0YnJlYWs7XG40MjQ3Olx0XHRpZiAoIWluZm8tXHUwMDNlbmFtZSkge1xuNDI0ODpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5leHBlY3RlZCBjaGlwaWQgMHgleFxcblwmIzM0OywgY2hpcGlkKTtcbjQyNDk6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40MjUwOlx0XHR9XG40MjUxOlx0XG40MjUyOlx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfTU9ERSwgXHUwMDI2bW9kZSk7XG40MjUzOlx0XHRpZiAocmVzKVxuNDI1NDpcdFx0XHRyZXR1cm4gcmVzO1xuNDI1NTpcdFx0cmVzID0geXQ5MjF4X2VkYXRhX3JlYWQocHJpdiwgWVQ5MjFYX0VEQVRBX0VYVE1PREUsIFx1MDAyNmV4dG1vZGUpO1xuNDI1NjpcdFx0aWYgKHJlcylcbjQyNTc6XHRcdFx0cmV0dXJuIHJlcztcbjQyNTg6XHRcbjQyNTk6XHRcdGZvciAoOyBpbmZvLVx1MDAzZW5hbWU7IGluZm8mIzQzOyYjNDM7KVxuNDI2MDpcdFx0XHRpZiAoaW5mby1cdTAwM2VtYWpvciA9PSBtYWpvciBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2Vtb2RlID09IG1vZGUgXHUwMDI2XHUwMDI2XG40MjYxOlx0XHRcdCAgICBpbmZvLVx1MDAzZWV4dG1vZGUgPT0gZXh0bW9kZSlcbjQyNjI6XHRcdFx0XHRicmVhaztcbjQyNjM6XHRcdGlmICghaW5mby1cdTAwM2VuYW1lKSB7XG40MjY0Olx0XHRcdGRldl9lcnIoZGV2LFxuNDI2NTpcdFx0XHRcdFwmIzM0O1Vuc3VwcG9ydGVkIGNoaXBpZCAweCV4IHdpdGggY2hpcG1vZGUgMHgleCAweCV4XFxuXCYjMzQ7LFxuNDI2NjpcdFx0XHRcdGNoaXBpZCwgbW9kZSwgZXh0bW9kZSk7XG40MjY3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuNDI2ODpcdFx0fVxuNDI2OTpcdFxuNDI3MDpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9TWVNfQ0xLLCBcdTAwMjZ2YWwpO1xuNDI3MTpcdFx0aWYgKHJlcylcbjQyNzI6XHRcdFx0cmV0dXJuIHJlcztcbjQyNzM6XHRcdHN3aXRjaCAoRklFTERfR0VUKFlUOTIxWF9TWVNfQ0xLX1NFTF9NLCB2YWwpKSB7XG40Mjc0Olx0XHRjYXNlIDA6XG40Mjc1Olx0XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSBpbmZvLVx1MDAzZW1ham9yID09IFlUOTIxNV9NQUpPUiA/IDggOiA2O1xuNDI3NjpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMyOTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGxvZ2ljLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyBpdCBteXNlbGY6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogeXQ5MjF4IENoaXAgRGV0ZWN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiBpcyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciBmb3Igb3VyIFlUOTIxWCBjaGlwJiMzOTtzIHByZXNlbmNlLiBJdCYjMzk7cyB0YXNrZWQgd2l0aCBpZGVudGlmeWluZyB0aGUgY2hpcCBtb2RlbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBncmFiYmluZyB0aGUgdmFsdWUgb2YgYFlUOTIxWF9DSElQX0lEYC4gVGhhdCYjMzk7cyB0aGUga2V5IGlkZW50aWZpZXIsIHRoZSBjaGlwJiMzOTtzICYjMzQ7ZmluZ2VycHJpbnQmIzM0OyBzbyB0byBzcGVhay4gVGhlbiwgdGhpcyB2YWx1ZSBpcyBjb21wYXJlZCB3aXRoIHRoZSBzZXQgb2YgZXhwZWN0ZWQgaWRlbnRpZmllcnMgZGVmaW5lZCBpbiBgeXQ5MjF4X2luZm9zYC4gSWYgdGhlIGdyYWJiZWQgSUQgZG9lc24mIzM5O3Qgaml2ZSB3aXRoIGFueSBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzLCB0aGF0JiMzOTtzIGEgcmVkIGZsYWcuIFRoZSBmdW5jdGlvbiBzaWduYWxzIGEgc2VyaW91cyBwcm9ibGVtLCByZXR1cm5pbmcgYC1FTk9ERVZgLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRldmljZSBpc24mIzM5O3QgdGhlIG9uZSB3ZSYjMzk7cmUgZXhwZWN0aW5nIG9yIGl0JiMzOTtzIHNpbXBseSBub3QgZGV0ZWN0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBjaGVjay4KCk5vdywgYSByZWxhdGVkIHF1ZXN0aW9uIHBvcHMgaW50byBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGlzIGRldGVjdGlvbiBpcyB1c2VkLiBJcyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBpbnZva2VkIGZyb20gYHl0OTIxeF9jaGlwX3Jlc2V0YD8gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBjcml0aWNhbCB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgbG9naWMuIFNwZWNpZmljYWxseSwgaG93IGRvIHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyPyBJcyB0aGUgYGNoaXBfZGV0ZWN0YCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGNoaXAgcmVzZXQ/IERvZXMgdGhlIHJlc2V0IGZ1bmN0aW9uIHJlcXVpcmUgYSBrbm93biwgZGV0ZWN0YWJsZSBjaGlwPyBEb2VzIHRoZSByZXNldCBmdW5jdGlvbiBvY2N1ciByZWdhcmRsZXNzPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0Mjk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyOTQ6XHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyOTU6XHR7XG40Mjk2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40Mjk3Olx0XHR1MTYgZXRoX3BfdGFnO1xuNDI5ODpcdFx0dTMyIHZhbDtcbjQyOTk6XHRcdGludCByZXM7XG40MzAwOlx0XG40MzAxOlx0XHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XG40MzAyOlx0XHRpZiAocmVzKVxuNDMwMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwNDpcdFxuNDMwNTpcdFx0LyogUmVzZXQgKi9cbjQzMDY6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XG40MzA3Olx0XHRpZiAocmVzKVxuNDMwODpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwOTpcdFxuNDMxMDpcdFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xuNDMxMTpcdFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xuNDMxMjpcdFxuNDMxMzpcdFx0dmFsID0gMDtcbjQzMTQ6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfUlNULCB+MCwgXHUwMDI2dmFsKTtcbjQzMTU6XHRcdGlmIChyZXMpXG40MzE2Olx0XHRcdHJldHVybiByZXM7XG40MzE3Olx0XG40MzE4Olx0XHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXG40MzE5Olx0XHQgKiBiZWZvcmUuXG40MzIwOlx0XHQgKi9cbjQzMjE6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcdTAwMjZ2YWwpO1xuNDMyMjpcdFx0aWYgKHJlcylcbjQzMjM6XHRcdFx0cmV0dXJuIHJlcztcbjQzMjQ6XHRcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcbjQzMjU6XHRcdGlmIChldGhfcF90YWcgIT0gRVRIX1BfWVQ5MjFYKSB7XG40MzI2Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtUYWcgdHlwZSAweCV4ICE9IDB4JXhcXG5cJiMzNDssIGV0aF9wX3RhZyxcbjQzMjc6XHRcdFx0XHRFVEhfUF9ZVDkyMVgpO1xuNDMyODpcdFx0XHQvKiBEZXNwaXRlIGJlaW5nIHBvc3NpYmxlLCB3ZSBjaG9vc2Ugbm90IHRvIHNldCBDUFVfVEFHX1RQSUQsXG40MzI5Olx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIHdheSBpdCBjYW4gYmUgZGlmZmVyZW50IHVubGVzcyB5b3UgaGF2ZSB0aGVcbjQzMzA6XHRcdFx0ICogd3JvbmcgY2hpcC5cbjQzMzE6XHRcdFx0ICovXG40MzMyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDMzMzpcdFx0fVxuNDMzNDpcdFxuNDMzNTpcdFx0cmV0dXJuIDA7XG40MzM2Olx0fVxuNDMzNzpcdFxuNDMzODpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfc2V0dXBfZHNhKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQzMzk6XHR7XG40MzQwOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuNDM0MTpcdFx0dW5zaWduZWQgbG9uZyBjcHVfcG9ydHNfbWFzaztcbjQzNDI6XHRcdHUzMiBjdHJsc1syXTtcbjQzNDM6XHRcdHUzMiBjdHJsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB5dDkyMXhfY2hpcF9yZXNldGAgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGRlZmluaXRlbHkgY2FsbHMgYHl0OTIxeF9jaGlwX2RldGVjdGAsIEkgY2FuIHNlZSB0aGF0LiBBbmQgaWYgYHl0OTIxeF9jaGlwX2RldGVjdGAgY2FuJiMzOTt0IGlkZW50aWZ5IHRoZSBjaGlwLCBpdCYjMzk7cyBnb2luZyB0byByZXR1cm4gYC1FTk9ERVZgLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBOb3csIHRoZSBwcm9ibGVtIGlzLCBzeXprYWxsZXIgaXMgcnVubmluZyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQg4oCTIHNvbWV0aGluZyBsaWtlIFFFTVUgb3IgR0NFLCByaWdodD8gV2UgZG9uJiMzOTt0ICphY3R1YWxseSogaGF2ZSB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIGluIHRoZSBzeXN0ZW0uIFdoaWNoIG1lYW5zIHRob3NlIE1ESU8gcmVhZHMgYXJlIGVpdGhlciBnb2luZyB0byBjb21wbGV0ZWx5IGZhaWwsIG9yIHJldHVybiBzb21lIGdhcmJhZ2UgdmFsdWUsIHByb2JhYmx5IDAgb3IgbWF5YmUgYDB4ZmZmZmAuIEVpdGhlciB3YXksIGl0JiMzOTtzIG5vdCBnb2luZyB0byBtYXRjaCBgWVQ5MjE1X01BSk9SYCwgd2hhdGV2ZXIgdGhhdCBkZWZpbmVzLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gY2FuIHN5emthbGxlciAqbW9jayogdGhvc2UgTURJTyByZWFkcz8gVGhhdCB3b3VsZCBiZSB0aGUgaWRlYWwgc2l0dWF0aW9uLiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGEgZ2VuZXJpYyBNRElPIG1vY2sgZHJpdmVyIGluIHRoZSBiYXNlIHN5emthbGxlciBzZXR1cCB0aGF0IGFsbG93cyBpbmplY3RpbmcgYXJiaXRyYXJ5IHJlYWQgdmFsdWVzIGZvciBhcmJpdHJhcnkgUEhZcyBvciBkZXZpY2VzIHVubGVzcyBvbmUgaGFzIGJlZW4gc3BlY2lmaWNhbGx5IHdyaXR0ZW4gZm9yIGl0LiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGl0LgoKSG9sZCBvbiwgdGhlcmUmIzM5O3MgYG1kaW8tbW9ja3VwYCwgcmlnaHQ/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYG1kaW8tbW9ja3VwYCBvciBwb3RlbnRpYWxseSBldmVuIGBtZGlvLWZhdWx0LWluamVjdGAgZXhpc3RzLiBUaGF0IGNvdWxkIGJlIGEgZ2FtZS1jaGFuZ2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA4MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkV4cGxvcmluZyB0aGUgRnV6emluZyBMYW5kc2NhcGUqKi4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZnV6emluZyBsYW5kc2NhcGUgZm9yIGFueXRoaW5nIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG1kaW9gLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBjcnVjaWFsIHN0ZXAuIFVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBhbHJlYWR5IGJlZW4gZXhwbG9yZWQsIHdoYXQmIzM5O3MgYmVlbiB0cmllZCwgYW5kIHdoYXQgdnVsbmVyYWJpbGl0aWVzIG1heSBoYXZlIGJlZW4gdW5lYXJ0aGVkIGlzIHZpdGFsIGJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgbXkgb3duIGFwcHJvYWNoLiBJIHdhbnQgdG8gYXZvaWQgZHVwbGljYXRpbmcgZWZmb3J0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZW5zdXJlIEkmIzM5O20gYnVpbGRpbmcgb24gZXhpc3Rpbmcga25vd2xlZGdlLiBGdXp6aW5nIGlzIGEgZGVlcCBmaWVsZCBhbmQgSSBuZWVkIGEgYmFzZWxpbmUgYmVmb3JlIGRlY2lkaW5nIGlmIEkmIzM5O20gcmVpbnZlbnRpbmcgdGhlIHdoZWVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKmZ1enomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTI1OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB5dDkyMXhgIERyaXZlciBQcm9iZSBhbmQgTEVEIFNldHVwKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgTEVEIGNvZGUgaW4gYHl0OTIxeGAgaXMgcmVhY2hlZCwgYW5kIEkmIzM5O20gYSBiaXQgaHVuZyB1cC4gTGV0IG1lIGJyZWFrIHRoaXMgZG93biBsb2dpY2FsbHkuIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBkc2FfbG9vcGAuIEl0JiMzOTtzIGEgbW9jayBEU0Egc3dpdGNoLCBidXQgaXQgdXNlcyBpdHMgb3duIGRyaXZlciwgYGRzYV9sb29wLmNgLCBub3QgdGhlIGB5dDkyMXhgIGRyaXZlci4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgeXQ5MjF4YCBkcml2ZXIgc2hvdWxkIG9ubHkgcHJvYmUgaWYgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDogYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggYG1vdG9yY29tbSx5dDkyMTVgIGV4aXN0cywgKmFuZCogdGhlIE1ESU8gYnVzIHJldHVybnMgdGhlIGNvcnJlY3QgY2hpcCBJRC4gUmlnaHQsIG1ha2VzIHNlbnNlLgoKR2l2ZW4gdGhlIHR5cGljYWwgc3l6a2FsbGVyIGVudmlyb25tZW50LCBJIGtub3cgd2UgZG9uJiMzOTt0IGhhdmUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZXJlIGlzbiYjMzk7dCBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIGl0LCBzbyBteSBndXQgdGVsbHMgbWUgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSB3aWxsICphbHdheXMqIGZhaWwgYXQgYHl0OTIxeF9jaGlwX2RldGVjdGAuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB0aGUgTEVEIGNvZGUgZXZlciBleGVjdXRlIHdpdGhvdXQgYSBzdWNjZXNzZnVsIHByb2JlPyBUaGUgc2VxdWVuY2UgYXBwZWFycyB0byBiZTogYHl0OTIxeF9sZWRzX3NldHVwYCBpcyBjYWxsZWQgZnJvbSBgeXQ5MjF4X2RzYV9zZXR1cGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBgeXQ5MjF4X21kaW9fcHJvYmVgLiBTbyBpZiBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmYWlscywgdGhlbiBgeXQ5MjF4X2RzYV9zZXR1cGAgd2lsbCBmYWlsIGFuZCByZXR1cm4gYW4gZXJyb3IgYW5kIHN1YnNlcXVlbnRseSwgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHdpbGwgZmFpbC4gSSYjMzk7dmUgZ290IHRoYXQgcGFydC4KCkhvbGQgb24sIEkmIzM5O20gc2VlaW5nIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kuIEkgaGFkIGEgcXVpY2sgbWVudGFsIGhpY2N1cCwgYnV0IEkgcmVtZW1iZXIgaXQmIzM5O3MgYHl0OTIxeF9kc2Ffc2V0dXBgIHRoYXQgaXMgY2FsbGVkICpieSogYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byByZWNvbmZpcm0uIExldCYjMzk7cyBnbyB0byB0aGUgc291cmNlLCBlaXRoZXIgYG5ldC9kc2EvZHNhLmNgIG9yIGBuZXQvZHNhL2RzYTIuY2AuIEdvdCBpdCwgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtzZXR1cChkcylgLiBJZiB0aGF0IGBzZXR1cGAgZnVuY3Rpb24gZmFpbHMsIHRoZSBzd2l0Y2ggaXMgbm90IHJlZ2lzdGVyZWQuIEFuZCBzaW5jZSBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBpcyBwYXJ0IG9mIGB5dDkyMXhfZHNhX3NldHVwYCwgdGhlIGNoZWNrIHdpbGwgZmFpbCB0aGVyZS4gVGhlcmVmb3JlLCBteSBMRUQgc2V0dXAgY29kZSAoYHl0OTIxeF9sZWRzX3NldHVwYCkgaXMgbmV2ZXIgcmVhY2hlZC4gQWxyaWdodCwgSSYjMzk7bSBwcmV0dHkgY29tZm9ydGFibGUgd2l0aCB0aGF0IGNvbmNsdXNpb24uIEJ1dC4uLiBpdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gZG91YmxlIGNoZWNrLCBqdXN0IHRvIGJlIGNlcnRhaW4uIExldCBtZSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBjYWxsIHBhdGhzIHRvIGB5dDkyMXhfbGVkc19zZXR1cGAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfbGVkc19zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU4My0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1ODQ6XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1ODUtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTQ5OT1zdGF0aWMgdm9pZCB5dDkyMXhfbGVkc190ZWFyZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTM1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTM2OmludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDc6aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTEwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmg6MTExOnN0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTExMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODIwCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDEwNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IGBmYWxzZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGB5dDkyMXhfZHNhX3NldHVwYCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMgb25seSBpbnZva2VkIGFzIHRoZSBgLnNldHVwYCBjYWxsYmFjayB3aXRoaW4gdGhlIGBkc2Ffc3dpdGNoX29wc2Agc3RydWN0dXJlLiBUaGUgYC5zZXR1cGAgY2FsbGJhY2sgaXRzZWxmIGlzIGNhbGxlZCBkdXJpbmcgRFNBIHRyZWUgaW5zdGFudGlhdGlvbiwgd2hpY2ggaGluZ2VzIG9uIHRoZSBzd2l0Y2ggYmVpbmcgcmVnaXN0ZXJlZCwgYW5kIGNyaXRpY2FsbHksIHRoZSBoYXJkd2FyZSBiZWluZyBwcmVzZW50ICphbmQqIGRldGVjdGVkIChvciwgYXQgYSBiYXJlIG1pbmltdW0sIHRoZSBgc2V0dXBgIGNhbGxiYWNrIG5vdCByZXR1cm5pbmcgYW4gZXJyb3IpLgoKU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIOKAkyB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gg4oCTIGFuZCB0aGF0IGhhcmR3YXJlIGNoZWNrLCBzcGVjaWZpY2FsbHkgYHl0OTIxeF9jaGlwX2RldGVjdGAsIHdpbGwgZGVmaW5pdGVseSBmYWlsIGFuZCByZXR1cm4gYC1FTk9ERVZgIGlmIHRoZSBjaGlwIGlzbiYjMzk7dCB0aGVyZS4gU28sIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGVkIGhhcmR3YXJlKSwgdGhlbiB3ZSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBleGlzdHMsIHNvIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBTaW1wbGUuCgpJJiMzOTt2ZSBjaGVja2VkIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgYXJvdW5kIHRoZSBoYXJkd2FyZSBjaGVjay4gQW55IGRlYnVnZnMvc3lzZnMgaW50ZXJmYWNlIGZvciBieXBhc3M/IE5vcGUuIElzIGB5dDkyMXhfbGVkc19zZXR1cGAgdXNlZCBhbnl3aGVyZSBlbHNlPyBObywgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIuIElzIHRoZXJlIGFuIGVtdWxhdG9yIGZvciB0aGlzIGNoaXA/IEkgY291bGRuJiMzOTt0IGZpbmQgb25lLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgbW9jayB0aGUgTURJTyByZWFkPyBXZWxsLCBubywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIE1ESU8gbW9jayB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGZyb20gdXNlcnNwYWNlIHRvIHJldHVybiBhcmJpdHJhcnkgdmFsdWVzLCBhbmQgZXZlbiBpZiBpdCBkaWQsIGl0IHdvdWxkIHJlcXVpcmUgYSBoaWdobHkgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgcmVnaXN0ZXIgdmFsdWVzLCB3aGljaCBzeXprYWxsZXIgd291bGRuJiMzOTt0IGtub3cgYXV0b21hdGljYWxseS4KCkFscmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2s6IGlzIGBDT05GSUdfTkVUX0RTQV9ZVDkyMVhgIGV2ZW4gZW5hYmxlZCBpbiBzdGFuZGFyZCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnM/IEl0IG1pZ2h0IGJlLCBidXQgaXQgc3RpbGwgd29uJiMzOTt0IHByb2JlIHdpdGhvdXQgdGhlIGhhcmR3YXJlLiBJIGhhdmUgYWxzbyB2ZXJpZmllZCB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNvbmRpdGlvbiBpbiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgaXQgZGVmaW5pdGVseSBhcHBsaWVzLCBiZWNhdXNlIHRoZSBjb2RlIGlzbiYjMzk7dCByZWFjaGFibGUuCgpJIGFsc28gY2hlY2tlZCB3aGljaCBmaWxlcyB3ZXJlIHRvdWNoZWQuIEFzaWRlIGZyb20gdGhlIGRvY3VtZW50YXRpb24gYW5kIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLCB0aGUgbWFpbiBjaGFuZ2VzIGFyZTogYSByZWZhY3RvcmluZyBvZiB0aGUgZXhpc3RpbmcgYHl0OTIxeGAgZHJpdmVyLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBsZWRzLmNgIGFuZCBgbGVkcy5oYCwgbW92aW5nIHNvbWUgYHNtaWAgZnVuY3Rpb25zIGludG8gYHNtaS5jYCBhbmQgYHNtaS5oYCwgYW5kIGFkZGluZyB0aGUgY2FsbCB0byBgeXQ5MjF4X2xlZHNfc2V0dXBgLiBUaGUgTEVELXNwZWNpZmljIGxvZ2ljIGlzIG5vdyB0aGVyZSwgYnV0IHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIHJlbWFpbnM6IGl0JiMzOTtzIHRpZWQgdG8gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4KClNvLCB0aGUgcGF0Y2ggaXMganVzdCByZWZhY3RvcmluZyBhbmQgYWRkaW5nIExFRCBzdXBwb3J0IHRvIHRoZSBgeXQ5MjF4YCBkcml2ZXIuIFNpbmNlIHRoYXQgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCB0aGUgbmV3IGNvZGUgaXMgdW5yZWFjaGFibGUuCgpUaGVyZWZvcmUsIGFuZCBmb3IgYWxsIHRob3NlIHJlYXNvbnMsIG15IGFzc2Vzc21lbnQgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtc3BlY2lmaWMgY29kZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0Egc3dpdGNoIGRyaXZlciBhbmQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgaXQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgTW90b3Jjb21tIHN3aXRjaCBjaGlwIHRvIGJlIHByZXNlbnQgb24gYW4gTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCB2aWEgTURJTyBpbiBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VL3N5emthbGxlciwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6MzEuNzg2MzEzMzkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MTUyMzk4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIgYW5kIGFkZHMgTEVEIHN1cHBvcnQgZm9yIGl0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE1vdG9yY29tbSBzd2l0Y2ggY2hpcCB0byBiZSBwcmVzZW50IG9uIGFuIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgdmlhIE1ESU8gaW4gYHl0OTIxeF9jaGlwX2RldGVjdGApLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVS9zeXprYWxsZXIsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE2OjMxLjc4NjMxODg0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MzQ0MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTA3ZTc5Y2Y5MjhjZmI0NjExODVmM2NkZWZkMTRjNWU5Y2IzNWEwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzIDE3OjE2OjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uYTNjOGQ4YTAxYzZiYTcgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xODIzMCw3ICsxODIzMCw3IEBAIE06XFx0RGF2aWQgWWFuZyBcXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXFx1MDAzZVxcbiBMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuLUY6XFx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXFxuK0Y6XFx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cXG4gRjpcXHRuZXQvZHNhL3RhZ195dDkyMXguY1xcbiBcXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuIFxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcXCJcXG4rXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXFxcIlxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1xcXCJcXG5AQCAtMTU4LDEyICsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cXG4gXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxcbiBcXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXFxuIFxcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cXG4tXFxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxcbi1cXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbi1cXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuLVxcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuLVxcdGhlbHBcXG4tXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuLVxcdCAgY2hpcC5cXG4gZW5kbWVudVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXFxuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBiNTMvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gaGlyc2NobWFubi9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBsYW50aXEvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbWljcm9jaGlwL1xcbitvYmoteVxcdFxcdFxcdFxcdCs9IG1vdG9yY29tbS9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtdjg4ZTZ4eHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXhsODYyeHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbmV0Yy9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxuQEAgLTAsMCArMSwxNyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuK1xcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuK1xcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4rXFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4rXFx0ICBjaGlwLlxcbitcXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcXG4rXFx0Ym9vbCBcXFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcXFwiXFxuK1xcdGRlZmF1bHQgeVxcbitcXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXFxuK1xcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcXG4rXFx0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuQEAgLTAsMCArMSw1IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbitvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xcbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXFxuK3l0OTIxeC1vYmpzICs9IHNtaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuc2ltaWxhcml0eSBpbmRleCA5NiVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uYTM1MTIxMzYzODNiMzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5AQCAtMTMsNyArMTMsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9oc3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbkBAIC0yNiw3ICsyNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaWVlZTgwMjFxLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInl0OTIxeC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG4gXFx0e31cXG4gfTtcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbi1cXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4tXFxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuICAqXFxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4gXFx0cmV0dXJuIChhZGRyWzRdIFxcdTAwM2NcXHUwMDNjIDgpIHwgYWRkcls1XTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXJlYWQocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0dTMyIHZhbDtcXG4tXFx0aW50IHJlcztcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxcbi1cXHRcXHRcXHRcXHRyZXMgfHwgKHZhbCBcXHUwMDI2IG1hc2spID09ICp2YWxwLFxcbi1cXHRcXHRcXHRcXHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcXG4tXFx0XFx0XFx0XFx0ZmFsc2UsIHByaXYsIHJlZywgXFx1MDAyNnZhbCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHQqdmFscCA9IHZhbDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcdHUzMiB2O1xcbi1cXHR1MzIgdTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2KTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdHUgPSB2O1xcbi1cXHR1IFxcdTAwMjY9IH5tYXNrO1xcbi1cXHR1IHw9IHZhbDtcXG4tXFx0aWYgKHUgPT0gdilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuLX1cXG4tXFxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4tICpcXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuLSAqL1xcbi1cXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcXG4te1xcbi1cXHQqbG8gXFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpoaSBcXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcXG4tXFx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbi1cXHRcXHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcXHUwMDI2dmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxcbi1cXHRcXHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdHUgfD0gdmFsc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcXG4ge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcXG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdHJldHVybiByZXM7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbmluZGV4IDU1NTA0NjUyNjY2OTUyLi42NTcwYWU1OTAyYWRlYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbkBAIC04NTAsOCArODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXFx0XFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXFxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cXHRcXHQ4XFxuIFxcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXFx0M1xcbitcXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xcbi0jZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdFxcdDExXFxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXFx0XFx0MTFcXG4rI2RlZmluZSBZVDkyMVhfUE9SVF9NQ1VcXHRcXHQxMFxcbitcXG4rI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuIFxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXFx1MDAzYyA4KVxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFxcdTAwM2M9IChwb3J0KSBcXHUwMDI2XFx1MDAyNiAocG9ydCkgXFx1MDAzYyA5KVxcbkBAIC05MzgsNiArOTQzLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XFxuIFxcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcXG4gXFx0dTY0IHJ4X2ZyYW1lcztcXG4gXFx0dTY0IHR4X2ZyYW1lcztcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xcbitcXHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XFxuK1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIwNjZhN2U4NGZlNmJjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxuQEAgLTAsMCArMSw2MDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWxlZHMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXFx1MDAzZXBvcnQpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cXHUwMDNlaW5kZXhdKVxcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuK1xcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXFxuK3tcXG4rXFx0c3dpdGNoIChncm91cCkge1xcbitcXHRjYXNlIDA6XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQqb25wID0gKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIGN0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDQpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHk7XFxuK1xcbitcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xcbitcXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsIFxcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlcilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0Zm9yICg7IGN5Y2xlIFxcdTAwM2UgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlPSAxLCBjeWNsZSBcXHUwMDNlXFx1MDAzZT0gMSlcXG4rXFx0XFx0aWYgKGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0KmN5Y2xlcCA9IGN5Y2xlO1xcbitcXG4rXFx0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxcbitcXHRcXHRcXHRcXHQgICAgIChvbiBcXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcXG4rXFx0XFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xcbitcXHRcXHRcXHRkdXR5ID0gZHV0eXNbaV07XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdGlmIChvbiBcXHUwMDNlIG9mZilcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XFxuK1xcdCpkdXR5cCA9IGR1dHk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBjaGFyIGR1dHk7XFxuK1xcdGJvb2wgdXNlX2N5Y2xlO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoISpvbnAgXFx1MDAyNlxcdTAwMjYgISpvZmZwKSB7XFxuK1xcdFxcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcXG4rXFx0XFx0XFx0aWYgKGkgIT0gZ3JvdXAgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkge1xcbitcXHRcXHRcXHRcXHRkdXR5ID0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2N5Y2xlO1xcbitcXHRcXHRib29sIGNoYW5nZV9kdXR5O1xcbitcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFxcdTAwMjZjeWNsZSwgXFx1MDAyNmR1dHkpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gY3ljbGUgXFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IGN5Y2xlICE9IHBwLVxcdTAwM2VsZWRfY3ljbGU7XFxuK1xcdFxcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXFxuK1xcdFxcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XFxuK1xcdFxcdFxcdCAgICAgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cXHUwMDNlbGVkc1tpXSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmICgoY2hhbmdlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfY3ljbGUpIHx8XFxuK1xcdFxcdFxcdFxcdCAgICAoY2hhbmdlX2R1dHkgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRpZiAodmFsICE9IGN0cmwpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRzd2l0Y2ggKGR1dHkgXFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKGR1dHkgXFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdGlmICh1c2VfY3ljbGUpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcXG4rXFx0fVxcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcXG4rXFx0XFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xcbitcXHRlbHNlXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xcbitcXHRwcC1cXHUwMDNlbGVkX2R1dHkgPSBkdXR5O1xcbitcXG4rXFx0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcXG4rXFx0Km9mZnAgPSBjeWNsZSAtICpvbnA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgdTMyIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW19fVFJJR0dFUl9ORVRERVZfTUFYXSA9IHtcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0xJTktdXFx0XFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXFxuK1xcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDBdXFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0sXFxuK1xcdFtUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWF1cXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVhdXFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcXG4rXFx0W1RSSUdHRVJfTkVUREVWX1RYXVxcdFxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgsXFxuK1xcdFtUUklHR0VSX05FVERFVl9SWF1cXHRcXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYLFxcbit9O1xcbitcXG4rc3RhdGljIGJvb2xcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXFxuK1xcdFxcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCpmbGFnc3AgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIF9fVFJJR0dFUl9ORVRERVZfTUFYOyBpKyspIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmIChtYXNrIFxcdTAwMjZcXHUwMDI2ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSBtYXNrKVxcbitcXHRcXHRcXHQqZmxhZ3NwIHw9IEJJVChpKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0Y3RybCA9IDA7XFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWCkge1xcbitcXHRcXHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRcXHRjdHJsIHw9IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXHR9XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XFxuK1xcdGlmIChncm91cCA9PSAyKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHR9XFxuK1xcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1hc2ssIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxcbitcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxcbitcXHRcXHRcXHRcXHQgICBkZWxheV9vZmYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoXFx1MDAyNnByaXYtXFx1MDAzZWRzLCBwcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAoIWRwIHx8ICFkcC1cXHUwMDNldXNlcilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBcXHUwMDI2ZHAtXFx1MDAzZXVzZXItXFx1MDAzZWRldjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXG4rXFx0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFnc3ApO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgaW50ICpwb2xhcml0eXApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIk5vIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZncm91cCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGlmIChncm91cCBcXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgZ3JvdXAsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcXFwiYWN0aXZlLWhpZ2hcXFwiKTtcXG4rXFx0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtbG93XFxcIik7XFxuK1xcdGlmIChmb3JjZV9oaWdoIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2xvdykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkR1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRncm91cCwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XFxuK1xcbitcXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcXG4rXFxuK1xcdGxlZC1cXHUwMDNlcG9ydCA9IHBwO1xcbitcXHRsZWQtXFx1MDAzZWdyb3VwID0gZ3JvdXA7XFxuK1xcbitcXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT046XFxuK1xcdFxcdG9uID0gc3RhdGUgIT0gTEVEU19ERUZTVEFURV9PRkY7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFxcdTAwMjZvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGxlZF9jZGV2ID0gXFx1MDAyNmxlZC1cXHUwMDNlY2RldjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3MgPSBvbjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gXFxcIm5ldGRldlxcXCI7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XFxuKyNlbmRpZlxcbitcXG4rXFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcXFwiLSV1OiUwMmQ6JTAydVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xcbitcXHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xcbitcXHRcXHQuZndub2RlID0gZndub2RlLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHQqcG9sYXJpdHlwID0gcG9sYXJpdHk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfdGVhcmRvd24oc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcbitcXHRcXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFxuK1xcdFxcdFxcdGlmICghbGVkKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcXHUwMDI2bGVkLVxcdTAwM2VjZGV2KTtcXG4rXFx0XFx0XFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcXG4rXFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9QT1JUUywgMCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHwgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byB0ZWFyZG93biBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBpbnZfY3RybCA9IDA7XFxuK1xcdHUzMiBpbnZfbWFzayA9IDA7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdFxcdGlmICghbGVkc19ucClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0XFx0aW50IHBvbGFyaXR5O1xcbitcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBvbGFyaXR5KTtcXG4rXFx0XFx0XFx0aWYgKHJlcykge1xcbitcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmIChwb2xhcml0eSkge1xcbitcXHRcXHRcXHRcXHRpbnZfbWFzayB8PSBCSVQocG9ydCk7XFxuK1xcdFxcdFxcdFxcdGlmIChwb2xhcml0eSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdFxcdGludl9jdHJsIHw9IEJJVChwb3J0KTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxcbitcXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChpbnZfbWFzaylcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludl9jdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc190ZWFyZG93bihwcml2KTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmJkMjA3ZTA5YThkZjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcXG5AQCAtMCwwICsxLDExOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1lUX0xFRFNfSFxcbisjZGVmaW5lIF9ZVF9MRURTX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGVkcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcXHRcXHRcXHQweGQwMDAwXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTlxcdFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVxcdEdFTk1BU0soMjAsIDE5KVxcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cXHRcXHRHRU5NQVNLKDE2LCAxMylcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTVxcdFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFxcdFxcdFxcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKVxcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXFx0XFx0KDB4ZDAwMDQgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXFx0XFx0XFx0R0VOTUFTSygxNywgMClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXFx0QklUKDE3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVxcdEJJVCgxNilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXFx0XFx0R0VOTUFTSygzMSwgMzApXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cXHRcXHRHRU5NQVNLKDI5LCAyOClcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNlXFx1MDAzZSB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFxcdEJJVCgyNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cXHRcXHRHRU5NQVNLKDI2LCAyNSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzJcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzZcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcXG4rI2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApXFx0XFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVxcdEdFTk1BU0soNCAqIChncnApICsgMTcsIDQgKiAoZ3JwKSArIDE2KVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2NcXHUwMDNjIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg0ICogKGdycCkgKyAxNikpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXFx0XFx0QklUKDE1KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXFx0QklUKDE0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcXHRCSVQoMTMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXFx0QklUKDEyKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlxcdEJJVCgxMSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXFx0XFx0QklUKDYpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cXHRcXHRCSVQoNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1xcdEJJVCgzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1xcdEJJVCgyKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LXFx0QklUKDEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1xcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcXHRcXHQweGQwMTAwXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXFx0XFx0R0VOTUFTSygyNSwgMjQpXFx0LyogZGVsYXk/ICovXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1xcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVxcdFxcdEdFTk1BU0soMSwgMClcXHQvKiAjZ3JwIC0gMSAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVxcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgKyAyKSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcXHRcXHQweGQwMWM0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXFx0XFx0MHhkMDFjOFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVxcdEJJVCgxMCAqIChncnApICsgKHBvcnQpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqIChncnApICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqIChncnApKSlcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU5cXHQ2NFxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXFx0NTEyXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcXHQyMDQ4XFxuK1xcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXFx0XFx0MjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcXHQoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4rc3RydWN0IHl0OTIxeF9sZWQge1xcbitcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcXG4rXFx0dW5zaWduZWQgY2hhciBncm91cDtcXG4rXFxuK1xcdGJvb2wgdXNlX2N5Y2xlOjE7XFxuK1xcdGJvb2wgdXNlX2R1dHk6MTtcXG4rfTtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK1xcbisjZWxzZVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNjozMi4xNTM0NzI0ODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzc4NTIyOTEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkwN2U3OWNmOTI4Y2ZiNDYxMTg1ZjNjZGVmZDE0YzVlOWNiMzVhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDE3OjE2OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzAsNyArMTgyMzAsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbitGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1wiXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXCJcbitcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcIlxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCJcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuLVx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuLVx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0Jcbi1cdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuLVx0ICBjaGlwLlxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5AQCAtMTQsMTEgKzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4gb2JqLXlcdFx0XHRcdCs9IGI1My9cbiBvYmoteVx0XHRcdFx0Kz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0Kz0gbGFudGlxL1xuIG9iai15XHRcdFx0XHQrPSBtaWNyb2NoaXAvXG4rb2JqLXlcdFx0XHRcdCs9IG1vdG9yY29tbS9cbiBvYmoteVx0XHRcdFx0Kz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQrPSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbmV0Yy9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCArMSwxNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuK1x0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuK1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBjaGlwLlxuK1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4rXHRib29sIFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcIlxuK1x0ZGVmYXVsdCB5XG4rXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4rXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbitcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgKzEsNSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uYTM1MTIxMzYzODNiMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyArMTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ5dDkyMXguaFwiXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgKzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbitcdGlmIChyZXMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cIiwgcmVzKTtcbisjZW5kaWZcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5AQCAtODUwLDggKzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXHRcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cdFx0OFxuIFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbitcbiAvKiA4IGludGVybmFsICsgMiBleHRlcm5hbCArIDEgbWN1ICovXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdDExXG4rI2RlZmluZSBZVDkyMVhfUE9SVF9NQ1VcdFx0MTBcbitcbisjZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4gXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbkBAIC05MzgsNiArOTQzLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XG4gXHR1NjQgcnhfZnJhbWVzO1xuIFx0dTY0IHR4X2ZyYW1lcztcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XG4rXHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4rXG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4rI2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjA2NmE3ZTg0ZmU2YmNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICsxLDYwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXHUwMDNlaW5kZXhdKVxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuK1xuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcbit7XG4rXHRzd2l0Y2ggKGdyb3VwKSB7XG4rXHRjYXNlIDA6XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDE6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuK1x0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuK1xuK1x0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssXG4rXHRcdFx0XHQgICAgICBjdHJsKTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbitcdFx0XHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcbitcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbit7XG4rXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0ge1xuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDMpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyO1xuK1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbitcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbitcdHVuc2lnbmVkIGludCBjeWNsZTtcbitcdHVuc2lnbmVkIGludCBkdXR5O1xuK1xuK1x0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDtcbitcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsIFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGZvciAoOyBjeWNsZSBcdTAwM2UgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZT0gMSwgY3ljbGUgXHUwMDNlXHUwMDNlPSAxKVxuK1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4rXHRcdFx0YnJlYWs7XG4rXHQqY3ljbGVwID0gY3ljbGU7XG4rXG4rXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4rXHRcdFx0XHQgICAgIChvbiBcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbitcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XG4rXHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRpZiAob24gXHUwMDNlIG9mZilcbitcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4rXHQqZHV0eXAgPSBkdXR5O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBjaGFyIGR1dHk7XG4rXHRib29sIHVzZV9jeWNsZTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcbitcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4rXHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4rXHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSsrKVxuK1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4rXHRcdFx0XHRkdXR5ID0gcHAtXHUwMDNlbGVkX2R1dHk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0Ym9vbCBjaGFuZ2VfY3ljbGU7XG4rXHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4rXG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcdTAwMjZjeWNsZSwgXHUwMDI2ZHV0eSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcbitcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbitcdFx0Y2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuK1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbitcdFx0XHQgICAgIGkrKykge1xuK1x0XHRcdFx0aWYgKGkgPT0gZ3JvdXAgfHwgIXBwLVx1MDAzZWxlZHNbaV0pXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuK1x0XHRcdFx0ICAgIChjaGFuZ2VfZHV0eSBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkpXG4rXHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0XHR9XG4rXHR9XG4rXG4rXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRpZiAodmFsICE9IGN0cmwpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4rXHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbitcdGRlZmF1bHQ6XG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuK1x0XHRicmVhaztcbitcdH1cbitcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4rXHRpZiAodXNlX2N5Y2xlKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4rXHR9XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbitcdFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuK1x0aWYgKHVzZV9jeWNsZSlcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XG4rXHRlbHNlXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdHBwLVx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbitcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbitcbitcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4rXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3QgdTMyIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW19fVFJJR0dFUl9ORVRERVZfTUFYXSA9IHtcbitcdFtUUklHR0VSX05FVERFVl9MSU5LXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHxcbitcdFx0XHRcdFx0ICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbitcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME0sXG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDBdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0sXG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSxcbitcdFtUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYsXG4rXHRbVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMLFxuK1x0W1RSSUdHRVJfTkVUREVWX1RYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxuK1x0W1RSSUdHRVJfTkVUREVWX1JYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYLFxuK307XG4rXG4rc3RhdGljIGJvb2xcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWClcbitcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHUzMiBhZGRyO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpmbGFnc3AgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIF9fVFJJR0dFUl9ORVRERVZfTUFYOyBpKyspIHtcbitcdFx0dTMyIG1hc2sgPSB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IG1hc2spID09IG1hc2spXG4rXHRcdFx0KmZsYWdzcCB8PSBCSVQoaSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpIHtcbitcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXHR9XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIGludCAqcG9sYXJpdHlwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0c3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhO1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XG4rXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuK1x0ZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XG4rXHRib29sIGZvcmNlX2hpZ2g7XG4rXHRib29sIGZvcmNlX2xvdztcbitcdGludCBwb2xhcml0eTtcbitcdHUzMiBncm91cDtcbitcdGJvb2wgb247XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKHBvcnQgPT0gWVQ5MjFYX1BPUlRfTUNVKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIk5vIExFRHMgZm9yIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXCJyZWdcIiwgXHUwMDI2Z3JvdXApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGlmIChncm91cCBcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwiLCBncm91cCwgcG9ydCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWxvd1wiKTtcbitcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cIixcbitcdFx0XHRncm91cCwgcG9ydCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbitcbitcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuK1x0XHRvbiA9IHN0YXRlICE9IExFRFNfREVGU1RBVEVfT0ZGO1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuK1x0XHRicmVhaztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbitcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbitcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4rXHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcIm5ldGRldlwiO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuKyNlbmRpZlxuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcIi0ldTolMDJkOiUwMnVcIixcbitcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbitcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4rXHRcdC5md25vZGUgPSBmd25vZGUsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0KnBvbGFyaXR5cCA9IHBvbGFyaXR5O1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc190ZWFyZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKSB7XG4rXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1xuK1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0XHRpZiAoIWxlZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9QT1JUUywgMCk7XG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVuZDtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8IFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdHJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2spO1xuK1xuK2VuZDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGlmIChyZXMpXG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byB0ZWFyZG93biBMRURzOiAlZFxcblwiLCByZXMpO1xuK31cbitcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1x0dTMyIGludl9jdHJsID0gMDtcbitcdHUzMiBpbnZfbWFzayA9IDA7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbitcdFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1xuK1x0XHRpZiAoIWRwLVx1MDAzZWRuKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwibGVkc1wiKTtcbitcdFx0aWYgKCFsZWRzX25wKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0XHRpbnQgcG9sYXJpdHk7XG4rXG4rXHRcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxuK1x0XHRcdFx0XHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2cG9sYXJpdHkpO1xuK1x0XHRcdGlmIChyZXMpIHtcbitcdFx0XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmIChwb2xhcml0eSkge1xuK1x0XHRcdFx0aW52X21hc2sgfD0gQklUKHBvcnQpO1xuK1x0XHRcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuK1x0XHRcdFx0XHRpbnZfY3RybCB8PSBCSVQocG9ydCk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVuZDtcbitcbitcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4rXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuK1x0ICovXG4rXHRpZiAoaW52X21hc2spXG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcbitcdFx0XHRcdFx0ICAgICBpbnZfY3RybCk7XG4rXG4rZW5kOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHR5dDkyMXhfbGVkc190ZWFyZG93bihwcml2KTtcbitcdHJldHVybiByZXM7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmJkMjA3ZTA5YThkZjNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICsxLDExOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX0xFRFNfSFxuKyNkZWZpbmUgX1lUX0xFRFNfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVx0R0VOTUFTSygyMCwgMTkpXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcdEJJVCgxNilcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cdFx0R0VOTUFTSygzMSwgMzApXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2NcdTAwM2MgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxNikpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcdEJJVCgxNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXHRCSVQoMTEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXHRcdEJJVCg4KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cdFx0QklUKDUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcdEJJVCgyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcdFx0MHhkMDEwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXHRcdEdFTk1BU0soMSwgMClcdC8qICNncnAgLSAxICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXHQyMDQ4XG4rXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXHRcdDI0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK3N0cnVjdCB5dDkyMXhfbGVkIHtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbitcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4rXG4rXHRib29sIHVzZV9jeWNsZToxO1xuK1x0Ym9vbCB1c2VfZHV0eToxO1xuK307XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4rXG4rI2Vsc2VcbitcbitzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICsxLDE1NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbitcdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbitcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuK1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0KnZhbHAgPSB2YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbit7XG4rXHRpbnQgcmVzO1xuK1x0dTMyIHY7XG4rXHR1MzIgdTtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHUgPSB2O1xuK1x0dSBcdTAwMjY9IH5tYXNrO1xuK1x0dSB8PSB2YWw7XG4rXHRpZiAodSA9PSB2KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbitcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHR1IHw9IHZhbHNbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHUzMiB1ID0gdnNbaV07XG4rXG4rXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgKzEsODggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9TTUlfSFxuKyNkZWZpbmUgX1lUX1NNSV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbitcdFx0XHQgICB1MzIgdmFsKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4rfVxuK1xuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4rICpcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuK3tcbitcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4rXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuK1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbit9XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNjozMi4xNTM0NzQwNTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTQ2MzAyODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBZVDkyMTUgTEVEIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBpbnRyb2R1Y2luZyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNgIGFuZCByZWxhdGVkIGZpbGVzLCBhbmQgaXQgc2VlbXMgdG8gaW50cm9kdWNlIGBDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEU2AgYW5kIG1vdmUgdGhlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgb3Igc2ltdWxhdGVkIGVudmlyb25tZW50LiBEU0EgZHJpdmVycywgYnkgdGhlaXIgbmF0dXJlLCBnZW5lcmFsbHkgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSDigJMgdGhlIHN3aXRjaCBjaGlwIGl0c2VsZiBjb25uZWN0ZWQgdmlhIE1ESU8sIFNQSSwgb3IgYSBzaW1pbGFyIGludGVyZmFjZS5cblxuVW5sZXNzIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIHNvZnR3YXJlIGVtdWxhdG9yIHNwZWNpZmljYWxseSBmb3IgdGhpcyBZVDkyMTUgY2hpcCAod2hpY2ggaXMgaGlnaGx5IGltcHJvYmFibGUpLCB0aGUgZHJpdmVyJ3MgYHByb2JlYCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIHRvIGZpbmQgdGhlIHJlcXVpcmVkIGhhcmR3YXJlLiBJdCdsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgb24gYSBidXMgdGhhdCBzaW1wbHkgd29uJ3QgZXhpc3QgaW4gYSB2aXJ0dWFsIG1hY2hpbmUgb3IgbW9zdCB0ZXN0aW5nIGVudmlyb25tZW50cy4gRXZlbiBpZiB3ZSBzb21laG93IGZvcmNlIHRoZSBkcml2ZXIgdG8gbG9hZCwgcGVyaGFwcyBieSBhZGRpbmcgYSBkZXZpY2UgdHJlZSBub2RlLCBpdCdsbCBhdHRlbXB0IHRvIHJlYWQgZnJvbSB0aGUgTURJTyBvciBTUEkgYnVzLCBhbmQgdGhvc2UgcmVhZHMgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIHVsdGltYXRlbHkgY2F1c2luZyB0aGUgcHJvYmUgdG8gZmFpbC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIHNvbWVob3cgKmZ1enoqIHRoaXMgY29kZT8gQ291bGQgd2UgcGVyaGFwcyBtb2NrIGFuIE1ESU8gYnVzIHRvIHNpbXVsYXRlIGNvbW11bmljYXRpb24/IFRoZSBpc3N1ZSBpcyB0aGF0IHN0YW5kYXJkIGZ1enppbmcgdG9vbHMsIGxpa2Ugc3l6a2FsbGVyLCBnZW5lcmFsbHkgZG9uJ3Qgb2ZmZXIgZ2VuZXJpYyBNRElPIG9yIFNQSSBtb2NrcyB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIHByb2JlIGFuIGFyYml0cmFyeSBEU0Egc3dpdGNoIHdpdGhvdXQgZXhwbGljaXQgc3VwcG9ydC4gSGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyB0aGF0IGxhY2sgcHJvcGVyIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMgYXJlIHVzdWFsbHkgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYHl0OTIxeGAgaXMgZXZlbiByZWFjaGFibGUgYXQgYWxsLiBJIHdpbGwgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBhbnkgbWVudGlvbnMgb2YgYHl0OTIxeGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwb3RlbnRpYWwgcmVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQ4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6MzkuNjk5NzgwNjMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTE0MDkxMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjU5MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMtLS0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4tLVxcbk1BSU5UQUlORVJTPTE4MjMxPVM6XFx0TWFpbnRhaW5lZFxcbk1BSU5UQUlORVJTOjE4MjMyOkY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuTUFJTlRBSU5FUlMtMTgyMzMtRjpcXHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xcbk1BSU5UQUlORVJTOjE4MjM0OkY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG5NQUlOVEFJTkVSUy0xODIzNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6Mzp5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjQ6eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NTp5dDkyMXgtb2JqcyArPSBzbWkub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI6c3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMtXFx0dW5zaWduZWQgaW50IHNpemU7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MTovKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Ni0gKi9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgtXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5OTpzdHJ1Y3QgeXQ5MjF4X2luZm8ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwMC1cXHRjb25zdCBjaGFyICpuYW1lO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA2LVxcdHUxNiBpbnRlcm5hbF9tYXNrO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNzpcXHQvKiBUT0RPOiBzZWUgY29tbWVudHMgaW4geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzKCkgKi9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDgtXFx0dTE2IGV4dGVybmFsX21hc2s7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxNjU6c3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTY2LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xODEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTgyOiNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE4My0jZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xOTA9c3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTU6c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTk2LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTc6XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTk4LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVxcdTAwM2VidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM2OnN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3dyaXRlKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM3LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyMzg6XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVxcdTAwM2VidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgeXQ5MjF4X3JlZ19vcHNfbWRpbyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzM6XFx0LnJlYWQgPSB5dDkyMXhfcmVnX21kaW9fcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzQ6XFx0LndyaXRlID0geXQ5MjF4X3JlZ19tZGlvX3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3NS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjc4LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3OTpzdGF0aWMgaW50IHl0OTIxeF9pbnRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI4MzpcXHRyZXR1cm4geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9JTlRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg0LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTI4Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjg4Onl0OTIxeF9pbnRpZl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWcsIHUxNiAqdmFscClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yODkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjk1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI5NjpcXHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yOTctXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwMy1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9SRUFEO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMwNDpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDUtXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDYtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDc6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDgtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMTE6XFx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzE0OlxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfSU5UX01CVVNfRElOLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTMyNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI3Onl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzMzOlxcdHJlcyA9IHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMzNC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQwLVxcdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1dSSVRFO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM0MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDItXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDMtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDQ6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfRE9VVCwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDUtXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDYtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDc6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDgtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1MC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTE6XFx0cmV0dXJuIHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Mi19XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzUzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1NDpzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2ludF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTUte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1NjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Ny1cXHR1MTYgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzYzLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNjQ6XFx0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgcmVnLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNjUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zNzI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM3Mzp5dDkyMXhfbWJ1c19pbnRfd3JpdGUoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgZGF0YSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNzQte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM3NTpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM3Ni1cXHRpbnQgcmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgxLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozODI6XFx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIHJlZywgZGF0YSk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9Mzg4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozODk6eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDAxLVxcdG1idXMtXFx1MDAzZXByaXYgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwMjpcXHRtYnVzLVxcdTAwM2VyZWFkID0geXQ5MjF4X21idXNfaW50X3JlYWQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDAzOlxcdG1idXMtXFx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfaW50X3dyaXRlO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwNC1cXHRtYnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE2OnN0YXRpYyBpbnQgeXQ5MjF4X2V4dGlmX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDIwOlxcdHJldHVybiB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjEtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDI0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjU6eXQ5MjF4X2V4dGlmX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MzItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDMzOlxcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQzNC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQwLVxcdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1RZUEVfQzIyIHwgWVQ5MjFYX01CVVNfQ1RSTF9SRUFEO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9FWFRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDItXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDMtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDQ6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDg6XFx0cmVzID0geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ5LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUwLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDUxOlxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfRVhUX01CVVNfRElOLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTItXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDY0Onl0OTIxeF9leHRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcwOlxcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3LVxcdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1RZUEVfQzIyIHwgWVQ5MjFYX01CVVNfQ1RSTF9XUklURTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzg6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfRVhUX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc5LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgwLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDgxOlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RPVVQsIHZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg0OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg1LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg4OlxcdHJldHVybiB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODktfVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5MC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTE6c3RhdGljIGludCB5dDkyMXhfbWJ1c19leHRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDkyLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTM6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTQtXFx0dTE2IHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDk4OlxcdHJlcyA9IHl0OTIxeF9leHRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDk5LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTA2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MDc6eXQ5MjF4X21idXNfZXh0X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTA4LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MDk6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTAtXFx0aW50IHJlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxMi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTEzOlxcdHJlcyA9IHl0OTIxeF9leHRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxNC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUxOT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTIwOnl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzMy1cXHQvKiBUT0RPOiBjNDU/ICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM0OlxcdG1idXMtXFx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19leHRfcmVhZDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MzU6XFx0bWJ1cy1cXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19leHRfd3JpdGU7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM2LVxcdG1idXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0Ny0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTQ4OnN0YXRpYyBpbnQgeXQ5MjF4X3JlYWRfbWliKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTQ5LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTA6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTEtXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1MjpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTUzLVxcdGludCByZXMgPSAwO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTU6XFx0LyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCdzIHZhaW5cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTYtXFx0ICogdG8ga2VlcCBpdHMgY29uc2lzdGVuY3ksIHNpbmNlIHdlIGhhdmUgdG8gcmVhZCByZWdpc3RlcnMgb25lIGJ5IG9uZVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTYyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU2MzpcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU2NDpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTY1LVxcdFxcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXFx1MDAzZW9mZnNldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2OS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NzA6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnZhbDApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU3MS1cXHRcXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTgyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU4MzpcXHRcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCwgXFx1MDAyNnZhbDEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU4NC1cXHRcXHRcXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwNzpzdGF0aWMgdm9pZCB5dDkyMXhfcG9sbF9taWIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwOC17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjA5OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9wb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbWliX3JlYWQud29yayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjExOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9ICh2b2lkICopKHBwIC0gcHAtXFx1MDAzZWluZGV4KSAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjEyOlxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMy1cXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxODpcXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjE5LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjI2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjI3Onl0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MjgtXFx0XFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjMzOlxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjM0OlxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz02NDE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDI6eXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDMte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NDpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ1OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ2OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDctXFx0c2l6ZV90IGo7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDktXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1MDpcXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjUxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjUzLVxcdGogPSAwO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1NDpcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1NTpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjY0LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY2NTpzdGF0aWMgaW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NzI6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NzM6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTY4Mj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4Mzp5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg0LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4NS17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg2OlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODc6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODg6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4OS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02OTAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY5MTpcXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjkyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzE4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzE5Onl0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzIwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMS17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzIyOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjM6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjQ6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyNS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyNzpcXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzI4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzM0LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjczNTpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTczNi1cXHR7IDAsIDY0IH0sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz03NDY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NDc6eXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc0OC1cXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTAte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MTpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUyOlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUzOlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU1LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTY6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1Ny1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzU5OlxcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzgzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg0Onl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03ODUtXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzg2LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODc6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4ODpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4OTpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODE5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODIwOnl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODIxLVxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjIte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyMzpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI0OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI1OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjYtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI3LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Mjg6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyOS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTgzNT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODM2Onl0OTIxeF9zZXRfZWVlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg0OS1cXHRpZiAoISFuZXdfbWFzayAhPSAhIXByaXYtXFx1MDAzZWVlZV9wb3J0c19tYXNrKSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODUwOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX1BPTl9TVFJBUF9GVU5DLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1MS1cXHRcXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9QT05fU1RSQVBfRUVFLCAhIW5ld19tYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1My1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg1NDpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfVkFMLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1NS1cXHRcXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9QT05fU1RSQVBfRUVFLCAhIW5ld19tYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2Mi1cXHQvKiBFbmFibGUgLyBkaXNhYmxlIHBvcnQgRUVFICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODYzOlxcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRV9DVFJMLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2NC1cXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydCksIGVuYWJsZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjYtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Njc6XFx0cmVzID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfRUVFbl9WQUwocG9ydCksXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY4LVxcdFxcdFxcdFxcdCAgICAgWVQ5MjFYX0VFRV9WQUxfREFUQSwgZW5hYmxlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTg3NT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODc2Onl0OTIxeF9kc2Ffc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04Nzcte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg3ODpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODc5LVxcdGludCByZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4MjpcXHRyZXMgPSB5dDkyMXhfc2V0X2VlZShwcml2LCBwb3J0LCBlKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODg4OnN0YXRpYyBpbnQgeXQ5MjF4X210dV9mZXRjaChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04OTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg5Njp5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbmV3X210dSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04OTcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkwMjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAzLVxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkxMjpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9NQUNuX0ZSQU1FKHBvcnQpLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxMy1cXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9NQUNfRlJBTUVfU0laRV9NLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTE5LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkyMDpzdGF0aWMgaW50IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTk1Mz1zdGF0aWMgdTY0IHRva2VuMmJ1cnN0KHUzMiB0b2tlbiwgaW50IHVuaXQsIGludCBDKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTU3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk1ODpzdHJ1Y3QgeXQ5MjF4X21hcmtlciB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTU5LVxcdHUzMiBjaXI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz05Njk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MDp5dDkyMXhfbWFya2VyX3RmbShzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyLCB1NjQgcmF0ZSwgdTY0IGJ1cnN0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3MS1cXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNsb3RfbnMsIHUzMiBjaXJfbWF4LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MjpcXHRcXHQgIHUzMiBjYnNfbWF4LCBpbnQgdW5pdF9tYXgsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTczLVxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTc3LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5Nzg6XFx0c3RydWN0IHl0OTIxeF9tYXJrZXIgbTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzktXFx0dTY0IGJ1cnN0X2VzdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk5OS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTAwMDpcXHRcXHRidXJzdF9zdWcgKz0gRVRIX0hMRU4gKyB5dDkyMXhfbXR1X2ZldGNoKHByaXYsIHBvcnQpICtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDAxLVxcdFxcdFxcdCAgICAgRVRIX0ZDU19MRU47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDU5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDYwOnl0OTIxeF9tYXJrZXJfdGZtX3BvbGljZShzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjEtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDYyOlxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA2My1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA3My1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDc0OlxcdHJldHVybiB5dDkyMXhfbWFya2VyX3RmbShtYXJrZXIsIHJhdGUsIGJ1cnN0LCBmbGFncyxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDc1LVxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VtZXRlcl9zbG90X25zLCBZVDkyMVhfTUVURVJfQ0lSX01BWCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTEwODA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODE6eXQ5MjF4X21hcmtlcl90Zm1fc2hhcGUoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgyOlxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDgzLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg0LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDg1OlxcdHJldHVybiB5dDkyMXhfbWFya2VyX3RmbShtYXJrZXIsIHJhdGUsIGJ1cnN0LCBmbGFncyxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg2LVxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2Vwb3J0X3NoYXBlX3Nsb3RfbnMsIFlUOTIxWF9TSEFQRV9DSVJfTUFYLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA5MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA5Mjp5dDkyMXhfcG9saWNlX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDkzLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExMjc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExMjg6eXQ5MjF4X21ldGVyX2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI5OlxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTQ4OlxcdHJldHVybiB5dDkyMXhfcmVnOTZfd3JpdGUocHJpdiwgWVQ5MjFYX01FVEVSbl9DVFJMKGlkKSwgY3RybHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNDktfVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MTpzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUyLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTUzOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU0LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNTg6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fTUVURVIocG9ydCksIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTY2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTY3Onl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNjgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzAte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzE6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzI6XFx0c3RydWN0IHl0OTIxeF9tYXJrZXIgbWFya2VyO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzMtXFx0dTMyIGN0cmw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzY6XFx0cmVzID0geXQ5MjF4X3BvbGljZV92YWxpZGF0ZShwb2xpY2UsIE5VTEwsIE5VTEwsIGV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3Ny1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTgwOlxcdHJlcyA9IHl0OTIxeF9tYXJrZXJfdGZtX3BvbGljZShcXHUwMDI2bWFya2VyLCBwb2xpY2UsIDAsIHByaXYsIHBvcnQsIGV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4MS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4NTpcXHRyZXMgPSB5dDkyMXhfbWV0ZXJfY29uZmlnKHByaXYsIHBvcnQgKyBZVDkyMVhfTUVURVJfTlVNLCBcXHUwMDI2bWFya2VyKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTg2LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTg5LVxcdGN0cmwgPSBZVDkyMVhfUE9SVF9NRVRFUl9JRChwb3J0KSB8IFlUOTIxWF9QT1JUX01FVEVSX0VOO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExOTA6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fTUVURVIocG9ydCksIGN0cmwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExOTEtZW5kOlxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE2OjQxLjY1MTE5Nzc3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTAwNzA4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozNDAzNiwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNjo0My4yNjEyNzIxNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk3NzgyMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIE1vdG9yY29tbSBMRUQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzLCB3aGljaCBhZGRzIExFRCBzdXBwb3J0IHRvIHRoZSBNb3RvcmNvbW0gRFNBIGRyaXZlciAoYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCksIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHdvcnRoIGZ1enppbmcuIEl0IGFwcGVhcnMgdG8gYmUgYSBzdHJhaWdodC1mb3J3YXJkIGRyaXZlciBmZWF0dXJlLCByZWdpc3RlcmluZyBMRUQgY2xhc3MgZGV2aWNlcyBhbmQgaGFuZGxpbmcgdGhpbmdzIGxpa2UgYmxpbmtpbmcgYW5kIGJyaWdodG5lc3MuIEZ1bmN0aW9uYWxseSwgYWJzb2x1dGVseSB5ZXMsIHRoaXMgaXMgYSBjb2RlIHBhdGggdGhhdCBuZWVkcyBzY3J1dGlueS4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyBpdCAqcmVhY2hhYmxlKj9cblxuVGhpcyBpcyBhIERTQSBzd2l0Y2ggZHJpdmVyLCBzbyBpdCByZWxpZXMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzd2l0Y2ggaGFyZHdhcmUuICBSZWFsaXN0aWNhbGx5LCB0aGlzIG1lYW5zIGFuIE1ESU8gYnVzIGlzIGludm9sdmVkLCBhbmQgRFNBIGRyaXZlcnMgYXJlIHR5cGljYWxseSBub3QgZWFzaWx5IGVtdWxhdGVkIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoZSBoYXJkd2FyZS4gIEkgbmVlZCB0byB0aGluayBhYm91dCBzeXprYWxsZXIncyBjYXBhYmlsaXRpZXMgaGVyZS4gIENhbiBpdCBpbnN0YW50aWF0ZSBhbiBNRElPIGRldmljZSBsaWtlIHRoaXM/IE15IHVuZGVyc3RhbmRpbmcgaXMgc3l6a2FsbGVyICpjYW4qIGZ1enogTURJTyBkZXZpY2VzLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3MgYSBuZXRsaW5rIG9yIHN5c2ZzIGludGVyZmFjZSBpbnZvbHZlZC4gQW5kIGJpbmdvLCBMRUQgY2xhc3MgZGV2aWNlcyBhcmUgZXhwb3NlZCB2aWEgYC9zeXMvY2xhc3MvbGVkcy9gISBTbywgaWYgdGhlIGRyaXZlciBwcm9iZXMsIHRoZSBMRURzIGFyZSByZWdpc3RlcmVkLCBhbmQgY29udHJvbCBjYW4gYmUgZG9uZSB2aWEgc3lzZnMuIFRoaXMgaXMgdGhlIGtleS5cblxuU28sIGNhbiB0aGUgZHJpdmVyICpwcm9iZSo/IEl0J3MgYSBgeXQ5MjF4YCBkZXZpY2UuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBwcm9iZSBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgIG9yLCB0aGUgb3JpZ2luYWwgZmlsZSwgYHl0OTIxeC5jYC4gSXQncyBNRElPIG9yIFNQSSBiYXNlZC4gSWYgdGhlIGRldmljZSBpc24ndCBwcmVzZW50LCB0aGUgcHJvYmUgZmFpbHMuIE5vIHByb2JlLCBubyBMRURzLiBUaGVyZWZvcmUsIGl0J3Mgbm90IHByZXNlbnQgZm9yIHN5emthbGxlciB0byB1c2UuXG5cblRoZSByZWFsIGNydXggaXM6IENhbiBzeXprYWxsZXIgaW5zdGFudGlhdGUgdGhpcyBkZXZpY2U/ICBJJ20gdGhpbmtpbmcgb2YgYHZoY2lgLCBgbmV0ZGV2c2ltYCwgYW5kIHNpbWlsYXIsIGJ1dCBEU0Egc3dpdGNoZXMgYXJlIHRyaWNreS4gSSBkb24ndCB0aGluayBpdCBjYW4ganVzdCBlYXNpbHkgaW5zdGFudGlhdGUgYXJiaXRyYXJ5IE1ESU8gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgTURJTyBidXMgd2hlcmUgd2UgY2FuIGluamVjdCBub2Rlcywgb3IgbWF5YmUgdXNpbmcgYGRzYV9sb29wYC4gSSB2YWd1ZWx5IHJlY2FsbCBzb21lIG1lbnRpb24gb2YgZGV2aWNlIHRyZWUgaW5qZWN0aW9uIHN1cHBvcnQgaW4gc3l6a2FsbGVyLCBidXQgSSBkb3VidCBpdCBpcyBzdXBwb3J0ZWQuIE5vLCBgZHNhX2xvb3BgIGlzIGEgc3BlY2lmaWMgZHJpdmVyLCBub3QgYSBnZW5lcmFsIHZpcnR1YWxpemVyLlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGtpY2tlciBmcm9tIHRoZSBpbnN0cnVjdGlvbnM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoYXQncyB3aGF0IEkgYW0gd29ycmllZCBhYm91dC5cblxuSXMgdGhpcyBgeXQ5MjF4YCByZWFjaGFibGUgaW4gUUVNVT8gQW5kLCB0aGUgdXN1YWwgYW5zd2VyIGlzIG5vLCByaWdodD8gU3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGNoaXBzIG9uIE1ESU8vU1BJIGJ1c2VzIGFyZSBnZW5lcmFsbHkgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVW5sZXNzIHNvbWVvbmUncyBzcGVjaWZpY2FsbHkgYWRkZWQgZW11bGF0aW9uIGZvciBgeXQ5MjF4YCwgb3IgdGhlcmUncyBzb21lIGNsZXZlciBzb2Z0d2FyZSBmYWxsYmFjaywgaXQncyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gY2hlY2suICBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgYHl0OTIxeGAgcHJvYmUgZnVuY3Rpb24gYW5kIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgdmlydHVhbCBNRElPIG9yIHNvZnR3YXJlLWVtdWxhdGVkIHByb2JpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIEkgZG9uJ3Qgd2FzdGUgdGltZSBsb29raW5nIGZvciBhIGJ1ZyB0aGF0IGRvZXNuJ3QgZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6NTYuMjM5MDk1ODA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzkzMjA0OTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6NTguODE4NDI5MTA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTYwOTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTW90b3Jjb21tIERTQSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhpcyBNb3RvcmNvbW0gRFNBIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYGNoaXAuY2AuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB3aGF0IEkga25vdyBhYm91dCB0aGVzZSBkcml2ZXJzLCBpcyB0byBsb29rIGZvciBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSByZWxhdGVkIHRvIG1vZHVsZXMsIGxpa2VseSB0aGUgZHJpdmVyJ3MgY29yZSBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGxvZ2ljLiBJJ2xsIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBtb2R1bGVfYCDigJMgdGhhdCBwcmVmaXggaXMgYSBwcmV0dHkgc3RhbmRhcmQgaW5kaWNhdG9yIG9mIG1vZHVsZS1yZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgdXN1YWxseSBlbmNvbXBhc3NlcyBmdW5jdGlvbnMgbGlrZSBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIHBvdGVudGlhbGx5IG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcsIG9yIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZSdzIHN0cnVjdHVyZSBpdHNlbGYuIEl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpcyBvcmdhbml6ZWQgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwncyBtb2R1bGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjAzLjkyODA0MTI4M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1MTUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlXy4qZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3Njg9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Nzc3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Nzg6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MDQuMDU1NTYyNDA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDU3MzcyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRElPIERyaXZlciBhbmQgSXRzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYW4gTURJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcyBkaXJlY3RseT8gUHJvYmFibHkgbm90LCB1bmxlc3MgdGhlcmUncyBzb21lIHNwZWNpYWwgTURJTy1zcGVjaWZpYyBmdXp6ZXIgb3Igc29tZSB0cmljayB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXkgaW5qZWN0aW9uLiBUaG91Z2gsIHdhaXQsIGlzbid0IHRoZXJlICpzb21lKiBsaW1pdGVkIG5ldGxpbmsgb3Igc3lzZnMgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIGRldmljZXMgaW4gc3l6a2FsbGVyPyBObywgdHlwaWNhbGx5IE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLlxuXG5IbW0sIGNhbiBJIHRyaWdnZXIgdGhlIExFRCBjb2RlIGluZGVwZW5kZW50bHkgb2YgdGhlIGRldmljZSBiZWluZyBwcmVzZW50PyBObywgYmVjYXVzZSBgeXQ5MjF4X2xlZHNfc2V0dXBgIGlzIGNsZWFybHkgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpcyBvbmx5IHRyaWdnZXJlZCBkdXJpbmcgdGhlIERTQSBzd2l0Y2ggc2V0dXAuIFRoYXQgbWVhbnMsIGlmIHRoZSBkZXZpY2UgaXNuJ3QgcHJvYmVkLCB0aGF0IGNvZGUncyB1bnJlYWNoYWJsZS5cblxuT2theSwgaXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgdGhhdCBtaWdodCBoZWxwPyBOb3RoaW5nIGluIHRoZSBrZXJuZWwgb3IgUUVNVSwgYXMgZmFyIGFzIEkga25vdy4gU28sIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGlzIGNvZGUgcGF0aCBpcyBwcmV0dHkgbXVjaCBkZWFkLlxuXG5XYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZSwgbWF5YmUgdGhlcmUncyBzb21lIG9ic2N1cmUgd2F5IHRvIGhpdCBNRElPIGRyaXZlcnMuLi4gQWgsIHRoZSBgZHNhX2xvb3BgIGRyaXZlciwgYnV0IHRoYXQncyBmb3IgYSBmaXhlZCBkdW1teSBzd2l0Y2guIE9rYXksIHdoYXQgYWJvdXQgYG1kaW8tbW9ja3VwYCwgb3Igc29tZXRoaW5nIHNpbWlsYXI/IExldCdzIHF1aWNrbHkgdmVyaWZ5IGlmIHRoYXQgZXhpc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUwMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzoxMC4yNjEzMDMzNDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjMzMzU0NjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MTIuOTI0NjQ5ODgyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzg4ODY3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbiBmcm9tIFVzZXJzcGFjZTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgTURJTyBkZXZpY2VzIGFuZCBob3cgd2UgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVpciBpbnN0YW50aWF0aW9uIGZyb20gdXNlcnNwYWNlLiBUaGUgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIHdlIGNhbiBkaXJlY3RseSBtYW5pcHVsYXRlIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzLy4uLmAsIGJ1dCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIGEgZGVhZCBlbmQuIEZyb20gbXkgZXhwZXJpZW5jZSwgTURJTyBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgYnJvdWdodCBvbmxpbmUgYnkgdGhlIE1ESU8gYnVzIGNvbnRyb2xsZXIgaXRzZWxmLCBlaXRoZXIgdGhyb3VnaCBoYXJkd2FyZSBwcm9iaW5nLCByZWFkaW5nIHRob3NlIGNydWNpYWwgUEhZIElEIHJlZ2lzdGVycywgb3IgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuXG5cblRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgTURJTyBidXMsIHNvbWV0aGluZyBsaWtlIGBmaXhlZC1tZGlvYCBvciBtYXliZSBldmVuIHRoZSBNRElPIGJ1cyB3aXRoaW4gYGRzYV9sb29wYCwgaXMgdGhlcmUgYSB3YXkgdG8gdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHByb2JpbmcgYSB2aXJ0dWFsIGRldmljZT8gQ291bGQgd2UgcG90ZW50aWFsbHkgbW9jayB0aGUgcmVhZCBvZiB0aGUgUEhZIElEIHJlZ2lzdGVyPyBJZiB3ZSBjb3VsZCBzaW11bGF0ZSB0aGF0IHJlYWQsIHdvdWxkIGl0IHRyaWNrIHRoZSBzeXN0ZW0gdG8gbG9hZCBkcml2ZXJzP1xuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZHJpdmVyIG1hdGNoaW5nIHNjaGVtZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGB5dDkyMXhfbWRpb19kcml2ZXJgIGZ1bmN0aW9ucywgdG8gc2VlIGlmIG1vY2tpbmcgdGhlIFBIWSBJRCBtaWdodCB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA5NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzoxNy43MDM1NDE1NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDQ2ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9tZGlvX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY4OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjktXFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Nzc3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Nzg6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MTcuNzc5NTkzODA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzA1NTg3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzIGFuZCBJIGFtIGFuIGV4cGVydCBpbiBteSBmaWVsZC5cblxuKipNYXRjaGluZyBDcml0ZXJpYSBhbmQgVGFibGUgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGludGVybmFsIHByb2Nlc3MgaXMgY29uZmlybWluZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBgb2ZfbWF0Y2hfdGFibGVgLiBUaGF0J3MgdGhlIGtleS4gSSdtIHJlbHlpbmcgb24gdGhhdCBzcGVjaWZpYyB0YWJsZSwgdGhlIGB5dDkyMXhfb2ZfbWF0Y2hgLCB0byBkZXRlcm1pbmUgaWYgYSBtYXRjaCBpcyB2YWxpZC4gTXkgZm9jdXMgbm93IGlzIHB1cmVseSBvbiB0aGUgb3V0cHV0IG9mIGB5dDkyMXhfb2ZfbWF0Y2hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc0MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjIwLjYxMDE1NTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE0NDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfb2ZfbWF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDcxND1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2MjpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzYzLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjUtfTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3My1cXHRcXHQubmFtZSA9IFlUOTIxWF9OQU1FLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzQ6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MjAuNjgzMzA0MjU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODI2ODcxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBZVDkyMTUgRHJpdmVyJ3MgUHJvYmFibGUgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlkZW50aWZpZXMgaXRzZWxmIHZpYSB0aGUgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmcgXCJtb3RvcmNvbW0seXQ5MjE1XCIuIFJpZ2h0IG5vdywgSSBjYW4ndCBzZWUgdGhpcyBkcml2ZXIgZ2V0dGluZyBsb2FkZWQgd2l0aCB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwIGJlY2F1c2UgaXQgY2FuJ3QgaW5qZWN0IGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyB5ZXQuIFdoaWxlIHRoZXJlJ3Mgd29yayBiZWluZyBkb25lIG9uIERUIG92ZXJsYXlzLCB0aGF0J3Mgbm90IGEgZ28tdG8gc29sdXRpb24gZm9yIGV2ZXJ5IGRyaXZlci4gU28sIGluaXRpYWwgcHJvYmluZyBpcyB1bmxpa2VseS5cblxuSG93ZXZlciwgbGV0J3MgYXNzdW1lLCBmb3IgdGhlIHNha2Ugb2YgYXJndW1lbnQsIHRoYXQgaXQgKmRvZXMqIHNvbWVob3cgbWFuYWdlIHRvIHByb2JlLiBJZiB0aGF0IGhhcHBlbnMsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGVsdmUgaW50byB0aGUgYHl0OTIxeF9tZGlvX3Byb2JlYCBvciBgeXQ5MjF4X3NldHVwYCBmdW5jdGlvbnMuIFRoaXMgaXMgYmVjYXVzZSwgZXZlbiBpZiBpdCdzIHRoZXJlLCB0aGUgZHJpdmVyJ3MgZ29pbmcgdG8gYXR0ZW1wdCB0byB2ZXJpZnkgdGhlIGNoaXAgSUQgYnkgcmVhZGluZyByZWdpc3RlcnMgdGhyb3VnaCBNRElPLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IE1ESU8gaW50ZXJhY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBHb3R0YSBmb2xsb3cgdGhhdCBNRElPIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MjQuNjY1OTk0MzM3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU0MTM3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X21kaW9fcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxMy1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE0OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc2OD1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY5OlxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzAtXFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MjQuNzcxNDEzNTIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTI4NzM1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgeXQ5MjF4X21kaW9fcHJvYmVgIGJhc2VkIG9uIHdoYXQgSSBjYW4gc2VlOlxuXG4qKkRpc3NlY3RpbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGB5dDkyMXhfbWRpb19wcm9iZWAgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgY29tbXVuaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYHl0OTIxeGAgZGV2aWNlLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBNRElPIGlzIHVzdWFsbHkgaG93IHRoZSBzeXN0ZW0gdGFsa3MgdG8gUEhZcyAoUGh5c2ljYWwgTGF5ZXIgVHJhbnNjZWl2ZXJzKSBhbmQgb3RoZXIgbG93LWxldmVsIG5ldHdvcmsgaW50ZXJmYWNlIGNvbXBvbmVudHMuIFNvLCBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZTogZGV0ZWN0aW5nIHRoZSBQSFksIGNvbmZpZ3VyaW5nIGl0cyByZWdpc3RlcnMsIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBjbG9ja3Mgb3IgaW50ZXJydXB0IGxpbmVzIGZvciBjb21tdW5pY2F0aW9uLCBhbmQgZmluYWxseSwgZ2V0dGluZyB0aGUgZGV2aWNlIHJlYWR5IGZvciBkYXRhIHRyYW5zZmVyLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0IGRvZXMgdGhvc2UgdGhpbmdzLCBidXQgdGhhdCdzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy4gVGltZSB0byBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5MTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzoyNy45ODQyOTExNTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MTQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MTQ6XFx0c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuNDcxNTpcXHR7XFxuNDcxNjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjQ3MTc6XFx0XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG40NzE4OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcXG40NzE5OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG40NzIwOlxcdFxcbjQ3MjE6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjQ3MjI6XFx0XFx0aWYgKCFwcml2KVxcbjQ3MjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghbWRpbylcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuNDczMDpcXHRcXHRtZGlvLVxcdTAwM2VhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG40NzMxOlxcdFxcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ3MzQ6XFx0XFxuNDczNTpcXHRcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuNDczNjpcXHRcXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG40NzM3OlxcdFxcbjQ3Mzg6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuNDczOTpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ3NDA6XFx0XFxuNDc0MTpcXHRcXHRcXHRwcC1cXHUwMDNlaW5kZXggPSBpO1xcbjQ3NDI6XFx0XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcXG40NzQzOlxcdFxcdH1cXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0ZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDc0NjpcXHRcXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbjQ3NDc6XFx0XFx0ZHMtXFx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcXG40NzQ4OlxcdFxcdGRzLVxcdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xcbjQ3NDk6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XFxuNDc1MTpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XFxuNDc1MzpcXHRcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XFxuNDc1NDpcXHRcXHRkcy1cXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcXG40NzU1OlxcdFxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XFxuNDc1NjpcXHRcXG40NzU3OlxcdFxcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XFxuNDc1ODpcXHRcXG40NzU5OlxcdFxcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcXG40NzYwOlxcdH1cXG40NzYxOlxcdFxcbjQ3NjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XFxuNDc2MzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjI3Ljk4NDYzMTE4MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU1ODYyNjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY29kaW5nIFRoaXMgRFNBIFN3aXRjaCBSZWdpc3RyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcHJvY2VzcyBiZWdpbnMgd2l0aCBhIGNhbGwgdG8gYGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHN0ZXAgaW4gZ2V0dGluZyB0aGlzIHN3aXRjaCBpbnRlZ3JhdGVkLiAgTm93LCBJJ20gZXhwZWN0aW5nIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB0byB0aGVuIGNhbGwgdGhlIHNldHVwIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoZSBzd2l0Y2ggaGFyZHdhcmUsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGlzIGB5dDkyMXhfZHNhX3NldHVwYC4gIEl0J3MgbGlrZWx5IHRoYXQgYGRzLVx1MDAzZW9wc2AgaG9sZHMgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCBzbyBpdCdzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLCBwYXNzZWQgdGhyb3VnaCB0aGUgYGRzYCBzdHJ1Y3R1cmUuIFJpZ2h0LCBgZHMtXHUwMDNlb3BzYCBpcyB0aGUga2V5LiAgTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB5dDkyMXhfZHNhX3NldHVwYCBhY3R1YWxseSAqZG9lcyouIExldCdzIGRlbHZlIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgdGhlIGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA3NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6NDQuNTQzMjYyMTMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg0OTQwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2RzYV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDk1PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTM3OnN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY2OC1cXHQvKiBjaGlwICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDY2OTpcXHQuc2V0dXBcXHRcXHRcXHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY3MC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzo0NC44NjE3NjEzMjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5OTE5MDM5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgdGhlIENoaXAgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGhhcmR3YXJlIHZlcmlmaWNhdGlvbiBpcyBvY2N1cnJpbmcgd2l0aGluIHRoZSBzZXR1cCByb3V0aW5lcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBlaXRoZXIgYHl0OTIxeF9jaGlwX3NldHVwYCBvciBgeXQ5MjF4X2RzYV9zZXR1cGAuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcywgZ2l2ZW4gdGhlaXIgcm9sZSBpbiBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlLiBJJ20gYXNzdW1pbmcgdGhhdCBzb21ld2hlcmUgaW4gb25lIG9mIHRob3NlLCB3ZSdsbCBmaW5kIHRoZSBsb2dpYyB0aGF0J3MgZGlyZWN0bHkgaW50ZXJyb2dhdGluZyB0aGUgcmVnaXN0ZXJzIHRvIGNvbmZpcm0gdGhlIGNoaXAncyBwcmVzZW5jZSBhbmQgcHJvcGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGluIHRyYWNraW5nIGRvd24gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTYzNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjU5Ljg1MzY2OTg4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ5NTpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG40NDk2OlxcdHtcXG40NDk3OlxcdFxcdHUzMiBjdHJsO1xcbjQ0OTg6XFx0XFx0aW50IHJlcztcXG40NDk5OlxcdFxcbjQ1MDA6XFx0XFx0Y3RybCA9IFlUOTIxWF9GVU5DX01JQiB8IFlUOTIxWF9GVU5DX0FDTCB8IFlUOTIxWF9GVU5DX01FVEVSO1xcbjQ1MDE6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMVhfRlVOQywgY3RybCk7XFxuNDUwMjpcXHRcXHRpZiAocmVzKVxcbjQ1MDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTA0OlxcdFxcbjQ1MDU6XFx0XFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXBfZHNhKHByaXYpO1xcbjQ1MDY6XFx0XFx0aWYgKHJlcylcXG40NTA3OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUwODpcXHRcXG40NTA5OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX3RjKHByaXYpO1xcbjQ1MTA6XFx0XFx0aWYgKHJlcylcXG40NTExOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUxMjpcXHRcXG40NTEzOlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX2FjbChwcml2KTtcXG40NTE0OlxcdFxcdGlmIChyZXMpXFxuNDUxNTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1MTY6XFx0XFxuNDUxNzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxcbjQ1MTg6XFx0XFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXBfcW9zKHByaXYpO1xcbjQ1MTk6XFx0XFx0aWYgKHJlcylcXG40NTIwOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUyMTpcXHQjZW5kaWZcXG40NTIyOlxcdFxcbjQ1MjM6XFx0XFx0LyogQ2xlYXIgTUlCICovXFxuNDUyNDpcXHRcXHRjdHJsID0gWVQ5MjFYX01JQl9DVFJMX0NMRUFOIHwgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUO1xcbjQ1MjU6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTUlCX0NUUkwsIGN0cmwpO1xcbjQ1MjY6XFx0XFx0aWYgKHJlcylcXG40NTI3OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUyODpcXHRcXG40NTI5OlxcdFxcdC8qIE1pc2NlbGxhbmVvdXMgKi9cXG40NTMwOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjFYX1NFTlNPUiwgWVQ5MjFYX1NFTlNPUl9URU1QKTtcXG40NTMxOlxcdFxcdGlmIChyZXMpXFxuNDUzMjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1MzM6XFx0XFxuNDUzNDpcXHRcXHRyZXR1cm4gMDtcXG40NTM1OlxcdH1cXG40NTM2OlxcdFxcbjQ1Mzc6XFx0c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG40NTM4OlxcdHtcXG40NTM5OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG40NTQwOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG40NTQxOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXFx1MDAzZW9mX25vZGU7XFxuNDU0MjpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xcbjQ1NDM6XFx0XFx0aW50IHJlcztcXG40NTQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzo1OS44NTM5MzcyNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NDA3MjM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBZVDkyMXggRHJpdmVyKipcblxuSG1tLCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgdGhlIGB5dDkyMXhfY2hpcF9zZXR1cGAgZnVuY3Rpb24gaXNuJ3QgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgcHVsbGluZyB0aGUgY2hpcCBJRC4gVGhhdCdzIHVuZXhwZWN0ZWQuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCB0aGlzIHdvdWxkIGJlIHdoZXJlIGl0IGxpdmVkLiBPa2F5LCBsZXQncyBiYWNrIHVwIGEgYml0IGFuZCB0YWtlIGEgbG9vayBhdCBgeXQ5MjF4X2RzYV9zZXR1cGAgaW5zdGVhZC4gSXQncyBsaWtlbHkgdGhhdCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gYW5kIGlkZW50aWZpY2F0aW9uIHN0ZXBzIGFjdHVhbGx5IG9jY3VyLiBUaW1lIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoZSBhcmNoaXRlY3R1cmUgc2VlbXMgc2xpZ2h0bHkgdW51c3VhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2MzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjAzLjcyODAxMTU0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUzNyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDUzNzpcXHRzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbjQ1Mzg6XFx0e1xcbjQ1Mzk6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbjQ1NDA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQ1NDE6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlb2Zfbm9kZTtcXG40NTQyOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuNDU0MzpcXHRcXHRpbnQgcmVzO1xcbjQ1NDQ6XFx0XFxuNDU0NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0NjpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcXG40NTQ3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ1NDg6XFx0XFxuNDU0OTpcXHRcXHRpZiAocmVzKVxcbjQ1NTA6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTUxOlxcdFxcbjQ1NTI6XFx0XFx0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiBOb2RlcyBmb3IgaW50ZXJuYWwgcG9ydHMgc2hvdWxkIGhhdmVcXG40NTUzOlxcdFxcdCAqIHByb3BlciBwaHktaGFuZGxlIHBvaW50aW5nIHRvIHRoZWlyIFBIWXMuIE5vdCBlbmFibGluZyB0aGUgaW50ZXJuYWxcXG40NTU0OlxcdFxcdCAqIGJ1cyBpcyBwb3NzaWJsZSwgdGhvdWdoIHByZXR0eSB3aXJlZCwgaWYgaW50ZXJuYWwgcG9ydHMgYXJlIG5vdCB1c2VkLlxcbjQ1NTU6XFx0XFx0ICovXFxuNDU1NjpcXHRcXHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcXFwibWRpb1xcXCIpO1xcbjQ1NTc6XFx0XFx0aWYgKGNoaWxkKSB7XFxuNDU1ODpcXHRcXHRcXHRyZXMgPSB5dDkyMXhfbWJ1c19pbnRfaW5pdChwcml2LCBjaGlsZCk7XFxuNDU1OTpcXHRcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuNDU2MDpcXHRcXHRcXHRpZiAocmVzKVxcbjQ1NjE6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTYyOlxcdFxcdH1cXG40NTYzOlxcdFxcbjQ1NjQ6XFx0XFx0LyogRXh0ZXJuYWwgbWRpbyBidXMgaXMgb3B0aW9uYWwgKi9cXG40NTY1OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvLWV4dGVybmFsXFxcIik7XFxuNDU2NjpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTY3OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2V4dF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTY4OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTY5OlxcdFxcdFxcdGlmIChyZXMpXFxuNDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NzE6XFx0XFxuNDU3MjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVudGVzdGVkIGV4dGVybmFsIG1kaW8gYnVzXFxcXG5cXFwiKTtcXG40NTczOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQ1NzQ6XFx0XFx0fVxcbjQ1NzU6XFx0XFxuNDU3NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3NzpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9zZXR1cChwcml2KTtcXG40NTc4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ1Nzk6XFx0XFxuNDU4MDpcXHRcXHRpZiAocmVzKVxcbjQ1ODE6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTgyOlxcdFxcbjQ1ODM6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuNDU4NDpcXHRcXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcXG40NTg1OlxcdFxcdGlmIChyZXMpXFxuNDU4NjpcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjAzLjcyODI3NDY1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjEwMjM4OTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENoaXAgUmVzZXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGluaXRpYXRpbmcgYSByZXNldCB3aXRoIGB5dDkyMXhfY2hpcF9yZXNldChwcml2KWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBpdCdzIGRvaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVzZXQg4oCTIGlzIGl0IGEgZnVsbCBwb3dlciBjeWNsZSwgYSBzb2Z0IHJlc2V0LCBhIHJlZ2lzdGVyIGNsZWFyLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0J3MgdGhlIGBwcml2YCBhcmd1bWVudD8gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCBkYXRhIHN0cnVjdHVyZSBpdCBob2xkcyDigJMgdGhhdCdsbCBnaXZlIG1lIGNvbnRleHQgb24gd2hhdCBoYXJkd2FyZSByZXNvdXJjZXMgdGhpcyByZXNldCBtaWdodCBiZSBhZmZlY3RpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcmVnaXN0ZXIgd3JpdGVzLCBkZWxheXMsIGludGVycnVwdCBkaXNhYmxlL2VuYWJsZSBzZXF1ZW5jZXMg4oCTIGFueXRoaW5nIHRoYXQgbWlnaHQgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIHJlc2V0J3Mgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gZGV2aWNlIGZ1bmN0aW9uYWxpdHkgb3IgZGF0YSBpbnRlZ3JpdHkuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2VxdWVuY2luZywgdG9vOyB0aGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zIGNhbiBiZSBhcyBpbXBvcnRhbnQgYXMgdGhlIG9wZXJhdGlvbnMgdGhlbXNlbHZlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHByb2JhYmx5IHNvbWV0aGluZyBmYWlybHkgc3RhbmRhcmQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdHMgc3BlY2lmaWMgaGFuZGxpbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIGNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjUwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxODoyNS44MzA2NjgxNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTg3NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfY2hpcF9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTMtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI5NDpzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mjk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1Mzc9c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDUtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1NDY6XFx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0Ny1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTg6MjUuOTYyNTUxNTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODY1MDQyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZTpcblxuKipUaW1lIHRvIERpYWdub3NlOiBgeXQ5MjF4YCBSZXNldCBhbmQgRGV0ZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBlc3NlbnRpYWxzIGZvciBhIHN5c3RlbSBsaWtlIHRoaXMuIEJlZm9yZSBJIHN0YXJ0IGdvaW5nIGRvd24gYW55IHJhYmJpdCBob2xlcyB3aXRoIG1vcmUgY29tcGxleCBkZWJ1Z2dpbmcsIEknbSBnb2luZyB0byB0YWtlIGEgZmlyc3QgcGFzcyBvbiB0aGUgb2J2aW91cy4gVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgYWx3YXlzIHN0YXJ0cyBmcm9tIGJhc2ljcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRldmljZSBpcyByZXNldCBwcm9wZXJseSwgYW5kIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBkZXRlY3RpbmcgdGhlIGludGVuZGVkIGNoaXAuIFNvLCBmaXJzdCBvbiBteSBsaXN0OiBkb3VibGUgY2hlY2sgdGhlIGZ1bmN0aW9ucyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2hpcCBpcyBnZXR0aW5nIGEgc29saWQgcmVzZXQgc2lnbmFsLCBhbmQgdGhhdCB0aGUgZGV2aWNlIGRldGVjdGlvbiByb3V0aW5lIGlzIGV2ZW4gcGlja2luZyB1cCBvbiBpdHMgcHJlc2VuY2UuIFRoaXMgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyMzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxODoyOS4xNDkwNjAxMTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyMjc6XFx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyMjg6XFx0e1xcbjQyMjk6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyMzA6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xcbjQyMzE6XFx0XFx0dTggZXh0bW9kZTtcXG40MjMyOlxcdFxcdHUzMiBjaGlwaWQ7XFxuNDIzMzpcXHRcXHR1MzIgbWFqb3I7XFxuNDIzNDpcXHRcXHR1MzIgbW9kZTtcXG40MjM1OlxcdFxcdHUzMiB2YWw7XFxuNDIzNjpcXHRcXHRpbnQgcmVzO1xcbjQyMzc6XFx0XFxuNDIzODpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFxcdTAwMjZjaGlwaWQpO1xcbjQyMzk6XFx0XFx0aWYgKHJlcylcXG40MjQwOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI0MTpcXHRcXG40MjQyOlxcdFxcdG1ham9yID0gRklFTERfR0VUKFlUOTIxWF9DSElQX0lEX01BSk9SLCBjaGlwaWQpO1xcbjQyNDM6XFx0XFxuNDI0NDpcXHRcXHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXFx1MDAzZW5hbWU7IGluZm8rKylcXG40MjQ1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VtYWpvciA9PSBtYWpvcilcXG40MjQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNDc6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI0ODpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXFxcblxcXCIsIGNoaXBpZCk7XFxuNDI0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjUwOlxcdFxcdH1cXG40MjUxOlxcdFxcbjQyNTI6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFxcdTAwMjZtb2RlKTtcXG40MjUzOlxcdFxcdGlmIChyZXMpXFxuNDI1NDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTU6XFx0XFx0cmVzID0geXQ5MjF4X2VkYXRhX3JlYWQocHJpdiwgWVQ5MjFYX0VEQVRBX0VYVE1PREUsIFxcdTAwMjZleHRtb2RlKTtcXG40MjU2OlxcdFxcdGlmIChyZXMpXFxuNDI1NzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTg6XFx0XFxuNDI1OTpcXHRcXHRmb3IgKDsgaW5mby1cXHUwMDNlbmFtZTsgaW5mbysrKVxcbjQyNjA6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW1ham9yID09IG1ham9yIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZW1vZGUgPT0gbW9kZSBcXHUwMDI2XFx1MDAyNlxcbjQyNjE6XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWV4dG1vZGUgPT0gZXh0bW9kZSlcXG40MjYyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNjM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI2NDpcXHRcXHRcXHRkZXZfZXJyKGRldixcXG40MjY1OlxcdFxcdFxcdFxcdFxcXCJVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcXFxuXFxcIixcXG40MjY2OlxcdFxcdFxcdFxcdGNoaXBpZCwgbW9kZSwgZXh0bW9kZSk7XFxuNDI2NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjY4OlxcdFxcdH1cXG40MjY5OlxcdFxcbjQyNzA6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9TWVNfQ0xLLCBcXHUwMDI2dmFsKTtcXG40MjcxOlxcdFxcdGlmIChyZXMpXFxuNDI3MjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNzM6XFx0XFx0c3dpdGNoIChGSUVMRF9HRVQoWVQ5MjFYX1NZU19DTEtfU0VMX00sIHZhbCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWN5Y2xlX25zID0gaW5mby1cXHUwMDNlbWFqb3IgPT0gWVQ5MjE1X01BSk9SID8gOCA6IDY7XFxuNDI3NjpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTg6MjkuMTQ5MzEzMTMzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NTA1NTkxNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBsb2dpYywgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgaXQgbXlzZWxmOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogeXQ5MjF4IENoaXAgRGV0ZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiBpcyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciBmb3Igb3VyIFlUOTIxWCBjaGlwJ3MgcHJlc2VuY2UuIEl0J3MgdGFza2VkIHdpdGggaWRlbnRpZnlpbmcgdGhlIGNoaXAgbW9kZWwuIFNwZWNpZmljYWxseSwgaXQncyBncmFiYmluZyB0aGUgdmFsdWUgb2YgYFlUOTIxWF9DSElQX0lEYC4gVGhhdCdzIHRoZSBrZXkgaWRlbnRpZmllciwgdGhlIGNoaXAncyBcImZpbmdlcnByaW50XCIgc28gdG8gc3BlYWsuIFRoZW4sIHRoaXMgdmFsdWUgaXMgY29tcGFyZWQgd2l0aCB0aGUgc2V0IG9mIGV4cGVjdGVkIGlkZW50aWZpZXJzIGRlZmluZWQgaW4gYHl0OTIxeF9pbmZvc2AuIElmIHRoZSBncmFiYmVkIElEIGRvZXNuJ3Qgaml2ZSB3aXRoIGFueSBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzLCB0aGF0J3MgYSByZWQgZmxhZy4gVGhlIGZ1bmN0aW9uIHNpZ25hbHMgYSBzZXJpb3VzIHByb2JsZW0sIHJldHVybmluZyBgLUVOT0RFVmAsIGluZGljYXRpbmcgdGhhdCB0aGUgZGV2aWNlIGlzbid0IHRoZSBvbmUgd2UncmUgZXhwZWN0aW5nIG9yIGl0J3Mgc2ltcGx5IG5vdCBkZXRlY3RlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrLlxuXG5Ob3csIGEgcmVsYXRlZCBxdWVzdGlvbiBwb3BzIGludG8gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhpcyBkZXRlY3Rpb24gaXMgdXNlZC4gSXMgYHl0OTIxeF9jaGlwX2RldGVjdGAgaW52b2tlZCBmcm9tIGB5dDkyMXhfY2hpcF9yZXNldGA/IFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3JpdGljYWwgdG8gZmlndXJpbmcgb3V0IHRoZSBvdmVyYWxsIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGhvdyBkbyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlcj8gSXMgdGhlIGBjaGlwX2RldGVjdGAgcGFydCBvZiB0aGUgb3ZlcmFsbCBjaGlwIHJlc2V0PyBEb2VzIHRoZSByZXNldCBmdW5jdGlvbiByZXF1aXJlIGEga25vd24sIGRldGVjdGFibGUgY2hpcD8gRG9lcyB0aGUgcmVzZXQgZnVuY3Rpb24gb2NjdXIgcmVnYXJkbGVzcz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI5NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTg6NDguNjU0OTA3MTAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Mjk0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Mjk0OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyOTU6XFx0e1xcbjQyOTY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyOTc6XFx0XFx0dTE2IGV0aF9wX3RhZztcXG40Mjk4OlxcdFxcdHUzMiB2YWw7XFxuNDI5OTpcXHRcXHRpbnQgcmVzO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XFxuNDMwMjpcXHRcXHRpZiAocmVzKVxcbjQzMDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVzZXQgKi9cXG40MzA2OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XFxuNDMwNzpcXHRcXHRpZiAocmVzKVxcbjQzMDg6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xcbjQzMTE6XFx0XFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRcXHR2YWwgPSAwO1xcbjQzMTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG40MzE1OlxcdFxcdGlmIChyZXMpXFxuNDMxNjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMTc6XFx0XFxuNDMxODpcXHRcXHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXFxuNDMxOTpcXHRcXHQgKiBiZWZvcmUuXFxuNDMyMDpcXHRcXHQgKi9cXG40MzIxOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcXHUwMDI2dmFsKTtcXG40MzIyOlxcdFxcdGlmIChyZXMpXFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMjQ6XFx0XFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xcbjQzMjU6XFx0XFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG40MzI2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxcXG5cXFwiLCBldGhfcF90YWcsXFxuNDMyNzpcXHRcXHRcXHRcXHRFVEhfUF9ZVDkyMVgpO1xcbjQzMjg6XFx0XFx0XFx0LyogRGVzcGl0ZSBiZWluZyBwb3NzaWJsZSwgd2UgY2hvb3NlIG5vdCB0byBzZXQgQ1BVX1RBR19UUElELFxcbjQzMjk6XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gd2F5IGl0IGNhbiBiZSBkaWZmZXJlbnQgdW5sZXNzIHlvdSBoYXZlIHRoZVxcbjQzMzA6XFx0XFx0XFx0ICogd3JvbmcgY2hpcC5cXG40MzMxOlxcdFxcdFxcdCAqL1xcbjQzMzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDMzMzpcXHRcXHR9XFxuNDMzNDpcXHRcXG40MzM1OlxcdFxcdHJldHVybiAwO1xcbjQzMzY6XFx0fVxcbjQzMzc6XFx0XFxuNDMzODpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDMzOTpcXHR7XFxuNDM0MDpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDM0MTpcXHRcXHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xcbjQzNDI6XFx0XFx0dTMyIGN0cmxzWzJdO1xcbjQzNDM6XFx0XFx0dTMyIGN0cmw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjQ4LjY1NTA5NzU4M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTkwNDM0Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHl0OTIxeF9jaGlwX3Jlc2V0YCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgc28gYHl0OTIxeF9jaGlwX3Jlc2V0YCBkZWZpbml0ZWx5IGNhbGxzIGB5dDkyMXhfY2hpcF9kZXRlY3RgLCBJIGNhbiBzZWUgdGhhdC4gQW5kIGlmIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGNhbid0IGlkZW50aWZ5IHRoZSBjaGlwLCBpdCdzIGdvaW5nIHRvIHJldHVybiBgLUVOT0RFVmAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgdGhlIHByb2JsZW0gaXMsIHN5emthbGxlciBpcyBydW5uaW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCDigJMgc29tZXRoaW5nIGxpa2UgUUVNVSBvciBHQ0UsIHJpZ2h0PyBXZSBkb24ndCAqYWN0dWFsbHkqIGhhdmUgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBpbiB0aGUgc3lzdGVtLiBXaGljaCBtZWFucyB0aG9zZSBNRElPIHJlYWRzIGFyZSBlaXRoZXIgZ29pbmcgdG8gY29tcGxldGVseSBmYWlsLCBvciByZXR1cm4gc29tZSBnYXJiYWdlIHZhbHVlLCBwcm9iYWJseSAwIG9yIG1heWJlIGAweGZmZmZgLiBFaXRoZXIgd2F5LCBpdCdzIG5vdCBnb2luZyB0byBtYXRjaCBgWVQ5MjE1X01BSk9SYCwgd2hhdGV2ZXIgdGhhdCBkZWZpbmVzLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBjYW4gc3l6a2FsbGVyICptb2NrKiB0aG9zZSBNRElPIHJlYWRzPyBUaGF0IHdvdWxkIGJlIHRoZSBpZGVhbCBzaXR1YXRpb24uIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhIGdlbmVyaWMgTURJTyBtb2NrIGRyaXZlciBpbiB0aGUgYmFzZSBzeXprYWxsZXIgc2V0dXAgdGhhdCBhbGxvd3MgaW5qZWN0aW5nIGFyYml0cmFyeSByZWFkIHZhbHVlcyBmb3IgYXJiaXRyYXJ5IFBIWXMgb3IgZGV2aWNlcyB1bmxlc3Mgb25lIGhhcyBiZWVuIHNwZWNpZmljYWxseSB3cml0dGVuIGZvciBpdC4gSSBkb24ndCByZWNhbGwgc2VlaW5nIGl0LlxuXG5Ib2xkIG9uLCB0aGVyZSdzIGBtZGlvLW1vY2t1cGAsIHJpZ2h0PyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYG1kaW8tbW9ja3VwYCBvciBwb3RlbnRpYWxseSBldmVuIGBtZGlvLWZhdWx0LWluamVjdGAgZXhpc3RzLiBUaGF0IGNvdWxkIGJlIGEgZ2FtZS1jaGFuZ2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU2MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjU4LjI0NTUzNTA2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTUyMjk3NTk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLiptb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxOTowMS4xOTc4NDY0NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNzYzMDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkV4cGxvcmluZyB0aGUgRnV6emluZyBMYW5kc2NhcGUqKi5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBmdXp6aW5nIGxhbmRzY2FwZSBmb3IgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgbWRpb2AuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNydWNpYWwgc3RlcC4gVW5kZXJzdGFuZGluZyB3aGF0J3MgYWxyZWFkeSBiZWVuIGV4cGxvcmVkLCB3aGF0J3MgYmVlbiB0cmllZCwgYW5kIHdoYXQgdnVsbmVyYWJpbGl0aWVzIG1heSBoYXZlIGJlZW4gdW5lYXJ0aGVkIGlzIHZpdGFsIGJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgbXkgb3duIGFwcHJvYWNoLiBJIHdhbnQgdG8gYXZvaWQgZHVwbGljYXRpbmcgZWZmb3J0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZW5zdXJlIEknbSBidWlsZGluZyBvbiBleGlzdGluZyBrbm93bGVkZ2UuIEZ1enppbmcgaXMgYSBkZWVwIGZpZWxkIGFuZCBJIG5lZWQgYSBiYXNlbGluZSBiZWZvcmUgZGVjaWRpbmcgaWYgSSdtIHJlaW52ZW50aW5nIHRoZSB3aGVlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwODEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxOTowNC4wMDU0ODE2ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk4MjQ5MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKmZ1enpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE5OjA2LjY4NTMxNDgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODE3ODA3ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHl0OTIxeGAgRHJpdmVyIFByb2JlIGFuZCBMRUQgU2V0dXAqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgTEVEIGNvZGUgaW4gYHl0OTIxeGAgaXMgcmVhY2hlZCwgYW5kIEknbSBhIGJpdCBodW5nIHVwLiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCBgZHNhX2xvb3BgLiBJdCdzIGEgbW9jayBEU0Egc3dpdGNoLCBidXQgaXQgdXNlcyBpdHMgb3duIGRyaXZlciwgYGRzYV9sb29wLmNgLCBub3QgdGhlIGB5dDkyMXhgIGRyaXZlci4gVGhhdCdzIGltcG9ydGFudC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGB5dDkyMXhgIGRyaXZlciBzaG91bGQgb25seSBwcm9iZSBpZiB0d28gY29uZGl0aW9ucyBhcmUgbWV0OiBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBgbW90b3Jjb21tLHl0OTIxNWAgZXhpc3RzLCAqYW5kKiB0aGUgTURJTyBidXMgcmV0dXJucyB0aGUgY29ycmVjdCBjaGlwIElELiBSaWdodCwgbWFrZXMgc2Vuc2UuXG5cbkdpdmVuIHRoZSB0eXBpY2FsIHN5emthbGxlciBlbnZpcm9ubWVudCwgSSBrbm93IHdlIGRvbid0IGhhdmUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZXJlIGlzbid0IGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgaXQsIHNvIG15IGd1dCB0ZWxscyBtZSB0aGUgZHJpdmVyJ3MgcHJvYmUgd2lsbCAqYWx3YXlzKiBmYWlsIGF0IGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gdGhlIExFRCBjb2RlIGV2ZXIgZXhlY3V0ZSB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBwcm9iZT8gVGhlIHNlcXVlbmNlIGFwcGVhcnMgdG8gYmU6IGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYHl0OTIxeF9tZGlvX3Byb2JlYC4gU28gaWYgYHl0OTIxeF9jaGlwX2RldGVjdGAgZmFpbHMsIHRoZW4gYHl0OTIxeF9kc2Ffc2V0dXBgIHdpbGwgZmFpbCBhbmQgcmV0dXJuIGFuIGVycm9yIGFuZCBzdWJzZXF1ZW50bHksIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB3aWxsIGZhaWwuIEkndmUgZ290IHRoYXQgcGFydC5cblxuSG9sZCBvbiwgSSdtIHNlZWluZyBhIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5LiBJIGhhZCBhIHF1aWNrIG1lbnRhbCBoaWNjdXAsIGJ1dCBJIHJlbWVtYmVyIGl0J3MgYHl0OTIxeF9kc2Ffc2V0dXBgIHRoYXQgaXMgY2FsbGVkICpieSogYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHJlY29uZmlybS4gTGV0J3MgZ28gdG8gdGhlIHNvdXJjZSwgZWl0aGVyIGBuZXQvZHNhL2RzYS5jYCBvciBgbmV0L2RzYS9kc2EyLmNgLiBHb3QgaXQsIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBjYWxscyBgZHMtXHUwMDNlb3BzLVx1MDAzZXNldHVwKGRzKWAuIElmIHRoYXQgYHNldHVwYCBmdW5jdGlvbiBmYWlscywgdGhlIHN3aXRjaCBpcyBub3QgcmVnaXN0ZXJlZC4gQW5kIHNpbmNlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGlzIHBhcnQgb2YgYHl0OTIxeF9kc2Ffc2V0dXBgLCB0aGUgY2hlY2sgd2lsbCBmYWlsIHRoZXJlLiBUaGVyZWZvcmUsIG15IExFRCBzZXR1cCBjb2RlIChgeXQ5MjF4X2xlZHNfc2V0dXBgKSBpcyBuZXZlciByZWFjaGVkLiBBbHJpZ2h0LCBJJ20gcHJldHR5IGNvbWZvcnRhYmxlIHdpdGggdGhhdCBjb25jbHVzaW9uLiBCdXQuLi4gaXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gZG91YmxlIGNoZWNrLCBqdXN0IHRvIGJlIGNlcnRhaW4uIExldCBtZSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBjYWxsIHBhdGhzIHRvIGB5dDkyMXhfbGVkc19zZXR1cGAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTI1OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxOTo0My41MDMxMjYyMjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjAwMDQ5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2xlZHNfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU4My0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTg0OlxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1ODUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTQ5OT1zdGF0aWMgdm9pZCB5dDkyMXhfbGVkc190ZWFyZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01MzUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTM2OmludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTEwNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDc6aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTA4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTEwLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oOjExMTpzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTk6NDYuMDYzMTM1ODA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODc1NTIyMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBgZmFsc2VgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHl0OTIxeF9sZWRzX3NldHVwYCBpcyAqb25seSogY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgYXMgdGhlIGAuc2V0dXBgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYGRzYV9zd2l0Y2hfb3BzYCBzdHJ1Y3R1cmUuIFRoZSBgLnNldHVwYCBjYWxsYmFjayBpdHNlbGYgaXMgY2FsbGVkIGR1cmluZyBEU0EgdHJlZSBpbnN0YW50aWF0aW9uLCB3aGljaCBoaW5nZXMgb24gdGhlIHN3aXRjaCBiZWluZyByZWdpc3RlcmVkLCBhbmQgY3JpdGljYWxseSwgdGhlIGhhcmR3YXJlIGJlaW5nIHByZXNlbnQgKmFuZCogZGV0ZWN0ZWQgKG9yLCBhdCBhIGJhcmUgbWluaW11bSwgdGhlIGBzZXR1cGAgY2FsbGJhY2sgbm90IHJldHVybmluZyBhbiBlcnJvcikuXG5cblNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIOKAkyB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gg4oCTIGFuZCB0aGF0IGhhcmR3YXJlIGNoZWNrLCBzcGVjaWZpY2FsbHkgYHl0OTIxeF9jaGlwX2RldGVjdGAsIHdpbGwgZGVmaW5pdGVseSBmYWlsIGFuZCByZXR1cm4gYC1FTk9ERVZgIGlmIHRoZSBjaGlwIGlzbid0IHRoZXJlLiBTbywgYHl0OTIxeF9sZWRzX3NldHVwYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSksIHRoZW4gd2UgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZXhpc3RzLCBzbyB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gU2ltcGxlLlxuXG5JJ3ZlIGNoZWNrZWQgaWYgdGhlcmUncyBhbnkgd2F5IGFyb3VuZCB0aGUgaGFyZHdhcmUgY2hlY2suIEFueSBkZWJ1Z2ZzL3N5c2ZzIGludGVyZmFjZSBmb3IgYnlwYXNzPyBOb3BlLiBJcyBgeXQ5MjF4X2xlZHNfc2V0dXBgIHVzZWQgYW55d2hlcmUgZWxzZT8gTm8sIGl0J3Mgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIuIElzIHRoZXJlIGFuIGVtdWxhdG9yIGZvciB0aGlzIGNoaXA/IEkgY291bGRuJ3QgZmluZCBvbmUuIENhbiBzeXprYWxsZXIgc29tZWhvdyBtb2NrIHRoZSBNRElPIHJlYWQ/IFdlbGwsIG5vLCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBNRElPIG1vY2sgdGhhdCBjYW4gYmUgY29uZmlndXJlZCBmcm9tIHVzZXJzcGFjZSB0byByZXR1cm4gYXJiaXRyYXJ5IHZhbHVlcywgYW5kIGV2ZW4gaWYgaXQgZGlkLCBpdCB3b3VsZCByZXF1aXJlIGEgaGlnaGx5IHNwZWNpZmljIHNlcXVlbmNlIG9mIHJlZ2lzdGVyIHZhbHVlcywgd2hpY2ggc3l6a2FsbGVyIHdvdWxkbid0IGtub3cgYXV0b21hdGljYWxseS5cblxuQWxyaWdodCwgbGV0IG1lIGRvdWJsZS1jaGVjazogaXMgYENPTkZJR19ORVRfRFNBX1lUOTIxWGAgZXZlbiBlbmFibGVkIGluIHN0YW5kYXJkIHN5emthbGxlciBjb25maWd1cmF0aW9ucz8gSXQgbWlnaHQgYmUsIGJ1dCBpdCBzdGlsbCB3b24ndCBwcm9iZSB3aXRob3V0IHRoZSBoYXJkd2FyZS4gSSBoYXZlIGFsc28gdmVyaWZpZWQgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjb25kaXRpb24gaW4gdGhlIGluc3RydWN0aW9ucywgYW5kIGl0IGRlZmluaXRlbHkgYXBwbGllcywgYmVjYXVzZSB0aGUgY29kZSBpc24ndCByZWFjaGFibGUuXG5cbkkgYWxzbyBjaGVja2VkIHdoaWNoIGZpbGVzIHdlcmUgdG91Y2hlZC4gQXNpZGUgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVpbGQgc3lzdGVtIGNoYW5nZXMsIHRoZSBtYWluIGNoYW5nZXMgYXJlOiBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBgeXQ5MjF4YCBkcml2ZXIsIGFuZCB0aGUgYWRkaXRpb24gb2YgYGxlZHMuY2AgYW5kIGBsZWRzLmhgLCBtb3Zpbmcgc29tZSBgc21pYCBmdW5jdGlvbnMgaW50byBgc21pLmNgIGFuZCBgc21pLmhgLCBhbmQgYWRkaW5nIHRoZSBjYWxsIHRvIGB5dDkyMXhfbGVkc19zZXR1cGAuIFRoZSBMRUQtc3BlY2lmaWMgbG9naWMgaXMgbm93IHRoZXJlLCBidXQgdGhlIGZ1bmRhbWVudGFsIHByb2JsZW0gcmVtYWluczogaXQncyB0aWVkIHRvIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuXG5cblNvLCB0aGUgcGF0Y2ggaXMganVzdCByZWZhY3RvcmluZyBhbmQgYWRkaW5nIExFRCBzdXBwb3J0IHRvIHRoZSBgeXQ5MjF4YCBkcml2ZXIuIFNpbmNlIHRoYXQgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCB0aGUgbmV3IGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cblRoZXJlZm9yZSwgYW5kIGZvciBhbGwgdGhvc2UgcmVhc29ucywgbXkgYXNzZXNzbWVudCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gV2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCdzIGZ1bmRhbWVudGFsbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODIwLCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTk6NTkuOTM4NjYyNzExWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIgYW5kIGFkZHMgTEVEIHN1cHBvcnQgZm9yIGl0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE1vdG9yY29tbSBzd2l0Y2ggY2hpcCB0byBiZSBwcmVzZW50IG9uIGFuIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgdmlhIE1ESU8gaW4gYHl0OTIxeF9jaGlwX2RldGVjdGApLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVS9zeXprYWxsZXIsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmf27[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 17:07:23 +0000 UTC FinishedAt: 2026-07-03 17:20:02 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0Egc3dpdGNoIGRyaXZlciBhbmQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgaXQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgTW90b3Jjb21tIHN3aXRjaCBjaGlwIHRvIGJlIHByZXNlbnQgb24gYW4gTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCB2aWEgTURJTyBpbiBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VL3N5emthbGxlciwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDkwN2U3OWNmOTI4Y2ZiNDYxMTg1ZjNjZGVmZDE0YzVlOWNiMzVhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDE3OjE2OjMwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi5hM2M4ZDhhMDFjNmJhNyAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE4MjMwLDcgJiM0MzsxODIzMCw3IEBAIE06XHREYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG4tRjpcdGRyaXZlcnMvbmV0L2RzYS95dDkyMXguKlxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICYjNDM7NzIsOCBAQCBjb25maWcgTkVUX0RTQV9NVjg4RTYwNjBcbiBcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9LY29uZmlnXCYjMzQ7XG4gXG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcJiMzNDtcbiYjNDM7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZ1wmIzM0O1xuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1wmIzM0O1xuQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4tXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXG4tXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuLVx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4tXHQgIGNoaXAuXG4gZW5kbWVudVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuaW5kZXggZDI5NzViYWRmZmMwOTMuLjEzODIyNWJhYTRkNTY0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCwxMSAmIzQzOzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSAmIzQzOz0gbGFuOTMwM19tZGlvLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFgpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXG4tb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSAmIzQzOz0geXQ5MjF4Lm9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGI1My9cbiBvYmoteVx0XHRcdFx0JiM0Mzs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBsYW50aXEvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBtaWNyb2NoaXAvXG4mIzQzO29iai15XHRcdFx0XHQmIzQzOz0gbW90b3Jjb21tL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbXhsODYyeHgvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBuZXRjL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwxNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCYjMzQ7XG4mIzQzO1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuJiM0MztcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuJiM0MztcdCAgY2hpcC5cbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4mIzQzO1x0Ym9vbCBcJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNVwmIzM0O1xuJiM0MztcdGRlZmF1bHQgeVxuJiM0MztcdGRlcGVuZHMgb24gTkVUX0RTQV9ZVDkyMVhcbiYjNDM7XHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBMRURzIGF0dGFjaGVkIHRvIHRoZVxuJiM0MztcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgJiM0MzsxLDUgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO3l0OTIxeC1vYmpzIDo9IGNoaXAub1xuJiM0Mzt5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgJiM0Mzs9IGxlZHMub1xuJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uYTM1MTIxMzYzODNiMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyAmIzQzOzEzLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2hzci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbkBAIC0yNiw3ICYjNDM7MjUsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZWVlODAyMXEuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9wa3RfY2xzLmhcdTAwM2VcbiBcbi0jaW5jbHVkZSBcJiMzNDt5dDkyMXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bGVkcy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtaS5oXCYjMzQ7XG4gXG4gc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XG4gXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0ge1xuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwmIzM0O3l0OTIxeFwmIzM0O1xuLVxuICNkZWZpbmUgWVQ5MjFYX1ZJRF9VTldBUkVcdDQwOTVcbiBcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTXHQxMDAwMFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4tXG4gLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy5cbiAgKlxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcbkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbiBcdHJldHVybiAoYWRkcls0XSBcdTAwM2NcdTAwM2MgOCkgfCBhZGRyWzVdO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2VyZWFkKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbi17XG4tXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jaykpO1xuLVxuLVx0cmV0dXJuIHByaXYtXHUwMDNlcmVnX29wcy1cdTAwM2V3cml0ZShwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFsKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXG4te1xuLVx0dTMyIHZhbDtcbi1cdGludCByZXM7XG4tXHRpbnQgcmV0O1xuLVxuLVx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXG4tXHRcdFx0XHRyZXMgfHwgKHZhbCBcdTAwMjYgbWFzaykgPT0gKnZhbHAsXG4tXHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbi1cdFx0XHRcdGZhbHNlLCBwcml2LCByZWcsIFx1MDAyNnZhbCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdCp2YWxwID0gdmFsO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiB2YWwpXG4te1xuLVx0aW50IHJlcztcbi1cdHUzMiB2O1xuLVx0dTMyIHU7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcdTAwMjZ2KTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHR1ID0gdjtcbi1cdHUgXHUwMDI2PSB+bWFzaztcbi1cdHUgfD0gdmFsO1xuLVx0aWYgKHUgPT0gdilcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuLX1cbi1cbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgIXNldCA/IDAgOiBtYXNrKTtcbi19XG4tXG4tLyogU29tZSBtdWx0aS13b3JkIHJlZ2lzdGVycywgbGlrZSBWTEFObl9DVFJMLCBzaG91bGQgYmUgdHJlYXRlZCBhcyBhIHNpbmdsZVxuLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcgJiM0MzsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0dSB8PSB2YWxzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0dTMyIHUgPSB2c1tpXTtcbi1cbi1cdFx0dSBcdTAwMjY9IH5tYXNrc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHQgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbi19XG4tXG4gc3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5AQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aWYgKHJlcylcbiBcdFx0cmV0dXJuIHJlcztcbiBcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXFxuXCYjMzQ7LCByZXMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcbnNpbWlsYXJpdHkgaW5kZXggOTklXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuaW5kZXggNTU1MDQ2NTI2NjY5NTIuLjY1NzBhZTU5MDJhZGViIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuQEAgLTg1MCw4ICYjNDM7ODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xuICNkZWZpbmUgWVQ5MjFYX0FDTF9OVU1cdFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXG4gI2RlZmluZSBZVDkyMVhfVURGX05VTVx0XHQ4XG4gXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbiYjNDM7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX05VTVx0XHQxMVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9QT1JUX01DVVx0XHQxMFxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRVx0XCYjMzQ7eXQ5MjF4XCYjMzQ7XG4gXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQge1xuIFx0c3RydWN0IHl0OTIxeF9taWIgbWliO1xuIFx0dTY0IHJ4X2ZyYW1lcztcbiBcdHU2NCB0eF9mcmFtZXM7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xuJiM0MztcdHVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTtcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dO1xuJiM0MzsjZW5kaWZcbiB9O1xuIFxuIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iMDY2YTdlODRmZTZiY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbkBAIC0wLDAgJiM0MzsxLDYwNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2NoaXAuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtsZWRzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXG4mIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXHUwMDNlcG9ydClcbiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbiYjNDM7XHRjb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLVx1MDAzZWluZGV4XSlcbiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS1cdTAwM2Vkcy5kZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzd2l0Y2ggKGdyb3VwKSB7XG4mIzQzO1x0Y2FzZSAwOlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4mIzQzO1x0Y2FzZSAxOlxuJiM0MztcdFx0cmV0dXJuIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpO1xuJiM0MztcdGNhc2UgMjpcbiYjNDM7XHRcdHJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBtYXNrLFxuJiM0MztcdFx0XHRcdCAgICAgIGN0cmwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbiYjNDM7XHRcdFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHtcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAzKSxcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuc2lnbmVkIGludCBjeWNsZV91cHBlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xuJiM0MztcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGR1dHk7XG4mIzQzO1xuJiM0MztcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7XG4mIzQzO1x0Y3ljbGVfdXBwZXIgPSBjeWNsZSAqIDExNTg1IC8gODE5MiAmIzQzOyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4mIzQzO1x0aWYgKGNoZWNrX2FkZF9vdmVyZmxvdyhvbiwgb2ZmLCBcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcdTAwM2U9IGN5Y2xlX3VwcGVyKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRmb3IgKDsgY3ljbGUgXHUwMDNlIFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2U9IDEsIGN5Y2xlIFx1MDAzZVx1MDAzZT0gMSlcbiYjNDM7XHRcdGlmIChjeWNsZV9yZXEgXHUwMDNlPSBjeWNsZV91cHBlciBcdTAwM2VcdTAwM2UgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0KmN5Y2xlcCA9IGN5Y2xlO1xuJiM0MztcbiYjNDM7XHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4mIzQzO1x0XHRcdFx0ICAgICAob24gXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gQVJSQVlfU0laRShkdXR5cykgLSAxOzsgaS0tKVxuJiM0MztcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gJiM0MzsgZHV0eXNbaV0pIC8gMikge1xuJiM0MztcdFx0XHRkdXR5ID0gZHV0eXNbaV07XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdGlmIChvbiBcdTAwM2Ugb2ZmKVxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4mIzQzO1x0KmR1dHlwID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICB1bnNpZ25lZCBsb25nICpvbnAsIHVuc2lnbmVkIGxvbmcgKm9mZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtXHUwMDNlbGVkc1tncm91cF07XG4mIzQzO1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBkdXR5O1xuJiM0MztcdGJvb2wgdXNlX2N5Y2xlO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKCEqb25wIFx1MDAyNlx1MDAyNiAhKm9mZnApIHtcbiYjNDM7XHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpO1xuJiM0MztcdFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIFlUOTIxWF9MRURfR1JPVVBfTlVNOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGkgIT0gZ3JvdXAgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4mIzQzO1x0XHRcdFx0ZHV0eSA9IHBwLVx1MDAzZWxlZF9kdXR5O1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0dXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGJvb2wgY2hhbmdlX2N5Y2xlO1xuJiM0MztcdFx0Ym9vbCBjaGFuZ2VfZHV0eTtcbiYjNDM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NlbGVjdChwcml2LCAqb25wLCAqb2ZmcCwgXHUwMDI2Y3ljbGUsIFx1MDAyNmR1dHkpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHR1c2VfY3ljbGUgPSBjeWNsZSBcdTAwM2MgWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4mIzQzO1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbiYjNDM7XHRcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cdTAwM2VsZWRfZHV0eTtcbiYjNDM7XHRcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXG4mIzQzO1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbiYjNDM7XHRcdFx0ICAgICBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cdTAwM2VsZWRzW2ldKVxuJiM0MztcdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuJiM0MztcdFx0XHRcdCAgICAoY2hhbmdlX2R1dHkgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2R1dHkpKVxuJiM0MztcdFx0XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4mIzQzO1x0aWYgKHZhbCAhPSBjdHJsKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00gfCBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDtcbiYjNDM7XHRzd2l0Y2ggKGR1dHkgXHUwMDNlPSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDpcbiYjNDM7XHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKTpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMywgNCk6XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzY7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKGR1dHkgXHUwMDNjIFlUOTIxWF9MRURfRFVUWSgxLCAyKSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSkge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4mIzQzO1x0fVxuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCksIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbiYjNDM7XHRcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9NKGdyb3VwKSk7XG4mIzQzO1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XG4mIzQzO1x0aWYgKHVzZV9jeWNsZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xuJiM0MztcdGlmICh1c2VfY3ljbGUpXG4mIzQzO1x0XHRwcC1cdTAwM2VsZWRfY3ljbGUgPSBjeWNsZTtcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xuJiM0MztcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbiYjNDM7XG4mIzQzO1x0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcbiYjNDM7XHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHUzMiB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tfX1RSSUdHRVJfTkVUREVWX01BWF0gPSB7XG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX0xJTktdXHRcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfFxuJiM0MztcdFx0XHRcdFx0ICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwMF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSxcbiYjNDM7XHRbVFJJR0dFUl9ORVRERVZfSEFMRl9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9GVUxMX0RVUExFWF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXG4mIzQzO1x0W1RSSUdHRVJfTkVUREVWX1RYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxuJiM0MztcdFtUUklHR0VSX05FVERFVl9SWF1cdFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sXG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXG4mIzQzO1x0XHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuJiM0MztcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcbiYjNDM7e1xuJiM0MztcdHUzMiBhZGRyO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIGFkZHIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdCpmbGFnc3AgPSAwO1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IG1hc2spID09IG1hc2spXG4mIzQzO1x0XHRcdCpmbGFnc3AgfD0gQklUKGkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHR1MzIgYWRkcjtcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWCkge1xuJiM0MztcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4mIzQzO1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbiYjNDM7XHRpZiAoZ3JvdXAgPT0gMikge1xuJiM0MztcdFx0bWFzayB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuJiM0MztcdH1cbiYjNDM7XHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoZ3JvdXAgIT0gMikge1xuJiM0MztcdFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksXG4mIzQzO1x0XHRcdFx0XHQgICAgIG1hc2ssIGN0cmwpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4mIzQzO1x0XHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4mIzQzO1x0XHRcdFx0ICAgZGVsYXlfb2ZmKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcbiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuJiM0MztcbiYjNDM7XHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbiYjNDM7XHRpZiAoIWRwIHx8ICFkcC1cdTAwM2V1c2VyKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LFxuJiM0MztcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4mIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LCB1bnNpZ25lZCBsb25nICpmbGFnc3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2xlZF90cmlnZ2VyX2dldChwcml2LCBwcC1cdTAwM2VpbmRleCwgbGVkLVx1MDAzZWdyb3VwLCBmbGFnc3ApO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyBmbGFncylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbiYjNDM7XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnRcbiYjNDM7eXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuJiM0MztcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIGludCAqcG9sYXJpdHlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldjtcbiYjNDM7XHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuJiM0MztcdGVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZDtcbiYjNDM7XHRib29sIGZvcmNlX2hpZ2g7XG4mIzQzO1x0Ym9vbCBmb3JjZV9sb3c7XG4mIzQzO1x0aW50IHBvbGFyaXR5O1xuJiM0MztcdHUzMiBncm91cDtcbiYjNDM7XHRib29sIG9uO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O05vIExFRHMgZm9yIHBvcnQgJWRcXG5cJiMzNDssIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZndub2RlLCBcJiMzNDtyZWdcJiMzNDssIFx1MDAyNmdyb3VwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRpZiAoZ3JvdXAgXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwmIzM0OywgZ3JvdXAsIHBvcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwmIzM0O2FjdGl2ZS1oaWdoXCYjMzQ7KTtcbiYjNDM7XHRmb3JjZV9sb3cgPSBmd25vZGVfcHJvcGVydHlfcmVhZF9ib29sKGZ3bm9kZSwgXCYjMzQ7YWN0aXZlLWxvd1wmIzM0Oyk7XG4mIzQzO1x0aWYgKGZvcmNlX2hpZ2ggXHUwMDI2XHUwMDI2IGZvcmNlX2xvdykge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0R1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRncm91cCwgcG9ydCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbiYjNDM7XG4mIzQzO1x0bGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWxlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdHBwLVx1MDAzZWxlZHNbZ3JvdXBdID0gbGVkO1xuJiM0MztcbiYjNDM7XHRsZWQtXHUwMDNlcG9ydCA9IHBwO1xuJiM0MztcdGxlZC1cdTAwM2Vncm91cCA9IGdyb3VwO1xuJiM0MztcbiYjNDM7XHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0Y2FzZSBMRURTX0RFRlNUQVRFX09GRjpcbiYjNDM7XHRjYXNlIExFRFNfREVGU1RBVEVfT046XG4mIzQzO1x0XHRvbiA9IHN0YXRlICE9IExFRFNfREVGU1RBVEVfT0ZGO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9zZXQocHJpdiwgcG9ydCwgZ3JvdXAsIG9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuJiM0MztcdFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFx1MDAyNm9uKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcbiYjNDM7XHRsZWRfY2RldiA9IFx1MDAyNmxlZC1cdTAwM2VjZGV2O1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2VtYXhfYnJpZ2h0bmVzcyA9IDE7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlZmxhZ3MgPSBMRURfUkVUQUlOX0FUX1NIVVRET1dOO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlYmxpbmtfc2V0ID0geXQ5MjF4X2NsZWRfYmxpbmtfc2V0O1xuJiM0MzsjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlNcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcJiMzNDtuZXRkZXZcJiMzNDs7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuJiM0MztcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfaXNfc3VwcG9ydGVkID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQ7XG4mIzQzO1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcbiYjNDM7XHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcJiMzNDstJXU6JTAyZDolMDJ1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbiYjNDM7XHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xuJiM0MztcdFx0LmZ3bm9kZSA9IGZ3bm9kZSxcbiYjNDM7XHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbiYjNDM7XHRcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXG4mIzQzO1x0fTtcbiYjNDM7XHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdCpwb2xhcml0eXAgPSBwb2xhcml0eTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IE5VTEw7XG4mIzQzO1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfdGVhcmRvd24oc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IHBvcnQgPSAwOyBwb3J0IFx1MDAzYyBZVDkyMVhfUE9SVF9OVU07IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbiYjNDM7XG4mIzQzO1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXAmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghbGVkKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0ZGV2bV9sZWRfY2xhc3NkZXZfdW5yZWdpc3RlcihkZXYsIFx1MDAyNmxlZC1cdTAwM2VjZGV2KTtcbiYjNDM7XHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuJiM0MztcdFx0XHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRF9QQVJfUE9SVFMsIDApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVuZDtcbiYjNDM7XG4mIzQzO1x0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHwgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2spO1xuJiM0MztcbiYjNDM7ZW5kOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gdGVhcmRvd24gTEVEczogJWRcXG5cJiMzNDssIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4mIzQzO1x0dTMyIGludl9jdHJsID0gMDtcbiYjNDM7XHR1MzIgaW52X21hc2sgPSAwO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbGVkc19ucDtcbiYjNDM7XHRcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFkcC1cdTAwM2VkbilcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0bGVkc19ucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKGRwLVx1MDAzZWRuLCBcJiMzNDtsZWRzXCYjMzQ7KTtcbiYjNDM7XHRcdGlmICghbGVkc19ucClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0Zm9yX2VhY2hfY2hpbGRfb2Zfbm9kZV9zY29wZWQobGVkc19ucCwgbGVkX25wKSB7XG4mIzQzO1x0XHRcdGludCBwb2xhcml0eTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IHl0OTIxeF9sZWRfc2V0dXAocHJpdiwgcG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBvZl9md25vZGVfaGFuZGxlKGxlZF9ucCksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2cG9sYXJpdHkpO1xuJiM0MztcdFx0XHRpZiAocmVzKSB7XG4mIzQzO1x0XHRcdFx0b2Zfbm9kZV9wdXQobGVkc19ucCk7XG4mIzQzO1x0XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwb2xhcml0eSkge1xuJiM0MztcdFx0XHRcdGludl9tYXNrIHw9IEJJVChwb3J0KTtcbiYjNDM7XHRcdFx0XHRpZiAocG9sYXJpdHkgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0XHRpbnZfY3RybCB8PSBCSVQocG9ydCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvZl9ub2RlX3B1dChsZWRzX25wKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuJiM0MztcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4mIzQzO1x0Y3RybCA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0Z290byBlbmQ7XG4mIzQzO1xuJiM0MztcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4mIzQzO1x0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaW52X21hc2spXG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssXG4mIzQzO1x0XHRcdFx0XHQgICAgIGludl9jdHJsKTtcbiYjNDM7XG4mIzQzO2VuZDpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0eXQ5MjF4X2xlZHNfdGVhcmRvd24ocHJpdik7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmJkMjA3ZTA5YThkZjNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICYjNDM7MSwxMTggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9ZVF9MRURTX0hcbiYjNDM7I2RlZmluZSBfWVRfTEVEU19IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGVkcy5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOXHRcdFx0QklUKDIxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NXHRHRU5NQVNLKDIwLCAxOSlcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NXHRcdEdFTk1BU0soMTYsIDEzKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSwgKHgpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1BBUkFMTEVMXHRcdFx0WVQ5MjFYX0xFRF9DVFJMX01PREUoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydClcdFx0KDB4ZDAwMDQgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQwX1BPUlRfQUNUX0xJTktfVFJZX0RJU1x0QklUKDE3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVx0QklUKDE2KVxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICYjNDM7IDQgKiAocG9ydCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTktfTVx0XHRHRU5NQVNLKDMxLCAzMClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cdFx0R0VOTUFTSygyOSwgMjgpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeClcdFx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cdFx0R0VOTUFTSygyNiwgMjUpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSwgKHgpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcdFx0WVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDEpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180XHRcdFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVx0XHQoMHhkMDA4MCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTksIDQgKiAoZ3JwKSAmIzQzOyAxOClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgJiM0MzsgMTcsIDQgKiAoZ3JwKSAmIzQzOyAxNilcdC8qIGN5Y2xlID0gNTEyIFx1MDAzY1x1MDAzYyB4IG1zICovXG4mIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgJiM0MzsgMTYpKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKVx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOS1x0QklUKDE0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTExcdEJJVCgxMilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEZcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWF9CTElOS1x0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTVx0XHRCSVQoNilcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTVx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktcdEJJVCgzKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1x0QklUKDIpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME1fQkxJTktcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfQ1RSTFx0XHQweGQwMTAwXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1x0XHRCSVQoNClcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX01cdFx0R0VOTUFTSygxLCAwKVx0LyogI2dycCAtIDEgKi9cbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9TRVJfTUFQbm0oZ3JwLCBwb3J0KVx0KDB4ZDAxMDQgJiM0MzsgOCAqICgyIC0gKGdycCkpICYjNDM7IDQgKiAoKHBvcnQpIC8gNSkpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVx0R0VOTUFTSyg2ICogKChwb3J0KSAlIDUpICYjNDM7IDUsIDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMilcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgMSwgNiAqICgocG9ydCkgJSA1KSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVlx0XHQweGQwMWM4XG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpXHRCSVQoMTAgKiAoZ3JwKSAmIzQzOyAocG9ydCkpXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfTUFQbihwb3J0KVx0KDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDUsIDYgKiAoZ3JwKSAmIzQzOyAyKVxuJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgJiM0MzsgMikpXG4mIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICYjNDM7IDEsIDYgKiAoZ3JwKSlcbiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX0RFRlx0NTEyXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcdDIwNDhcbiYjNDM7XG4mIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi9cbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFlfREVOT01cdFx0MjRcbiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7XG4mIzQzO1x0c3RydWN0IGxlZF9jbGFzc2RldiBjZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGdyb3VwO1xuJiM0MztcbiYjNDM7XHRib29sIHVzZV9jeWNsZToxO1xuJiM0MztcdGJvb2wgdXNlX2R1dHk6MTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4mIzQzO1xuJiM0MzsjZWxzZVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTA1NDg5NmU0Y2QxMmJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcbkBAIC0wLDAgJiM0MzsxLDE1NyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjaGlwLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7c21pLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4mIzQzOyNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VU1x0MTAwMDAwXG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuJiM0Mzt7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXJlYWQocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuJiM0MztcdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbiYjNDM7XHRcdFx0XHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcbiYjNDM7XHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHQqdmFscCA9IHZhbDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4mIzQzO1x0dTMyIHY7XG4mIzQzO1x0dTMyIHU7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHR1ID0gdjtcbiYjNDM7XHR1IFx1MDAyNj0gfm1hc2s7XG4mIzQzO1x0dSB8PSB2YWw7XG4mIzQzO1x0aWYgKHUgPT0gdilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbiYjNDM7XHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50XG4mIzQzO3l0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuJiM0MztcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludFxuJiM0Mzt5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4mIzQzO1x0dTMyIHZzWzRdO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHUgPSB2c1tpXTtcbiYjNDM7XG4mIzQzO1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuJiM0MztcdFx0dSB8PSB2YWxzW2ldO1xuJiM0MztcdFx0aWYgKHUgIT0gdnNbaV0pXG4mIzQzO1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHZzW2ldID0gdTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbmdlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnRcbiYjNDM7eXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHQgICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4mIzQzO1x0dTMyIHZzWzRdO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTMyIHUgPSB2c1tpXTtcbiYjNDM7XG4mIzQzO1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuJiM0MztcdFx0aWYgKHUgIT0gdnNbaV0pXG4mIzQzO1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdHZzW2ldID0gdTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghY2hhbmdlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgJiM0MzsxLDg4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBfWVRfU01JX0hcbiYjNDM7I2RlZmluZSBfWVRfU01JX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29yZHBhcnQuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IHl0OTIxeF9wcml2O1xuJiM0MztcbiYjNDM7aW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XG4mIzQzO2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbiYjNDM7XHRcdFx0ICAgdTMyIHZhbCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWdfdG9nZ2xlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgYm9vbCBzZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZVxuJiM0MzsgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4mIzQzOyAqXG4mIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG9cbiYjNDM7ICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4mIzQzO1x0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcbiYjNDM7XHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbiYjNDM7XHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxuJiM0MztcdFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbiYjNDM7aW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuJiM0MztcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7eXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4mIzQzO1x0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50XG4mIzQzO3l0OTIxeF9yZWc2NF9jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludFxuJiM0Mzt5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5MDdlNzljZjkyOGNmYjQ2MTE4NWYzY2RlZmQxNGM1ZTljYjM1YTA0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAxNzoxNjozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTgyMzAsNyAmIzQzOzE4MjMwLDcgQEAgTToJRGF2aWQgWWFuZyAmbHQ7bW15YW5nZmxAZ21haWwuY29tJmd0OwogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sCi1GOglkcml2ZXJzL25ldC9kc2EveXQ5MjF4LioKJiM0MztGOglkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tLwogRjoJbmV0L2RzYS90YWdfeXQ5MjF4LmMKIAogTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCmluZGV4IDRhYjU2N2M1YmJhZmM2Li45OGU5YmJlNDdkZTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWcKQEAgLTcyLDYgJiM0Mzs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MAogCiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWcmIzM0OwogCiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnJiMzNDsKJiM0MzsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvS2NvbmZpZyYjMzQ7CiAKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnJiMzNDsKQEAgLTE1OCwxMiAmIzQzOzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBWaXRlc3NlIFZTQzczODUsIFZTQzczODgsIFZTQzczOTUKIAkgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyCiAJICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLgotCi1jb25maWcgTkVUX0RTQV9ZVDkyMVgKLQl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7Ci0Jc2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWAotCXNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQppbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKQEAgLTE0LDExICYjNDM7MTQsMTEgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiBvYmoteQkJCQkmIzQzOz0gYjUzLwogb2JqLXkJCQkJJiM0Mzs9IGhpcnNjaG1hbm4vCiBvYmoteQkJCQkmIzQzOz0gbGFudGlxLwogb2JqLXkJCQkJJiM0Mzs9IG1pY3JvY2hpcC8KJiM0MztvYmoteQkJCQkmIzQzOz0gbW90b3Jjb21tLwogb2JqLXkJCQkJJiM0Mzs9IG12ODhlNnh4eC8KIG9iai15CQkJCSYjNDM7PSBteGw4NjJ4eC8KIG9iai15CQkJCSYjNDM7PSBuZXRjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNDM4ZTBiMTQzNjExYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwxNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWAomIzQzOwl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKJiM0MzsJc2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0IKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKJiM0MzsJICBjaGlwLgomIzQzOwomIzQzO2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTCiYjNDM7CWJvb2wgJiMzNDtMRUQgc3VwcG9ydCBmb3IgTW90b3Jjb21tIFlUOTIxNSYjMzQ7CiYjNDM7CWRlZmF1bHQgeQomIzQzOwlkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYCiYjNDM7CWRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVgKJiM0MzsJaGVscAomIzQzOwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQwomIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7eXQ5MjF4LW9ianMgOj0gY2hpcC5vCiYjNDM7eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm8KJiM0Mzt5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpyZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKaW5kZXggMTU5YjE2NjA2ZjZjYTQuLmEzNTEyMTM2MzgzYjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMKQEAgLTEzLDcgJiM0MzsxMyw2IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYnJpZGdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfaHNyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9vZi5oJmd0OwpAQCAtMjYsNyAmIzQzOzI1LDkgQEAKICNpbmNsdWRlICZsdDtuZXQvaWVlZTgwMjFxLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKIAotI2luY2x1ZGUgJiMzNDt5dDkyMXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKIAogc3RydWN0IHl0OTIxeF9taWJfZGVzYyB7CiAJdW5zaWduZWQgaW50IHNpemU7CkBAIC0xNTEsMTMgJiM0MzsxNTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvIHl0OTIxeF9pbmZvc1tdID0gewogCXt9CiB9OwogCi0jZGVmaW5lIFlUOTIxWF9OQU1FCSYjMzQ7eXQ5MjF4JiMzNDsKLQogI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRQk0MDk1CiAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVMJMTAwMDAKLSNkZWZpbmUgWVQ5MjFYX1BPTExfVElNRU9VVF9VUwkxMDAwMDAKLQogLyogVGhlIGludGVydmFsIHNob3VsZCBiZSBzbWFsbCBlbm91Z2ggdG8gYXZvaWQgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4KICAqCiAgKiBVbnRpbCB3ZSBjYW4gcmVhZCBNSUJzIGZyb20gc3RhdHM2NCBjYWxsIGRpcmVjdGx5IChpLmUuIHNsZWVwCkBAIC0xOTYsMjA4ICYjNDM7MTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcikKIAlyZXR1cm4gKGFkZHJbNF0gJmx0OyZsdDsgOCkgfCBhZGRyWzVdOwogfQogCi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3JlYWQocHJpdi0mZ3Q7cmVnX2N0eCwgcmVnLCB2YWxwKTsKLX0KLQotc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKLXsKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmFtcDtwcml2LSZndDtyZWdfbG9jaykpOwotCi0JcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCkKLXsKLQl1MzIgdmFsOwotCWludCByZXM7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLAotCQkJCXJlcyB8fCAodmFsICZhbXA7IG1hc2spID09ICp2YWxwLAotCQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAotCQkJCWZhbHNlLCBwcml2LCByZWcsICZhbXA7dmFsKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQkqdmFscCA9IHZhbDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQotewotCWludCByZXM7Ci0JdTMyIHY7Ci0JdTMyIHU7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQl1ID0gdjsKLQl1ICZhbXA7PSB+bWFzazsKLQl1IHw9IHZhbDsKLQlpZiAodSA9PSB2KQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19zZXRfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQotewotCXJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgMCwgbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldCkKLXsKLQlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7Ci19Ci0KLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUKLSAqIGxvbmcgcmVnaXN0ZXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB3cml0ZXMgdG8gcGFydHMgb2YgaXRzIHdvcmRzIHdvbiYjMzk7dCBiZWNvbWUKLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KLSAqCi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvCi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCi0gKi8KLQotc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbCkKLXsKLQkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwotCSpoaSAmYW1wOz0gfnVwcGVyXzMyX2JpdHMobWFzayk7Ci0JKmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTsKLQkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAotCQkgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwotCQlpZiAocmVzKQotCQkJcmV0dXJuIHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCi0JCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQotewotCWludCByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyAmIzQzOyA0ICogaSwgdmFsc1tpXSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQljb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncykKLXsKLQlib29sIGNoYW5nZWQgPSBmYWxzZTsKLQl1MzIgdnNbNF07Ci0JaW50IHJlczsKLQotCUJVSUxEX0JVR19PTihudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKTsKLQotCXJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotCWlmIChyZXMpCi0JCXJldHVybiByZXM7Ci0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewotCQl1MzIgdSA9IHZzW2ldOwotCi0JCXUgJmFtcDs9IH5tYXNrc1tpXTsKLQkJdSB8PSB2YWxzW2ldOwotCQlpZiAodSAhPSB2c1tpXSkKLQkJCWNoYW5nZWQgPSB0cnVlOwotCi0JCXZzW2ldID0gdTsKLQl9Ci0KLQlpZiAoIWNoYW5nZWQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpCi17Ci0JYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JdTMyIHZzWzRdOwotCWludCByZXM7Ci0KLQlCVUlMRF9CVUdfT04obnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSk7Ci0KLQlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKLQkJdTMyIHUgPSB2c1tpXTsKLQotCQl1ICZhbXA7PSB+bWFza3NbaV07Ci0JCWlmICh1ICE9IHZzW2ldKQotCQkJY2hhbmdlZCA9IHRydWU7Ci0KLQkJdnNbaV0gPSB1OwotCX0KLQotCWlmICghY2hhbmdlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7Ci19Ci0KLXN0YXRpYyBpbnQKLXl0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCi0JCQkgY29uc3QgdTMyICp2YWxzKQotewotCXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKLX0KLQotc3RhdGljIGludAoteXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKQotewotCXJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpOwotfQotCi1zdGF0aWMgaW50Ci15dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCi17Ci0JcmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7Ci19Ci0KIHN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3JlYWQodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyICp2YWxwKQogewogCXN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW8gPSBjb250ZXh0OwpAQCAtNDc4Niw2ICYjNDM7NDU4MCwxMiBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsJcmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfd2FybihkZXYsICYjMzQ7RmFpbGVkIHRvIHNldHVwIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0MzsjZW5kaWYKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmgKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaAppbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaApAQCAtODUwLDggJiM0Mzs4NTAsMTMgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7CiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNCQkoWVQ5MjFYX0FDTF9CTEtfTlVNICogWVQ5MjFYX0FDTF9FTlRfUEVSX0JMSykKICNkZWZpbmUgWVQ5MjFYX1VERl9OVU0JCTgKIAomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU0JMwomIzQzOwogLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovCi0jZGVmaW5lIFlUOTIxWF9QT1JUX05VTQkJCTExCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9OVU0JCTExCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9SVF9NQ1UJCTEwCiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTkFNRQkmIzM0O3l0OTIxeCYjMzQ7CiAKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSAmbHQ7IDgpCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4ICZsdDs9IChwb3J0KSAmYW1wOyZhbXA7IChwb3J0KSAmbHQ7IDkpCkBAIC05MzgsNiAmIzQzOzk0MywxMyBAQCBzdHJ1Y3QgeXQ5MjF4X3BvcnQgewogCXN0cnVjdCB5dDkyMXhfbWliIG1pYjsKIAl1NjQgcnhfZnJhbWVzOwogCXU2NCB0eF9mcmFtZXM7CiYjNDM7CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpCiYjNDM7CXVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7CiYjNDM7CXVuc2lnbmVkIHNob3J0IGxlZF9jeWNsZTsKJiM0MzsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZHNbWVQ5MjFYX0xFRF9HUk9VUF9OVU1dOwomIzQzOyNlbmRpZgogfTsKIAogc3RydWN0IHl0OTIxeF9yZWdfb3BzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIwNjZhN2U4NGZlNmJjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMKQEAgLTAsMCAmIzQzOzEsNjA3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3VsZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtjaGlwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bGVkcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpIFwKJiM0MzsJY29udGFpbmVyX29mX2NvbnN0KChsZWRfY2RldiksIHN0cnVjdCB5dDkyMXhfbGVkLCBjZGV2KQomIzQzOyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktJmd0O3BvcnQpCiYjNDM7I2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXAomIzQzOwljb250YWluZXJfb2ZfY29uc3QoKHBwKSwgc3RydWN0IHl0OTIxeF9wcml2LCBwb3J0c1socHApLSZndDtpbmRleF0pCiYjNDM7I2RlZmluZSB0b19kZXZpY2UocHJpdikgKChwcml2KS0mZ3Q7ZHMuZGV2KQomIzQzOwomIzQzO3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCkKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoZ3JvdXApIHsKJiM0MzsJY2FzZSAwOgomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpOwomIzQzOwljYXNlIDE6CiYjNDM7CQlyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7CiYjNDM7CWNhc2UgMjoKJiM0MzsJCXJldHVybiBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CSpvbnAgPSAodmFsICZhbXA7IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PQomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfZm9yY2Vfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwgYm9vbCBvbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CiYjNDM7CWxlZC0mZ3Q7dXNlX2N5Y2xlID0gZmFsc2U7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwljdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOgomIzQzOwkgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTsKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssCiYjNDM7CQkJCSAgICAgIGN0cmwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2xlZF9ibGlua19zZWxlY3QoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG9uLAomIzQzOwkJCXVuc2lnbmVkIGxvbmcgb2ZmLCB1bnNpZ25lZCBzaG9ydCAqY3ljbGVwLAomIzQzOwkJCXVuc2lnbmVkIGNoYXIgKmR1dHlwKQomIzQzO3sKJiM0MzsJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHV0eXNbXSA9IHsKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA2KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCA0KSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAzKSwKJiM0MzsJCVlUOTIxWF9MRURfRFVUWSgxLCAyKSwKJiM0MzsJfTsKJiM0MzsJdW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyOwomIzQzOwl1bnNpZ25lZCBpbnQgY3ljbGVfcmVxOwomIzQzOwl1bnNpZ25lZCBpbnQgZHV0eV9yZXE7CiYjNDM7CXVuc2lnbmVkIGludCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgaW50IGR1dHk7CiYjNDM7CiYjNDM7CWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19NQVg7CiYjNDM7CWN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgJiM0MzsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqLwomIzQzOwlpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsICZhbXA7Y3ljbGVfcmVxKSB8fCBjeWNsZV9yZXEgJmd0Oz0gY3ljbGVfdXBwZXIpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CWZvciAoOyBjeWNsZSAmZ3Q7IFlUOTIxWF9MRURfQkxJTktfTUlOOyBjeWNsZV91cHBlciAmZ3Q7Jmd0Oz0gMSwgY3ljbGUgJmd0OyZndDs9IDEpCiYjNDM7CQlpZiAoY3ljbGVfcmVxICZndDs9IGN5Y2xlX3VwcGVyICZndDsmZ3Q7IDEpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CSpjeWNsZXAgPSBjeWNsZTsKJiM0MzsKJiM0MzsJZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKgomIzQzOwkJCQkgICAgIChvbiAmZ3Q7IG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSkKJiM0MzsJCWlmIChpID09IDAgfHwgZHV0eV9yZXEgJmd0Oz0gKGR1dHlzW2kgLSAxXSAmIzQzOyBkdXR5c1tpXSkgLyAyKSB7CiYjNDM7CQkJZHV0eSA9IGR1dHlzW2ldOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwlpZiAob24gJmd0OyBvZmYpCiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZX0RFTk9NIC0gZHV0eTsKJiM0MzsJKmR1dHlwID0gZHV0eTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsCiYjNDM7CQkgICAgIHVuc2lnbmVkIGxvbmcgKm9ucCwgdW5zaWduZWQgbG9uZyAqb2ZmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gcHAtJmd0O2xlZHNbZ3JvdXBdOwomIzQzOwl1bnNpZ25lZCBzaG9ydCBjeWNsZTsKJiM0MzsJdW5zaWduZWQgY2hhciBkdXR5OwomIzQzOwlib29sIHVzZV9jeWNsZTsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CXUzMiBtYXNrOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoISpvbnAgJmFtcDsmYW1wOyAhKm9mZnApIHsKJiM0MzsJCWN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7CiYjNDM7CQlkdXR5ID0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOwomIzQzOwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKGkgIT0gZ3JvdXAgJmFtcDsmYW1wOyBwcC0mZ3Q7bGVkc1tpXSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgIHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkgewomIzQzOwkJCQlkdXR5ID0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQl1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWJvb2wgY2hhbmdlX2N5Y2xlOwomIzQzOwkJYm9vbCBjaGFuZ2VfZHV0eTsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCAmYW1wO2N5Y2xlLCAmYW1wO2R1dHkpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJdXNlX2N5Y2xlID0gY3ljbGUgJmx0OyBZVDkyMVhfTEVEX0JMSU5LX0RFRjsKJiM0MzsJCWNoYW5nZV9jeWNsZSA9IHVzZV9jeWNsZSAmYW1wOyZhbXA7IGN5Y2xlICE9IHBwLSZndDtsZWRfY3ljbGU7CiYjNDM7CQljaGFuZ2VfZHV0eSA9IGR1dHkgIT0gcHAtJmd0O2xlZF9kdXR5OwomIzQzOwkJaWYgKGNoYW5nZV9jeWNsZSB8fCBjaGFuZ2VfZHV0eSkKJiM0MzsJCQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IFlUOTIxWF9MRURfR1JPVVBfTlVNOwomIzQzOwkJCSAgICAgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQkJaWYgKGkgPT0gZ3JvdXAgfHwgIXBwLSZndDtsZWRzW2ldKQomIzQzOwkJCQkJY29udGludWU7CiYjNDM7CQkJCWlmICgoY2hhbmdlX2N5Y2xlICZhbXA7JmFtcDsgcHAtJmd0O2xlZHNbaV0tJmd0O3VzZV9jeWNsZSkgfHwKJiM0MzsJCQkJICAgIChjaGFuZ2VfZHV0eSAmYW1wOyZhbXA7IHBwLSZndDtsZWRzW2ldLSZndDt1c2VfZHV0eSkpCiYjNDM7CQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH5ZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CWlmICh2YWwgIT0gY3RybCkgewomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9NIHwgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7CiYjNDM7CXN3aXRjaCAoZHV0eSAmZ3Q7PSBZVDkyMVhfTEVEX0RVVFkoMSwgMikgPyBkdXR5IDoKJiM0MzsJCVlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7CiYjNDM7CQlmYWxsdGhyb3VnaDsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFlUOTIxWF9MRURfRFVUWSgyLCAzKToKJiM0MzsJCWN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMl8zOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOgomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6CiYjNDM7CQljdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWlmIChkdXR5ICZsdDsgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpKQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUDsKJiM0MzsJaWYgKHVzZV9jeWNsZSkgewomIzQzOwkJbWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007CiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7CiYjNDM7CX0KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KSwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gdmFsICZhbXA7IH4oWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCkgfAomIzQzOwkJICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTsKJiM0MzsJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQljdHJsIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdyb3VwKTsKJiM0MzsJZWxzZQomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbihncm91cCwgX19mbHMoY3ljbGUpIC0gOSk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSB1c2VfY3ljbGU7CiYjNDM7CWlmICh1c2VfY3ljbGUpCiYjNDM7CQlwcC0mZ3Q7bGVkX2N5Y2xlID0gY3ljbGU7CiYjNDM7CWxlZC0mZ3Q7dXNlX2R1dHkgPSB0cnVlOwomIzQzOwlwcC0mZ3Q7bGVkX2R1dHkgPSBkdXR5OwomIzQzOwomIzQzOwkqb25wID0gRElWX1JPVU5EX0NMT1NFU1QoZHV0eSAqIGN5Y2xlLCBZVDkyMVhfTEVEX0RVVFlfREVOT00pOwomIzQzOwkqb2ZmcCA9IGN5Y2xlIC0gKm9ucDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1MzIgeXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbX19UUklHR0VSX05FVERFVl9NQVhdID0gewomIzQzOwlbVFJJR0dFUl9ORVRERVZfTElOS10JCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYgfAomIzQzOwkJCQkJICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktfMTBdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfTElOS18xMDBdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwTSwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0xJTktfMTAwMF0JPSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSwKJiM0MzsJW1RSSUdHRVJfTkVUREVWX0hBTEZfRFVQTEVYXQk9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLAomIzQzOwlbVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVhdCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsCiYjNDM7CVtUUklHR0VSX05FVERFVl9UWF0JCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgsCiYjNDM7CVtUUklHR0VSX05FVERFVl9SWF0JCT0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCQkJaW50IGdyb3VwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoaSwgJmFtcDtmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpCiYjNDM7CQlpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cCwKJiM0MzsJCSAgICAgICB1bnNpZ25lZCBsb25nICpmbGFnc3ApCiYjNDM7ewomIzQzOwl1MzIgYWRkcjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkqZmxhZ3NwID0gMDsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBfX1RSSUdHRVJfTkVUREVWX01BWDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXUzMiBtYXNrID0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CiYjNDM7CQlpZiAobWFzayAmYW1wOyZhbXA7ICh2YWwgJmFtcDsgbWFzaykgPT0gbWFzaykKJiM0MzsJCQkqZmxhZ3NwIHw9IEJJVChpKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1twb3J0XTsKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLSZndDtsZWRzW2dyb3VwXTsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CXUzMiBhZGRyOwomIzQzOwl1MzIgY3RybDsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSAwOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KGksICZhbXA7ZmxhZ3MsIF9fVFJJR0dFUl9ORVRERVZfTUFYKSB7CiYjNDM7CQlpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJCWN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJbGVkLSZndDt1c2VfY3ljbGUgPSBmYWxzZTsKJiM0MzsJbGVkLSZndDt1c2VfZHV0eSA9IGZhbHNlOwomIzQzOwomIzQzOwltYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007CiYjNDM7CWlmIChncm91cCA9PSAyKSB7CiYjNDM7CQltYXNrIHw9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7CiYjNDM7CX0KJiM0MzsJYWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgYWRkciwgbWFzaywgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlpZiAoZ3JvdXAgIT0gMikgewomIzQzOwkJbWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApOwomIzQzOwkJY3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksCiYjNDM7CQkJCQkgICAgIG1hc2ssIGN0cmwpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgYnJpZ2h0bmVzcyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCiYjNDM7CQkgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZGVsYXlfb24sCiYjNDM7CQkJCSAgIGRlbGF5X29mZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZAomIzQzO3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcDsKJiM0MzsKJiM0MzsJZHAgPSBkc2FfdG9fcG9ydCgmYW1wO3ByaXYtJmd0O2RzLCBwcC0mZ3Q7aW5kZXgpOwomIzQzOwlpZiAoIWRwIHx8ICFkcC0mZ3Q7dXNlcikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4gJmFtcDtkcC0mZ3Q7dXNlci0mZ3Q7ZGV2OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwomIzQzOwlpZiAoeXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChwcml2LCBwcC0mZ3Q7aW5kZXgsIGxlZC0mZ3Q7Z3JvdXAsIGZsYWdzKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0Mzt5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLSZndDtpbmRleCwgbGVkLSZndDtncm91cCwgZmxhZ3NwKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCiYjNDM7eXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtJmd0O2luZGV4LCBsZWQtJmd0O2dyb3VwLCBmbGFncyk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwKJiM0MzsJCSBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlLCBpbnQgKnBvbGFyaXR5cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSAmYW1wO3ByaXYtJmd0O3BvcnRzW3BvcnRdOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7CiYjNDM7CXN0cnVjdCBsZWRfaW5pdF9kYXRhIGluaXRfZGF0YTsKJiM0MzsJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7CiYjNDM7CWNoYXIgbmFtZVtMRURfTUFYX05BTUVfU0laRV07CiYjNDM7CWVudW0gbGVkX2RlZmF1bHRfc3RhdGUgc3RhdGU7CiYjNDM7CXN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7CiYjNDM7CWJvb2wgZm9yY2VfaGlnaDsKJiM0MzsJYm9vbCBmb3JjZV9sb3c7CiYjNDM7CWludCBwb2xhcml0eTsKJiM0MzsJdTMyIGdyb3VwOwomIzQzOwlib29sIG9uOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAocG9ydCA9PSBZVDkyMVhfUE9SVF9NQ1UpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O05vIExFRHMgZm9yIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJlcyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihmd25vZGUsICYjMzQ7cmVnJiMzNDssICZhbXA7Z3JvdXApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJaWYgKGdyb3VwICZndDs9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtJbnZhbGlkIExFRCByZWcgJXUgZm9yIHBvcnQgJWRcbiYjMzQ7LCBncm91cCwgcG9ydCk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3JjZV9oaWdoID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsICYjMzQ7YWN0aXZlLWhpZ2gmIzM0Oyk7CiYjNDM7CWZvcmNlX2xvdyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCAmIzM0O2FjdGl2ZS1sb3cmIzM0Oyk7CiYjNDM7CWlmIChmb3JjZV9oaWdoICZhbXA7JmFtcDsgZm9yY2VfbG93KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtEdXBsaWNhdGUgcG9sYXJpdGllcyBmb3IgTEVEICUwMmQ6JTAydVxuJiMzNDssCiYjNDM7CQkJZ3JvdXAsIHBvcnQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsJcG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDsKJiM0MzsKJiM0MzsJbGVkID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpsZWQpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gbGVkOwomIzQzOwomIzQzOwlsZWQtJmd0O3BvcnQgPSBwcDsKJiM0MzsJbGVkLSZndDtncm91cCA9IGdyb3VwOwomIzQzOwomIzQzOwlzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXN3aXRjaCAoc3RhdGUpIHsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09GRjoKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX09OOgomIzQzOwkJb24gPSBzdGF0ZSAhPSBMRURTX0RFRlNUQVRFX09GRjsKJiM0MzsJCXJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBMRURTX0RFRlNUQVRFX0tFRVA6CiYjNDM7CQlyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgJmFtcDtvbik7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJbGVkX2NkZXYgPSAmYW1wO2xlZC0mZ3Q7Y2RldjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3MgPSBvbjsKJiM0MzsJbGVkX2NkZXYtJmd0O21heF9icmlnaHRuZXNzID0gMTsKJiM0MzsJbGVkX2NkZXYtJmd0O2ZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjsKJiM0MzsJbGVkX2NkZXYtJmd0O2JyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7CiYjNDM7CWxlZF9jZGV2LSZndDtibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7CiYjNDM7I2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3RyaWdnZXIgPSAmIzM0O25ldGRldiYjMzQ7OwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlOwomIzQzOwlsZWRfY2Rldi0mZ3Q7aHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDsKJiM0MzsJbGVkX2NkZXYtJmd0O2h3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7CiYjNDM7CWxlZF9jZGV2LSZndDtod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0OwomIzQzOyNlbmRpZgomIzQzOwomIzQzOwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksIFlUOTIxWF9OQU1FICYjMzQ7LSV1OiUwMmQ6JTAydSYjMzQ7LAomIzQzOwkJIHByaXYtJmd0O2RzLmluZGV4LCBwb3J0LCBncm91cCk7CiYjNDM7CWluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7CiYjNDM7CQkuZndub2RlID0gZndub2RlLAomIzQzOwkJLmRldmljZW5hbWUgPSBuYW1lLAomIzQzOwkJLmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSwKJiM0MzsJfTsKJiM0MzsJcmVzID0gZGV2bV9sZWRfY2xhc3NkZXZfcmVnaXN0ZXJfZXh0KGRldiwgbGVkX2NkZXYsICZhbXA7aW5pdF9kYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwkqcG9sYXJpdHlwID0gcG9sYXJpdHk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2VycjoKJiM0MzsJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJZGV2bV9rZnJlZShkZXYsIGxlZCk7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHl0OTIxeF9sZWRzX3RlYXJkb3duKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAoaW50IHBvcnQgPSAwOyBwb3J0ICZsdDsgWVQ5MjFYX1BPUlRfTlVNOyBwb3J0JiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbcG9ydF07CiYjNDM7CiYjNDM7CQlmb3IgKGludCBncm91cCA9IDA7IGdyb3VwICZsdDsgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC0mZ3Q7bGVkc1tncm91cF07CiYjNDM7CiYjNDM7CQkJaWYgKCFsZWQpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCWRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCAmYW1wO2xlZC0mZ3Q7Y2Rldik7CiYjNDM7CQkJcHAtJmd0O2xlZHNbZ3JvdXBdID0gTlVMTDsKJiM0MzsJCQlkZXZtX2tmcmVlKGRldiwgbGVkKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRURfUEFSX1BPUlRTLCAwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZW5kOwomIzQzOwomIzQzOwltYXNrID0gWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfCBZVDkyMVhfTEVEX0NUUkxfRU47CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2spOwomIzQzOwomIzQzO2VuZDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHRlYXJkb3duIExFRHM6ICVkXG4mIzM0OywgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHA7CiYjNDM7CXUzMiBpbnZfY3RybCA9IDA7CiYjNDM7CXUzMiBpbnZfbWFzayA9IDA7CiYjNDM7CXUzMiBjdHJsOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZHNhX3N3aXRjaF9mb3JfZWFjaF9wb3J0KGRwLCBkcykgewomIzQzOwkJc3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wOwomIzQzOwkJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CiYjNDM7CQlpZiAoIWRwLSZndDtkbikKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC0mZ3Q7ZG4sICYjMzQ7bGVkcyYjMzQ7KTsKJiM0MzsJCWlmICghbGVkc19ucCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWZvcl9lYWNoX2NoaWxkX29mX25vZGVfc2NvcGVkKGxlZHNfbnAsIGxlZF9ucCkgewomIzQzOwkJCWludCBwb2xhcml0eTsKJiM0MzsKJiM0MzsJCQlyZXMgPSB5dDkyMXhfbGVkX3NldHVwKHByaXYsIHBvcnQsCiYjNDM7CQkJCQkgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLAomIzQzOwkJCQkJICAgICAgICZhbXA7cG9sYXJpdHkpOwomIzQzOwkJCWlmIChyZXMpIHsKJiM0MzsJCQkJb2Zfbm9kZV9wdXQobGVkc19ucCk7CiYjNDM7CQkJCWdvdG8gZXJyOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlpZiAocG9sYXJpdHkpIHsKJiM0MzsJCQkJaW52X21hc2sgfD0gQklUKHBvcnQpOwomIzQzOwkJCQlpZiAocG9sYXJpdHkgJmd0OyAwKQomIzQzOwkJCQkJaW52X2N0cmwgfD0gQklUKHBvcnQpOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9mX25vZGVfcHV0KGxlZHNfbnApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CW1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOOwomIzQzOwljdHJsID0gWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwgfAomIzQzOwkgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHwKJiM0MzsJICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2ssIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZ290byBlbmQ7CiYjNDM7CiYjNDM7CS8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuCiYjNDM7CSAqIEluIHRoZSByZXN0IG9mIHRoZSBmaWxlLCB0cmVhdCBMRURzIGFzIGlmIGFjdGl2ZS1sb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW52X21hc2spCiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfUEFSX0lOViwgaW52X21hc2ssCiYjNDM7CQkJCQkgICAgIGludl9jdHJsKTsKJiM0MzsKJiM0MztlbmQ6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXl0OTIxeF9sZWRzX3RlYXJkb3duKHByaXYpOwomIzQzOwlyZXR1cm4gcmVzOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJiZDIwN2UwOWE4ZGYzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgKQEAgLTAsMCAmIzQzOzEsMTE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfWVRfTEVEU19ICiYjNDM7I2RlZmluZSBfWVRfTEVEU19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva2NvbmZpZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9sZWRzLmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX0NUUkwJCQkweGQwMDAwCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0VOCQkJQklUKDIxKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00JR0VOTUFTSygyMCwgMTkpCS8qIGN5Y2xlID0gNTEyICogeCBtcyAqLwomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOSyh4KQkJRklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00JCUdFTk1BU0soMTYsIDEzKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTQkJCUdFTk1BU0soMSwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREUoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9NT0RFX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX01PREVfUEFSQUxMRUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgwKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUwJCQlZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCkJCSgweGQwMDA0ICYjNDM7IDQgKiAocG9ydCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTcsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTCUJJVCgxNykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESQlCSVQoMTYpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KQkJKDB4ZDAwNDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX00JCUdFTk1BU0soMzEsIDMwKQkvKiBjeWNsZSA9IDUxMiAmZ3Q7Jmd0OyB4IG1zICovCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTQkJR0VOTUFTSygyOSwgMjgpCS8qIGN5Y2xlID0gNTEyICZndDsmZ3Q7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTksoeCkJCQlGSUVMRF9QUkVQKFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX00sICh4KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUAlCSVQoMjcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00JCUdFTk1BU0soMjYsIDI1KQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoeCkJCUZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDApCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzMJCVlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSgxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfM180CQlZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNgkJWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKDMpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KQkJKDB4ZDAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycCkJCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE5LCA0ICogKGdycCkgJiM0MzsgMTgpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeCkJCSgoeCkgJmx0OyZsdDsgKDQgKiAoZ3JwKSAmIzQzOyAxOCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdycCkJCVlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMCkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JwKQkJWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDIpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09GRihncnApCQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fTShncnApCUdFTk1BU0soNCAqIChncnApICYjNDM7IDE3LCA0ICogKGdycCkgJiM0MzsgMTYpCS8qIGN5Y2xlID0gNTEyICZsdDsmbHQ7IHggbXMgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCB4KQkJKCh4KSAmbHQ7Jmx0OyAoNCAqIChncnApICYjNDM7IDE2KSkKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JwKQlZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIDMpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LCQlCSVQoMTUpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTE9PUERFVEVDVF9CTElOSwlCSVQoMTQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQUNUSVZFX0JMSU5LCUJJVCgxMykKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTAlCSVQoMTIpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYJQklUKDExKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYX0JMSU5LCQlCSVQoMTApCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfUlhfQkxJTksJCUJJVCg5KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYCQlCSVQoOCkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9SWAkJQklUKDcpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0JCUJJVCg2KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0JCUJJVCg1KQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTQkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LCUJJVCgzKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNX0JMSU5LCUJJVCgyKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTksJQklUKDEpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNX0JMSU5LCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkwJCTB4ZDAxMDAKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX1VOSwkJR0VOTUFTSygyNSwgMjQpCS8qIGRlbGF5PyAqLwomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPVwkJQklUKDQpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNX00JCUdFTk1BU0soMSwgMCkJLyogI2dycCAtIDEgKi8KJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpCQlGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpCiYjNDM7I2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpCSgweGQwMTA0ICYjNDM7IDggKiAoMiAtIChncnApKSAmIzQzOyA0ICogKChwb3J0KSAvIDUpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KQlHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgJiM0MzsgNSwgNiAqICgocG9ydCkgJSA1KSAmIzQzOyAyKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9QT1JUKHBvcnQsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKChwb3J0KSAlIDUpICYjNDM7IDIpKQomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpCUdFTk1BU0soNiAqICgocG9ydCkgJSA1KSAmIzQzOyAxLCA2ICogKChwb3J0KSAlIDUpKQomIzQzOyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeCkJCSgoeCkgJmx0OyZsdDsgKDYgKiAoKHBvcnQpICUgNSkpKQomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFMJCTB4ZDAxYzQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX0lOVgkJMHhkMDFjOAomIzQzOyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX0lOVl9JTlZubShncnAsIHBvcnQpCUJJVCgxMCAqIChncnApICYjNDM7IChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydCkJKDB4ZDAxZDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9QT1JUX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyA1LCA2ICogKGdycCkgJiM0MzsgMikKJiM0MzsjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkgJiM0MzsgMikpCiYjNDM7I2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEX00oZ3JwKQlHRU5NQVNLKDYgKiAoZ3JwKSAmIzQzOyAxLCA2ICogKGdycCkpCiYjNDM7I2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpCQkoKHgpICZsdDsmbHQ7ICg2ICogKGdycCkpKQomIzQzOwomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU4JNjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGCTUxMgomIzQzOyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVgJMjA0OAomIzQzOwomIzQzOy8qIDIgKiBsY20oMiwgMywgNCwgNikgKi8KJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWV9ERU5PTQkJMjQKJiM0MzsjZGVmaW5lIFlUOTIxWF9MRURfRFVUWShub20sIGRlbm9tKQkoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKQomIzQzOwomIzQzO3N0cnVjdCB5dDkyMXhfcHJpdjsKJiM0MzsKJiM0MztzdHJ1Y3QgeXQ5MjF4X2xlZCB7CiYjNDM7CXN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjsKJiM0MzsJc3RydWN0IHl0OTIxeF9wb3J0ICpwb3J0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGdyb3VwOwomIzQzOwomIzQzOwlib29sIHVzZV9jeWNsZToxOwomIzQzOwlib29sIHVzZV9kdXR5OjE7CiYjNDM7fTsKJiM0MzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykKJiM0MzsKJiM0MztpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KTsKJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45MDU0ODk2ZTRjZDEyYgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMKQEAgLTAsMCAmIzQzOzEsMTU3IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBEYXZpZCBZYW5nCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvcG9sbC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Y2hpcC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtaS5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFlUOTIxWF9QT0xMX1NMRUVQX1VTCTEwMDAwCiYjNDM7I2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTCTEwMDAwMAomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBwcml2LSZndDtyZWdfb3BzLSZndDtyZWFkKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFscCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCkKJiM0Mzt7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHByaXYtJmd0O3JlZ19vcHMtJmd0O3dyaXRlKHByaXYtJmd0O3JlZ19jdHgsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApCiYjNDM7ewomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmVzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcywKJiM0MzsJCQkJcmVzIHx8ICh2YWwgJmFtcDsgbWFzaykgPT0gKnZhbHAsCiYjNDM7CQkJCVlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLAomIzQzOwkJCQlmYWxzZSwgcHJpdiwgcmVnLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJKnZhbHAgPSB2YWw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsJdTMyIHY7CiYjNDM7CXUzMiB1OwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCAmYW1wO3YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJdSA9IHY7CiYjNDM7CXUgJmFtcDs9IH5tYXNrOwomIzQzOwl1IHw9IHZhbDsKJiM0MzsJaWYgKHUgPT0gdikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLAomIzQzOwkJIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICYjNDM7IDQgKiBpLCAmYW1wO3ZhbHNbaV0pOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQKJiM0Mzt5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscywKJiM0MzsJCSAgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBudW1fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICYjNDM7IDQgKiBpLCB2YWxzW2ldKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50CiYjNDM7eXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJCWNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKQomIzQzO3sKJiM0MzsJYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiYjNDM7CXUzMiB2c1s0XTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShudW1fcmVncyAmZ3Q7IEFSUkFZX1NJWkUodnMpKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgbnVtX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1MzIgdSA9IHZzW2ldOwomIzQzOwomIzQzOwkJdSAmYW1wOz0gfm1hc2tzW2ldOwomIzQzOwkJdSB8PSB2YWxzW2ldOwomIzQzOwkJaWYgKHUgIT0gdnNbaV0pCiYjNDM7CQkJY2hhbmdlZCA9IHRydWU7CiYjNDM7CiYjNDM7CQl2c1tpXSA9IHU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFjaGFuZ2VkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7fQomIzQzOwomIzQzO2ludAomIzQzO3l0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLAomIzQzOwkJICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncykKJiM0Mzt7CiYjNDM7CWJvb2wgY2hhbmdlZCA9IGZhbHNlOwomIzQzOwl1MzIgdnNbNF07CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgJmd0OyBBUlJBWV9TSVpFKHZzKSkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSAmbHQ7IG51bV9yZWdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdTMyIHUgPSB2c1tpXTsKJiM0MzsKJiM0MzsJCXUgJmFtcDs9IH5tYXNrc1tpXTsKJiM0MzsJCWlmICh1ICE9IHZzW2ldKQomIzQzOwkJCWNoYW5nZWQgPSB0cnVlOwomIzQzOwomIzQzOwkJdnNbaV0gPSB1OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghY2hhbmdlZCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZTk1NjA2NWViOTBlZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmgKQEAgLTAsMCAmIzQzOzEsODggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmcKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9ZVF9TTUlfSAomIzQzOyNkZWZpbmUgX1lUX1NNSV9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmRwYXJ0LmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IHl0OTIxeF9wcml2OwomIzQzOwomIzQzO2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7CiYjNDM7aW50IHl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApOwomIzQzO2ludCB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssCiYjNDM7CQkJICAgdTMyIHZhbCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIGJvb2wgc2V0KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAhc2V0ID8gMCA6IG1hc2spOwomIzQzO30KJiM0MzsKJiM0MzsvKiBTb21lIG11bHRpLXdvcmQgcmVnaXN0ZXJzLCBsaWtlIFZMQU5uX0NUUkwsIHNob3VsZCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlCiYjNDM7ICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJiMzOTt0IGJlY29tZQomIzQzOyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi4KJiM0MzsgKgomIzQzOyAqIEhlcmUgd2UgcmVxdWlyZSBmdWxsIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb3ZlciB0aGVzZSByZWdpc3RlcnMgdG8KJiM0MzsgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuCiYjNDM7ICovCiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpCiYjNDM7ewomIzQzOwkqbG8gJmFtcDs9IH5sb3dlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqaGkgJmFtcDs9IH51cHBlcl8zMl9iaXRzKG1hc2spOwomIzQzOwkqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpOwomIzQzOwkqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscywKJiM0MzsJCSAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsCiYjNDM7CQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpOwomIzQzO2ludCB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MztpbnQgeXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludAomIzQzO3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsCiYjNDM7CQkJIGNvbnN0IHUzMiAqdmFscykKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhwcml2LCByZWcsIG1hc2tzLCAyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQKJiM0Mzt5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpCiYjNDM7ewomIzQzOwlyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQ4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBZVDkyMTUgTEVEIERyaXZlcioqCgpPa2F5LCBzbyB0aGVyZSYjMzk7cyBhIHBhdGNoIGludHJvZHVjaW5nIExFRCBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBkcml2ZXIuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2AgYW5kIHJlbGF0ZWQgZmlsZXMsIGFuZCBpdCBzZWVtcyB0byBpbnRyb2R1Y2UgYENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTYCBhbmQgbW92ZSB0aGUgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgYSBEU0EgKERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUpIGV0aGVybmV0IHN3aXRjaCBjaGlwLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHksIGVzcGVjaWFsbHkgaW4gYSB2aXJ0dWFsaXplZCBvciBzaW11bGF0ZWQgZW52aXJvbm1lbnQuIERTQSBkcml2ZXJzLCBieSB0aGVpciBuYXR1cmUsIGdlbmVyYWxseSByZWx5IG9uIHNwZWNpZmljIGhhcmR3YXJlIOKAkyB0aGUgc3dpdGNoIGNoaXAgaXRzZWxmIGNvbm5lY3RlZCB2aWEgTURJTywgU1BJLCBvciBhIHNpbWlsYXIgaW50ZXJmYWNlLgoKVW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgb2JzY3VyZSBzb2Z0d2FyZSBlbXVsYXRvciBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgWVQ5MjE1IGNoaXAgKHdoaWNoIGlzIGhpZ2hseSBpbXByb2JhYmxlKSwgdGhlIGRyaXZlciYjMzk7cyBgcHJvYmVgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIGZhaWwgdG8gZmluZCB0aGUgcmVxdWlyZWQgaGFyZHdhcmUuIEl0JiMzOTtsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgb24gYSBidXMgdGhhdCBzaW1wbHkgd29uJiMzOTt0IGV4aXN0IGluIGEgdmlydHVhbCBtYWNoaW5lIG9yIG1vc3QgdGVzdGluZyBlbnZpcm9ubWVudHMuIEV2ZW4gaWYgd2Ugc29tZWhvdyBmb3JjZSB0aGUgZHJpdmVyIHRvIGxvYWQsIHBlcmhhcHMgYnkgYWRkaW5nIGEgZGV2aWNlIHRyZWUgbm9kZSwgaXQmIzM5O2xsIGF0dGVtcHQgdG8gcmVhZCBmcm9tIHRoZSBNRElPIG9yIFNQSSBidXMsIGFuZCB0aG9zZSByZWFkcyB3aWxsIGZhaWwgb3IgdGltZW91dCwgdWx0aW1hdGVseSBjYXVzaW5nIHRoZSBwcm9iZSB0byBmYWlsLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIHNvbWVob3cgKmZ1enoqIHRoaXMgY29kZT8gQ291bGQgd2UgcGVyaGFwcyBtb2NrIGFuIE1ESU8gYnVzIHRvIHNpbXVsYXRlIGNvbW11bmljYXRpb24/IFRoZSBpc3N1ZSBpcyB0aGF0IHN0YW5kYXJkIGZ1enppbmcgdG9vbHMsIGxpa2Ugc3l6a2FsbGVyLCBnZW5lcmFsbHkgZG9uJiMzOTt0IG9mZmVyIGdlbmVyaWMgTURJTyBvciBTUEkgbW9ja3MgdGhhdCB3b3VsZCBhbGxvdyB1cyB0byBwcm9iZSBhbiBhcmJpdHJhcnkgRFNBIHN3aXRjaCB3aXRob3V0IGV4cGxpY2l0IHN1cHBvcnQuIEhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMgdGhhdCBsYWNrIHByb3BlciBlbXVsYXRpb24gY2FwYWJpbGl0aWVzIGFyZSB1c3VhbGx5IGNvbnNpZGVyZWQgdW5yZWFjaGFibGUgYW5kIHRoZXJlZm9yZSBub3Qgd29ydGggZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgd2hldGhlciBgeXQ5MjF4YCBpcyBldmVuIHJlYWNoYWJsZSBhdCBhbGwuIEkgd2lsbCBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGFueSBtZW50aW9ucyBvZiBgeXQ5MjF4YCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaXRzIHBvdGVudGlhbCByZWFjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI1OTAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC0zLS0tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCNcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuLS1cbk1BSU5UQUlORVJTPTE4MjMxPVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoxODIzMjpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXG5NQUlOVEFJTkVSUy0xODIzMy1GOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbk1BSU5UQUlORVJTOjE4MjM0OkY6XHRuZXQvZHNhL3RhZ195dDkyMXguY1xuTUFJTlRBSU5FUlMtMTgyMzUtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZToyOm9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjM6eXQ5MjF4LW9ianMgOj0gY2hpcC5vXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjQ6eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICYjNDM7PSBsZWRzLm9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NTp5dDkyMXgtb2JqcyAmIzQzOz0gc21pLm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyOnN0cnVjdCB5dDkyMXhfbWliX2Rlc2Mge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMtXHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQxOi8qIE11c3QgYWdyZWUgd2l0aCB5dDkyMXhfbWliXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mi0gKlxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2LSAqL1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgeXQ5MjF4X21pYl9kZXNjc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgtXHRNSUJfREVTQygxLCBZVDkyMVhfTUlCX0RBVEFfUlhfQlJPQURDQVNULCBOVUxMKSxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk5OnN0cnVjdCB5dDkyMXhfaW5mbyB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDAtXHRjb25zdCBjaGFyICpuYW1lO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNi1cdHUxNiBpbnRlcm5hbF9tYXNrO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA3Olx0LyogVE9ETzogc2VlIGNvbW1lbnRzIGluIHl0OTIxeF9kc2FfcGh5bGlua19nZXRfY2FwcygpICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDgtXHR1MTYgZXh0ZXJuYWxfbWFzaztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTY6c3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNy1cdHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xNjQtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxNjU6c3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xNjYtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE4MS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjE4MjojZGVmaW5lIHRvX3l0OTIxeF9wcml2KF9kcykgY29udGFpbmVyX29mX2NvbnN0KF9kcywgc3RydWN0IHl0OTIxeF9wcml2LCBkcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE4My0jZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVx1MDAzZWRzLmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xOTA9c3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTQtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTU6c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTYte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTk3Olx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xOTgtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM2OnN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3dyaXRlKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzcte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM4Olx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gbWRpby1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjcxLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgeXQ5MjF4X3JlZ19vcHNfbWRpbyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3MzpcdC5yZWFkID0geXQ5MjF4X3JlZ19tZGlvX3JlYWQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzQ6XHQud3JpdGUgPSB5dDkyMXhfcmVnX21kaW9fd3JpdGUsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzUtfTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzgtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzk6c3RhdGljIGludCB5dDkyMXhfaW50aWZfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yODAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4Mi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI4MzpcdHJldHVybiB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4NC1cdFx0XHQgICAgICAgXHUwMDI2dmFsKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0yODc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjg4Onl0OTIxeF9pbnRpZl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWcsIHUxNiAqdmFscClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI4OS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjk1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjk2Olx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yOTctXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwMy1cdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1JFQUQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDQ6XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwNS1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDYtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDc6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9JTlRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzA4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMTE6XHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMTQ6XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0lOVF9NQlVTX0RJTiwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxNS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MzI2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMyNzp5dDkyMXhfaW50aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMyOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzMzOlx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzQtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0MC1cdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1dSSVRFO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQxOlx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfSU5UX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDItXHRpZiAocmVzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQzLVx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzQ0Olx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfRE9VVCwgdmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM0NS1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDYtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDc6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9JTlRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQ4LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTE6XHRyZXR1cm4geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTItfVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzUzLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzU0OnN0YXRpYyBpbnQgeXQ5MjF4X21idXNfaW50X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzU1LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1NjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Ny1cdHUxNiB2YWw7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzYzLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM2NDpcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM2NS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zNzI9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzczOnl0OTIxeF9tYnVzX2ludF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzc0LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM3NTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM3Ni1cdGludCByZXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgxLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM4MjpcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTM4OD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozODk6eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM5MC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDAxLVx0bWJ1cy1cdTAwM2Vwcml2ID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwMjpcdG1idXMtXHUwMDNlcmVhZCA9IHl0OTIxeF9tYnVzX2ludF9yZWFkO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDAzOlx0bWJ1cy1cdTAwM2V3cml0ZSA9IHl0OTIxeF9tYnVzX2ludF93cml0ZTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwNC1cdG1idXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQxNS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQxNjpzdGF0aWMgaW50IHl0OTIxeF9leHRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDE5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDIwOlx0cmV0dXJuIHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfRVhUX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJULFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDIxLVx0XHRcdCAgICAgICBcdTAwMjZ2YWwpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyND1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjU6eXQ5MjF4X2V4dGlmX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MzItXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MzM6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQzNC1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQwLVx0ICAgICAgIFlUOTIxWF9NQlVTX0NUUkxfVFlQRV9DMjIgfCBZVDkyMVhfTUJVU19DVFJMX1JFQUQ7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDE6XHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9FWFRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0Mi1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDMtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDQ6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ1LVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDg6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0OS1cdGlmIChyZXMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTAtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTE6XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RJTiwgXHUwMDI2dmFsKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mi1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDYzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2NDp5dDkyMXhfZXh0aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY5LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcwOlx0cmVzID0geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzEtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3Ny1cdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1RZUEVfQzIyIHwgWVQ5MjFYX01CVVNfQ1RSTF9XUklURTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3ODpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0NUUkwsIG1hc2ssIGN0cmwpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc5LVx0aWYgKHJlcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4MC1cdFx0cmV0dXJuIHJlcztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ4MTpcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RPVVQsIHZhbCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODItXHRpZiAocmVzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgzLVx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg0Olx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ4NS1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg4Olx0cmV0dXJuIHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg5LX1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5MC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ5MTpzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2V4dF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Mi17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTM6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTQtXHR1MTYgdmFsO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Ny1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTg6XHRyZXMgPSB5dDkyMXhfZXh0aWZfcmVhZChwcml2LCBwb3J0LCByZWcsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTktXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTA2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUwNzp5dDkyMXhfbWJ1c19leHRfd3JpdGUoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUwOC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MDk6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTAtXHRpbnQgcmVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxMi1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MTM6XHRyZXMgPSB5dDkyMXhfZXh0aWZfd3JpdGUocHJpdiwgcG9ydCwgcmVnLCBkYXRhKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxNC1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz01MTk9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTIwOnl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MjEte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzMy1cdC8qIFRPRE86IGM0NT8gKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjUzNDpcdG1idXMtXHUwMDNlcmVhZCA9IHl0OTIxeF9tYnVzX2V4dF9yZWFkO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM1Olx0bWJ1cy1cdTAwM2V3cml0ZSA9IHl0OTIxeF9tYnVzX2V4dF93cml0ZTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzNi1cdG1idXMtXHUwMDNlcGFyZW50ID0gZGV2O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0Ny0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NDg6c3RhdGljIGludCB5dDkyMXhfcmVhZF9taWIoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0OS17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTA6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1MS1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1MjpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTMtXHRpbnQgcmVzID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1NTpcdC8qIFJlYWRpbmcgb2YgeXQ5MjF4X3BvcnQ6Om1pYiBpcyBub3QgcHJvdGVjdGVkIGJ5IGEgbG9jayBhbmQgaXQmIzM5O3MgdmFpblxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTU2LVx0ICogdG8ga2VlcCBpdHMgY29uc2lzdGVuY3ksIHNpbmNlIHdlIGhhdmUgdG8gcmVhZCByZWdpc3RlcnMgb25lIGJ5IG9uZVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2Mi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU2MzpcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTY0Olx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2NS1cdFx0dTMyIHJlZyA9IFlUOTIxWF9NSUJuX0RBVEEwKHBvcnQpICYjNDM7IGRlc2MtXHUwMDNlb2Zmc2V0O1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2OS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU3MDpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dmFsMCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NzEtXHRcdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTgyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTgzOlx0XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgJiM0MzsgNCwgXHUwMDI2dmFsMSk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01ODQtXHRcdFx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MDc6c3RhdGljIHZvaWQgeXQ5MjF4X3BvbGxfbWliKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwOC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MDk6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gY29udGFpbmVyX29mX2NvbnN0KHdvcmssIHN0cnVjdCB5dDkyMXhfcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMC1cdFx0XHRcdFx0XHQgICAgbWliX3JlYWQud29yayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTE6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSAodm9pZCAqKShwcCAtIHBwLVx1MDAzZWluZGV4KSAtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MTI6XHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMy1cdHVuc2lnbmVkIGxvbmcgZGVsYXkgPSBZVDkyMVhfU1RBVFNfSU5URVJWQUxfSklGRklFUztcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTctXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjE4Olx0cmVzID0geXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjE5LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTYyNj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjI3Onl0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYyOC1cdFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjMyLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjMzOlx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2MzQ6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjM1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTY0MT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQyOnl0OTIxeF9kc2FfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDMte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ0Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ1Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDY6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ3LVx0c2l6ZV90IGo7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjQ5LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1MDpcdHl0OTIxeF9yZWFkX21pYihwcml2LCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1MS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NTMtXHRqID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1NDpcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjU1Olx0XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY1Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NjQtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NjU6c3RhdGljIGludCB5dDkyMXhfZHNhX2dldF9zc2V0X2NvdW50KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCBzc2V0KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjY2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NzI6XHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY3MzpcdFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NzQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjgyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODM6eXQ5MjF4X2RzYV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg0LVx0XHRcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg1LXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4NjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4NzpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg4Olx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4OS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY5MC1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2OTE6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02OTItXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzE4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MTk6eXQ5MjF4X2RzYV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMC1cdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9ldGhfY3RybF9zdGF0cyAqY3RybF9zdGF0cylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMS17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjI6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjM6XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyNDpcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcdTAwMjZwcC1cdTAwM2VtaWI7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjUtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjYtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzI3Olx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzI4LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTczNC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjczNTpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzM2LVx0eyAwLCA2NCB9LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTc0Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzQ3Onl0OTIxeF9kc2FfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc0OC1cdFx0XHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzUwLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MTpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MjpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUzOlx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1NC1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1NS1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTY6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTctXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTgtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTk6XHQqcmFuZ2VzID0geXQ5MjF4X3Jtb25fcmFuZ2VzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzYwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTc4Mz1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg0Onl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc4NS1cdFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03ODYte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg3Olx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg4Olx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbcG9ydF07XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODk6XHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXHUwMDI2cHAtXHUwMDNlbWliO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzkwLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTgxOT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODIwOnl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjEtXHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2Vfc3RhdHMgKnBhdXNlX3N0YXRzKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODIyLXtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyMzpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyNDpcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI1Olx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFx1MDAyNnBwLVx1MDAzZW1pYjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyNy1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Mjg6XHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjktXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODM1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgzNjp5dDkyMXhfc2V0X2VlZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICplKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODM3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NDktXHRpZiAoISFuZXdfbWFzayAhPSAhIXByaXYtXHUwMDNlZWVlX3BvcnRzX21hc2spIHtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg1MDpcdFx0cmVzID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfUE9OX1NUUkFQX0ZVTkMsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NTEtXHRcdFx0XHRcdCAgICAgWVQ5MjFYX1BPTl9TVFJBUF9FRUUsICEhbmV3X21hc2spO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1My1cdFx0XHRyZXR1cm4gcmVzO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODU0Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfVkFMLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODU1LVx0XHRcdFx0XHQgICAgIFlUOTIxWF9QT05fU1RSQVBfRUVFLCAhIW5ld19tYXNrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjItXHQvKiBFbmFibGUgLyBkaXNhYmxlIHBvcnQgRUVFICovXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4NjM6XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9FRUVfQ1RSTCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2NC1cdFx0XHRcdCAgICAgWVQ5MjFYX0VFRV9DVFJMX0VObihwb3J0KSwgZW5hYmxlKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjYtXHRcdHJldHVybiByZXM7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Njc6XHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9FRUVuX1ZBTChwb3J0KSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2OC1cdFx0XHRcdCAgICAgWVQ5MjFYX0VFRV9WQUxfREFUQSwgZW5hYmxlKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04NzU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODc2Onl0OTIxeF9kc2Ffc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg3Ny17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Nzg6XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NzktXHRpbnQgcmVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4MS1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4ODI6XHRyZXMgPSB5dDkyMXhfc2V0X2VlZShwcml2LCBwb3J0LCBlKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4My1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4ODg6c3RhdGljIGludCB5dDkyMXhfbXR1X2ZldGNoKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTg5NT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4OTY6eXQ5MjF4X2RzYV9wb3J0X2NoYW5nZV9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04OTcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkwMjpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkwMy1cdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTExLVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkxMjpcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX01BQ25fRlJBTUUocG9ydCksXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTMtXHRcdFx0XHQgICAgIFlUOTIxWF9NQUNfRlJBTUVfU0laRV9NLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxOS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkyMDpzdGF0aWMgaW50IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MjEte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTk1Mz1zdGF0aWMgdTY0IHRva2VuMmJ1cnN0KHUzMiB0b2tlbiwgaW50IHVuaXQsIGludCBDKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk1Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk1ODpzdHJ1Y3QgeXQ5MjF4X21hcmtlciB7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NTktXHR1MzIgY2lyO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTk2OT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5NzA6eXQ5MjF4X21hcmtlcl90Zm0oc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3MS1cdFx0ICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBzbG90X25zLCB1MzIgY2lyX21heCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MjpcdFx0ICB1MzIgY2JzX21heCwgaW50IHVuaXRfbWF4LCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTczLVx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzctXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5Nzg6XHRzdHJ1Y3QgeXQ5MjF4X21hcmtlciBtO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTc5LVx0dTY0IGJ1cnN0X2VzdDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OTktXHRlbHNlXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDAwOlx0XHRidXJzdF9zdWcgJiM0Mzs9IEVUSF9ITEVOICYjNDM7IHl0OTIxeF9tdHVfZmV0Y2gocHJpdiwgcG9ydCkgJiM0MztcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwMDEtXHRcdFx0ICAgICBFVEhfRkNTX0xFTjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDU5PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNjA6eXQ5MjF4X21hcmtlcl90Zm1fcG9saWNlKHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDYxLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDYyOlx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDYzLVx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA3My1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNzQ6XHRyZXR1cm4geXQ5MjF4X21hcmtlcl90Zm0obWFya2VyLCByYXRlLCBidXJzdCwgZmxhZ3MsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDc1LVx0XHRcdFx0IHByaXYtXHUwMDNlbWV0ZXJfc2xvdF9ucywgWVQ5MjFYX01FVEVSX0NJUl9NQVgsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA4MD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgxOnl0OTIxeF9tYXJrZXJfdGZtX3NoYXBlKHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIsIHU2NCByYXRlLCB1NjQgYnVyc3QsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgyOlx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwODMtXHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4NC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDg1Olx0cmV0dXJuIHl0OTIxeF9tYXJrZXJfdGZtKG1hcmtlciwgcmF0ZSwgYnVyc3QsIGZsYWdzLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA4Ni1cdFx0XHRcdCBwcml2LVx1MDAzZXBvcnRfc2hhcGVfc2xvdF9ucywgWVQ5MjFYX1NIQVBFX0NJUl9NQVgsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA5MT1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDkyOnl0OTIxeF9wb2xpY2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IGZsb3dfYWN0aW9uX3BvbGljZSAqcG9saWNlLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA5My1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbiAqYWN0aW9uLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExMjc9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTEyODp5dDkyMXhfbWV0ZXJfY29uZmlnKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTEyOTpcdFx0ICAgIGNvbnN0IHN0cnVjdCB5dDkyMXhfbWFya2VyICptYXJrZXIpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTMwLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTQ3LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE0ODpcdHJldHVybiB5dDkyMXhfcmVnOTZfd3JpdGUocHJpdiwgWVQ5MjFYX01FVEVSbl9DVFJMKGlkKSwgY3RybHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE0OS19XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MTpzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTIte1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MzpcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTQtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1Ny1cdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTU4Olx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fTUVURVIocG9ydCksIDApO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE1OS1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTY2PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNjc6eXQ5MjF4X2RzYV9wb3J0X3BvbGljZXJfYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTY4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb25fcG9saWNlICpwb2xpY2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3MC17XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTcxOlx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE3MjpcdHN0cnVjdCB5dDkyMXhfbWFya2VyIG1hcmtlcjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzMtXHR1MzIgY3RybDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE3NjpcdHJlcyA9IHl0OTIxeF9wb2xpY2VfdmFsaWRhdGUocG9saWNlLCBOVUxMLCBOVUxMLCBleHRhY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3Ny1cdGlmIChyZXMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3OS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODA6XHRyZXMgPSB5dDkyMXhfbWFya2VyX3RmbV9wb2xpY2UoXHUwMDI2bWFya2VyLCBwb2xpY2UsIDAsIHByaXYsIHBvcnQsIGV4dGFjayk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTgxLVx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTg0LVx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExODU6XHRyZXMgPSB5dDkyMXhfbWV0ZXJfY29uZmlnKHByaXYsIHBvcnQgJiM0MzsgWVQ5MjFYX01FVEVSX05VTSwgXHUwMDI2bWFya2VyKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODYtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExODktXHRjdHJsID0gWVQ5MjFYX1BPUlRfTUVURVJfSUQocG9ydCkgfCBZVDkyMVhfUE9SVF9NRVRFUl9FTjtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExOTA6XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9QT1JUbl9NRVRFUihwb3J0KSwgY3RybCk7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTkxLWVuZDpcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDAzNgoJCQkJCQkJb3V0cHV0OiAwCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzc0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIE1vdG9yY29tbSBMRUQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcywgd2hpY2ggYWRkcyBMRUQgc3VwcG9ydCB0byB0aGUgTW90b3Jjb21tIERTQSBkcml2ZXIgKGBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY2ApLCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB3b3J0aCBmdXp6aW5nLiBJdCBhcHBlYXJzIHRvIGJlIGEgc3RyYWlnaHQtZm9yd2FyZCBkcml2ZXIgZmVhdHVyZSwgcmVnaXN0ZXJpbmcgTEVEIGNsYXNzIGRldmljZXMgYW5kIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGJsaW5raW5nIGFuZCBicmlnaHRuZXNzLiBGdW5jdGlvbmFsbHksIGFic29sdXRlbHkgeWVzLCB0aGlzIGlzIGEgY29kZSBwYXRoIHRoYXQgbmVlZHMgc2NydXRpbnkuIEJ1dCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgaXMgaXQgKnJlYWNoYWJsZSo/CgpUaGlzIGlzIGEgRFNBIHN3aXRjaCBkcml2ZXIsIHNvIGl0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHN3aXRjaCBoYXJkd2FyZS4gIFJlYWxpc3RpY2FsbHksIHRoaXMgbWVhbnMgYW4gTURJTyBidXMgaXMgaW52b2x2ZWQsIGFuZCBEU0EgZHJpdmVycyBhcmUgdHlwaWNhbGx5IG5vdCBlYXNpbHkgZW11bGF0ZWQgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoZSBoYXJkd2FyZS4gIEkgbmVlZCB0byB0aGluayBhYm91dCBzeXprYWxsZXImIzM5O3MgY2FwYWJpbGl0aWVzIGhlcmUuICBDYW4gaXQgaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UgbGlrZSB0aGlzPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHN5emthbGxlciAqY2FuKiBmdXp6IE1ESU8gZGV2aWNlcywgZXNwZWNpYWxseSBpZiB0aGVyZSYjMzk7cyBhIG5ldGxpbmsgb3Igc3lzZnMgaW50ZXJmYWNlIGludm9sdmVkLiBBbmQgYmluZ28sIExFRCBjbGFzcyBkZXZpY2VzIGFyZSBleHBvc2VkIHZpYSBgL3N5cy9jbGFzcy9sZWRzL2AhIFNvLCBpZiB0aGUgZHJpdmVyIHByb2JlcywgdGhlIExFRHMgYXJlIHJlZ2lzdGVyZWQsIGFuZCBjb250cm9sIGNhbiBiZSBkb25lIHZpYSBzeXNmcy4gVGhpcyBpcyB0aGUga2V5LgoKU28sIGNhbiB0aGUgZHJpdmVyICpwcm9iZSo/IEl0JiMzOTtzIGEgYHl0OTIxeGAgZGV2aWNlLiBJIG5lZWQgdG8gbG9vayBhdCB0aGUgcHJvYmUgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jYCBvciwgdGhlIG9yaWdpbmFsIGZpbGUsIGB5dDkyMXguY2AuIEl0JiMzOTtzIE1ESU8gb3IgU1BJIGJhc2VkLiBJZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgcHJvYmUgZmFpbHMuIE5vIHByb2JlLCBubyBMRURzLiBUaGVyZWZvcmUsIGl0JiMzOTtzIG5vdCBwcmVzZW50IGZvciBzeXprYWxsZXIgdG8gdXNlLgoKVGhlIHJlYWwgY3J1eCBpczogQ2FuIHN5emthbGxlciBpbnN0YW50aWF0ZSB0aGlzIGRldmljZT8gIEkmIzM5O20gdGhpbmtpbmcgb2YgYHZoY2lgLCBgbmV0ZGV2c2ltYCwgYW5kIHNpbWlsYXIsIGJ1dCBEU0Egc3dpdGNoZXMgYXJlIHRyaWNreS4gSSBkb24mIzM5O3QgdGhpbmsgaXQgY2FuIGp1c3QgZWFzaWx5IGluc3RhbnRpYXRlIGFyYml0cmFyeSBNRElPIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgdmlydHVhbCBNRElPIGJ1cyB3aGVyZSB3ZSBjYW4gaW5qZWN0IG5vZGVzLCBvciBtYXliZSB1c2luZyBgZHNhX2xvb3BgLiBJIHZhZ3VlbHkgcmVjYWxsIHNvbWUgbWVudGlvbiBvZiBkZXZpY2UgdHJlZSBpbmplY3Rpb24gc3VwcG9ydCBpbiBzeXprYWxsZXIsIGJ1dCBJIGRvdWJ0IGl0IGlzIHN1cHBvcnRlZC4gTm8sIGBkc2FfbG9vcGAgaXMgYSBzcGVjaWZpYyBkcml2ZXIsIG5vdCBhIGdlbmVyYWwgdmlydHVhbGl6ZXIuCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBraWNrZXIgZnJvbSB0aGUgaW5zdHJ1Y3Rpb25zOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0JiMzOTtzIHdoYXQgSSBhbSB3b3JyaWVkIGFib3V0LgoKSXMgdGhpcyBgeXQ5MjF4YCByZWFjaGFibGUgaW4gUUVNVT8gQW5kLCB0aGUgdXN1YWwgYW5zd2VyIGlzIG5vLCByaWdodD8gU3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGNoaXBzIG9uIE1ESU8vU1BJIGJ1c2VzIGFyZSBnZW5lcmFsbHkgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVW5sZXNzIHNvbWVvbmUmIzM5O3Mgc3BlY2lmaWNhbGx5IGFkZGVkIGVtdWxhdGlvbiBmb3IgYHl0OTIxeGAsIG9yIHRoZXJlJiMzOTtzIHNvbWUgY2xldmVyIHNvZnR3YXJlIGZhbGxiYWNrLCBpdCYjMzk7cyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gY2hlY2suICBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgYHl0OTIxeGAgcHJvYmUgZnVuY3Rpb24gYW5kIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgdmlydHVhbCBNRElPIG9yIHNvZnR3YXJlLWVtdWxhdGVkIHByb2JpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIEkgZG9uJiMzOTt0IHdhc3RlIHRpbWUgbG9va2luZyBmb3IgYSBidWcgdGhhdCBkb2VzbiYjMzk7dCBleGlzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxMjcKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTW90b3Jjb21tIERTQSBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGlzIE1vdG9yY29tbSBEU0EgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGltcGxlbWVudGF0aW9uIHdpdGhpbiBgY2hpcC5jYC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIHdoYXQgSSBrbm93IGFib3V0IHRoZXNlIGRyaXZlcnMsIGlzIHRvIGxvb2sgZm9yIGEgc3BlY2lmaWMgZnVuY3Rpb24gb3Igc3RydWN0dXJlIHJlbGF0ZWQgdG8gbW9kdWxlcywgbGlrZWx5IHRoZSBkcml2ZXImIzM5O3MgY29yZSBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGxvZ2ljLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiBgbW9kdWxlX2Ag4oCTIHRoYXQgcHJlZml4IGlzIGEgcHJldHR5IHN0YW5kYXJkIGluZGljYXRvciBvZiBtb2R1bGUtcmVsYXRlZCBjb2RlIHdpdGhpbiB0aGUga2VybmVsLiBUaGlzIHVzdWFsbHkgZW5jb21wYXNzZXMgZnVuY3Rpb25zIGxpa2UgbW9kdWxlIGxvYWRpbmcvdW5sb2FkaW5nLCBwb3RlbnRpYWxseSBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nLCBvciByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGUmIzM5O3Mgc3RydWN0dXJlIGl0c2VsZi4gSXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZHJpdmVyIGlzIG9yZ2FuaXplZCBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfLipkcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzc4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU1MDMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNRElPIERyaXZlciBhbmQgSXRzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyB0aGlzIGlzIGFuIE1ESU8gZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMgZGlyZWN0bHk/IFByb2JhYmx5IG5vdCwgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgc3BlY2lhbCBNRElPLXNwZWNpZmljIGZ1enplciBvciBzb21lIHRyaWNrIHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheSBpbmplY3Rpb24uIFRob3VnaCwgd2FpdCwgaXNuJiMzOTt0IHRoZXJlICpzb21lKiBsaW1pdGVkIG5ldGxpbmsgb3Igc3lzZnMgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIGRldmljZXMgaW4gc3l6a2FsbGVyPyBObywgdHlwaWNhbGx5IE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLgoKSG1tLCBjYW4gSSB0cmlnZ2VyIHRoZSBMRUQgY29kZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBkZXZpY2UgYmVpbmcgcHJlc2VudD8gTm8sIGJlY2F1c2UgYHl0OTIxeF9sZWRzX3NldHVwYCBpcyBjbGVhcmx5IGNhbGxlZCBmcm9tIGB5dDkyMXhfZHNhX3NldHVwYCwgd2hpY2ggaXMgb25seSB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBEU0Egc3dpdGNoIHNldHVwLiBUaGF0IG1lYW5zLCBpZiB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcm9iZWQsIHRoYXQgY29kZSYjMzk7cyB1bnJlYWNoYWJsZS4KCk9rYXksIGlzIHRoZXJlIGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IHRoYXQgbWlnaHQgaGVscD8gTm90aGluZyBpbiB0aGUga2VybmVsIG9yIFFFTVUsIGFzIGZhciBhcyBJIGtub3cuIFNvLCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgdGhpcyBjb2RlIHBhdGggaXMgcHJldHR5IG11Y2ggZGVhZC4KCldhaXQsIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbW9yZSB0aW1lLCBtYXliZSB0aGVyZSYjMzk7cyBzb21lIG9ic2N1cmUgd2F5IHRvIGhpdCBNRElPIGRyaXZlcnMuLi4gQWgsIHRoZSBgZHNhX2xvb3BgIGRyaXZlciwgYnV0IHRoYXQmIzM5O3MgZm9yIGEgZml4ZWQgZHVtbXkgc3dpdGNoLiBPa2F5LCB3aGF0IGFib3V0IGBtZGlvLW1vY2t1cGAsIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCBleGlzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby4qbW9ja3VwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwOTYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbiBmcm9tIFVzZXJzcGFjZTogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBNRElPIGRldmljZXMgYW5kIGhvdyB3ZSBtaWdodCBpbnRlcmFjdCB3aXRoIHRoZWlyIGluc3RhbnRpYXRpb24gZnJvbSB1c2Vyc3BhY2UuIFRoZSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgaWYgd2UgY2FuIGRpcmVjdGx5IG1hbmlwdWxhdGUgYC9zeXMvYnVzL21kaW9fYnVzL2RldmljZXMvLi4uYCwgYnV0IEkmIzM5O20gcHJldHR5IHN1cmUgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBGcm9tIG15IGV4cGVyaWVuY2UsIE1ESU8gZGV2aWNlcyBhcmUgdHlwaWNhbGx5IGJyb3VnaHQgb25saW5lIGJ5IHRoZSBNRElPIGJ1cyBjb250cm9sbGVyIGl0c2VsZiwgZWl0aGVyIHRocm91Z2ggaGFyZHdhcmUgcHJvYmluZywgcmVhZGluZyB0aG9zZSBjcnVjaWFsIFBIWSBJRCByZWdpc3RlcnMsIG9yIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLgoKVGhlIGludGVyZXN0aW5nIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgTURJTyBidXMsIHNvbWV0aGluZyBsaWtlIGBmaXhlZC1tZGlvYCBvciBtYXliZSBldmVuIHRoZSBNRElPIGJ1cyB3aXRoaW4gYGRzYV9sb29wYCwgaXMgdGhlcmUgYSB3YXkgdG8gdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHByb2JpbmcgYSB2aXJ0dWFsIGRldmljZT8gQ291bGQgd2UgcG90ZW50aWFsbHkgbW9jayB0aGUgcmVhZCBvZiB0aGUgUEhZIElEIHJlZ2lzdGVyPyBJZiB3ZSBjb3VsZCBzaW11bGF0ZSB0aGF0IHJlYWQsIHdvdWxkIGl0IHRyaWNrIHRoZSBzeXN0ZW0gdG8gbG9hZCBkcml2ZXJzPwoKTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGRyaXZlciBtYXRjaGluZyBzY2hlbWUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgYHl0OTIxeF9tZGlvX2RyaXZlcmAgZnVuY3Rpb25zLCB0byBzZWUgaWYgbW9ja2luZyB0aGUgUEhZIElEIG1pZ2h0IHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3l0OTIxeF9tZGlvX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3NjY9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY4OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2OS1cdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzctXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzc4Om1kaW9fbW9kdWxlX2RyaXZlcih5dDkyMXhfbWRpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3NDAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSYjMzk7bSB0aGUgb25lIGhhdmluZyB0aGVzZSB0aG91Z2h0cyBhbmQgSSBhbSBhbiBleHBlcnQgaW4gbXkgZmllbGQuCgoqKk1hdGNoaW5nIENyaXRlcmlhIGFuZCBUYWJsZSBJZGVudGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbnRlcm5hbCBwcm9jZXNzIGlzIGNvbmZpcm1pbmcgYSBtYXRjaCBiYXNlZCBvbiB0aGUgYG9mX21hdGNoX3RhYmxlYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJJiMzOTttIHJlbHlpbmcgb24gdGhhdCBzcGVjaWZpYyB0YWJsZSwgdGhlIGB5dDkyMXhfb2ZfbWF0Y2hgLCB0byBkZXRlcm1pbmUgaWYgYSBtYXRjaCBpcyB2YWxpZC4gTXkgZm9jdXMgbm93IGlzIHB1cmVseSBvbiB0aGUgb3V0cHV0IG9mIGB5dDkyMXhfb2ZfbWF0Y2hgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfb2ZfbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzE0PXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjEtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzYyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2My1cdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7IH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2NS19O1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2NjpNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyMXhfb2ZfbWF0Y2gpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2Ny1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3Njg9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3My1cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzQ6XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzUtXHR9LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzI4NgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFlUOTIxNSBEcml2ZXImIzM5O3MgUHJvYmFibGUgQmVoYXZpb3IqKgoKT2theSwgc28gdGhlIGRyaXZlciBpbiBxdWVzdGlvbiBpZGVudGlmaWVzIGl0c2VsZiB2aWEgdGhlIGRldmljZSB0cmVlIGNvbXBhdGlibGUgc3RyaW5nICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7LiBSaWdodCBub3csIEkgY2FuJiMzOTt0IHNlZSB0aGlzIGRyaXZlciBnZXR0aW5nIGxvYWRlZCB3aXRoIHRoZSBzdGFuZGFyZCBTeXprYWxsZXIgc2V0dXAgYmVjYXVzZSBpdCBjYW4mIzM5O3QgaW5qZWN0IGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyB5ZXQuIFdoaWxlIHRoZXJlJiMzOTtzIHdvcmsgYmVpbmcgZG9uZSBvbiBEVCBvdmVybGF5cywgdGhhdCYjMzk7cyBub3QgYSBnby10byBzb2x1dGlvbiBmb3IgZXZlcnkgZHJpdmVyLiBTbywgaW5pdGlhbCBwcm9iaW5nIGlzIHVubGlrZWx5LgoKSG93ZXZlciwgbGV0JiMzOTtzIGFzc3VtZSwgZm9yIHRoZSBzYWtlIG9mIGFyZ3VtZW50LCB0aGF0IGl0ICpkb2VzKiBzb21laG93IG1hbmFnZSB0byBwcm9iZS4gSWYgdGhhdCBoYXBwZW5zLCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRlbHZlIGludG8gdGhlIGB5dDkyMXhfbWRpb19wcm9iZWAgb3IgYHl0OTIxeF9zZXR1cGAgZnVuY3Rpb25zLiBUaGlzIGlzIGJlY2F1c2UsIGV2ZW4gaWYgaXQmIzM5O3MgdGhlcmUsIHRoZSBkcml2ZXImIzM5O3MgZ29pbmcgdG8gYXR0ZW1wdCB0byB2ZXJpZnkgdGhlIGNoaXAgSUQgYnkgcmVhZGluZyByZWdpc3RlcnMgdGhyb3VnaCBNRElPLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IE1ESU8gaW50ZXJhY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBHb3R0YSBmb2xsb3cgdGhhdCBNRElPIGRhdGEgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X21kaW9fcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NjgyPXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxMy1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3MTQ6c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzE1LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2OTpcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3MC1cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTE2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGB5dDkyMXhfbWRpb19wcm9iZWAgYmFzZWQgb24gd2hhdCBJIGNhbiBzZWU6CgoqKkRpc3NlY3RpbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBgeXQ5MjF4X21kaW9fcHJvYmVgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgbGlrZWx5IGludm9sdmVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvciBzZXR1cCBvZiBzb21ldGhpbmcgcmVsYXRlZCB0byBNRElPIChNYW5hZ2VtZW50IERhdGEgSW5wdXQvT3V0cHV0KSBjb21tdW5pY2F0aW9uLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgeXQ5MjF4YCBkZXZpY2UuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IE1ESU8gaXMgdXN1YWxseSBob3cgdGhlIHN5c3RlbSB0YWxrcyB0byBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBvdGhlciBsb3ctbGV2ZWwgbmV0d29yayBpbnRlcmZhY2UgY29tcG9uZW50cy4gU28sIEkgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmUgcmVzcG9uc2libGUgZm9yIHRoaW5ncyBsaWtlOiBkZXRlY3RpbmcgdGhlIFBIWSwgY29uZmlndXJpbmcgaXRzIHJlZ2lzdGVycywgc2V0dGluZyB1cCB0aGUgbmVjZXNzYXJ5IGNsb2NrcyBvciBpbnRlcnJ1cHQgbGluZXMgZm9yIGNvbW11bmljYXRpb24sIGFuZCBmaW5hbGx5LCBnZXR0aW5nIHRoZSBkZXZpY2UgcmVhZHkgZm9yIGRhdGEgdHJhbnNmZXIuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0IGRvZXMgdGhvc2UgdGhpbmdzLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzE0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ3MTQ6XHRzdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjQ3MTU6XHR7XG40NzE2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjQ3MTc6XHRcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG40NzE4Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG40NzE5Olx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG40NzIwOlx0XG40NzIxOlx0XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG40NzIyOlx0XHRpZiAoIXByaXYpXG40NzIzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuNDcyNDpcdFxuNDcyNTpcdFx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuNDcyNjpcdFx0aWYgKCFtZGlvKVxuNDcyNzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjQ3Mjg6XHRcbjQ3Mjk6XHRcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG40NzMwOlx0XHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG40NzMxOlx0XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbjQ3MzI6XHRcbjQ3MzM6XHRcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NzM0Olx0XG40NzM1Olx0XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuNDczNjpcdFx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbjQ3Mzc6XHRcbjQ3Mzg6XHRcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlcG9ydHMpOyBpJiM0MzsmIzQzOykge1xuNDczOTpcdFx0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbjQ3NDA6XHRcbjQ3NDE6XHRcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuNDc0MjpcdFx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbjQ3NDM6XHRcdH1cbjQ3NDQ6XHRcbjQ3NDU6XHRcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbjQ3NDY6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjQ3NDc6XHRcdGRzLVx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcbjQ3NDg6XHRcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG40NzQ5Olx0XHRkcy1cdTAwM2Vwcml2ID0gcHJpdjtcbjQ3NTA6XHRcdGRzLVx1MDAzZW9wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcbjQ3NTE6XHRcdGRzLVx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xuNDc1MjpcdFx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XG40NzUzOlx0XHRkcy1cdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzO1xuNDc1NDpcdFx0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcbjQ3NTU6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTtcbjQ3NTY6XHRcbjQ3NTc6XHRcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG40NzU4Olx0XG40NzU5Olx0XHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG40NzYwOlx0fVxuNDc2MTpcdFxuNDc2MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTIxeF9vZl9tYXRjaFtdID0ge1xuNDc2MzpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMTVcJiMzNDsgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNzQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGVjb2RpbmcgVGhpcyBEU0EgU3dpdGNoIFJlZ2lzdHJhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgcHJvY2VzcyBiZWdpbnMgd2l0aCBhIGNhbGwgdG8gYGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSBmaXJzdCBzdGVwIGluIGdldHRpbmcgdGhpcyBzd2l0Y2ggaW50ZWdyYXRlZC4gIE5vdywgSSYjMzk7bSBleHBlY3RpbmcgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHRvIHRoZW4gY2FsbCB0aGUgc2V0dXAgZnVuY3Rpb24gc3BlY2lmaWMgdG8gdGhlIHN3aXRjaCBoYXJkd2FyZSwgd2hpY2gsIGluIHRoaXMgY2FzZSwgaXMgYHl0OTIxeF9kc2Ffc2V0dXBgLiAgSXQmIzM5O3MgbGlrZWx5IHRoYXQgYGRzLSZndDtvcHNgIGhvbGRzIHRoZSBmdW5jdGlvbiBwb2ludGVycywgc28gaXQmIzM5O3MgY2FsbGluZyAqdGhhdCogZnVuY3Rpb24sIHBhc3NlZCB0aHJvdWdoIHRoZSBgZHNgIHN0cnVjdHVyZS4gUmlnaHQsIGBkcy0mZ3Q7b3BzYCBpcyB0aGUga2V5LiAgTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB5dDkyMXhfZHNhX3NldHVwYCBhY3R1YWxseSAqZG9lcyouIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoYXQgZnVuY3Rpb24gdG8gc2VlIHRoZSBkZXRhaWxzIG9mIHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eXQ5MjF4X2RzYV9zZXR1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ0OTU9c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzNi1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1Mzc6c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1Mzgte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1OTg9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY2OC1cdC8qIGNoaXAgKi9cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ2Njk6XHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjcwLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjM0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgdGhlIENoaXAgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBoYXJkd2FyZSB2ZXJpZmljYXRpb24gaXMgb2NjdXJyaW5nIHdpdGhpbiB0aGUgc2V0dXAgcm91dGluZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gZWl0aGVyIGB5dDkyMXhfY2hpcF9zZXR1cGAgb3IgYHl0OTIxeF9kc2Ffc2V0dXBgLiBUaGVzZSBhcmUgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMsIGdpdmVuIHRoZWlyIHJvbGUgaW4gaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHNvbWV3aGVyZSBpbiBvbmUgb2YgdGhvc2UsIHdlJiMzOTtsbCBmaW5kIHRoZSBsb2dpYyB0aGF0JiMzOTtzIGRpcmVjdGx5IGludGVycm9nYXRpbmcgdGhlIHJlZ2lzdGVycyB0byBjb25maXJtIHRoZSBjaGlwJiMzOTtzIHByZXNlbmNlIGFuZCBwcm9wZXIgY29uZmlndXJhdGlvbi4gVGhpcyBmZWVscyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaW4gdHJhY2tpbmcgZG93biB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDQ5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NDk1Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG40NDk2Olx0e1xuNDQ5NzpcdFx0dTMyIGN0cmw7XG40NDk4Olx0XHRpbnQgcmVzO1xuNDQ5OTpcdFxuNDUwMDpcdFx0Y3RybCA9IFlUOTIxWF9GVU5DX01JQiB8IFlUOTIxWF9GVU5DX0FDTCB8IFlUOTIxWF9GVU5DX01FVEVSO1xuNDUwMTpcdFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMVhfRlVOQywgY3RybCk7XG40NTAyOlx0XHRpZiAocmVzKVxuNDUwMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDUwNDpcdFxuNDUwNTpcdFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXBfZHNhKHByaXYpO1xuNDUwNjpcdFx0aWYgKHJlcylcbjQ1MDc6XHRcdFx0cmV0dXJuIHJlcztcbjQ1MDg6XHRcbjQ1MDk6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX3RjKHByaXYpO1xuNDUxMDpcdFx0aWYgKHJlcylcbjQ1MTE6XHRcdFx0cmV0dXJuIHJlcztcbjQ1MTI6XHRcbjQ1MTM6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX2FjbChwcml2KTtcbjQ1MTQ6XHRcdGlmIChyZXMpXG40NTE1Olx0XHRcdHJldHVybiByZXM7XG40NTE2Olx0XG40NTE3Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0RDQilcbjQ1MTg6XHRcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX3Fvcyhwcml2KTtcbjQ1MTk6XHRcdGlmIChyZXMpXG40NTIwOlx0XHRcdHJldHVybiByZXM7XG40NTIxOlx0I2VuZGlmXG40NTIyOlx0XG40NTIzOlx0XHQvKiBDbGVhciBNSUIgKi9cbjQ1MjQ6XHRcdGN0cmwgPSBZVDkyMVhfTUlCX0NUUkxfQ0xFQU4gfCBZVDkyMVhfTUlCX0NUUkxfQUxMX1BPUlQ7XG40NTI1Olx0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9NSUJfQ1RSTCwgY3RybCk7XG40NTI2Olx0XHRpZiAocmVzKVxuNDUyNzpcdFx0XHRyZXR1cm4gcmVzO1xuNDUyODpcdFxuNDUyOTpcdFx0LyogTWlzY2VsbGFuZW91cyAqL1xuNDUzMDpcdFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMVhfU0VOU09SLCBZVDkyMVhfU0VOU09SX1RFTVApO1xuNDUzMTpcdFx0aWYgKHJlcylcbjQ1MzI6XHRcdFx0cmV0dXJuIHJlcztcbjQ1MzM6XHRcbjQ1MzQ6XHRcdHJldHVybiAwO1xuNDUzNTpcdH1cbjQ1MzY6XHRcbjQ1Mzc6XHRzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuNDUzODpcdHtcbjQ1Mzk6XHRcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbjQ1NDA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQ1NDE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXHUwMDNlb2Zfbm9kZTtcbjQ1NDI6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XG40NTQzOlx0XHRpbnQgcmVzO1xuNDU0NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYzNQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkRpZ2dpbmcgaW50byB0aGUgWVQ5MjF4IERyaXZlcioqCgpIbW0sIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgdGhlIGB5dDkyMXhfY2hpcF9zZXR1cGAgZnVuY3Rpb24gaXNuJiMzOTt0IHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHB1bGxpbmcgdGhlIGNoaXAgSUQuIFRoYXQmIzM5O3MgdW5leHBlY3RlZC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHRoaXMgd291bGQgYmUgd2hlcmUgaXQgbGl2ZWQuIE9rYXksIGxldCYjMzk7cyBiYWNrIHVwIGEgYml0IGFuZCB0YWtlIGEgbG9vayBhdCBgeXQ5MjF4X2RzYV9zZXR1cGAgaW5zdGVhZC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHJlbGV2YW50IGluaXRpYWxpemF0aW9uIGFuZCBpZGVudGlmaWNhdGlvbiBzdGVwcyBhY3R1YWxseSBvY2N1ci4gVGltZSB0byBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUsIGJlY2F1c2UgdGhlIGFyY2hpdGVjdHVyZSBzZWVtcyBzbGlnaHRseSB1bnVzdWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NTM3Olx0c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbjQ1Mzg6XHR7XG40NTM5Olx0XHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG40NTQwOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40NTQxOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG40NTQyOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuNDU0MzpcdFx0aW50IHJlcztcbjQ1NDQ6XHRcbjQ1NDU6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTQ2Olx0XHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbjQ1NDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbjQ1NDg6XHRcbjQ1NDk6XHRcdGlmIChyZXMpXG40NTUwOlx0XHRcdHJldHVybiByZXM7XG40NTUxOlx0XG40NTUyOlx0XHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuIE5vZGVzIGZvciBpbnRlcm5hbCBwb3J0cyBzaG91bGQgaGF2ZVxuNDU1MzpcdFx0ICogcHJvcGVyIHBoeS1oYW5kbGUgcG9pbnRpbmcgdG8gdGhlaXIgUEhZcy4gTm90IGVuYWJsaW5nIHRoZSBpbnRlcm5hbFxuNDU1NDpcdFx0ICogYnVzIGlzIHBvc3NpYmxlLCB0aG91Z2ggcHJldHR5IHdpcmVkLCBpZiBpbnRlcm5hbCBwb3J0cyBhcmUgbm90IHVzZWQuXG40NTU1Olx0XHQgKi9cbjQ1NTY6XHRcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuNDU1NzpcdFx0aWYgKGNoaWxkKSB7XG40NTU4Olx0XHRcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcbjQ1NTk6XHRcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuNDU2MDpcdFx0XHRpZiAocmVzKVxuNDU2MTpcdFx0XHRcdHJldHVybiByZXM7XG40NTYyOlx0XHR9XG40NTYzOlx0XG40NTY0Olx0XHQvKiBFeHRlcm5hbCBtZGlvIGJ1cyBpcyBvcHRpb25hbCAqL1xuNDU2NTpcdFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXCYjMzQ7bWRpby1leHRlcm5hbFwmIzM0Oyk7XG40NTY2Olx0XHRpZiAoY2hpbGQpIHtcbjQ1Njc6XHRcdFx0cmVzID0geXQ5MjF4X21idXNfZXh0X2luaXQocHJpdiwgY2hpbGQpO1xuNDU2ODpcdFx0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG40NTY5Olx0XHRcdGlmIChyZXMpXG40NTcwOlx0XHRcdFx0cmV0dXJuIHJlcztcbjQ1NzE6XHRcbjQ1NzI6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1VudGVzdGVkIGV4dGVybmFsIG1kaW8gYnVzXFxuXCYjMzQ7KTtcbjQ1NzM6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40NTc0Olx0XHR9XG40NTc1Olx0XG40NTc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuNDU3NzpcdFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXAocHJpdik7XG40NTc4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG40NTc5Olx0XG40NTgwOlx0XHRpZiAocmVzKVxuNDU4MTpcdFx0XHRyZXR1cm4gcmVzO1xuNDU4MjpcdFxuNDU4MzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxuNDU4NDpcdFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XG40NTg1Olx0XHRpZiAocmVzKVxuNDU4NjpcdFx0XHRkZXZfd2FybihkZXYsIFwmIzM0O0ZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcblwmIzM0OywgcmVzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2NTAKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ2hpcCBSZXNldCBGdW5jdGlvbioqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBpbml0aWF0aW5nIGEgcmVzZXQgd2l0aCBgeXQ5MjF4X2NoaXBfcmVzZXQocHJpdilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVzZXQg4oCTIGlzIGl0IGEgZnVsbCBwb3dlciBjeWNsZSwgYSBzb2Z0IHJlc2V0LCBhIHJlZ2lzdGVyIGNsZWFyLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0JiMzOTtzIHRoZSBgcHJpdmAgYXJndW1lbnQ/IEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGRlZmluaXRpb24gYW5kIHNlZSB3aGF0IGRhdGEgc3RydWN0dXJlIGl0IGhvbGRzIOKAkyB0aGF0JiMzOTtsbCBnaXZlIG1lIGNvbnRleHQgb24gd2hhdCBoYXJkd2FyZSByZXNvdXJjZXMgdGhpcyByZXNldCBtaWdodCBiZSBhZmZlY3RpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZ2lzdGVyIHdyaXRlcywgZGVsYXlzLCBpbnRlcnJ1cHQgZGlzYWJsZS9lbmFibGUgc2VxdWVuY2VzIOKAkyBhbnl0aGluZyB0aGF0IG1pZ2h0IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSByZXNldCYjMzk7cyBzY29wZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiBkZXZpY2UgZnVuY3Rpb25hbGl0eSBvciBkYXRhIGludGVncml0eS4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2VxdWVuY2luZywgdG9vOyB0aGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zIGNhbiBiZSBhcyBpbXBvcnRhbnQgYXMgdGhlIG9wZXJhdGlvbnMgdGhlbXNlbHZlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBwcm9iYWJseSBzb21ldGhpbmcgZmFpcmx5IHN0YW5kYXJkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHNwZWNpZmljIGhhbmRsaW5nIG9mIHRoaXMgcGFydGljdWxhciBjaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfY2hpcF9yZXNldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQyMjc9c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTMtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Mjk0OnN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDI5NS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDUtXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDU0NjpcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0Ny1cdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIyMzEKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6CgoqKlRpbWUgdG8gRGlhZ25vc2U6IGB5dDkyMXhgIFJlc2V0IGFuZCBEZXRlY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgZXNzZW50aWFscyBmb3IgYSBzeXN0ZW0gbGlrZSB0aGlzLiBCZWZvcmUgSSBzdGFydCBnb2luZyBkb3duIGFueSByYWJiaXQgaG9sZXMgd2l0aCBtb3JlIGNvbXBsZXggZGVidWdnaW5nLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBmaXJzdCBwYXNzIG9uIHRoZSBvYnZpb3VzLiBUaGUgY29yZSBvZiBteSBhbmFseXNpcyBhbHdheXMgc3RhcnRzIGZyb20gYmFzaWNzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGV2aWNlIGlzIHJlc2V0IHByb3Blcmx5LCBhbmQgd2hldGhlciB0aGUgc3lzdGVtIGlzIGRldGVjdGluZyB0aGUgaW50ZW5kZWQgY2hpcC4gU28sIGZpcnN0IG9uIG15IGxpc3Q6IGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb25zIGB5dDkyMXhfY2hpcF9yZXNldGAgYW5kIGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjaGlwIGlzIGdldHRpbmcgYSBzb2xpZCByZXNldCBzaWduYWwsIGFuZCB0aGF0IHRoZSBkZXZpY2UgZGV0ZWN0aW9uIHJvdXRpbmUgaXMgZXZlbiBwaWNraW5nIHVwIG9uIGl0cyBwcmVzZW5jZS4gVGhpcyBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MjI3Olx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuNDIyODpcdHtcbjQyMjk6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbjQyMzA6XHRcdGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbztcbjQyMzE6XHRcdHU4IGV4dG1vZGU7XG40MjMyOlx0XHR1MzIgY2hpcGlkO1xuNDIzMzpcdFx0dTMyIG1ham9yO1xuNDIzNDpcdFx0dTMyIG1vZGU7XG40MjM1Olx0XHR1MzIgdmFsO1xuNDIzNjpcdFx0aW50IHJlcztcbjQyMzc6XHRcbjQyMzg6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXHUwMDI2Y2hpcGlkKTtcbjQyMzk6XHRcdGlmIChyZXMpXG40MjQwOlx0XHRcdHJldHVybiByZXM7XG40MjQxOlx0XG40MjQyOlx0XHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcbjQyNDM6XHRcbjQyNDQ6XHRcdGZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby1cdTAwM2VuYW1lOyBpbmZvJiM0MzsmIzQzOylcbjQyNDU6XHRcdFx0aWYgKGluZm8tXHUwMDNlbWFqb3IgPT0gbWFqb3IpXG40MjQ2Olx0XHRcdFx0YnJlYWs7XG40MjQ3Olx0XHRpZiAoIWluZm8tXHUwMDNlbmFtZSkge1xuNDI0ODpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VW5leHBlY3RlZCBjaGlwaWQgMHgleFxcblwmIzM0OywgY2hpcGlkKTtcbjQyNDk6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG40MjUwOlx0XHR9XG40MjUxOlx0XG40MjUyOlx0XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfTU9ERSwgXHUwMDI2bW9kZSk7XG40MjUzOlx0XHRpZiAocmVzKVxuNDI1NDpcdFx0XHRyZXR1cm4gcmVzO1xuNDI1NTpcdFx0cmVzID0geXQ5MjF4X2VkYXRhX3JlYWQocHJpdiwgWVQ5MjFYX0VEQVRBX0VYVE1PREUsIFx1MDAyNmV4dG1vZGUpO1xuNDI1NjpcdFx0aWYgKHJlcylcbjQyNTc6XHRcdFx0cmV0dXJuIHJlcztcbjQyNTg6XHRcbjQyNTk6XHRcdGZvciAoOyBpbmZvLVx1MDAzZW5hbWU7IGluZm8mIzQzOyYjNDM7KVxuNDI2MDpcdFx0XHRpZiAoaW5mby1cdTAwM2VtYWpvciA9PSBtYWpvciBcdTAwMjZcdTAwMjYgaW5mby1cdTAwM2Vtb2RlID09IG1vZGUgXHUwMDI2XHUwMDI2XG40MjYxOlx0XHRcdCAgICBpbmZvLVx1MDAzZWV4dG1vZGUgPT0gZXh0bW9kZSlcbjQyNjI6XHRcdFx0XHRicmVhaztcbjQyNjM6XHRcdGlmICghaW5mby1cdTAwM2VuYW1lKSB7XG40MjY0Olx0XHRcdGRldl9lcnIoZGV2LFxuNDI2NTpcdFx0XHRcdFwmIzM0O1Vuc3VwcG9ydGVkIGNoaXBpZCAweCV4IHdpdGggY2hpcG1vZGUgMHgleCAweCV4XFxuXCYjMzQ7LFxuNDI2NjpcdFx0XHRcdGNoaXBpZCwgbW9kZSwgZXh0bW9kZSk7XG40MjY3Olx0XHRcdHJldHVybiAtRU5PREVWO1xuNDI2ODpcdFx0fVxuNDI2OTpcdFxuNDI3MDpcdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9TWVNfQ0xLLCBcdTAwMjZ2YWwpO1xuNDI3MTpcdFx0aWYgKHJlcylcbjQyNzI6XHRcdFx0cmV0dXJuIHJlcztcbjQyNzM6XHRcdHN3aXRjaCAoRklFTERfR0VUKFlUOTIxWF9TWVNfQ0xLX1NFTF9NLCB2YWwpKSB7XG40Mjc0Olx0XHRjYXNlIDA6XG40Mjc1Olx0XHRcdHByaXYtXHUwMDNlY3ljbGVfbnMgPSBpbmZvLVx1MDAzZW1ham9yID09IFlUOTIxNV9NQUpPUiA/IDggOiA2O1xuNDI3NjpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMyOTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGxvZ2ljLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyBpdCBteXNlbGY6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogeXQ5MjF4IENoaXAgRGV0ZWN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiBpcyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciBmb3Igb3VyIFlUOTIxWCBjaGlwJiMzOTtzIHByZXNlbmNlLiBJdCYjMzk7cyB0YXNrZWQgd2l0aCBpZGVudGlmeWluZyB0aGUgY2hpcCBtb2RlbC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBncmFiYmluZyB0aGUgdmFsdWUgb2YgYFlUOTIxWF9DSElQX0lEYC4gVGhhdCYjMzk7cyB0aGUga2V5IGlkZW50aWZpZXIsIHRoZSBjaGlwJiMzOTtzICYjMzQ7ZmluZ2VycHJpbnQmIzM0OyBzbyB0byBzcGVhay4gVGhlbiwgdGhpcyB2YWx1ZSBpcyBjb21wYXJlZCB3aXRoIHRoZSBzZXQgb2YgZXhwZWN0ZWQgaWRlbnRpZmllcnMgZGVmaW5lZCBpbiBgeXQ5MjF4X2luZm9zYC4gSWYgdGhlIGdyYWJiZWQgSUQgZG9lc24mIzM5O3Qgaml2ZSB3aXRoIGFueSBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzLCB0aGF0JiMzOTtzIGEgcmVkIGZsYWcuIFRoZSBmdW5jdGlvbiBzaWduYWxzIGEgc2VyaW91cyBwcm9ibGVtLCByZXR1cm5pbmcgYC1FTk9ERVZgLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGRldmljZSBpc24mIzM5O3QgdGhlIG9uZSB3ZSYjMzk7cmUgZXhwZWN0aW5nIG9yIGl0JiMzOTtzIHNpbXBseSBub3QgZGV0ZWN0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBjaGVjay4KCk5vdywgYSByZWxhdGVkIHF1ZXN0aW9uIHBvcHMgaW50byBtaW5kLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIGhvdyB0aGlzIGRldGVjdGlvbiBpcyB1c2VkLiBJcyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBpbnZva2VkIGZyb20gYHl0OTIxeF9jaGlwX3Jlc2V0YD8gVW5kZXJzdGFuZGluZyB0aGlzIHJlbGF0aW9uc2hpcCBpcyBjcml0aWNhbCB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgbG9naWMuIFNwZWNpZmljYWxseSwgaG93IGRvIHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyPyBJcyB0aGUgYGNoaXBfZGV0ZWN0YCBwYXJ0IG9mIHRoZSBvdmVyYWxsIGNoaXAgcmVzZXQ/IERvZXMgdGhlIHJlc2V0IGZ1bmN0aW9uIHJlcXVpcmUgYSBrbm93biwgZGV0ZWN0YWJsZSBjaGlwPyBEb2VzIHRoZSByZXNldCBmdW5jdGlvbiBvY2N1ciByZWdhcmRsZXNzPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgYW55IHBvdGVudGlhbCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0Mjk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQyOTQ6XHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQyOTU6XHR7XG40Mjk2Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG40Mjk3Olx0XHR1MTYgZXRoX3BfdGFnO1xuNDI5ODpcdFx0dTMyIHZhbDtcbjQyOTk6XHRcdGludCByZXM7XG40MzAwOlx0XG40MzAxOlx0XHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XG40MzAyOlx0XHRpZiAocmVzKVxuNDMwMzpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwNDpcdFxuNDMwNTpcdFx0LyogUmVzZXQgKi9cbjQzMDY6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XG40MzA3Olx0XHRpZiAocmVzKVxuNDMwODpcdFx0XHRyZXR1cm4gcmVzO1xuNDMwOTpcdFxuNDMxMDpcdFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xuNDMxMTpcdFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xuNDMxMjpcdFxuNDMxMzpcdFx0dmFsID0gMDtcbjQzMTQ6XHRcdHJlcyA9IHl0OTIxeF9yZWdfd2FpdChwcml2LCBZVDkyMVhfUlNULCB+MCwgXHUwMDI2dmFsKTtcbjQzMTU6XHRcdGlmIChyZXMpXG40MzE2Olx0XHRcdHJldHVybiByZXM7XG40MzE3Olx0XG40MzE4Olx0XHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXG40MzE5Olx0XHQgKiBiZWZvcmUuXG40MzIwOlx0XHQgKi9cbjQzMjE6XHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcdTAwMjZ2YWwpO1xuNDMyMjpcdFx0aWYgKHJlcylcbjQzMjM6XHRcdFx0cmV0dXJuIHJlcztcbjQzMjQ6XHRcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcbjQzMjU6XHRcdGlmIChldGhfcF90YWcgIT0gRVRIX1BfWVQ5MjFYKSB7XG40MzI2Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtUYWcgdHlwZSAweCV4ICE9IDB4JXhcXG5cJiMzNDssIGV0aF9wX3RhZyxcbjQzMjc6XHRcdFx0XHRFVEhfUF9ZVDkyMVgpO1xuNDMyODpcdFx0XHQvKiBEZXNwaXRlIGJlaW5nIHBvc3NpYmxlLCB3ZSBjaG9vc2Ugbm90IHRvIHNldCBDUFVfVEFHX1RQSUQsXG40MzI5Olx0XHRcdCAqIHNpbmNlIHRoZXJlIGlzIG5vIHdheSBpdCBjYW4gYmUgZGlmZmVyZW50IHVubGVzcyB5b3UgaGF2ZSB0aGVcbjQzMzA6XHRcdFx0ICogd3JvbmcgY2hpcC5cbjQzMzE6XHRcdFx0ICovXG40MzMyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNDMzMzpcdFx0fVxuNDMzNDpcdFxuNDMzNTpcdFx0cmV0dXJuIDA7XG40MzM2Olx0fVxuNDMzNzpcdFxuNDMzODpcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfc2V0dXBfZHNhKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbjQzMzk6XHR7XG40MzQwOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuNDM0MTpcdFx0dW5zaWduZWQgbG9uZyBjcHVfcG9ydHNfbWFzaztcbjQzNDI6XHRcdHUzMiBjdHJsc1syXTtcbjQzNDM6XHRcdHUzMiBjdHJsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDU2MQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB5dDkyMXhfY2hpcF9yZXNldGAgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGRlZmluaXRlbHkgY2FsbHMgYHl0OTIxeF9jaGlwX2RldGVjdGAsIEkgY2FuIHNlZSB0aGF0LiBBbmQgaWYgYHl0OTIxeF9jaGlwX2RldGVjdGAgY2FuJiMzOTt0IGlkZW50aWZ5IHRoZSBjaGlwLCBpdCYjMzk7cyBnb2luZyB0byByZXR1cm4gYC1FTk9ERVZgLiBNYWtlcyBwZXJmZWN0IHNlbnNlLiBOb3csIHRoZSBwcm9ibGVtIGlzLCBzeXprYWxsZXIgaXMgcnVubmluZyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQg4oCTIHNvbWV0aGluZyBsaWtlIFFFTVUgb3IgR0NFLCByaWdodD8gV2UgZG9uJiMzOTt0ICphY3R1YWxseSogaGF2ZSB0aGlzIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIGluIHRoZSBzeXN0ZW0uIFdoaWNoIG1lYW5zIHRob3NlIE1ESU8gcmVhZHMgYXJlIGVpdGhlciBnb2luZyB0byBjb21wbGV0ZWx5IGZhaWwsIG9yIHJldHVybiBzb21lIGdhcmJhZ2UgdmFsdWUsIHByb2JhYmx5IDAgb3IgbWF5YmUgYDB4ZmZmZmAuIEVpdGhlciB3YXksIGl0JiMzOTtzIG5vdCBnb2luZyB0byBtYXRjaCBgWVQ5MjE1X01BSk9SYCwgd2hhdGV2ZXIgdGhhdCBkZWZpbmVzLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gY2FuIHN5emthbGxlciAqbW9jayogdGhvc2UgTURJTyByZWFkcz8gVGhhdCB3b3VsZCBiZSB0aGUgaWRlYWwgc2l0dWF0aW9uLiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGEgZ2VuZXJpYyBNRElPIG1vY2sgZHJpdmVyIGluIHRoZSBiYXNlIHN5emthbGxlciBzZXR1cCB0aGF0IGFsbG93cyBpbmplY3RpbmcgYXJiaXRyYXJ5IHJlYWQgdmFsdWVzIGZvciBhcmJpdHJhcnkgUEhZcyBvciBkZXZpY2VzIHVubGVzcyBvbmUgaGFzIGJlZW4gc3BlY2lmaWNhbGx5IHdyaXR0ZW4gZm9yIGl0LiBJIGRvbiYjMzk7dCByZWNhbGwgc2VlaW5nIGl0LgoKSG9sZCBvbiwgdGhlcmUmIzM5O3MgYG1kaW8tbW9ja3VwYCwgcmlnaHQ/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYG1kaW8tbW9ja3VwYCBvciBwb3RlbnRpYWxseSBldmVuIGBtZGlvLWZhdWx0LWluamVjdGAgZXhpc3RzLiBUaGF0IGNvdWxkIGJlIGEgZ2FtZS1jaGFuZ2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA4MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkV4cGxvcmluZyB0aGUgRnV6emluZyBMYW5kc2NhcGUqKi4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyB0aGUgZnV6emluZyBsYW5kc2NhcGUgZm9yIGFueXRoaW5nIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYG1kaW9gLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBjcnVjaWFsIHN0ZXAuIFVuZGVyc3RhbmRpbmcgd2hhdCYjMzk7cyBhbHJlYWR5IGJlZW4gZXhwbG9yZWQsIHdoYXQmIzM5O3MgYmVlbiB0cmllZCwgYW5kIHdoYXQgdnVsbmVyYWJpbGl0aWVzIG1heSBoYXZlIGJlZW4gdW5lYXJ0aGVkIGlzIHZpdGFsIGJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgbXkgb3duIGFwcHJvYWNoLiBJIHdhbnQgdG8gYXZvaWQgZHVwbGljYXRpbmcgZWZmb3J0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZW5zdXJlIEkmIzM5O20gYnVpbGRpbmcgb24gZXhpc3Rpbmcga25vd2xlZGdlLiBGdXp6aW5nIGlzIGEgZGVlcCBmaWVsZCBhbmQgSSBuZWVkIGEgYmFzZWxpbmUgYmVmb3JlIGRlY2lkaW5nIGlmIEkmIzM5O20gcmVpbnZlbnRpbmcgdGhlIHdoZWVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKmZ1enomIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTI1OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB5dDkyMXhgIERyaXZlciBQcm9iZSBhbmQgTEVEIFNldHVwKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgTEVEIGNvZGUgaW4gYHl0OTIxeGAgaXMgcmVhY2hlZCwgYW5kIEkmIzM5O20gYSBiaXQgaHVuZyB1cC4gTGV0IG1lIGJyZWFrIHRoaXMgZG93biBsb2dpY2FsbHkuIEZpcnN0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBkc2FfbG9vcGAuIEl0JiMzOTtzIGEgbW9jayBEU0Egc3dpdGNoLCBidXQgaXQgdXNlcyBpdHMgb3duIGRyaXZlciwgYGRzYV9sb29wLmNgLCBub3QgdGhlIGB5dDkyMXhgIGRyaXZlci4gVGhhdCYjMzk7cyBpbXBvcnRhbnQuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgeXQ5MjF4YCBkcml2ZXIgc2hvdWxkIG9ubHkgcHJvYmUgaWYgdHdvIGNvbmRpdGlvbnMgYXJlIG1ldDogYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggYG1vdG9yY29tbSx5dDkyMTVgIGV4aXN0cywgKmFuZCogdGhlIE1ESU8gYnVzIHJldHVybnMgdGhlIGNvcnJlY3QgY2hpcCBJRC4gUmlnaHQsIG1ha2VzIHNlbnNlLgoKR2l2ZW4gdGhlIHR5cGljYWwgc3l6a2FsbGVyIGVudmlyb25tZW50LCBJIGtub3cgd2UgZG9uJiMzOTt0IGhhdmUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZXJlIGlzbiYjMzk7dCBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIGl0LCBzbyBteSBndXQgdGVsbHMgbWUgdGhlIGRyaXZlciYjMzk7cyBwcm9iZSB3aWxsICphbHdheXMqIGZhaWwgYXQgYHl0OTIxeF9jaGlwX2RldGVjdGAuIFRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGNhbiB0aGUgTEVEIGNvZGUgZXZlciBleGVjdXRlIHdpdGhvdXQgYSBzdWNjZXNzZnVsIHByb2JlPyBUaGUgc2VxdWVuY2UgYXBwZWFycyB0byBiZTogYHl0OTIxeF9sZWRzX3NldHVwYCBpcyBjYWxsZWQgZnJvbSBgeXQ5MjF4X2RzYV9zZXR1cGAsIHdoaWNoIGlzIGNhbGxlZCBieSBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBgeXQ5MjF4X21kaW9fcHJvYmVgLiBTbyBpZiBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmYWlscywgdGhlbiBgeXQ5MjF4X2RzYV9zZXR1cGAgd2lsbCBmYWlsIGFuZCByZXR1cm4gYW4gZXJyb3IgYW5kIHN1YnNlcXVlbnRseSwgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHdpbGwgZmFpbC4gSSYjMzk7dmUgZ290IHRoYXQgcGFydC4KCkhvbGQgb24sIEkmIzM5O20gc2VlaW5nIGEgcG90ZW50aWFsIGluY29uc2lzdGVuY3kuIEkgaGFkIGEgcXVpY2sgbWVudGFsIGhpY2N1cCwgYnV0IEkgcmVtZW1iZXIgaXQmIzM5O3MgYHl0OTIxeF9kc2Ffc2V0dXBgIHRoYXQgaXMgY2FsbGVkICpieSogYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byByZWNvbmZpcm0uIExldCYjMzk7cyBnbyB0byB0aGUgc291cmNlLCBlaXRoZXIgYG5ldC9kc2EvZHNhLmNgIG9yIGBuZXQvZHNhL2RzYTIuY2AuIEdvdCBpdCwgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtzZXR1cChkcylgLiBJZiB0aGF0IGBzZXR1cGAgZnVuY3Rpb24gZmFpbHMsIHRoZSBzd2l0Y2ggaXMgbm90IHJlZ2lzdGVyZWQuIEFuZCBzaW5jZSBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBpcyBwYXJ0IG9mIGB5dDkyMXhfZHNhX3NldHVwYCwgdGhlIGNoZWNrIHdpbGwgZmFpbCB0aGVyZS4gVGhlcmVmb3JlLCBteSBMRUQgc2V0dXAgY29kZSAoYHl0OTIxeF9sZWRzX3NldHVwYCkgaXMgbmV2ZXIgcmVhY2hlZC4gQWxyaWdodCwgSSYjMzk7bSBwcmV0dHkgY29tZm9ydGFibGUgd2l0aCB0aGF0IGNvbmNsdXNpb24uIEJ1dC4uLiBpdCYjMzk7cyBhbHdheXMgYSBnb29kIGlkZWEgdG8gZG91YmxlIGNoZWNrLCBqdXN0IHRvIGJlIGNlcnRhaW4uIExldCBtZSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBjYWxsIHBhdGhzIHRvIGB5dDkyMXhfbGVkc19zZXR1cGAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt5dDkyMXhfbGVkc19zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTM3PXN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU4My0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1ODQ6XHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1ODUtXHRpZiAocmVzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTQ5OT1zdGF0aWMgdm9pZCB5dDkyMXhfbGVkc190ZWFyZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTM1LVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTM2OmludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01Mzcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDYtXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDc6aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaC0xMDgtXG4tLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTEwLVxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmg6MTExOnN0YXRpYyBpbmxpbmUgaW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTExMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDE3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODIwCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDEwNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IGBmYWxzZWAqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIGB5dDkyMXhfZHNhX3NldHVwYCwgYW5kIHRoYXQgZnVuY3Rpb24gaXMgb25seSBpbnZva2VkIGFzIHRoZSBgLnNldHVwYCBjYWxsYmFjayB3aXRoaW4gdGhlIGBkc2Ffc3dpdGNoX29wc2Agc3RydWN0dXJlLiBUaGUgYC5zZXR1cGAgY2FsbGJhY2sgaXRzZWxmIGlzIGNhbGxlZCBkdXJpbmcgRFNBIHRyZWUgaW5zdGFudGlhdGlvbiwgd2hpY2ggaGluZ2VzIG9uIHRoZSBzd2l0Y2ggYmVpbmcgcmVnaXN0ZXJlZCwgYW5kIGNyaXRpY2FsbHksIHRoZSBoYXJkd2FyZSBiZWluZyBwcmVzZW50ICphbmQqIGRldGVjdGVkIChvciwgYXQgYSBiYXJlIG1pbmltdW0sIHRoZSBgc2V0dXBgIGNhbGxiYWNrIG5vdCByZXR1cm5pbmcgYW4gZXJyb3IpLgoKU2luY2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIOKAkyB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gg4oCTIGFuZCB0aGF0IGhhcmR3YXJlIGNoZWNrLCBzcGVjaWZpY2FsbHkgYHl0OTIxeF9jaGlwX2RldGVjdGAsIHdpbGwgZGVmaW5pdGVseSBmYWlsIGFuZCByZXR1cm4gYC1FTk9ERVZgIGlmIHRoZSBjaGlwIGlzbiYjMzk7dCB0aGVyZS4gU28sIGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAoZXZlbiB3aXRoIHNvZnR3YXJlIGVtdWxhdGVkIGhhcmR3YXJlKSwgdGhlbiB3ZSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBleGlzdHMsIHNvIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBTaW1wbGUuCgpJJiMzOTt2ZSBjaGVja2VkIGlmIHRoZXJlJiMzOTtzIGFueSB3YXkgYXJvdW5kIHRoZSBoYXJkd2FyZSBjaGVjay4gQW55IGRlYnVnZnMvc3lzZnMgaW50ZXJmYWNlIGZvciBieXBhc3M/IE5vcGUuIElzIGB5dDkyMXhfbGVkc19zZXR1cGAgdXNlZCBhbnl3aGVyZSBlbHNlPyBObywgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIuIElzIHRoZXJlIGFuIGVtdWxhdG9yIGZvciB0aGlzIGNoaXA/IEkgY291bGRuJiMzOTt0IGZpbmQgb25lLiBDYW4gc3l6a2FsbGVyIHNvbWVob3cgbW9jayB0aGUgTURJTyByZWFkPyBXZWxsLCBubywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIE1ESU8gbW9jayB0aGF0IGNhbiBiZSBjb25maWd1cmVkIGZyb20gdXNlcnNwYWNlIHRvIHJldHVybiBhcmJpdHJhcnkgdmFsdWVzLCBhbmQgZXZlbiBpZiBpdCBkaWQsIGl0IHdvdWxkIHJlcXVpcmUgYSBoaWdobHkgc3BlY2lmaWMgc2VxdWVuY2Ugb2YgcmVnaXN0ZXIgdmFsdWVzLCB3aGljaCBzeXprYWxsZXIgd291bGRuJiMzOTt0IGtub3cgYXV0b21hdGljYWxseS4KCkFscmlnaHQsIGxldCBtZSBkb3VibGUtY2hlY2s6IGlzIGBDT05GSUdfTkVUX0RTQV9ZVDkyMVhgIGV2ZW4gZW5hYmxlZCBpbiBzdGFuZGFyZCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnM/IEl0IG1pZ2h0IGJlLCBidXQgaXQgc3RpbGwgd29uJiMzOTt0IHByb2JlIHdpdGhvdXQgdGhlIGhhcmR3YXJlLiBJIGhhdmUgYWxzbyB2ZXJpZmllZCB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNvbmRpdGlvbiBpbiB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgaXQgZGVmaW5pdGVseSBhcHBsaWVzLCBiZWNhdXNlIHRoZSBjb2RlIGlzbiYjMzk7dCByZWFjaGFibGUuCgpJIGFsc28gY2hlY2tlZCB3aGljaCBmaWxlcyB3ZXJlIHRvdWNoZWQuIEFzaWRlIGZyb20gdGhlIGRvY3VtZW50YXRpb24gYW5kIGJ1aWxkIHN5c3RlbSBjaGFuZ2VzLCB0aGUgbWFpbiBjaGFuZ2VzIGFyZTogYSByZWZhY3RvcmluZyBvZiB0aGUgZXhpc3RpbmcgYHl0OTIxeGAgZHJpdmVyLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBsZWRzLmNgIGFuZCBgbGVkcy5oYCwgbW92aW5nIHNvbWUgYHNtaWAgZnVuY3Rpb25zIGludG8gYHNtaS5jYCBhbmQgYHNtaS5oYCwgYW5kIGFkZGluZyB0aGUgY2FsbCB0byBgeXQ5MjF4X2xlZHNfc2V0dXBgLiBUaGUgTEVELXNwZWNpZmljIGxvZ2ljIGlzIG5vdyB0aGVyZSwgYnV0IHRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIHJlbWFpbnM6IGl0JiMzOTtzIHRpZWQgdG8gdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4KClNvLCB0aGUgcGF0Y2ggaXMganVzdCByZWZhY3RvcmluZyBhbmQgYWRkaW5nIExFRCBzdXBwb3J0IHRvIHRoZSBgeXQ5MjF4YCBkcml2ZXIuIFNpbmNlIHRoYXQgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCB0aGUgbmV3IGNvZGUgaXMgdW5yZWFjaGFibGUuCgpUaGVyZWZvcmUsIGFuZCBmb3IgYWxsIHRob3NlIHJlYXNvbnMsIG15IGFzc2Vzc21lbnQgaXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUtc3BlY2lmaWMgY29kZSB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgTW90b3Jjb21tIFlUOTIxNSBEU0Egc3dpdGNoIGRyaXZlciBhbmQgYWRkcyBMRUQgc3VwcG9ydCBmb3IgaXQuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgTW90b3Jjb21tIHN3aXRjaCBjaGlwIHRvIGJlIHByZXNlbnQgb24gYW4gTURJTyBidXMgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5IChpdCByZWFkcyB0aGUgY2hpcCBJRCB2aWEgTURJTyBpbiBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCkuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VL3N5emthbGxlciwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6MzEuNzg2MzEzMzkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4MTUyMzk4NTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIgYW5kIGFkZHMgTEVEIHN1cHBvcnQgZm9yIGl0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE1vdG9yY29tbSBzd2l0Y2ggY2hpcCB0byBiZSBwcmVzZW50IG9uIGFuIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgdmlhIE1ESU8gaW4gYHl0OTIxeF9jaGlwX2RldGVjdGApLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVS9zeXprYWxsZXIsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE2OjMxLjc4NjMxODg0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MzQ0MzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTA3ZTc5Y2Y5MjhjZmI0NjExODVmM2NkZWZkMTRjNWU5Y2IzNWEwNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzIDE3OjE2OjMwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uYTNjOGQ4YTAxYzZiYTcgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xODIzMCw3ICsxODIzMCw3IEBAIE06XFx0RGF2aWQgWWFuZyBcXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXFx1MDAzZVxcbiBMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRNYWludGFpbmVkXFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuLUY6XFx0ZHJpdmVycy9uZXQvZHNhL3l0OTIxeC4qXFxuK0Y6XFx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cXG4gRjpcXHRuZXQvZHNhL3RhZ195dDkyMXguY1xcbiBcXG4gTU9YQSBTTUFSVElPL0lORFVTVElPL0lOVEVMTElPIFNFUklBTCBDQVJEXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL0tjb25maWdcXFwiXFxuIFxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xcXCJcXG4rXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9LY29uZmlnXFxcIlxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvS2NvbmZpZ1xcXCJcXG5AQCAtMTU4LDEyICsxNjAsNCBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cXG4gXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxcbiBcXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXFxuIFxcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cXG4tXFxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxcbi1cXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XFxcIlxcbi1cXHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MjFYXFxuLVxcdHNlbGVjdCBORVRfSUVFRTgwMjFRX0hFTFBFUlMgaWYgRENCXFxuLVxcdGhlbHBcXG4tXFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXFxuLVxcdCAgY2hpcC5cXG4gZW5kbWVudVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5pbmRleCBkMjk3NWJhZGZmYzA5My4uMTM4MjI1YmFhNGQ1NjQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuQEAgLTE0LDExICsxNCwxMSBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXFxuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBiNTMvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gaGlyc2NobWFubi9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBsYW50aXEvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbWljcm9jaGlwL1xcbitvYmoteVxcdFxcdFxcdFxcdCs9IG1vdG9yY29tbS9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBtdjg4ZTZ4eHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbXhsODYyeHgvXFxuIG9iai15XFx0XFx0XFx0XFx0Kz0gbmV0Yy9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXFxuQEAgLTAsMCArMSwxNyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuK1xcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuK1xcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4rXFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2hcXG4rXFx0ICBjaGlwLlxcbitcXG4rY29uZmlnIE5FVF9EU0FfWVQ5MjFYX0xFRFNcXG4rXFx0Ym9vbCBcXFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcXFwiXFxuK1xcdGRlZmF1bHQgeVxcbitcXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXFxuK1xcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TkVUX0RTQV9ZVDkyMVhcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcXG4rXFx0ICBNb3RvcmNvbW0gWVQ5MjE1IHN3aXRjaCBjaGlwcy5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41YTYzZGIwMDI5ZmZlMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlXFxuQEAgLTAsMCArMSw1IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xcbitvYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXFxuK3l0OTIxeC1vYmpzIDo9IGNoaXAub1xcbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXFxuK3l0OTIxeC1vYmpzICs9IHNtaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXFxuc2ltaWxhcml0eSBpbmRleCA5NiVcXG5yZW5hbWUgZnJvbSBkcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uYTM1MTIxMzYzODNiMzYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcXG5AQCAtMTMsNyArMTMsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9oc3IuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbkBAIC0yNiw3ICsyNSw5IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaWVlZTgwMjFxLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcGt0X2Nscy5oXFx1MDAzZVxcbiBcXG4tI2luY2x1ZGUgXFxcInl0OTIxeC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY2hpcC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibGVkcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwic21pLmhcXFwiXFxuIFxcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcXG4gXFx0dW5zaWduZWQgaW50IHNpemU7XFxuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG4gXFx0e31cXG4gfTtcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcXHRcXFwieXQ5MjF4XFxcIlxcbi1cXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbi0jZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4tXFxuIC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYmUgc21hbGwgZW5vdWdoIHRvIGF2b2lkIG92ZXJmbG93IG9mIDMyYml0IE1JQnMuXFxuICAqXFxuICAqIFVudGlsIHdlIGNhbiByZWFkIE1JQnMgZnJvbSBzdGF0czY0IGNhbGwgZGlyZWN0bHkgKGkuZS4gc2xlZXBcXG5AQCAtMTk2LDIwOCArMTkyLDYgQEAgc3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4gXFx0cmV0dXJuIChhZGRyWzRdIFxcdTAwM2NcXHUwMDNjIDgpIHwgYWRkcls1XTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jaykpO1xcbi1cXG4tXFx0cmV0dXJuIHByaXYtXFx1MDAzZXJlZ19vcHMtXFx1MDAzZXJlYWQocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWxwKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcXG4te1xcbi1cXHRXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKSk7XFxuLVxcbi1cXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdfd2FpdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgKnZhbHApXFxuLXtcXG4tXFx0dTMyIHZhbDtcXG4tXFx0aW50IHJlcztcXG4tXFx0aW50IHJldDtcXG4tXFxuLVxcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxcbi1cXHRcXHRcXHRcXHRyZXMgfHwgKHZhbCBcXHUwMDI2IG1hc2spID09ICp2YWxwLFxcbi1cXHRcXHRcXHRcXHRZVDkyMVhfUE9MTF9TTEVFUF9VUywgWVQ5MjFYX1BPTExfVElNRU9VVF9VUyxcXG4tXFx0XFx0XFx0XFx0ZmFsc2UsIHByaXYsIHJlZywgXFx1MDAyNnZhbCk7XFxuLVxcdGlmIChyZXQpXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHQqdmFscCA9IHZhbDtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcdHUzMiB2O1xcbi1cXHR1MzIgdTtcXG4tXFxuLVxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFxcdTAwMjZ2KTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdHUgPSB2O1xcbi1cXHR1IFxcdTAwMjY9IH5tYXNrO1xcbi1cXHR1IHw9IHZhbDtcXG4tXFx0aWYgKHUgPT0gdilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ193cml0ZShwcml2LCByZWcsIHUpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuLX1cXG4tXFxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4tICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuLSAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4tICpcXG4tICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbi0gKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuLSAqL1xcbi1cXG4tc3RhdGljIHZvaWQgdXBkYXRlX2N0cmxzX3VuYWxpZ25lZCh1MzIgKmxvLCB1MzIgKmhpLCB1NjQgbWFzaywgdTY0IHZhbClcXG4te1xcbi1cXHQqbG8gXFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XFxuLVxcdCpoaSBcXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcXG4tXFx0KmxvIHw9IGxvd2VyXzMyX2JpdHModmFsKTtcXG4tXFx0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbi1cXHRcXHQgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcXHUwMDI2dmFsc1tpXSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWdzX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzLFxcbi1cXHRcXHQgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuLVxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xcbi1cXHRcXHRpZiAocmVzKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuLVxcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbi17XFxuLVxcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbi1cXHR1MzIgdnNbNF07XFxuLVxcdGludCByZXM7XFxuLVxcbi1cXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XFxuLVxcbi1cXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tXFx0aWYgKHJlcylcXG4tXFx0XFx0cmV0dXJuIHJlcztcXG4tXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbi1cXHRcXHR1MzIgdSA9IHZzW2ldO1xcbi1cXG4tXFx0XFx0dSBcXHUwMDI2PSB+bWFza3NbaV07XFxuLVxcdFxcdHUgfD0gdmFsc1tpXTtcXG4tXFx0XFx0aWYgKHUgIT0gdnNbaV0pXFxuLVxcdFxcdFxcdGNoYW5nZWQgPSB0cnVlO1xcbi1cXG4tXFx0XFx0dnNbaV0gPSB1O1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoIWNoYW5nZWQpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4tXFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncylcXG4te1xcbi1cXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcXG4tXFx0dTMyIHZzWzRdO1xcbi1cXHRpbnQgcmVzO1xcbi1cXG4tXFx0QlVJTERfQlVHX09OKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpO1xcbi1cXG4tXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuLVxcdGlmIChyZXMpXFxuLVxcdFxcdHJldHVybiByZXM7XFxuLVxcbi1cXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4tXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4tXFxuLVxcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbi1cXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4tXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuLVxcbi1cXHRcXHR2c1tpXSA9IHU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghY2hhbmdlZClcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50XFxuLXl0OTIxeF9yZWc2NF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcXG4te1xcbi1cXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbi1cXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4tfVxcbi1cXG4tc3RhdGljIGludFxcbi15dDkyMXhfcmVnNjRfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MpXFxuLXtcXG4tXFx0cmV0dXJuIHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgMik7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnRcXG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbi17XFxuLVxcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcXG4ge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcXG5AQCAtNDc4Niw2ICs0NTgwLDEyIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdHJldHVybiByZXM7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG4rXFx0cmVzID0geXQ5MjF4X2xlZHNfc2V0dXAocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRldl93YXJuKGRldiwgXFxcIkZhaWxlZCB0byBzZXR1cCBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmhcXG5zaW1pbGFyaXR5IGluZGV4IDk5JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbmluZGV4IDU1NTA0NjUyNjY2OTUyLi42NTcwYWU1OTAyYWRlYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxcbkBAIC04NTAsOCArODUwLDEzIEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMge1xcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXFx0XFx0KFlUOTIxWF9BQ0xfQkxLX05VTSAqIFlUOTIxWF9BQ0xfRU5UX1BFUl9CTEspXFxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cXHRcXHQ4XFxuIFxcbisjZGVmaW5lIFlUOTIxWF9MRURfR1JPVVBfTlVNXFx0M1xcbitcXG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xcbi0jZGVmaW5lIFlUOTIxWF9QT1JUX05VTVxcdFxcdFxcdDExXFxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXFx0XFx0MTFcXG4rI2RlZmluZSBZVDkyMVhfUE9SVF9NQ1VcXHRcXHQxMFxcbitcXG4rI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuIFxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXFx1MDAzYyA4KVxcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICg4IFxcdTAwM2M9IChwb3J0KSBcXHUwMDI2XFx1MDAyNiAocG9ydCkgXFx1MDAzYyA5KVxcbkBAIC05MzgsNiArOTQzLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XFxuIFxcdHN0cnVjdCB5dDkyMXhfbWliIG1pYjtcXG4gXFx0dTY0IHJ4X2ZyYW1lcztcXG4gXFx0dTY0IHR4X2ZyYW1lcztcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXHR1bnNpZ25lZCBjaGFyIGxlZF9kdXR5O1xcbitcXHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XFxuK1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XFxuKyNlbmRpZlxcbiB9O1xcbiBcXG4gc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIwNjZhN2U4NGZlNmJjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXFxuQEAgLTAsMCArMSw2MDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWxlZHMuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJsZWRzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcXFxcbitcXHRjb250YWluZXJfb2ZfY29uc3QoKGxlZF9jZGV2KSwgc3RydWN0IHl0OTIxeF9sZWQsIGNkZXYpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3BvcnQobGVkKSAoKGxlZCktXFx1MDAzZXBvcnQpXFxuKyNkZWZpbmUgdG9feXQ5MjF4X3ByaXYocHApIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mX2NvbnN0KChwcCksIHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHNbKHBwKS1cXHUwMDNlaW5kZXhdKVxcbisjZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuK1xcbitzdGF0aWMgdTMyIHl0OTIxeF9sZWRfcmVnYWRkcihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXApXFxuK3tcXG4rXFx0c3dpdGNoIChncm91cCkge1xcbitcXHRjYXNlIDA6XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KTtcXG4rXFx0Y2FzZSAxOlxcbitcXHRcXHRyZXR1cm4gWVQ5MjFYX0xFRDFfUE9SVG4ocG9ydCk7XFxuK1xcdGNhc2UgMjpcXG4rXFx0XFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQqb25wID0gKHZhbCBcXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2ZvcmNlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsIGJvb2wgb24pXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXG4rXFx0bGVkLVxcdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcXG4rXFx0bGVkLVxcdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRjdHJsID0gb24gPyBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncm91cCkgOlxcbitcXHQgICAgICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdyb3VwKTtcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIGN0cmwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvZmYsIHVuc2lnbmVkIHNob3J0ICpjeWNsZXAsXFxuK1xcdFxcdFxcdHVuc2lnbmVkIGNoYXIgKmR1dHlwKVxcbit7XFxuK1xcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGR1dHlzW10gPSB7XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCA2KSxcXG4rXFx0XFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDQpLFxcbitcXHRcXHRZVDkyMVhfTEVEX0RVVFkoMSwgMyksXFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWSgxLCAyKSxcXG4rXFx0fTtcXG4rXFx0dW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgY3ljbGVfcmVxO1xcbitcXHR1bnNpZ25lZCBpbnQgZHV0eV9yZXE7XFxuK1xcdHVuc2lnbmVkIGludCBjeWNsZTtcXG4rXFx0dW5zaWduZWQgaW50IGR1dHk7XFxuK1xcbitcXHRjeWNsZSA9IFlUOTIxWF9MRURfQkxJTktfTUFYO1xcbitcXHRjeWNsZV91cHBlciA9IGN5Y2xlICogMTE1ODUgLyA4MTkyICsgMTsgIC8qIE1fU1FSVDIgKiBjeWNsZSAqL1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsIFxcdTAwMjZjeWNsZV9yZXEpIHx8IGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlcilcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0Zm9yICg7IGN5Y2xlIFxcdTAwM2UgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyIFxcdTAwM2VcXHUwMDNlPSAxLCBjeWNsZSBcXHUwMDNlXFx1MDAzZT0gMSlcXG4rXFx0XFx0aWYgKGN5Y2xlX3JlcSBcXHUwMDNlPSBjeWNsZV91cHBlciBcXHUwMDNlXFx1MDAzZSAxKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0KmN5Y2xlcCA9IGN5Y2xlO1xcbitcXG4rXFx0ZHV0eV9yZXEgPSBESVZfUk9VTkRfQ0xPU0VTVChZVDkyMVhfTEVEX0RVVFlfREVOT00gKlxcbitcXHRcXHRcXHRcXHQgICAgIChvbiBcXHUwMDNlIG9mZiA/IG9mZiA6IG9uKSwgY3ljbGVfcmVxKTtcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcXG4rXFx0XFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcXHUwMDNlPSAoZHV0eXNbaSAtIDFdICsgZHV0eXNbaV0pIC8gMikge1xcbitcXHRcXHRcXHRkdXR5ID0gZHV0eXNbaV07XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdGlmIChvbiBcXHUwMDNlIG9mZilcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XFxuK1xcdCpkdXR5cCA9IGR1dHk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHVuc2lnbmVkIHNob3J0IGN5Y2xlO1xcbitcXHR1bnNpZ25lZCBjaGFyIGR1dHk7XFxuK1xcdGJvb2wgdXNlX2N5Y2xlO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoISpvbnAgXFx1MDAyNlxcdTAwMjYgISpvZmZwKSB7XFxuK1xcdFxcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XFxuK1xcdFxcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XFxuK1xcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGkrKylcXG4rXFx0XFx0XFx0aWYgKGkgIT0gZ3JvdXAgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfZHV0eSkge1xcbitcXHRcXHRcXHRcXHRkdXR5ID0gcHAtXFx1MDAzZWxlZF9kdXR5O1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gZmFsc2U7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGJvb2wgY2hhbmdlX2N5Y2xlO1xcbitcXHRcXHRib29sIGNoYW5nZV9kdXR5O1xcbitcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZWxlY3QocHJpdiwgKm9ucCwgKm9mZnAsIFxcdTAwMjZjeWNsZSwgXFx1MDAyNmR1dHkpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0XFx0dXNlX2N5Y2xlID0gY3ljbGUgXFx1MDAzYyBZVDkyMVhfTEVEX0JMSU5LX0RFRjtcXG4rXFx0XFx0Y2hhbmdlX2N5Y2xlID0gdXNlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IGN5Y2xlICE9IHBwLVxcdTAwM2VsZWRfY3ljbGU7XFxuK1xcdFxcdGNoYW5nZV9kdXR5ID0gZHV0eSAhPSBwcC1cXHUwMDNlbGVkX2R1dHk7XFxuK1xcdFxcdGlmIChjaGFuZ2VfY3ljbGUgfHwgY2hhbmdlX2R1dHkpXFxuK1xcdFxcdFxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07XFxuK1xcdFxcdFxcdCAgICAgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdGlmIChpID09IGdyb3VwIHx8ICFwcC1cXHUwMDNlbGVkc1tpXSlcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdFxcdGlmICgoY2hhbmdlX2N5Y2xlIFxcdTAwMjZcXHUwMDI2IHBwLVxcdTAwM2VsZWRzW2ldLVxcdTAwM2V1c2VfY3ljbGUpIHx8XFxuK1xcdFxcdFxcdFxcdCAgICAoY2hhbmdlX2R1dHkgXFx1MDAyNlxcdTAwMjYgcHAtXFx1MDAzZWxlZHNbaV0tXFx1MDAzZXVzZV9kdXR5KSlcXG4rXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSBjaGlwIHNlZW1zIHRvIGphbSBhIHdoaWxlIGlmIGNoYW5naW5nIGR1dHkgZGlyZWN0bHkgKi9cXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRpZiAodmFsICE9IGN0cmwpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFxuK1xcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xcbitcXHRzd2l0Y2ggKGR1dHkgXFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XFxuK1xcdFxcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWSgxLCAyKTtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDEsIDIpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDMsIDQpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDUsIDYpOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0aWYgKGR1dHkgXFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XFxuK1xcdGlmICh1c2VfY3ljbGUpIHtcXG4rXFx0XFx0bWFzayB8PSBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX007XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyg5IC0gX19mbHMoY3ljbGUpKTtcXG4rXFx0fVxcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGN0cmwgPSB2YWwgXFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcXG4rXFx0XFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcXG4rXFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9CTElOSyhncm91cCk7XFxuK1xcdGlmICh1c2VfY3ljbGUpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS25fT1RIRVIoZ3JvdXApO1xcbitcXHRlbHNlXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdGxlZC1cXHUwMDNldXNlX2N5Y2xlID0gdXNlX2N5Y2xlO1xcbitcXHRpZiAodXNlX2N5Y2xlKVxcbitcXHRcXHRwcC1cXHUwMDNlbGVkX2N5Y2xlID0gY3ljbGU7XFxuK1xcdGxlZC1cXHUwMDNldXNlX2R1dHkgPSB0cnVlO1xcbitcXHRwcC1cXHUwMDNlbGVkX2R1dHkgPSBkdXR5O1xcbitcXG4rXFx0Km9ucCA9IERJVl9ST1VORF9DTE9TRVNUKGR1dHkgKiBjeWNsZSwgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NKTtcXG4rXFx0Km9mZnAgPSBjeWNsZSAtICpvbnA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3QgdTMyIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW19fVFJJR0dFUl9ORVRERVZfTUFYXSA9IHtcXG4rXFx0W1RSSUdHRVJfTkVUREVWX0xJTktdXFx0XFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRiB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0ZVTEwsXFxuK1xcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDBdXFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME0sXFxuK1xcdFtUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWF1cXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGLFxcbitcXHRbVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVhdXFx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcXG4rXFx0W1RSSUdHRVJfTkVUREVWX1RYXVxcdFxcdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFgsXFxuK1xcdFtUUklHR0VSX05FVERFVl9SWF1cXHRcXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYLFxcbit9O1xcbitcXG4rc3RhdGljIGJvb2xcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX2lzX3N1cHBvcnRlZChjb25zdCBzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpXFxuK1xcdFxcdGlmICgheXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV0pXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50XFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxcbitcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxcbit7XFxuK1xcdHUzMiBhZGRyO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCpmbGFnc3AgPSAwO1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIF9fVFJJR0dFUl9ORVRERVZfTUFYOyBpKyspIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcXG4rXFxuK1xcdFxcdGlmIChtYXNrIFxcdTAwMjZcXHUwMDI2ICh2YWwgXFx1MDAyNiBtYXNrKSA9PSBtYXNrKVxcbitcXHRcXHRcXHQqZmxhZ3NwIHw9IEJJVChpKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF90cmlnZ2VyX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cXHUwMDNlbGVkc1tncm91cF07XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHR1MzIgYWRkcjtcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0Y3RybCA9IDA7XFxuK1xcdGZvcl9lYWNoX3NldF9iaXQoaSwgXFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWCkge1xcbitcXHRcXHRpZiAoIXl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRcXHRjdHJsIHw9IHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW2ldO1xcbitcXHR9XFxuK1xcbitcXHRsZWQtXFx1MDAzZXVzZV9jeWNsZSA9IGZhbHNlO1xcbitcXHRsZWQtXFx1MDAzZXVzZV9kdXR5ID0gZmFsc2U7XFxuK1xcbitcXHRtYXNrID0gIWdyb3VwID8gWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTSA6IFlUOTIxWF9MRUR4X1BPUlRfQUNUX007XFxuK1xcdGlmIChncm91cCA9PSAyKSB7XFxuK1xcdFxcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHR9XFxuK1xcdGFkZHIgPSB5dDkyMXhfbGVkX3JlZ2FkZHIocHJpdiwgcG9ydCwgZ3JvdXApO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGdyb3VwICE9IDIpIHtcXG4rXFx0XFx0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xcbitcXHRcXHRjdHJsID0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1hc2ssIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgYnJpZ2h0bmVzcyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit5dDkyMXhfY2xlZF9ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLFxcbitcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpkZWxheV9vZmYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX2JsaW5rX3NldChwcml2LCBwcC1cXHUwMDNlaW5kZXgsIGxlZC1cXHUwMDNlZ3JvdXAsIGRlbGF5X29uLFxcbitcXHRcXHRcXHRcXHQgICBkZWxheV9vZmYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICogX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4rXFxuK1xcdGRwID0gZHNhX3RvX3BvcnQoXFx1MDAyNnByaXYtXFx1MDAzZWRzLCBwcC1cXHUwMDNlaW5kZXgpO1xcbitcXHRpZiAoIWRwIHx8ICFkcC1cXHUwMDNldXNlcilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdHJldHVybiBcXHUwMDI2ZHAtXFx1MDAzZXVzZXItXFx1MDAzZWRldjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXG4rXFx0aWYgKHl0OTIxeF9sZWRfdHJpZ2dlcl9pc19zdXBwb3J0ZWQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFncykpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzcClcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9nZXQocHJpdiwgcHAtXFx1MDAzZWluZGV4LCBsZWQtXFx1MDAzZWdyb3VwLCBmbGFnc3ApO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfc2V0KHByaXYsIHBwLVxcdTAwM2VpbmRleCwgbGVkLVxcdTAwM2Vncm91cCwgZmxhZ3MpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2xlZF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSwgaW50ICpwb2xhcml0eXApXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbitcXHRzdHJ1Y3QgbGVkX2luaXRfZGF0YSBpbml0X2RhdGE7XFxuK1xcdHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2O1xcbitcXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xcbitcXHRlbnVtIGxlZF9kZWZhdWx0X3N0YXRlIHN0YXRlO1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkO1xcbitcXHRib29sIGZvcmNlX2hpZ2g7XFxuK1xcdGJvb2wgZm9yY2VfbG93O1xcbitcXHRpbnQgcG9sYXJpdHk7XFxuK1xcdHUzMiBncm91cDtcXG4rXFx0Ym9vbCBvbjtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChwb3J0ID09IFlUOTIxWF9QT1JUX01DVSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIk5vIExFRHMgZm9yIHBvcnQgJWRcXFxcblxcXCIsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZncm91cCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGlmIChncm91cCBcXHUwMDNlPSBZVDkyMVhfTEVEX0dST1VQX05VTSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcXFxuXFxcIiwgZ3JvdXAsIHBvcnQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcXFwiYWN0aXZlLWhpZ2hcXFwiKTtcXG4rXFx0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFxcXCJhY3RpdmUtbG93XFxcIik7XFxuK1xcdGlmIChmb3JjZV9oaWdoIFxcdTAwMjZcXHUwMDI2IGZvcmNlX2xvdykge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkR1cGxpY2F0ZSBwb2xhcml0aWVzIGZvciBMRUQgJTAyZDolMDJ1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRncm91cCwgcG9ydCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdHBvbGFyaXR5ID0gZm9yY2VfaGlnaCA/IDEgOiBmb3JjZV9sb3cgPyAtMSA6IDA7XFxuK1xcbitcXHRsZWQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmxlZCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWxlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHBwLVxcdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcXG4rXFxuK1xcdGxlZC1cXHUwMDNlcG9ydCA9IHBwO1xcbitcXHRsZWQtXFx1MDAzZWdyb3VwID0gZ3JvdXA7XFxuK1xcbitcXHRzdGF0ZSA9IGxlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KGZ3bm9kZSk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfT046XFxuK1xcdFxcdG9uID0gc3RhdGUgIT0gTEVEU19ERUZTVEFURV9PRkY7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBvcnQsIGdyb3VwLCBvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIExFRFNfREVGU1RBVEVfS0VFUDpcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2xlZF9mb3JjZV9nZXQocHJpdiwgcG9ydCwgZ3JvdXAsIFxcdTAwMjZvbik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGxlZF9jZGV2ID0gXFx1MDAyNmxlZC1cXHUwMDNlY2RldjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3MgPSBvbjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XFxuKyNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSU1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF90cmlnZ2VyID0gXFxcIm5ldGRldlxcXCI7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2dldF9kZXZpY2UgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldF9kZXZpY2U7XFxuK1xcdGxlZF9jZGV2LVxcdTAwM2Vod19jb250cm9sX2lzX3N1cHBvcnRlZCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfaXNfc3VwcG9ydGVkO1xcbitcXHRsZWRfY2Rldi1cXHUwMDNlaHdfY29udHJvbF9nZXQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2dldDtcXG4rXFx0bGVkX2NkZXYtXFx1MDAzZWh3X2NvbnRyb2xfc2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQ7XFxuKyNlbmRpZlxcbitcXG4rXFx0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcXFwiLSV1OiUwMmQ6JTAydVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vkcy5pbmRleCwgcG9ydCwgZ3JvdXApO1xcbitcXHRpbml0X2RhdGEgPSAodHlwZW9mKGluaXRfZGF0YSkpe1xcbitcXHRcXHQuZndub2RlID0gZndub2RlLFxcbitcXHRcXHQuZGV2aWNlbmFtZSA9IG5hbWUsXFxuK1xcdFxcdC5kZXZuYW1lX21hbmRhdG9yeSA9IHRydWUsXFxuK1xcdH07XFxuK1xcdHJlcyA9IGRldm1fbGVkX2NsYXNzZGV2X3JlZ2lzdGVyX2V4dChkZXYsIGxlZF9jZGV2LCBcXHUwMDI2aW5pdF9kYXRhKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHQqcG9sYXJpdHlwID0gcG9sYXJpdHk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHRwcC1cXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xcbitcXHRkZXZtX2tmcmVlKGRldiwgbGVkKTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgeXQ5MjF4X2xlZHNfdGVhcmRvd24oc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFx0dTMyIG1hc2s7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuK1xcbitcXHRcXHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFxcdTAwM2MgWVQ5MjFYX0xFRF9HUk9VUF9OVU07IGdyb3VwKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVxcdTAwM2VsZWRzW2dyb3VwXTtcXG4rXFxuK1xcdFxcdFxcdGlmICghbGVkKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcXHUwMDI2bGVkLVxcdTAwM2VjZGV2KTtcXG4rXFx0XFx0XFx0cHAtXFx1MDAzZWxlZHNbZ3JvdXBdID0gTlVMTDtcXG4rXFx0XFx0XFx0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9QT1JUUywgMCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTV9NIHwgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9DVFJMLCBtYXNrKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byB0ZWFyZG93biBMRURzOiAlZFxcXFxuXFxcIiwgcmVzKTtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBpbnZfY3RybCA9IDA7XFxuK1xcdHUzMiBpbnZfbWFzayA9IDA7XFxuK1xcdHUzMiBjdHJsO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xcbitcXHRcXHRpbnQgcG9ydCA9IGRwLVxcdTAwM2VpbmRleDtcXG4rXFxuK1xcdFxcdGlmICghZHAtXFx1MDAzZWRuKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGxlZHNfbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkcC1cXHUwMDNlZG4sIFxcXCJsZWRzXFxcIik7XFxuK1xcdFxcdGlmICghbGVkc19ucClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcXG4rXFx0XFx0XFx0aW50IHBvbGFyaXR5O1xcbitcXG4rXFx0XFx0XFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnBvbGFyaXR5KTtcXG4rXFx0XFx0XFx0aWYgKHJlcykge1xcbitcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0XFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmIChwb2xhcml0eSkge1xcbitcXHRcXHRcXHRcXHRpbnZfbWFzayB8PSBCSVQocG9ydCk7XFxuK1xcdFxcdFxcdFxcdGlmIChwb2xhcml0eSBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdFxcdFxcdGludl9jdHJsIHw9IEJJVChwb3J0KTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvZl9ub2RlX3B1dChsZWRzX25wKTtcXG4rXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0bWFzayA9IFlUOTIxWF9MRURfQ1RSTF9NT0RFX00gfCBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XFxuK1xcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XFxuK1xcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU0oWVQ5MjFYX1BPUlRfTlVNIC0gMSkgfFxcbitcXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX0VOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGdvdG8gZW5kO1xcbitcXG4rXFx0LyogSW52ZXJzaW9uIGlzIGludGVybmFsIC0gZm9yY2Ugb24gd2lsbCBnaXZlIGxvdyBsb2dpYy5cXG4rXFx0ICogSW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUsIHRyZWF0IExFRHMgYXMgaWYgYWN0aXZlLWxvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChpbnZfbWFzaylcXG4rXFx0XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEX1BBUl9JTlYsIGludl9tYXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludl9jdHJsKTtcXG4rXFxuK2VuZDpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyOlxcbitcXHR5dDkyMXhfbGVkc190ZWFyZG93bihwcml2KTtcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmJkMjA3ZTA5YThkZjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcXG5AQCAtMCwwICsxLDExOCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1lUX0xFRFNfSFxcbisjZGVmaW5lIF9ZVF9MRURTX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2NvbmZpZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGVkcy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0NUUkxcXHRcXHRcXHQweGQwMDAwXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfQ1RSTF9FTlxcdFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVxcdEdFTk1BU0soMjAsIDE5KVxcdC8qIGN5Y2xlID0gNTEyICogeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcXHRcXHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfQ1RSTF9MT09QREVURUNUX0JMSU5LX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cXHRcXHRHRU5NQVNLKDE2LCAxMylcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX01PREVfTVxcdFxcdFxcdEdFTk1BU0soMSwgMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFKHgpXFx0XFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTU9ERV9NLCAoeCkpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFxcdFxcdFxcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9TRVJJQUxcXHRcXHRcXHRZVDkyMVhfTEVEX0NUUkxfTU9ERSgyKVxcbisjZGVmaW5lIFlUOTIxWF9MRUQwX1BPUlRuKHBvcnQpXFx0XFx0KDB4ZDAwMDQgKyA0ICogKHBvcnQpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NXFx0XFx0XFx0R0VOTUFTSygxNywgMClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXFx0QklUKDE3KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMF9QT1JUX0FDVF9DT0xMSVNJT05fQkxJTktfSU5ESVxcdEJJVCgxNilcXG4rI2RlZmluZSBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NXFx0XFx0R0VOTUFTSygzMSwgMzApXFx0LyogY3ljbGUgPSA1MTIgXFx1MDAzZVxcdTAwM2UgeCBtcyAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOSyh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LX01cXHRcXHRHRU5NQVNLKDI5LCAyOClcXHQvKiBjeWNsZSA9IDUxMiBcXHUwMDNlXFx1MDAzZSB4IG1zICovXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOSyh4KVxcdFxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTSwgKHgpKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfQ09NUFxcdEJJVCgyNylcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX01cXHRcXHRHRU5NQVNLKDI2LCAyNSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWSh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8xXzJcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8yXzNcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzRcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV81XzZcXHRcXHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcXG4rI2RlZmluZSBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KVxcdFxcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncnApXFx0XFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNCAqIChncnApICsgMTgpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVxcdFxcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMClcXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDEpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXFx0XFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcXHRcXHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVxcdEdFTk1BU0soNCAqIChncnApICsgMTcsIDQgKiAoZ3JwKSArIDE2KVxcdC8qIGN5Y2xlID0gNTEyIFxcdTAwM2NcXHUwMDNjIHggbXMgKi9cXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgeClcXHRcXHQoKHgpIFxcdTAwM2NcXHUwMDNjICg0ICogKGdycCkgKyAxNikpXFxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncnApXFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JwLCAzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRUVFX0JMSU5LXFx0XFx0QklUKDE1KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9MT09QREVURUNUX0JMSU5LXFx0QklUKDE0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcXHRCSVQoMTMpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMXFx0QklUKDEyKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfSEFMRlxcdEJJVCgxMSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXFx0XFx0QklUKDYpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cXHRcXHRCSVQoNSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXFx0XFx0QklUKDQpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1xcdEJJVCgzKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTV9CTElOS1xcdEJJVCgyKVxcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDBNX0JMSU5LXFx0QklUKDEpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1xcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcXHRcXHQweGQwMTAwXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXFx0XFx0R0VOTUFTSygyNSwgMjQpXFx0LyogZGVsYXk/ICovXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfQUNUSVZFX0xPV1xcdFxcdEJJVCg0KVxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTVxcdFxcdEdFTk1BU0soMSwgMClcXHQvKiAjZ3JwIC0gMSAqL1xcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9HUlBfTlVNKHgpXFx0XFx0RklFTERfUFJFUChZVDkyMVhfTEVEX1NFUl9DVFJMX0dSUF9OVU1fTSwgKHgpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX01BUG5tKGdycCwgcG9ydClcXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX1BPUlRfTShwb3J0KVxcdEdFTk1BU0soNiAqICgocG9ydCkgJSA1KSArIDUsIDYgKiAoKHBvcnQpICUgNSkgKyAyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVxcdFxcdCgoeCkgXFx1MDAzY1xcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkgKyAyKSlcXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEX00ocG9ydClcXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fTEVEKHBvcnQsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqICgocG9ydCkgJSA1KSkpXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcXHRcXHQweGQwMWM0XFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXFx0XFx0MHhkMDFjOFxcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVxcdEJJVCgxMCAqIChncnApICsgKHBvcnQpKVxcbisjZGVmaW5lIFlUOTIxWF9MRURfUEFSX01BUG4ocG9ydClcXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX1BPUlRfTShncnApXFx0R0VOTUFTSyg2ICogKGdycCkgKyA1LCA2ICogKGdycCkgKyAyKVxcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqIChncnApICsgMikpXFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRF9NKGdycClcXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfUEFSX01BUF9EU1RuX0xFRChncnAsIHgpXFx0XFx0KCh4KSBcXHUwMDNjXFx1MDAzYyAoNiAqIChncnApKSlcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NSU5cXHQ2NFxcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXFx0NTEyXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9CTElOS19NQVhcXHQyMDQ4XFxuK1xcbisvKiAyICogbGNtKDIsIDMsIDQsIDYpICovXFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXFx0XFx0MjRcXG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcXHQoWVQ5MjFYX0xFRF9EVVRZX0RFTk9NICogKG5vbSkgLyAoZGVub20pKVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4rc3RydWN0IHl0OTIxeF9sZWQge1xcbitcXHRzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcXG4rXFx0dW5zaWduZWQgY2hhciBncm91cDtcXG4rXFxuK1xcdGJvb2wgdXNlX2N5Y2xlOjE7XFxuK1xcdGJvb2wgdXNlX2R1dHk6MTtcXG4rfTtcXG4rXFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1lUOTIxWF9MRURTKVxcbitcXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuK1xcbisjZWxzZVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuKyNlbmRpZlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmNcXG5AQCAtMCwwICsxLDE1NyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJjaGlwLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWkuaFxcXCJcXG4rXFxuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcXHQxMDAwMFxcbisjZGVmaW5lIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVNcXHQxMDAwMDBcXG4rXFxuK2ludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNlcmVhZChwcml2LVxcdTAwM2VyZWdfY3R4LCByZWcsIHZhbHApO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF9vbmNlKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcHJpdi1cXHUwMDNlcmVnX29wcy1cXHUwMDNld3JpdGUocHJpdi1cXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xcbit9XFxuK1xcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcXG4re1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoeXQ5MjF4X3JlZ19yZWFkLCByZXMsXFxuK1xcdFxcdFxcdFxcdHJlcyB8fCAodmFsIFxcdTAwMjYgbWFzaykgPT0gKnZhbHAsXFxuK1xcdFxcdFxcdFxcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxcbitcXHRcXHRcXHRcXHRmYWxzZSwgcHJpdiwgcmVnLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdCp2YWxwID0gdmFsO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcXG4re1xcbitcXHRpbnQgcmVzO1xcbitcXHR1MzIgdjtcXG4rXFx0dTMyIHU7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnLCBcXHUwMDI2dik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHR1ID0gdjtcXG4rXFx0dSBcXHUwMDI2PSB+bWFzaztcXG4rXFx0dSB8PSB2YWw7XFxuK1xcdGlmICh1ID09IHYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcXG4rfVxcbitcXG4raW50XFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXFxuK1xcdFxcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCAqIGksIFxcdTAwMjZ2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZyArIDQgKiBpLCB2YWxzW2ldKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludFxcbit5dDkyMXhfcmVnc191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdFxcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxcbit7XFxuK1xcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xcbitcXHR1MzIgdnNbNF07XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKG51bV9yZWdzIFxcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XFxuK1xcdFxcdHUzMiB1ID0gdnNbaV07XFxuK1xcbitcXHRcXHR1IFxcdTAwMjY9IH5tYXNrc1tpXTtcXG4rXFx0XFx0dSB8PSB2YWxzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuK1xcbitpbnRcXG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXFxuK1xcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXFxuK3tcXG4rXFx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XFxuK1xcdHUzMiB2c1s0XTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXFx1MDAzZSBBUlJBWV9TSVpFKHZzKSkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ3NfcmVhZChwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcXG4rXFx0XFx0dTMyIHUgPSB2c1tpXTtcXG4rXFxuK1xcdFxcdHUgXFx1MDAyNj0gfm1hc2tzW2ldO1xcbitcXHRcXHRpZiAodSAhPSB2c1tpXSlcXG4rXFx0XFx0XFx0Y2hhbmdlZCA9IHRydWU7XFxuK1xcbitcXHRcXHR2c1tpXSA9IHU7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghY2hhbmdlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaFxcbkBAIC0wLDAgKzEsODggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcXG4rICovXFxuK1xcbisjaWZuZGVmIF9ZVF9TTUlfSFxcbisjZGVmaW5lIF9ZVF9TTUlfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JkcGFydC5oXFx1MDAzZVxcbitcXG4rc3RydWN0IHl0OTIxeF9wcml2O1xcbitcXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XFxuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbCk7XFxuK2ludCB5dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKTtcXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcXG4rXFx0XFx0XFx0ICAgdTMyIHZhbCk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcXG4re1xcbitcXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XFxuK31cXG4rXFxuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcXG4rICogbG9uZyByZWdpc3Rlci4gTW9yZSBzcGVjaWZpY2FsbHksIHdyaXRlcyB0byBwYXJ0cyBvZiBpdHMgd29yZHMgd29uJ3QgYmVjb21lXFxuKyAqIHZpc2libGUsIHVudGlsIHRoZSBsYXN0IHdvcmQgaXMgd3JpdHRlbi5cXG4rICpcXG4rICogSGVyZSB3ZSByZXF1aXJlIGZ1bGwgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvdmVyIHRoZXNlIHJlZ2lzdGVycyB0b1xcbisgKiBlbGltaW5hdGUgcG90ZW50aWFsIGlzc3VlcywgYWx0aG91Z2ggcGFydGlhbCByZWFkcy93cml0ZXMgYXJlIGFsc28gcG9zc2libGUuXFxuKyAqL1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXFxuK3tcXG4rXFx0KmxvIFxcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xcbitcXHQqaGkgXFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XFxuK1xcdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XFxuK1xcdCpoaSB8PSB1cHBlcl8zMl9iaXRzKHZhbCk7XFxuK31cXG4rXFxuK2ludCB5dDkyMXhfcmVnc19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxzLFxcbitcXHRcXHQgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XFxuK2ludCB5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcXG4rXFx0XFx0ICAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcXG4rXFx0XFx0XFx0ICAgIGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcXG4raW50IHl0OTIxeF9yZWdzX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxcbitcXHRcXHRcXHQgY29uc3QgdTMyICp2YWxzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2tzLCB2YWxzLCAyKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBpbnRcXG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxcbit7XFxuK1xcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit5dDkyMXhfcmVnOTZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXFxuK3tcXG4rXFx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMyk7XFxuK31cXG4rXFxuKyNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNjozMi4xNTM0NzI0ODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNzc4NTIyOTEwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDkwN2U3OWNmOTI4Y2ZiNDYxMTg1ZjNjZGVmZDE0YzVlOWNiMzVhMDRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDE3OjE2OjMwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNTJmMWE1NWVjYTk5YmYuLmEzYzhkOGEwMWM2YmE3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTgyMzAsNyArMTgyMzAsNyBAQCBNOlx0RGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbFxuLUY6XHRkcml2ZXJzL25ldC9kc2EveXQ5MjF4LipcbitGOlx0ZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9cbiBGOlx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcbiBcbiBNT1hBIFNNQVJUSU8vSU5EVVNUSU8vSU5URUxMSU8gU0VSSUFMIENBUkRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXG5pbmRleCA0YWI1NjdjNWJiYWZjNi4uOThlOWJiZTQ3ZGU3YjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC03Miw2ICs3Miw4IEBAIGNvbmZpZyBORVRfRFNBX01WODhFNjA2MFxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvS2NvbmZpZ1wiXG4gXG4rc291cmNlIFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9LY29uZmlnXCJcbitcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L0tjb25maWdcIlxuIFxuIHNvdXJjZSBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9LY29uZmlnXCJcbkBAIC0xNTgsMTIgKzE2MCw0IEBAIGNvbmZpZyBORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STVxuIFx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFZpdGVzc2UgVlNDNzM4NSwgVlNDNzM4OCwgVlNDNzM5NVxuIFx0ICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlclxuIFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxuLVxuLWNvbmZpZyBORVRfRFNBX1lUOTIxWFxuLVx0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuLVx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuLVx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0Jcbi1cdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuLVx0ICBjaGlwLlxuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGQyOTc1YmFkZmZjMDkzLi4xMzgyMjViYWE0ZDU2NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5AQCAtMTQsMTEgKzE0LDExIEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4gb2JqLXlcdFx0XHRcdCs9IGI1My9cbiBvYmoteVx0XHRcdFx0Kz0gaGlyc2NobWFubi9cbiBvYmoteVx0XHRcdFx0Kz0gbGFudGlxL1xuIG9iai15XHRcdFx0XHQrPSBtaWNyb2NoaXAvXG4rb2JqLXlcdFx0XHRcdCs9IG1vdG9yY29tbS9cbiBvYmoteVx0XHRcdFx0Kz0gbXY4OGU2eHh4L1xuIG9iai15XHRcdFx0XHQrPSBteGw4NjJ4eC9cbiBvYmoteVx0XHRcdFx0Kz0gbmV0Yy9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWcgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzQzOGUwYjE0MzYxMWFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vS2NvbmZpZ1xuQEAgLTAsMCArMSwxNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWFxuK1x0dHJpc3RhdGUgXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTIxWFxuK1x0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbitcdGhlbHBcbitcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBjaGlwLlxuK1xuK2NvbmZpZyBORVRfRFNBX1lUOTIxWF9MRURTXG4rXHRib29sIFwiTEVEIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBZVDkyMTVcIlxuK1x0ZGVmYXVsdCB5XG4rXHRkZXBlbmRzIG9uIE5FVF9EU0FfWVQ5MjFYXG4rXHRkZXBlbmRzIG9uIExFRFNfQ0xBU1M9eSB8fCBMRURTX0NMQVNTPU5FVF9EU0FfWVQ5MjFYXG4rXHRoZWxwXG4rXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgTEVEcyBhdHRhY2hlZCB0byB0aGVcbitcdCAgTW90b3Jjb21tIFlUOTIxNSBzd2l0Y2ggY2hpcHMuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWE2M2RiMDAyOWZmZTJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGVcbkBAIC0wLDAgKzEsNSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuK29iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cbit5dDkyMXgtb2JqcyA6PSBjaGlwLm9cbit5dDkyMXgtJChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUykgKz0gbGVkcy5vXG4reXQ5MjF4LW9ianMgKz0gc21pLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5pbmRleCAxNTliMTY2MDZmNmNhNC4uYTM1MTIxMzYzODNiMzYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXG5AQCAtMTMsNyArMTMsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfaHNyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuQEAgLTI2LDcgKzI1LDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWVlZTgwMjFxLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gXG4tI2luY2x1ZGUgXCJ5dDkyMXguaFwiXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwibGVkcy5oXCJcbisjaW5jbHVkZSBcInNtaS5oXCJcbiBcbiBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjIHtcbiBcdHVuc2lnbmVkIGludCBzaXplO1xuQEAgLTE1MSwxMyArMTUyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4tXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuLSNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4tI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbi1cbiAvKiBUaGUgaW50ZXJ2YWwgc2hvdWxkIGJlIHNtYWxsIGVub3VnaCB0byBhdm9pZCBvdmVyZmxvdyBvZiAzMmJpdCBNSUJzLlxuICAqXG4gICogVW50aWwgd2UgY2FuIHJlYWQgTUlCcyBmcm9tIHN0YXRzNjQgY2FsbCBkaXJlY3RseSAoaS5lLiBzbGVlcFxuQEAgLTE5NiwyMDggKzE5Miw2IEBAIHN0YXRpYyB1MzIgZXRoYWRkcl9sbzJfdG9fdTMyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4gXHRyZXR1cm4gKGFkZHJbNF0gXHUwMDNjXHUwMDNjIDgpIHwgYWRkcls1XTtcbiB9XG4gXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHApXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgeXQ5MjF4X3JlZ193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiB2YWwpXG4te1xuLVx0V0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spKTtcbi1cbi1cdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNld3JpdGUocHJpdi1cdTAwM2VyZWdfY3R4LCByZWcsIHZhbCk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyICp2YWxwKVxuLXtcbi1cdHUzMiB2YWw7XG4tXHRpbnQgcmVzO1xuLVx0aW50IHJldDtcbi1cbi1cdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KHl0OTIxeF9yZWdfcmVhZCwgcmVzLFxuLVx0XHRcdFx0cmVzIHx8ICh2YWwgXHUwMDI2IG1hc2spID09ICp2YWxwLFxuLVx0XHRcdFx0WVQ5MjFYX1BPTExfU0xFRVBfVVMsIFlUOTIxWF9QT0xMX1RJTUVPVVRfVVMsXG4tXHRcdFx0XHRmYWxzZSwgcHJpdiwgcmVnLCBcdTAwMjZ2YWwpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHQqdmFscCA9IHZhbDtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ191cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKVxuLXtcbi1cdGludCByZXM7XG4tXHR1MzIgdjtcbi1cdHUzMiB1O1xuLVxuLVx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXHUwMDI2dik7XG4tXHRpZiAocmVzKVxuLVx0XHRyZXR1cm4gcmVzO1xuLVxuLVx0dSA9IHY7XG4tXHR1IFx1MDAyNj0gfm1hc2s7XG4tXHR1IHw9IHZhbDtcbi1cdGlmICh1ID09IHYpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnLCB1KTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX3NldF9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCAwLCBtYXNrKTtcbi19XG4tXG4tc3RhdGljIGludCB5dDkyMXhfcmVnX2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssIDApO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbi17XG4tXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4tfVxuLVxuLS8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbi0gKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbi0gKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4tICpcbi0gKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4tICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuLSAqL1xuLVxuLXN0YXRpYyB2b2lkIHVwZGF0ZV9jdHJsc191bmFsaWduZWQodTMyICpsbywgdTMyICpoaSwgdTY0IG1hc2ssIHU2NCB2YWwpXG4te1xuLVx0KmxvIFx1MDAyNj0gfmxvd2VyXzMyX2JpdHMobWFzayk7XG4tXHQqaGkgXHUwMDI2PSB+dXBwZXJfMzJfYml0cyhtYXNrKTtcbi1cdCpsbyB8PSBsb3dlcl8zMl9iaXRzKHZhbCk7XG4tXHQqaGkgfD0gdXBwZXJfMzJfYml0cyh2YWwpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscyxcbi1cdFx0IHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRpbnQgcmVzO1xuLVxuLVx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIG51bV9yZWdzOyBpKyspIHtcbi1cdFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZyArIDQgKiBpLCBcdTAwMjZ2YWxzW2ldKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm4gcmVzO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbi1cdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0aW50IHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuLVx0XHRpZiAocmVzKVxuLVx0XHRcdHJldHVybiByZXM7XG4tXHR9XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludFxuLXl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbi1cdFx0XHRjb25zdCB1MzIgKnZhbHMsIHVuc2lnbmVkIGludCBudW1fcmVncylcbi17XG4tXHRib29sIGNoYW5nZWQgPSBmYWxzZTtcbi1cdHUzMiB2c1s0XTtcbi1cdGludCByZXM7XG4tXG4tXHRCVUlMRF9CVUdfT04obnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKTtcbi1cbi1cdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLVx0aWYgKHJlcylcbi1cdFx0cmV0dXJuIHJlcztcbi1cbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4tXHRcdHUzMiB1ID0gdnNbaV07XG4tXG4tXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4tXHRcdHUgfD0gdmFsc1tpXTtcbi1cdFx0aWYgKHUgIT0gdnNbaV0pXG4tXHRcdFx0Y2hhbmdlZCA9IHRydWU7XG4tXG4tXHRcdHZzW2ldID0gdTtcbi1cdH1cbi1cbi1cdGlmICghY2hhbmdlZClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4tXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4te1xuLVx0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4tXHR1MzIgdnNbNF07XG4tXHRpbnQgcmVzO1xuLVxuLVx0QlVJTERfQlVHX09OKG51bV9yZWdzIFx1MDAzZSBBUlJBWV9TSVpFKHZzKSk7XG4tXG4tXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbi1cdGlmIChyZXMpXG4tXHRcdHJldHVybiByZXM7XG4tXG4tXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuLVx0XHR1MzIgdSA9IHZzW2ldO1xuLVxuLVx0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuLVx0XHRpZiAodSAhPSB2c1tpXSlcbi1cdFx0XHRjaGFuZ2VkID0gdHJ1ZTtcbi1cbi1cdFx0dnNbaV0gPSB1O1xuLVx0fVxuLVxuLVx0aWYgKCFjaGFuZ2VkKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZzLCBudW1fcmVncyk7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdmFscywgMik7XG4tfVxuLVxuLXN0YXRpYyBpbnRcbi15dDkyMXhfcmVnNjRfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuLVx0XHRcdCBjb25zdCB1MzIgKnZhbHMpXG4te1xuLVx0cmV0dXJuIHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFza3MsIHZhbHMsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuLX1cbi1cbi1zdGF0aWMgaW50XG4teXQ5MjF4X3JlZzk2X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuLXtcbi1cdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHl0OTIxeF9yZWdfbWRpb19yZWFkKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiAqdmFscClcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3JlZ19tZGlvICptZGlvID0gY29udGV4dDtcbkBAIC00Nzg2LDYgKzQ1ODAsMTIgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdGlmIChyZXMpXG4gXHRcdHJldHVybiByZXM7XG4gXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcbitcdGlmIChyZXMpXG4rXHRcdGRldl93YXJuKGRldiwgXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXG5cIiwgcmVzKTtcbisjZW5kaWZcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuaFxuc2ltaWxhcml0eSBpbmRleCA5OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5pbmRleCA1NTUwNDY1MjY2Njk1Mi4uNjU3MGFlNTkwMmFkZWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5oXG5AQCAtODUwLDggKzg1MCwxMyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiAjZGVmaW5lIFlUOTIxWF9BQ0xfTlVNXHRcdChZVDkyMVhfQUNMX0JMS19OVU0gKiBZVDkyMVhfQUNMX0VOVF9QRVJfQkxLKVxuICNkZWZpbmUgWVQ5MjFYX1VERl9OVU1cdFx0OFxuIFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9HUk9VUF9OVU1cdDNcbitcbiAvKiA4IGludGVybmFsICsgMiBleHRlcm5hbCArIDEgbWN1ICovXG4tI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuKyNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdDExXG4rI2RlZmluZSBZVDkyMVhfUE9SVF9NQ1VcdFx0MTBcbitcbisjZGVmaW5lIFlUOTIxWF9OQU1FXHRcInl0OTIxeFwiXG4gXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19pbnRlcm5hbChwb3J0KSAoKHBvcnQpIFx1MDAzYyA4KVxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKDggXHUwMDNjPSAocG9ydCkgXHUwMDI2XHUwMDI2IChwb3J0KSBcdTAwM2MgOSlcbkBAIC05MzgsNiArOTQzLDEzIEBAIHN0cnVjdCB5dDkyMXhfcG9ydCB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X21pYiBtaWI7XG4gXHR1NjQgcnhfZnJhbWVzO1xuIFx0dTY0IHR4X2ZyYW1lcztcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcbitcdHVuc2lnbmVkIGNoYXIgbGVkX2R1dHk7XG4rXHR1bnNpZ25lZCBzaG9ydCBsZWRfY3ljbGU7XG4rXG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkc1tZVDkyMVhfTEVEX0dST1VQX05VTV07XG4rI2VuZGlmXG4gfTtcbiBcbiBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjA2NmE3ZTg0ZmU2YmNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jXG5AQCAtMCwwICsxLDYwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VsZWRzLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImNoaXAuaFwiXG4rI2luY2x1ZGUgXCJsZWRzLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgdG9feXQ5MjF4X2xlZChsZWRfY2RldikgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgobGVkX2NkZXYpLCBzdHJ1Y3QgeXQ5MjF4X2xlZCwgY2RldilcbisjZGVmaW5lIHRvX3l0OTIxeF9wb3J0KGxlZCkgKChsZWQpLVx1MDAzZXBvcnQpXG4rI2RlZmluZSB0b195dDkyMXhfcHJpdihwcCkgXFxcbitcdGNvbnRhaW5lcl9vZl9jb25zdCgocHApLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIHBvcnRzWyhwcCktXHUwMDNlaW5kZXhdKVxuKyNkZWZpbmUgdG9fZGV2aWNlKHByaXYpICgocHJpdiktXHUwMDNlZHMuZGV2KVxuK1xuK3N0YXRpYyB1MzIgeXQ5MjF4X2xlZF9yZWdhZGRyKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCBncm91cClcbit7XG4rXHRzd2l0Y2ggKGdyb3VwKSB7XG4rXHRjYXNlIDA6XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gWVQ5MjFYX0xFRDBfUE9SVG4ocG9ydCk7XG4rXHRjYXNlIDE6XG4rXHRcdHJldHVybiBZVDkyMVhfTEVEMV9QT1JUbihwb3J0KTtcbitcdGNhc2UgMjpcbitcdFx0cmV0dXJuIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9mb3JjZV9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sICpvbnApXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Km9ucCA9ICh2YWwgXHUwMDI2IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApKSA9PVxuK1x0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX09OKGdyb3VwKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50XG4reXQ5MjF4X2xlZF9mb3JjZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLCBib29sIG9uKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dTMyIGN0cmw7XG4rXHR1MzIgbWFzaztcbitcbitcdGxlZC1cdTAwM2V1c2VfY3ljbGUgPSBmYWxzZTtcbitcdGxlZC1cdTAwM2V1c2VfZHV0eSA9IGZhbHNlO1xuK1xuK1x0bWFzayA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0Y3RybCA9IG9uID8gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT04oZ3JvdXApIDpcbitcdCAgICAgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PRkYoZ3JvdXApO1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIG1hc2ssXG4rXHRcdFx0XHQgICAgICBjdHJsKTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyBvbixcbitcdFx0XHR1bnNpZ25lZCBsb25nIG9mZiwgdW5zaWduZWQgc2hvcnQgKmN5Y2xlcCxcbitcdFx0XHR1bnNpZ25lZCBjaGFyICpkdXR5cClcbit7XG4rXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkdXR5c1tdID0ge1xuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgNiksXG4rXHRcdFlUOTIxWF9MRURfRFVUWSgxLCA0KSxcbitcdFx0WVQ5MjFYX0xFRF9EVVRZKDEsIDMpLFxuK1x0XHRZVDkyMVhfTEVEX0RVVFkoMSwgMiksXG4rXHR9O1xuK1x0dW5zaWduZWQgaW50IGN5Y2xlX3VwcGVyO1xuK1x0dW5zaWduZWQgaW50IGN5Y2xlX3JlcTtcbitcdHVuc2lnbmVkIGludCBkdXR5X3JlcTtcbitcdHVuc2lnbmVkIGludCBjeWNsZTtcbitcdHVuc2lnbmVkIGludCBkdXR5O1xuK1xuK1x0Y3ljbGUgPSBZVDkyMVhfTEVEX0JMSU5LX01BWDtcbitcdGN5Y2xlX3VwcGVyID0gY3ljbGUgKiAxMTU4NSAvIDgxOTIgKyAxOyAgLyogTV9TUVJUMiAqIGN5Y2xlICovXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KG9uLCBvZmYsIFx1MDAyNmN5Y2xlX3JlcSkgfHwgY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGZvciAoOyBjeWNsZSBcdTAwM2UgWVQ5MjFYX0xFRF9CTElOS19NSU47IGN5Y2xlX3VwcGVyIFx1MDAzZVx1MDAzZT0gMSwgY3ljbGUgXHUwMDNlXHUwMDNlPSAxKVxuK1x0XHRpZiAoY3ljbGVfcmVxIFx1MDAzZT0gY3ljbGVfdXBwZXIgXHUwMDNlXHUwMDNlIDEpXG4rXHRcdFx0YnJlYWs7XG4rXHQqY3ljbGVwID0gY3ljbGU7XG4rXG4rXHRkdXR5X3JlcSA9IERJVl9ST1VORF9DTE9TRVNUKFlUOTIxWF9MRURfRFVUWV9ERU5PTSAqXG4rXHRcdFx0XHQgICAgIChvbiBcdTAwM2Ugb2ZmID8gb2ZmIDogb24pLCBjeWNsZV9yZXEpO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IEFSUkFZX1NJWkUoZHV0eXMpIC0gMTs7IGktLSlcbitcdFx0aWYgKGkgPT0gMCB8fCBkdXR5X3JlcSBcdTAwM2U9IChkdXR5c1tpIC0gMV0gKyBkdXR5c1tpXSkgLyAyKSB7XG4rXHRcdFx0ZHV0eSA9IGR1dHlzW2ldO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHRpZiAob24gXHUwMDNlIG9mZilcbitcdFx0ZHV0eSA9IFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHk7XG4rXHQqZHV0eXAgPSBkdXR5O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfbGVkX2JsaW5rX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgZ3JvdXAsXG4rXHRcdCAgICAgdW5zaWduZWQgbG9uZyAqb25wLCB1bnNpZ25lZCBsb25nICpvZmZwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHBwLVx1MDAzZWxlZHNbZ3JvdXBdO1xuK1x0dW5zaWduZWQgc2hvcnQgY3ljbGU7XG4rXHR1bnNpZ25lZCBjaGFyIGR1dHk7XG4rXHRib29sIHVzZV9jeWNsZTtcbitcdHUzMiBjdHJsO1xuK1x0dTMyIG1hc2s7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcbitcdGlmICghKm9ucCBcdTAwMjZcdTAwMjYgISpvZmZwKSB7XG4rXHRcdGN5Y2xlID0gWVQ5MjFYX0xFRF9CTElOS19ERUY7XG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4rXHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgaSsrKVxuK1x0XHRcdGlmIChpICE9IGdyb3VwIFx1MDAyNlx1MDAyNiBwcC1cdTAwM2VsZWRzW2ldIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBwcC1cdTAwM2VsZWRzW2ldLVx1MDAzZXVzZV9kdXR5KSB7XG4rXHRcdFx0XHRkdXR5ID0gcHAtXHUwMDNlbGVkX2R1dHk7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdHVzZV9jeWNsZSA9IGZhbHNlO1xuK1x0fSBlbHNlIHtcbitcdFx0Ym9vbCBjaGFuZ2VfY3ljbGU7XG4rXHRcdGJvb2wgY2hhbmdlX2R1dHk7XG4rXG4rXHRcdHJlcyA9IHl0OTIxeF9sZWRfYmxpbmtfc2VsZWN0KHByaXYsICpvbnAsICpvZmZwLCBcdTAwMjZjeWNsZSwgXHUwMDI2ZHV0eSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcbitcdFx0dXNlX2N5Y2xlID0gY3ljbGUgXHUwMDNjIFlUOTIxWF9MRURfQkxJTktfREVGO1xuK1x0XHRjaGFuZ2VfY3ljbGUgPSB1c2VfY3ljbGUgXHUwMDI2XHUwMDI2IGN5Y2xlICE9IHBwLVx1MDAzZWxlZF9jeWNsZTtcbitcdFx0Y2hhbmdlX2R1dHkgPSBkdXR5ICE9IHBwLVx1MDAzZWxlZF9kdXR5O1xuK1x0XHRpZiAoY2hhbmdlX2N5Y2xlIHx8IGNoYW5nZV9kdXR5KVxuK1x0XHRcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTtcbitcdFx0XHQgICAgIGkrKykge1xuK1x0XHRcdFx0aWYgKGkgPT0gZ3JvdXAgfHwgIXBwLVx1MDAzZWxlZHNbaV0pXG4rXHRcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdFx0aWYgKChjaGFuZ2VfY3ljbGUgXHUwMDI2XHUwMDI2IHBwLVx1MDAzZWxlZHNbaV0tXHUwMDNldXNlX2N5Y2xlKSB8fFxuK1x0XHRcdFx0ICAgIChjaGFuZ2VfZHV0eSBcdTAwMjZcdTAwMjYgcHAtXHUwMDNlbGVkc1tpXS1cdTAwM2V1c2VfZHV0eSkpXG4rXHRcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0XHR9XG4rXHR9XG4rXG4rXHQvKiBUaGUgY2hpcCBzZWVtcyB0byBqYW0gYSB3aGlsZSBpZiBjaGFuZ2luZyBkdXR5IGRpcmVjdGx5ICovXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0xFRDJfUE9SVG4ocG9ydCksIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0Y3RybCA9IHZhbCBcdTAwMjYgfllUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApO1xuK1x0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9ET05UQ0FSRShncm91cCk7XG4rXHRpZiAodmFsICE9IGN0cmwpIHtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTSB8IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV9DT01QO1xuK1x0c3dpdGNoIChkdXR5IFx1MDAzZT0gWVQ5MjFYX0xFRF9EVVRZKDEsIDIpID8gZHV0eSA6XG4rXHRcdFlUOTIxWF9MRURfRFVUWV9ERU5PTSAtIGR1dHkpIHtcbitcdGRlZmF1bHQ6XG4rXHRcdGR1dHkgPSBZVDkyMVhfTEVEX0RVVFkoMSwgMik7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoMSwgMik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfMV8yO1xuK1x0XHRicmVhaztcbitcdGNhc2UgWVQ5MjFYX0xFRF9EVVRZKDIsIDMpOlxuK1x0XHRjdHJsID0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfMztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFlUOTIxWF9MRURfRFVUWSgzLCA0KTpcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQxX1BPUlRfQkxJTktfRFVUWV8zXzQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBZVDkyMVhfTEVEX0RVVFkoNSwgNik6XG4rXHRcdGN0cmwgPSBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfNV82O1xuK1x0XHRicmVhaztcbitcdH1cbitcdGlmIChkdXR5IFx1MDAzYyBZVDkyMVhfTEVEX0RVVFkoMSwgMikpXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVA7XG4rXHRpZiAodXNlX2N5Y2xlKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NO1xuK1x0XHRjdHJsIHw9IFlUOTIxWF9MRUQxX1BPUlRfT1RIRVJfQkxJTksoOSAtIF9fZmxzKGN5Y2xlKSk7XG4rXHR9XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpLCBtYXNrLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRjdHJsID0gdmFsIFx1MDAyNiB+KFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX00oZ3JvdXApIHxcbitcdFx0ICAgICAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JvdXApKTtcbitcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fQkxJTksoZ3JvdXApO1xuK1x0aWYgKHVzZV9jeWNsZSlcbitcdFx0Y3RybCB8PSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5Lbl9PVEhFUihncm91cCk7XG4rXHRlbHNlXG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRV9CTElOS24oZ3JvdXAsIF9fZmxzKGN5Y2xlKSAtIDkpO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0bGVkLVx1MDAzZXVzZV9jeWNsZSA9IHVzZV9jeWNsZTtcbitcdGlmICh1c2VfY3ljbGUpXG4rXHRcdHBwLVx1MDAzZWxlZF9jeWNsZSA9IGN5Y2xlO1xuK1x0bGVkLVx1MDAzZXVzZV9kdXR5ID0gdHJ1ZTtcbitcdHBwLVx1MDAzZWxlZF9kdXR5ID0gZHV0eTtcbitcbitcdCpvbnAgPSBESVZfUk9VTkRfQ0xPU0VTVChkdXR5ICogY3ljbGUsIFlUOTIxWF9MRURfRFVUWV9ERU5PTSk7XG4rXHQqb2ZmcCA9IGN5Y2xlIC0gKm9ucDtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3QgdTMyIHl0OTIxeF9sZWRfdHJpZ2dlcl9tYXBzW19fVFJJR0dFUl9ORVRERVZfTUFYXSA9IHtcbitcdFtUUklHR0VSX05FVERFVl9MSU5LXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGIHxcbitcdFx0XHRcdFx0ICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTCxcbitcdFtUUklHR0VSX05FVERFVl9MSU5LXzEwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xME0sXG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDBdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME0sXG4rXHRbVFJJR0dFUl9ORVRERVZfTElOS18xMDAwXVx0PSBZVDkyMVhfTEVEeF9QT1JUX0FDVF8xMDAwTSxcbitcdFtUUklHR0VSX05FVERFVl9IQUxGX0RVUExFWF1cdD0gWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfRFVQTEVYX0hBTEYsXG4rXHRbVFJJR0dFUl9ORVRERVZfRlVMTF9EVVBMRVhdXHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9GVUxMLFxuK1x0W1RSSUdHRVJfTkVUREVWX1RYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYLFxuK1x0W1RSSUdHRVJfTkVUREVWX1JYXVx0XHQ9IFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYLFxuK307XG4rXG4rc3RhdGljIGJvb2xcbit5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKGNvbnN0IHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4rXHRcdFx0XHRpbnQgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0KGksIFx1MDAyNmZsYWdzLCBfX1RSSUdHRVJfTkVUREVWX01BWClcbitcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9nZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHUzMiBhZGRyO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXM7XG4rXG4rXHRhZGRyID0geXQ5MjF4X2xlZF9yZWdhZGRyKHByaXYsIHBvcnQsIGdyb3VwKTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBhZGRyLCBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdCpmbGFnc3AgPSAwO1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIF9fVFJJR0dFUl9ORVRERVZfTUFYOyBpKyspIHtcbitcdFx0dTMyIG1hc2sgPSB5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXTtcbitcbitcdFx0aWYgKG1hc2sgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IG1hc2spID09IG1hc2spXG4rXHRcdFx0KmZsYWdzcCB8PSBCSVQoaSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfdHJpZ2dlcl9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IGdyb3VwLFxuK1x0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1twb3J0XTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0dTMyIGFkZHI7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZmbGFncywgX19UUklHR0VSX05FVERFVl9NQVgpIHtcbitcdFx0aWYgKCF5dDkyMXhfbGVkX3RyaWdnZXJfbWFwc1tpXSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRcdGN0cmwgfD0geXQ5MjF4X2xlZF90cmlnZ2VyX21hcHNbaV07XG4rXHR9XG4rXG4rXHRsZWQtXHUwMDNldXNlX2N5Y2xlID0gZmFsc2U7XG4rXHRsZWQtXHUwMDNldXNlX2R1dHkgPSBmYWxzZTtcbitcbitcdG1hc2sgPSAhZ3JvdXAgPyBZVDkyMVhfTEVEMF9QT1JUX0FDVF9NIDogWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfTTtcbitcdGlmIChncm91cCA9PSAyKSB7XG4rXHRcdG1hc2sgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fTShncm91cCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JvdXApO1xuK1x0fVxuK1x0YWRkciA9IHl0OTIxeF9sZWRfcmVnYWRkcihwcml2LCBwb3J0LCBncm91cCk7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIGFkZHIsIG1hc2ssIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChncm91cCAhPSAyKSB7XG4rXHRcdG1hc2sgPSBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdyb3VwKTtcbitcdFx0Y3RybCA9IFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0RPTlRDQVJFKGdyb3VwKTtcbitcdFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfTEVEMl9QT1JUbihwb3J0KSxcbitcdFx0XHRcdFx0ICAgICBtYXNrLCBjdHJsKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnRcbit5dDkyMXhfY2xlZF9icmlnaHRuZXNzX3NldF9ibG9ja2luZyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldixcbitcdFx0XHRcdCAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfZm9yY2Vfc2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGJyaWdodG5lc3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9jbGVkX2JsaW5rX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sXG4rXHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjF4X2xlZF9ibGlua19zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZGVsYXlfb24sXG4rXHRcdFx0XHQgICBkZWxheV9vZmYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBkZXZpY2UgKiBfX21heWJlX3VudXNlZFxuK3l0OTIxeF9jbGVkX2h3X2NvbnRyb2xfZ2V0X2RldmljZShzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4rXG4rXHRkcCA9IGRzYV90b19wb3J0KFx1MDAyNnByaXYtXHUwMDNlZHMsIHBwLVx1MDAzZWluZGV4KTtcbitcdGlmICghZHAgfHwgIWRwLVx1MDAzZXVzZXIpXG4rXHRcdHJldHVybiBOVUxMO1xuK1x0cmV0dXJuIFx1MDAyNmRwLVx1MDAzZXVzZXItXHUwMDNlZGV2O1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9pc19zdXBwb3J0ZWQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsXG4rXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X2xlZCAqbGVkID0gdG9feXQ5MjF4X2xlZChsZWRfY2Rldik7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gdG9feXQ5MjF4X3BvcnQobGVkKTtcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KHBwKTtcbitcbitcdGlmICh5dDkyMXhfbGVkX3RyaWdnZXJfaXNfc3VwcG9ydGVkKHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbit5dDkyMXhfY2xlZF9od19jb250cm9sX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3NwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSB0b195dDkyMXhfbGVkKGxlZF9jZGV2KTtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSB0b195dDkyMXhfcG9ydChsZWQpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYocHApO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMXhfbGVkX3RyaWdnZXJfZ2V0KHByaXYsIHBwLVx1MDAzZWluZGV4LCBsZWQtXHUwMDNlZ3JvdXAsIGZsYWdzcCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4reXQ5MjF4X2NsZWRfaHdfY29udHJvbF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9sZWQgKmxlZCA9IHRvX3l0OTIxeF9sZWQobGVkX2NkZXYpO1xuK1x0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IHRvX3l0OTIxeF9wb3J0KGxlZCk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihwcCk7XG4rXHRpbnQgcmVzO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIxeF9sZWRfdHJpZ2dlcl9zZXQocHJpdiwgcHAtXHUwMDNlaW5kZXgsIGxlZC1cdTAwM2Vncm91cCwgZmxhZ3MpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIxeF9sZWRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsIGludCAqcG9sYXJpdHlwKVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0c3RydWN0IGxlZF9pbml0X2RhdGEgaW5pdF9kYXRhO1xuK1x0c3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXY7XG4rXHRjaGFyIG5hbWVbTEVEX01BWF9OQU1FX1NJWkVdO1xuK1x0ZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSBzdGF0ZTtcbitcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQ7XG4rXHRib29sIGZvcmNlX2hpZ2g7XG4rXHRib29sIGZvcmNlX2xvdztcbitcdGludCBwb2xhcml0eTtcbitcdHUzMiBncm91cDtcbitcdGJvb2wgb247XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKHBvcnQgPT0gWVQ5MjFYX1BPUlRfTUNVKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIk5vIExFRHMgZm9yIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0cmVzID0gZndub2RlX3Byb3BlcnR5X3JlYWRfdTMyKGZ3bm9kZSwgXCJyZWdcIiwgXHUwMDI2Z3JvdXApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGlmIChncm91cCBcdTAwM2U9IFlUOTIxWF9MRURfR1JPVVBfTlVNKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkludmFsaWQgTEVEIHJlZyAldSBmb3IgcG9ydCAlZFxcblwiLCBncm91cCwgcG9ydCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0Zm9yY2VfaGlnaCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woZndub2RlLCBcImFjdGl2ZS1oaWdoXCIpO1xuK1x0Zm9yY2VfbG93ID0gZndub2RlX3Byb3BlcnR5X3JlYWRfYm9vbChmd25vZGUsIFwiYWN0aXZlLWxvd1wiKTtcbitcdGlmIChmb3JjZV9oaWdoIFx1MDAyNlx1MDAyNiBmb3JjZV9sb3cpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiRHVwbGljYXRlIHBvbGFyaXRpZXMgZm9yIExFRCAlMDJkOiUwMnVcXG5cIixcbitcdFx0XHRncm91cCwgcG9ydCk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0cG9sYXJpdHkgPSBmb3JjZV9oaWdoID8gMSA6IGZvcmNlX2xvdyA/IC0xIDogMDtcbitcbitcdGxlZCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbGVkKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxlZClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRwcC1cdTAwM2VsZWRzW2dyb3VwXSA9IGxlZDtcbitcbitcdGxlZC1cdTAwM2Vwb3J0ID0gcHA7XG4rXHRsZWQtXHUwMDNlZ3JvdXAgPSBncm91cDtcbitcbitcdHN0YXRlID0gbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoZndub2RlKTtcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRjYXNlIExFRFNfREVGU1RBVEVfT0ZGOlxuK1x0Y2FzZSBMRURTX0RFRlNUQVRFX09OOlxuK1x0XHRvbiA9IHN0YXRlICE9IExFRFNfREVGU1RBVEVfT0ZGO1xuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX3NldChwcml2LCBwb3J0LCBncm91cCwgb24pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTEVEU19ERUZTVEFURV9LRUVQOlxuK1x0XHRyZXMgPSB5dDkyMXhfbGVkX2ZvcmNlX2dldChwcml2LCBwb3J0LCBncm91cCwgXHUwMDI2b24pO1xuK1x0XHRicmVhaztcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0bGVkX2NkZXYgPSBcdTAwMjZsZWQtXHUwMDNlY2RldjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3MgPSBvbjtcbitcdGxlZF9jZGV2LVx1MDAzZW1heF9icmlnaHRuZXNzID0gMTtcbitcdGxlZF9jZGV2LVx1MDAzZWZsYWdzID0gTEVEX1JFVEFJTl9BVF9TSFVURE9XTjtcbitcdGxlZF9jZGV2LVx1MDAzZWJyaWdodG5lc3Nfc2V0X2Jsb2NraW5nID0geXQ5MjF4X2NsZWRfYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmc7XG4rXHRsZWRfY2Rldi1cdTAwM2VibGlua19zZXQgPSB5dDkyMXhfY2xlZF9ibGlua19zZXQ7XG4rI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTXG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3RyaWdnZXIgPSBcIm5ldGRldlwiO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9nZXRfZGV2aWNlID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXRfZGV2aWNlO1xuK1x0bGVkX2NkZXYtXHUwMDNlaHdfY29udHJvbF9pc19zdXBwb3J0ZWQgPSB5dDkyMXhfY2xlZF9od19jb250cm9sX2lzX3N1cHBvcnRlZDtcbitcdGxlZF9jZGV2LVx1MDAzZWh3X2NvbnRyb2xfZ2V0ID0geXQ5MjF4X2NsZWRfaHdfY29udHJvbF9nZXQ7XG4rXHRsZWRfY2Rldi1cdTAwM2Vod19jb250cm9sX3NldCA9IHl0OTIxeF9jbGVkX2h3X2NvbnRyb2xfc2V0O1xuKyNlbmRpZlxuK1xuK1x0c25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCBZVDkyMVhfTkFNRSBcIi0ldTolMDJkOiUwMnVcIixcbitcdFx0IHByaXYtXHUwMDNlZHMuaW5kZXgsIHBvcnQsIGdyb3VwKTtcbitcdGluaXRfZGF0YSA9ICh0eXBlb2YoaW5pdF9kYXRhKSl7XG4rXHRcdC5md25vZGUgPSBmd25vZGUsXG4rXHRcdC5kZXZpY2VuYW1lID0gbmFtZSxcbitcdFx0LmRldm5hbWVfbWFuZGF0b3J5ID0gdHJ1ZSxcbitcdH07XG4rXHRyZXMgPSBkZXZtX2xlZF9jbGFzc2Rldl9yZWdpc3Rlcl9leHQoZGV2LCBsZWRfY2RldiwgXHUwMDI2aW5pdF9kYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdGdvdG8gZXJyO1xuK1xuK1x0KnBvbGFyaXR5cCA9IHBvbGFyaXR5O1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyOlxuK1x0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0ZGV2bV9rZnJlZShkZXYsIGxlZCk7XG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgdm9pZCB5dDkyMXhfbGVkc190ZWFyZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0dTMyIG1hc2s7XG4rXHRpbnQgcmVzO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIFlUOTIxWF9QT1JUX05VTTsgcG9ydCsrKSB7XG4rXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW3BvcnRdO1xuK1xuK1x0XHRmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIFx1MDAzYyBZVDkyMVhfTEVEX0dST1VQX05VTTsgZ3JvdXArKykge1xuK1x0XHRcdHN0cnVjdCB5dDkyMXhfbGVkICpsZWQgPSBwcC1cdTAwM2VsZWRzW2dyb3VwXTtcbitcbitcdFx0XHRpZiAoIWxlZClcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGRldm1fbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoZGV2LCBcdTAwMjZsZWQtXHUwMDNlY2Rldik7XG4rXHRcdFx0cHAtXHUwMDNlbGVkc1tncm91cF0gPSBOVUxMO1xuK1x0XHRcdGRldm1fa2ZyZWUoZGV2LCBsZWQpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTEVEX1BBUl9QT1JUUywgMCk7XG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVuZDtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfUE9SVF9OVU1fTSB8IFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdHJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMVhfTEVEX0NUUkwsIG1hc2spO1xuK1xuK2VuZDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGlmIChyZXMpXG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byB0ZWFyZG93biBMRURzOiAlZFxcblwiLCByZXMpO1xuK31cbitcbitpbnQgeXQ5MjF4X2xlZHNfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuK1x0dTMyIGludl9jdHJsID0gMDtcbitcdHUzMiBpbnZfbWFzayA9IDA7XG4rXHR1MzIgY3RybDtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbitcbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfcG9ydChkcCwgZHMpIHtcbitcdFx0c3RydWN0IGRldmljZV9ub2RlICpsZWRzX25wO1xuK1x0XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1xuK1x0XHRpZiAoIWRwLVx1MDAzZWRuKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRsZWRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZHAtXHUwMDNlZG4sIFwibGVkc1wiKTtcbitcdFx0aWYgKCFsZWRzX25wKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRmb3JfZWFjaF9jaGlsZF9vZl9ub2RlX3Njb3BlZChsZWRzX25wLCBsZWRfbnApIHtcbitcdFx0XHRpbnQgcG9sYXJpdHk7XG4rXG4rXHRcdFx0cmVzID0geXQ5MjF4X2xlZF9zZXR1cChwcml2LCBwb3J0LFxuK1x0XHRcdFx0XHQgICAgICAgb2ZfZndub2RlX2hhbmRsZShsZWRfbnApLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2cG9sYXJpdHkpO1xuK1x0XHRcdGlmIChyZXMpIHtcbitcdFx0XHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmIChwb2xhcml0eSkge1xuK1x0XHRcdFx0aW52X21hc2sgfD0gQklUKHBvcnQpO1xuK1x0XHRcdFx0aWYgKHBvbGFyaXR5IFx1MDAzZSAwKVxuK1x0XHRcdFx0XHRpbnZfY3RybCB8PSBCSVQocG9ydCk7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXG4rXHRcdG9mX25vZGVfcHV0KGxlZHNfbnApO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdG1hc2sgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NIHwgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00gfFxuK1x0ICAgICAgIFlUOTIxWF9MRURfQ1RSTF9FTjtcbitcdGN0cmwgPSBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTCB8XG4rXHQgICAgICAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNKFlUOTIxWF9QT1JUX05VTSAtIDEpIHxcbitcdCAgICAgICBZVDkyMVhfTEVEX0NUUkxfRU47XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9MRURfQ1RSTCwgbWFzaywgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRnb3RvIGVuZDtcbitcbitcdC8qIEludmVyc2lvbiBpcyBpbnRlcm5hbCAtIGZvcmNlIG9uIHdpbGwgZ2l2ZSBsb3cgbG9naWMuXG4rXHQgKiBJbiB0aGUgcmVzdCBvZiB0aGUgZmlsZSwgdHJlYXQgTEVEcyBhcyBpZiBhY3RpdmUtbG93LlxuK1x0ICovXG4rXHRpZiAoaW52X21hc2spXG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMocHJpdiwgWVQ5MjFYX0xFRF9QQVJfSU5WLCBpbnZfbWFzayxcbitcdFx0XHRcdFx0ICAgICBpbnZfY3RybCk7XG4rXG4rZW5kOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1xuK1x0aWYgKHJlcylcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnI6XG4rXHR5dDkyMXhfbGVkc190ZWFyZG93bihwcml2KTtcbitcdHJldHVybiByZXM7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oIGIvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmJkMjA3ZTA5YThkZjNcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oXG5AQCAtMCwwICsxLDExOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpZm5kZWYgX1lUX0xFRFNfSFxuKyNkZWZpbmUgX1lUX0xFRFNfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rY29uZmlnLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sZWRzLmhcdTAwM2VcbitcbisjZGVmaW5lIFlUOTIxWF9MRURfQ1RSTFx0XHRcdDB4ZDAwMDBcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfRU5cdFx0XHRCSVQoMjEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTktfTVx0R0VOTUFTSygyMCwgMTkpXHQvKiBjeWNsZSA9IDUxMiAqIHggbXMgKi9cbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9DVFJMX0xPT1BERVRFQ1RfQkxJTksoeClcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEX0NUUkxfTE9PUERFVEVDVF9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX01cdFx0R0VOTUFTSygxNiwgMTMpXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9QT1JUX05VTSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX1BPUlRfTlVNX00sICh4KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9NXHRcdFx0R0VOTUFTSygxLCAwKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERSh4KVx0XHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRF9DVFJMX01PREVfTSwgKHgpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX0NUUkxfTU9ERV9QQVJBTExFTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfQ1RSTF9NT0RFX1NFUklBTFx0XHRcdFlUOTIxWF9MRURfQ1RSTF9NT0RFKDIpXG4rI2RlZmluZSBZVDkyMVhfTEVEMF9QT1JUbihwb3J0KVx0XHQoMHhkMDAwNCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTVx0XHRcdEdFTk1BU0soMTcsIDApXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfTElOS19UUllfRElTXHRCSVQoMTcpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDBfUE9SVF9BQ1RfQ09MTElTSU9OX0JMSU5LX0lORElcdEJJVCgxNilcbisjZGVmaW5lIFlUOTIxWF9MRUQxX1BPUlRuKHBvcnQpXHRcdCgweGQwMDQwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LX01cdFx0R0VOTUFTSygzMSwgMzApXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2VcdTAwM2UgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMV9QT1JUX09USEVSX0JMSU5LKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9PVEhFUl9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9FRUVfQkxJTktfTVx0XHRHRU5NQVNLKDI5LCAyOClcdC8qIGN5Y2xlID0gNTEyIFx1MDAzZVx1MDAzZSB4IG1zICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQxX1BPUlRfRUVFX0JMSU5LKHgpXHRcdFx0RklFTERfUFJFUChZVDkyMVhfTEVEMV9QT1JUX0VFRV9CTElOS19NLCAoeCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX0NPTVBcdEJJVCgyNylcbisjZGVmaW5lICBZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFlfTVx0XHRHRU5NQVNLKDI2LCAyNSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZX00sICh4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzFfMlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMClcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzJfM1x0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzNfNFx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDFfUE9SVF9CTElOS19EVVRZXzVfNlx0XHRZVDkyMVhfTEVEMV9QT1JUX0JMSU5LX0RVVFkoMylcbisjZGVmaW5lIFlUOTIxWF9MRUQyX1BPUlRuKHBvcnQpXHRcdCgweGQwMDgwICsgNCAqIChwb3J0KSlcbisjZGVmaW5lICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9NKGdycClcdFx0R0VOTUFTSyg0ICogKGdycCkgKyAxOSwgNCAqIChncnApICsgMTgpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDQgKiAoZ3JwKSArIDE4KSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fRE9OVENBUkUoZ3JwKVx0XHRZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbihncnAsIDApXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuX0JMSU5LKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAxKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFbl9PTihncnApXHRcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VuKGdycCwgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW5fT0ZGKGdycClcdFx0WVQ5MjFYX0xFRDJfUE9SVF9GT1JDRW4oZ3JwLCAzKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX00oZ3JwKVx0R0VOTUFTSyg0ICogKGdycCkgKyAxNywgNCAqIChncnApICsgMTYpXHQvKiBjeWNsZSA9IDUxMiBcdTAwM2NcdTAwM2MgeCBtcyAqL1xuKyNkZWZpbmUgICBZVDkyMVhfTEVEMl9QT1JUX0ZPUkNFX0JMSU5LbihncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg0ICogKGdycCkgKyAxNikpXG4rI2RlZmluZSAgIFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuX09USEVSKGdycClcdFlUOTIxWF9MRUQyX1BPUlRfRk9SQ0VfQkxJTktuKGdycCwgMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9NXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9FRUVfQkxJTktcdFx0QklUKDE1KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0xPT1BERVRFQ1RfQkxJTktcdEJJVCgxNClcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9BQ1RJVkVfQkxJTktcdEJJVCgxMylcbisjZGVmaW5lICBZVDkyMVhfTEVEeF9QT1JUX0FDVF9EVVBMRVhfRlVMTFx0QklUKDEyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0RVUExFWF9IQUxGXHRCSVQoMTEpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfVFhfQkxJTktcdFx0QklUKDEwKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYX0JMSU5LXHRcdEJJVCg5KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1RYXHRcdEJJVCg4KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX1JYXHRcdEJJVCg3KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwMDBNXHRcdEJJVCg2KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1cdFx0QklUKDUpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTBNXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUX0NPTExJU0lPTl9CTElOS1x0QklUKDMpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRHhfUE9SVF9BQ1RfMTAwME1fQkxJTktcdEJJVCgyKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwME1fQkxJTktcdEJJVCgxKVxuKyNkZWZpbmUgIFlUOTIxWF9MRUR4X1BPUlRfQUNUXzEwTV9CTElOS1x0XHRCSVQoMClcbisjZGVmaW5lIFlUOTIxWF9MRURfU0VSX0NUUkxcdFx0MHhkMDEwMFxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfVU5LXHRcdEdFTk1BU0soMjUsIDI0KVx0LyogZGVsYXk/ICovXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfQ1RSTF9BQ1RJVkVfTE9XXHRcdEJJVCg0KVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NXHRcdEdFTk1BU0soMSwgMClcdC8qICNncnAgLSAxICovXG4rI2RlZmluZSAgIFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTSh4KVx0XHRGSUVMRF9QUkVQKFlUOTIxWF9MRURfU0VSX0NUUkxfR1JQX05VTV9NLCAoeCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1NFUl9NQVBubShncnAsIHBvcnQpXHQoMHhkMDEwNCArIDggKiAoMiAtIChncnApKSArIDQgKiAoKHBvcnQpIC8gNSkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyA1LCA2ICogKChwb3J0KSAlIDUpICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9TRVJfTUFQX0RTVG5fUE9SVChwb3J0LCB4KVx0XHQoKHgpIFx1MDAzY1x1MDAzYyAoNiAqICgocG9ydCkgJSA1KSArIDIpKVxuKyNkZWZpbmUgIFlUOTIxWF9MRURfU0VSX01BUF9EU1RuX0xFRF9NKHBvcnQpXHRHRU5NQVNLKDYgKiAoKHBvcnQpICUgNSkgKyAxLCA2ICogKChwb3J0KSAlIDUpKVxuKyNkZWZpbmUgICBZVDkyMVhfTEVEX1NFUl9NQVBfRFNUbl9MRUQocG9ydCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoKHBvcnQpICUgNSkpKVxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfUE9SVFNcdFx0MHhkMDFjNFxuKyNkZWZpbmUgWVQ5MjFYX0xFRF9QQVJfSU5WXHRcdDB4ZDAxYzhcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9JTlZfSU5Wbm0oZ3JwLCBwb3J0KVx0QklUKDEwICogKGdycCkgKyAocG9ydCkpXG4rI2RlZmluZSBZVDkyMVhfTEVEX1BBUl9NQVBuKHBvcnQpXHQoMHhkMDFkMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVF9NKGdycClcdEdFTk1BU0soNiAqIChncnApICsgNSwgNiAqIChncnApICsgMilcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fUE9SVChncnAsIHgpXHRcdCgoeCkgXHUwMDNjXHUwMDNjICg2ICogKGdycCkgKyAyKSlcbisjZGVmaW5lICBZVDkyMVhfTEVEX1BBUl9NQVBfRFNUbl9MRURfTShncnApXHRHRU5NQVNLKDYgKiAoZ3JwKSArIDEsIDYgKiAoZ3JwKSlcbisjZGVmaW5lICAgWVQ5MjFYX0xFRF9QQVJfTUFQX0RTVG5fTEVEKGdycCwgeClcdFx0KCh4KSBcdTAwM2NcdTAwM2MgKDYgKiAoZ3JwKSkpXG4rXG4rI2RlZmluZSBZVDkyMVhfTEVEX0JMSU5LX01JTlx0NjRcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfREVGXHQ1MTJcbisjZGVmaW5lIFlUOTIxWF9MRURfQkxJTktfTUFYXHQyMDQ4XG4rXG4rLyogMiAqIGxjbSgyLCAzLCA0LCA2KSAqL1xuKyNkZWZpbmUgWVQ5MjFYX0xFRF9EVVRZX0RFTk9NXHRcdDI0XG4rI2RlZmluZSBZVDkyMVhfTEVEX0RVVFkobm9tLCBkZW5vbSlcdChZVDkyMVhfTEVEX0RVVFlfREVOT00gKiAobm9tKSAvIChkZW5vbSkpXG4rXG4rc3RydWN0IHl0OTIxeF9wcml2O1xuK1xuK3N0cnVjdCB5dDkyMXhfbGVkIHtcbitcdHN0cnVjdCBsZWRfY2xhc3NkZXYgY2RldjtcbitcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcG9ydDtcbitcdHVuc2lnbmVkIGNoYXIgZ3JvdXA7XG4rXG4rXHRib29sIHVzZV9jeWNsZToxO1xuK1x0Ym9vbCB1c2VfZHV0eToxO1xuK307XG4rXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXG4rXG4raW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XG4rXG4rI2Vsc2VcbitcbitzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuKyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmMgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjkwNTQ4OTZlNGNkMTJiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL3NtaS5jXG5AQCAtMCwwICsxLDE1NyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgRGF2aWQgWWFuZ1xuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJjaGlwLmhcIlxuKyNpbmNsdWRlIFwic21pLmhcIlxuK1xuKyNkZWZpbmUgWVQ5MjFYX1BPTExfU0xFRVBfVVNcdDEwMDAwXG4rI2RlZmluZSBZVDkyMVhfUE9MTF9USU1FT1VUX1VTXHQxMDAwMDBcbitcbitpbnQgeXQ5MjF4X3JlZ19yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyICp2YWxwKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfb25jZShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdHJldHVybiBwcml2LVx1MDAzZXJlZ19vcHMtXHUwMDNlcmVhZChwcml2LVx1MDAzZXJlZ19jdHgsIHJlZywgdmFscCk7XG4rfVxuK1xuK2ludCB5dDkyMXhfcmVnX3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX29uY2UoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcHJpdi1cdTAwM2VyZWdfb3BzLVx1MDAzZXdyaXRlKHByaXYtXHUwMDNlcmVnX2N0eCwgcmVnLCB2YWwpO1xuK31cbitcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscClcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJlcztcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dCh5dDkyMXhfcmVnX3JlYWQsIHJlcyxcbitcdFx0XHRcdHJlcyB8fCAodmFsIFx1MDAyNiBtYXNrKSA9PSAqdmFscCxcbitcdFx0XHRcdFlUOTIxWF9QT0xMX1NMRUVQX1VTLCBZVDkyMVhfUE9MTF9USU1FT1VUX1VTLFxuK1x0XHRcdFx0ZmFsc2UsIHByaXYsIHJlZywgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0KnZhbHAgPSB2YWw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbClcbit7XG4rXHRpbnQgcmVzO1xuK1x0dTMyIHY7XG4rXHR1MzIgdTtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcsIFx1MDAyNnYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHUgPSB2O1xuK1x0dSBcdTAwMjY9IH5tYXNrO1xuK1x0dSB8PSB2YWw7XG4rXHRpZiAodSA9PSB2KVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIHJlZywgdSk7XG4rfVxuK1xuK2ludFxuK3l0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCByZWcgKyA0ICogaSwgXHUwMDI2dmFsc1tpXSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitpbnRcbit5dDkyMXhfcmVnc193cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscyxcbitcdFx0ICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgcmVnICsgNCAqIGksIHZhbHNbaV0pO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzLFxuK1x0XHRcdGNvbnN0IHUzMiAqdmFscywgdW5zaWduZWQgaW50IG51bV9yZWdzKVxuK3tcbitcdGJvb2wgY2hhbmdlZCA9IGZhbHNlO1xuK1x0dTMyIHZzWzRdO1xuK1x0aW50IHJlcztcbitcbitcdGlmIChXQVJOX09OX09OQ0UobnVtX3JlZ3MgXHUwMDNlIEFSUkFZX1NJWkUodnMpKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnc19yZWFkKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgbnVtX3JlZ3M7IGkrKykge1xuK1x0XHR1MzIgdSA9IHZzW2ldO1xuK1xuK1x0XHR1IFx1MDAyNj0gfm1hc2tzW2ldO1xuK1x0XHR1IHw9IHZhbHNbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG4rXG4raW50XG4reXQ5MjF4X3JlZ3NfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdCAgICAgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpXG4re1xuK1x0Ym9vbCBjaGFuZ2VkID0gZmFsc2U7XG4rXHR1MzIgdnNbNF07XG4rXHRpbnQgcmVzO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRShudW1fcmVncyBcdTAwM2UgQVJSQVlfU0laRSh2cykpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHJlcyA9IHl0OTIxeF9yZWdzX3JlYWQocHJpdiwgcmVnLCB2cywgbnVtX3JlZ3MpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBudW1fcmVnczsgaSsrKSB7XG4rXHRcdHUzMiB1ID0gdnNbaV07XG4rXG4rXHRcdHUgXHUwMDI2PSB+bWFza3NbaV07XG4rXHRcdGlmICh1ICE9IHZzW2ldKVxuK1x0XHRcdGNoYW5nZWQgPSB0cnVlO1xuK1xuK1x0XHR2c1tpXSA9IHU7XG4rXHR9XG4rXG4rXHRpZiAoIWNoYW5nZWQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIHl0OTIxeF9yZWdzX3dyaXRlKHByaXYsIHJlZywgdnMsIG51bV9yZWdzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9zbWkuaCBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMmU5NTYwNjVlYjkwZWVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vc21pLmhcbkBAIC0wLDAgKzEsODggQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IERhdmlkIFlhbmdcbisgKi9cbitcbisjaWZuZGVmIF9ZVF9TTUlfSFxuKyNkZWZpbmUgX1lUX1NNSV9IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmRwYXJ0LmhcdTAwM2VcbitcbitzdHJ1Y3QgeXQ5MjF4X3ByaXY7XG4rXG4raW50IHl0OTIxeF9yZWdfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsKTtcbitpbnQgeXQ5MjF4X3JlZ193YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2ssIHUzMiAqdmFscCk7XG4raW50IHl0OTIxeF9yZWdfdXBkYXRlX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzayxcbitcdFx0XHQgICB1MzIgdmFsKTtcbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfc2V0X2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIDAsIG1hc2spO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWdfY2xlYXJfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIHJlZywgbWFzaywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZ190b2dnbGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBtYXNrLCBib29sIHNldClcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCByZWcsIG1hc2ssICFzZXQgPyAwIDogbWFzayk7XG4rfVxuK1xuKy8qIFNvbWUgbXVsdGktd29yZCByZWdpc3RlcnMsIGxpa2UgVkxBTm5fQ1RSTCwgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGVcbisgKiBsb25nIHJlZ2lzdGVyLiBNb3JlIHNwZWNpZmljYWxseSwgd3JpdGVzIHRvIHBhcnRzIG9mIGl0cyB3b3JkcyB3b24ndCBiZWNvbWVcbisgKiB2aXNpYmxlLCB1bnRpbCB0aGUgbGFzdCB3b3JkIGlzIHdyaXR0ZW4uXG4rICpcbisgKiBIZXJlIHdlIHJlcXVpcmUgZnVsbCByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIG92ZXIgdGhlc2UgcmVnaXN0ZXJzIHRvXG4rICogZWxpbWluYXRlIHBvdGVudGlhbCBpc3N1ZXMsIGFsdGhvdWdoIHBhcnRpYWwgcmVhZHMvd3JpdGVzIGFyZSBhbHNvIHBvc3NpYmxlLlxuKyAqL1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfY3RybHNfdW5hbGlnbmVkKHUzMiAqbG8sIHUzMiAqaGksIHU2NCBtYXNrLCB1NjQgdmFsKVxuK3tcbitcdCpsbyBcdTAwMjY9IH5sb3dlcl8zMl9iaXRzKG1hc2spO1xuK1x0KmhpIFx1MDAyNj0gfnVwcGVyXzMyX2JpdHMobWFzayk7XG4rXHQqbG8gfD0gbG93ZXJfMzJfYml0cyh2YWwpO1xuK1x0KmhpIHw9IHVwcGVyXzMyX2JpdHModmFsKTtcbit9XG4rXG4raW50IHl0OTIxeF9yZWdzX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgdW5zaWduZWQgaW50IG51bV9yZWdzKTtcbitpbnQgeXQ5MjF4X3JlZ3Nfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKnZhbHMsXG4rXHRcdCAgICAgIHVuc2lnbmVkIGludCBudW1fcmVncyk7XG4raW50IHl0OTIxeF9yZWdzX3VwZGF0ZV9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICAgY29uc3QgdTMyICp2YWxzLCB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK2ludCB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICptYXNrcyxcbitcdFx0XHQgICB1bnNpZ25lZCBpbnQgbnVtX3JlZ3MpO1xuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X3dyaXRlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgdTMyIHJlZywgY29uc3QgdTMyICp2YWxzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc193cml0ZShwcml2LCByZWcsIHZhbHMsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc2NF91cGRhdGVfYml0cyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqbWFza3MsXG4rXHRcdFx0IGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3NfdXBkYXRlX2JpdHMocHJpdiwgcmVnLCBtYXNrcywgdmFscywgMik7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50XG4reXQ5MjF4X3JlZzY0X2NsZWFyX2JpdHMoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCB1MzIgcmVnLCBjb25zdCB1MzIgKm1hc2tzKVxuK3tcbitcdHJldHVybiB5dDkyMXhfcmVnc19jbGVhcl9iaXRzKHByaXYsIHJlZywgbWFza3MsIDIpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludFxuK3l0OTIxeF9yZWc5Nl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHUzMiByZWcsIGNvbnN0IHUzMiAqdmFscylcbit7XG4rXHRyZXR1cm4geXQ5MjF4X3JlZ3Nfd3JpdGUocHJpdiwgcmVnLCB2YWxzLCAzKTtcbit9XG4rXG4rI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNjozMi4xNTM0NzQwNTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTQ2MzAyODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIHRoZSBZVDkyMTUgTEVEIERyaXZlcioqXG5cbk9rYXksIHNvIHRoZXJlJ3MgYSBwYXRjaCBpbnRyb2R1Y2luZyBMRUQgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoIGNoaXAgZHJpdmVyLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmNgIGFuZCByZWxhdGVkIGZpbGVzLCBhbmQgaXQgc2VlbXMgdG8gaW50cm9kdWNlIGBDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEU2AgYW5kIG1vdmUgdGhlIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIGEgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBldGhlcm5ldCBzd2l0Y2ggY2hpcC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcmVhY2hhYmlsaXR5LCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgb3Igc2ltdWxhdGVkIGVudmlyb25tZW50LiBEU0EgZHJpdmVycywgYnkgdGhlaXIgbmF0dXJlLCBnZW5lcmFsbHkgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSDigJMgdGhlIHN3aXRjaCBjaGlwIGl0c2VsZiBjb25uZWN0ZWQgdmlhIE1ESU8sIFNQSSwgb3IgYSBzaW1pbGFyIGludGVyZmFjZS5cblxuVW5sZXNzIHRoZXJlJ3Mgc29tZSBvYnNjdXJlIHNvZnR3YXJlIGVtdWxhdG9yIHNwZWNpZmljYWxseSBmb3IgdGhpcyBZVDkyMTUgY2hpcCAod2hpY2ggaXMgaGlnaGx5IGltcHJvYmFibGUpLCB0aGUgZHJpdmVyJ3MgYHByb2JlYCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsIHRvIGZpbmQgdGhlIHJlcXVpcmVkIGhhcmR3YXJlLiBJdCdsbCBiZSBsb29raW5nIGZvciBzb21ldGhpbmcgb24gYSBidXMgdGhhdCBzaW1wbHkgd29uJ3QgZXhpc3QgaW4gYSB2aXJ0dWFsIG1hY2hpbmUgb3IgbW9zdCB0ZXN0aW5nIGVudmlyb25tZW50cy4gRXZlbiBpZiB3ZSBzb21laG93IGZvcmNlIHRoZSBkcml2ZXIgdG8gbG9hZCwgcGVyaGFwcyBieSBhZGRpbmcgYSBkZXZpY2UgdHJlZSBub2RlLCBpdCdsbCBhdHRlbXB0IHRvIHJlYWQgZnJvbSB0aGUgTURJTyBvciBTUEkgYnVzLCBhbmQgdGhvc2UgcmVhZHMgd2lsbCBmYWlsIG9yIHRpbWVvdXQsIHVsdGltYXRlbHkgY2F1c2luZyB0aGUgcHJvYmUgdG8gZmFpbC5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIHdlIHNvbWVob3cgKmZ1enoqIHRoaXMgY29kZT8gQ291bGQgd2UgcGVyaGFwcyBtb2NrIGFuIE1ESU8gYnVzIHRvIHNpbXVsYXRlIGNvbW11bmljYXRpb24/IFRoZSBpc3N1ZSBpcyB0aGF0IHN0YW5kYXJkIGZ1enppbmcgdG9vbHMsIGxpa2Ugc3l6a2FsbGVyLCBnZW5lcmFsbHkgZG9uJ3Qgb2ZmZXIgZ2VuZXJpYyBNRElPIG9yIFNQSSBtb2NrcyB0aGF0IHdvdWxkIGFsbG93IHVzIHRvIHByb2JlIGFuIGFyYml0cmFyeSBEU0Egc3dpdGNoIHdpdGhvdXQgZXhwbGljaXQgc3VwcG9ydC4gSGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyB0aGF0IGxhY2sgcHJvcGVyIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMgYXJlIHVzdWFsbHkgY29uc2lkZXJlZCB1bnJlYWNoYWJsZSBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gdmVyaWZ5IHdoZXRoZXIgYHl0OTIxeGAgaXMgZXZlbiByZWFjaGFibGUgYXQgYWxsLiBJIHdpbGwgc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGZvciBhbnkgbWVudGlvbnMgb2YgYHl0OTIxeGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyBwb3RlbnRpYWwgcmVhY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQ4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6MzkuNjk5NzgwNjMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTE0MDkxMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMjU5MCBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sLTMtLS0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvZHNhL21vdG9yY29tbSx5dDkyMXgueWFtbCNcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tb3RvcmNvbW0seXQ5MjF4LnlhbWwtNS0kc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4tLVxcbk1BSU5UQUlORVJTPTE4MjMxPVM6XFx0TWFpbnRhaW5lZFxcbk1BSU5UQUlORVJTOjE4MjMyOkY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbW90b3Jjb21tLHl0OTIxeC55YW1sXFxuTUFJTlRBSU5FUlMtMTgyMzMtRjpcXHRkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL1xcbk1BSU5UQUlORVJTOjE4MjM0OkY6XFx0bmV0L2RzYS90YWdfeXQ5MjF4LmNcXG5NQUlOVEFJTkVSUy0xODIzNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYKSArPSB5dDkyMXgub1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6Mzp5dDkyMXgtb2JqcyA6PSBjaGlwLm9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL01ha2VmaWxlOjQ6eXQ5MjF4LSQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpICs9IGxlZHMub1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vTWFrZWZpbGU6NTp5dDkyMXgtb2JqcyArPSBzbWkub1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI6c3RydWN0IHl0OTIxeF9taWJfZGVzYyB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzMtXFx0dW5zaWduZWQgaW50IHNpemU7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MTovKiBNdXN0IGFncmVlIHdpdGggeXQ5MjF4X21pYlxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyLSAqXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Ni0gKi9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyB5dDkyMXhfbWliX2Rlc2NzW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgtXFx0TUlCX0RFU0MoMSwgWVQ5MjFYX01JQl9EQVRBX1JYX0JST0FEQ0FTVCwgTlVMTCksXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05OC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5OTpzdHJ1Y3QgeXQ5MjF4X2luZm8ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwMC1cXHRjb25zdCBjaGFyICpuYW1lO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA2LVxcdHUxNiBpbnRlcm5hbF9tYXNrO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwNzpcXHQvKiBUT0RPOiBzZWUgY29tbWVudHMgaW4geXQ5MjF4X2RzYV9waHlsaW5rX2dldF9jYXBzKCkgKi9cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDgtXFx0dTE2IGV4dGVybmFsX21hc2s7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE2NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxNjU6c3RydWN0IHl0OTIxeF9yZWdfbWRpbyB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTY2LVxcdHN0cnVjdCBtaWlfYnVzICpidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xODEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTgyOiNkZWZpbmUgdG9feXQ5MjF4X3ByaXYoX2RzKSBjb250YWluZXJfb2ZfY29uc3QoX2RzLCBzdHJ1Y3QgeXQ5MjF4X3ByaXYsIGRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE4My0jZGVmaW5lIHRvX2RldmljZShwcml2KSAoKHByaXYpLVxcdTAwM2Vkcy5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xOTA9c3RhdGljIHUzMiBldGhhZGRyX2xvMl90b191MzIoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTE5NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTU6c3RhdGljIGludCB5dDkyMXhfcmVnX21kaW9fcmVhZCh2b2lkICpjb250ZXh0LCB1MzIgcmVnLCB1MzIgKnZhbHApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTk2LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxOTc6XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTk4LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVxcdTAwM2VidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yMzUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjM2OnN0YXRpYyBpbnQgeXQ5MjF4X3JlZ19tZGlvX3dyaXRlKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM3LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyMzg6XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbyA9IGNvbnRleHQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjM5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBtZGlvLVxcdTAwM2VidXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yNzEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MjcyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMgeXQ5MjF4X3JlZ19vcHNfbWRpbyA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzM6XFx0LnJlYWQgPSB5dDkyMXhfcmVnX21kaW9fcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoyNzQ6XFx0LndyaXRlID0geXQ5MjF4X3JlZ19tZGlvX3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTI3NS19O1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjc4LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI3OTpzdGF0aWMgaW50IHl0OTIxeF9pbnRpZl93YWl0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI4MzpcXHRyZXR1cm4geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9JTlRfTUJVU19PUCwgWVQ5MjFYX01CVVNfT1BfU1RBUlQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjg0LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2dmFsKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTI4Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Mjg4Onl0OTIxeF9pbnRpZl9yZWFkKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIGludCByZWcsIHUxNiAqdmFscClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yODkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMjk1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjI5NjpcXHRyZXMgPSB5dDkyMXhfaW50aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0yOTctXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMwMy1cXHQgICAgICAgWVQ5MjFYX01CVVNfQ1RSTF9SRUFEO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjMwNDpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDUtXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDYtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMDc6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMDgtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMxMC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozMTE6XFx0cmVzID0geXQ5MjF4X2ludGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzEzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzE0OlxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfSU5UX01CVVNfRElOLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMTUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTMyNj1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzI3Onl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMyOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zMzItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MzMzOlxcdHJlcyA9IHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTMzNC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzQwLVxcdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1dSSVRFO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM0MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9JTlRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDItXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDMtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDQ6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfRE9VVCwgdmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDUtXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDYtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNDc6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfSU5UX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNDgtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1MC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNTE6XFx0cmV0dXJuIHl0OTIxeF9pbnRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Mi19XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzUzLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1NDpzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2ludF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNTUte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM1NjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM1Ny1cXHR1MTYgdmFsO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzYzLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozNjQ6XFx0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgcmVnLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNjUtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0zNzI9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM3Mzp5dDkyMXhfbWJ1c19pbnRfd3JpdGUoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgZGF0YSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zNzQte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjM3NTpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTM3Ni1cXHRpbnQgcmVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgxLVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozODI6XFx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIHJlZywgZGF0YSk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMzgzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9Mzg4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzozODk6eXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0zOTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDAxLVxcdG1idXMtXFx1MDAzZXByaXYgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQwMjpcXHRtYnVzLVxcdTAwM2VyZWFkID0geXQ5MjF4X21idXNfaW50X3JlYWQ7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDAzOlxcdG1idXMtXFx1MDAzZXdyaXRlID0geXQ5MjF4X21idXNfaW50X3dyaXRlO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQwNC1cXHRtYnVzLVxcdTAwM2VwYXJlbnQgPSBkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDE2OnN0YXRpYyBpbnQgeXQ5MjF4X2V4dGlmX3dhaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MTktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDIwOlxcdHJldHVybiB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MjEtXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ2YWwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDI0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0MjU6eXQ5MjF4X2V4dGlmX3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00MzItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDMzOlxcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQzNC1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQwLVxcdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1RZUEVfQzIyIHwgWVQ5MjFYX01CVVNfQ1RSTF9SRUFEO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ0MTpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9FWFRfTUJVU19DVFJMLCBtYXNrLCBjdHJsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDItXFx0aWYgKHJlcylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDMtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDQ6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX01CVVNfT1AsIFlUOTIxWF9NQlVTX09QX1NUQVJUKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NDUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ0Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NDg6XFx0cmVzID0geXQ5MjF4X2V4dGlmX3dhaXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDQ5LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUwLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDUxOlxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfRVhUX01CVVNfRElOLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NTItXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ2Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDY0Onl0OTIxeF9leHRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ2NS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NjktXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDcwOlxcdHJlcyA9IHl0OTIxeF9leHRpZl93YWl0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3LVxcdCAgICAgICBZVDkyMVhfTUJVU19DVFJMX1RZUEVfQzIyIHwgWVQ5MjFYX01CVVNfQ1RSTF9XUklURTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0Nzg6XFx0cmVzID0geXQ5MjF4X3JlZ191cGRhdGVfYml0cyhwcml2LCBZVDkyMVhfRVhUX01CVVNfQ1RSTCwgbWFzaywgY3RybCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc5LVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgwLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDgxOlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX0RPVVQsIHZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgyLVxcdGlmIChyZXMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDgzLVxcdFxcdHJldHVybiByZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg0OlxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9NQlVTX09QLCBZVDkyMVhfTUJVU19PUF9TVEFSVCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDg1LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDg4OlxcdHJldHVybiB5dDkyMXhfZXh0aWZfd2FpdChwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00ODktfVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5MC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTE6c3RhdGljIGludCB5dDkyMXhfbWJ1c19leHRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDkyLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0OTM6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00OTQtXFx0dTE2IHZhbDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ5Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDk4OlxcdHJlcyA9IHl0OTIxeF9leHRpZl9yZWFkKHByaXYsIHBvcnQsIHJlZywgXFx1MDAyNnZhbCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDk5LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NTA2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MDc6eXQ5MjF4X21idXNfZXh0X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTA4LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MDk6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01MTAtXFx0aW50IHJlcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxMi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTEzOlxcdHJlcyA9IHl0OTIxeF9leHRpZl93cml0ZShwcml2LCBwb3J0LCByZWcsIGRhdGEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUxNC1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTUxOT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTIwOnl0OTIxeF9tYnVzX2V4dF9pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgc3RydWN0IGRldmljZV9ub2RlICptbnApXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTUzMy1cXHQvKiBUT0RPOiBjNDU/ICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTM0OlxcdG1idXMtXFx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19leHRfcmVhZDtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1MzU6XFx0bWJ1cy1cXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19leHRfd3JpdGU7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTM2LVxcdG1idXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU0Ny0vKiBSZWFkIGFuZCBoYW5kbGUgb3ZlcmZsb3cgb2YgMzJiaXQgTUlCcy4gTUlCIGJ1ZmZlciBtdXN0IGJlIHplcm9lZCBiZWZvcmUuICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NTQ4OnN0YXRpYyBpbnQgeXQ5MjF4X3JlYWRfbWliKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTQ5LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTA6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTEtXFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU1MjpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTUzLVxcdGludCByZXMgPSAwO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU1NC1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NTU6XFx0LyogUmVhZGluZyBvZiB5dDkyMXhfcG9ydDo6bWliIGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBsb2NrIGFuZCBpdCdzIHZhaW5cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy01NTYtXFx0ICogdG8ga2VlcCBpdHMgY29uc2lzdGVuY3ksIHNpbmNlIHdlIGhhdmUgdG8gcmVhZCByZWdpc3RlcnMgb25lIGJ5IG9uZVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTYyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU2MzpcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU2NDpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTY1LVxcdFxcdHUzMiByZWcgPSBZVDkyMVhfTUlCbl9EQVRBMChwb3J0KSArIGRlc2MtXFx1MDAzZW9mZnNldDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU2OS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo1NzA6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIHJlZywgXFx1MDAyNnZhbDApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU3MS1cXHRcXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNTgyLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjU4MzpcXHRcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgcmVnICsgNCwgXFx1MDAyNnZhbDEpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTU4NC1cXHRcXHRcXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjA2LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYwNzpzdGF0aWMgdm9pZCB5dDkyMXhfcG9sbF9taWIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYwOC17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjA5OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBjb250YWluZXJfb2ZfY29uc3Qod29yaywgc3RydWN0IHl0OTIxeF9wb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbWliX3JlYWQud29yayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjExOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9ICh2b2lkICopKHBwIC0gcHAtXFx1MDAzZWluZGV4KSAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjEyOlxcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCB5dDkyMXhfcHJpdiwgcG9ydHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTYxMy1cXHR1bnNpZ25lZCBsb25nIGRlbGF5ID0gWVQ5MjFYX1NUQVRTX0lOVEVSVkFMX0pJRkZJRVM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjYxODpcXHRyZXMgPSB5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjE5LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NjI2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjI3Onl0OTIxeF9kc2FfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgdTMyIHN0cmluZ3NldCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MjgtXFx0XFx0ICAgICAgIHVpbnQ4X3QgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzItXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjMzOlxcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh5dDkyMXhfbWliX2Rlc2NzKTsgaSsrKSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjM0OlxcdFxcdGNvbnN0IHN0cnVjdCB5dDkyMXhfbWliX2Rlc2MgKmRlc2MgPSBcXHUwMDI2eXQ5MjF4X21pYl9kZXNjc1tpXTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02MzUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz02NDE9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NDI6eXQ5MjF4X2RzYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCB1aW50NjRfdCAqZGF0YSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDMte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY0NDpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ1OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NjQ2OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDctXFx0c2l6ZV90IGo7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02NDktXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1MDpcXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjUxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjUzLVxcdGogPSAwO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1NDpcXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoeXQ5MjF4X21pYl9kZXNjcyk7IGkrKykge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY1NTpcXHRcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X21pYl9kZXNjICpkZXNjID0gXFx1MDAyNnl0OTIxeF9taWJfZGVzY3NbaV07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjY0LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY2NTpzdGF0aWMgaW50IHl0OTIxeF9kc2FfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3MS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NzI6XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHl0OTIxeF9taWJfZGVzY3MpOyBpKyspIHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2NzM6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9taWJfZGVzYyAqZGVzYyA9IFxcdTAwMjZ5dDkyMXhfbWliX2Rlc2NzW2ldO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTY4Mj1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY4Mzp5dDkyMXhfZHNhX2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjg0LVxcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfZXRoX21hY19zdGF0cyAqbWFjX3N0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4NS17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Njg2OlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODc6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo2ODg6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTY4OS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy02OTAtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjY5MTpcXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNjkyLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzE4PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzE5Onl0OTIxeF9kc2FfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzIwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2V0aF9jdHJsX3N0YXRzICpjdHJsX3N0YXRzKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyMS17XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzIyOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjM6XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1twb3J0XTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3MjQ6XFx0c3RydWN0IHl0OTIxeF9taWIgKm1pYiA9IFxcdTAwMjZwcC1cXHUwMDNlbWliO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTcyNS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03MjYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjcyNzpcXHR5dDkyMXhfcmVhZF9taWIocHJpdiwgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzI4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzM0LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjczNTpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHl0OTIxeF9ybW9uX3Jhbmdlc1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTczNi1cXHR7IDAsIDY0IH0sXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz03NDY9c3RhdGljIHZvaWRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NDc6eXQ5MjF4X2RzYV9nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc0OC1cXHRcXHRcXHQgIHN0cnVjdCBldGh0b29sX3Jtb25fc3RhdHMgKnJtb25fc3RhdHMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTAte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc1MTpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUyOlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzUzOlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTQtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzU1LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3NTY6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTc1Ny1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03NTgtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NzU5OlxcdCpyYW5nZXMgPSB5dDkyMXhfcm1vbl9yYW5nZXM7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzYwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NzgzPXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6Nzg0Onl0OTIxeF9kc2FfZ2V0X3N0YXRzNjQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy03ODUtXFx0XFx0ICAgICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzg2LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo3ODc6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4ODpcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW3BvcnRdO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjc4OTpcXHRzdHJ1Y3QgeXQ5MjF4X21pYiAqbWliID0gXFx1MDAyNnBwLVxcdTAwM2VtaWI7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNzkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9ODE5PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODIwOnl0OTIxeF9kc2FfZ2V0X3BhdXNlX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODIxLVxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlX3N0YXRzICpwYXVzZV9zdGF0cylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjIte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjgyMzpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI0OlxcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbcG9ydF07XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODI1OlxcdHN0cnVjdCB5dDkyMXhfbWliICptaWIgPSBcXHUwMDI2cHAtXFx1MDAzZW1pYjtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04MjYtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODI3LVxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Mjg6XFx0eXQ5MjF4X3JlYWRfbWliKHByaXYsIHBvcnQpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTgyOS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTgzNT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODM2Onl0OTIxeF9zZXRfZWVlKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHN0cnVjdCBldGh0b29sX2tlZWUgKmUpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg0OS1cXHRpZiAoISFuZXdfbWFzayAhPSAhIXByaXYtXFx1MDAzZWVlZV9wb3J0c19tYXNrKSB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODUwOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX1BPTl9TVFJBUF9GVU5DLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1MS1cXHRcXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9QT05fU1RSQVBfRUVFLCAhIW5ld19tYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1My1cXHRcXHRcXHRyZXR1cm4gcmVzO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg1NDpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3RvZ2dsZV9iaXRzKHByaXYsIFlUOTIxWF9QT05fU1RSQVBfVkFMLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg1NS1cXHRcXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9QT05fU1RSQVBfRUVFLCAhIW5ld19tYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2Mi1cXHQvKiBFbmFibGUgLyBkaXNhYmxlIHBvcnQgRUVFICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODYzOlxcdHJlcyA9IHl0OTIxeF9yZWdfdG9nZ2xlX2JpdHMocHJpdiwgWVQ5MjFYX0VFRV9DVFJMLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg2NC1cXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9FRUVfQ1RSTF9FTm4ocG9ydCksIGVuYWJsZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04NjYtXFx0XFx0cmV0dXJuIHJlcztcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo4Njc6XFx0cmVzID0geXQ5MjF4X3JlZ190b2dnbGVfYml0cyhwcml2LCBZVDkyMVhfRUVFbl9WQUwocG9ydCksXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODY4LVxcdFxcdFxcdFxcdCAgICAgWVQ5MjFYX0VFRV9WQUxfREFUQSwgZW5hYmxlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTg3NT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODc2Onl0OTIxeF9kc2Ffc2V0X21hY19lZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04Nzcte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg3ODpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtODc5LVxcdGludCByZXM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg4MjpcXHRyZXMgPSB5dDkyMXhfc2V0X2VlZShwcml2LCBwb3J0LCBlKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODMtXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04ODctXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6ODg4OnN0YXRpYyBpbnQgeXQ5MjF4X210dV9mZXRjaChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTg4OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz04OTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjg5Njp5dDkyMXhfZHNhX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgbmV3X210dSlcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy04OTcte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAxLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkwMjpcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTAzLVxcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdG9fcG9ydChkcywgcG9ydCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05MTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkxMjpcXHRyZXMgPSB5dDkyMXhfcmVnX3VwZGF0ZV9iaXRzKHByaXYsIFlUOTIxWF9NQUNuX0ZSQU1FKHBvcnQpLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTkxMy1cXHRcXHRcXHRcXHQgICAgIFlUOTIxWF9NQUNfRlJBTUVfU0laRV9NLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTE5LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjkyMDpzdGF0aWMgaW50IHl0OTIxeF9kc2FfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTIxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTk1Mz1zdGF0aWMgdTY0IHRva2VuMmJ1cnN0KHUzMiB0b2tlbiwgaW50IHVuaXQsIGludCBDKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTU3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk1ODpzdHJ1Y3QgeXQ5MjF4X21hcmtlciB7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTU5LVxcdHUzMiBjaXI7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz05Njk9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MDp5dDkyMXhfbWFya2VyX3RmbShzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyLCB1NjQgcmF0ZSwgdTY0IGJ1cnN0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk3MS1cXHRcXHQgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IHNsb3RfbnMsIHUzMiBjaXJfbWF4LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjk3MjpcXHRcXHQgIHUzMiBjYnNfbWF4LCBpbnQgdW5pdF9tYXgsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTczLVxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtOTc3LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo5Nzg6XFx0c3RydWN0IHl0OTIxeF9tYXJrZXIgbTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy05NzktXFx0dTY0IGJ1cnN0X2VzdDtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTk5OS1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTAwMDpcXHRcXHRidXJzdF9zdWcgKz0gRVRIX0hMRU4gKyB5dDkyMXhfbXR1X2ZldGNoKHByaXYsIHBvcnQpICtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDAxLVxcdFxcdFxcdCAgICAgRVRIX0ZDU19MRU47XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMDU5PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDYwOnl0OTIxeF9tYXJrZXJfdGZtX3BvbGljZShzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTEwNjEtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDYyOlxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA2My1cXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTA3My1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDc0OlxcdHJldHVybiB5dDkyMXhfbWFya2VyX3RmbShtYXJrZXIsIHJhdGUsIGJ1cnN0LCBmbGFncyxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDc1LVxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2VtZXRlcl9zbG90X25zLCBZVDkyMVhfTUVURVJfQ0lSX01BWCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTEwODA9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjEwODE6eXQ5MjF4X21hcmtlcl90Zm1fc2hhcGUoc3RydWN0IHl0OTIxeF9tYXJrZXIgKm1hcmtlciwgdTY0IHJhdGUsIHU2NCBidXJzdCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDgyOlxcdFxcdFxcdHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDgzLVxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg0LXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMDg1OlxcdHJldHVybiB5dDkyMXhfbWFya2VyX3RmbShtYXJrZXIsIHJhdGUsIGJ1cnN0LCBmbGFncyxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDg2LVxcdFxcdFxcdFxcdCBwcml2LVxcdTAwM2Vwb3J0X3NoYXBlX3Nsb3RfbnMsIFlUOTIxWF9TSEFQRV9DSVJfTUFYLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9MTA5MT1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTA5Mjp5dDkyMXhfcG9saWNlX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMDkzLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgZmxvd19hY3Rpb24gKmFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTExMjc9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExMjg6eXQ5MjF4X21ldGVyX2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZCxcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTI5OlxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgeXQ5MjF4X21hcmtlciAqbWFya2VyKVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTQ4OlxcdHJldHVybiB5dDkyMXhfcmVnOTZfd3JpdGUocHJpdiwgWVQ5MjFYX01FVEVSbl9DVFJMKGlkKSwgY3RybHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNDktfVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTAtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE1MTpzdGF0aWMgdm9pZCB5dDkyMXhfZHNhX3BvcnRfcG9saWNlcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTUyLXtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTUzOlxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTU0LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTctXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNTg6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fTUVURVIocG9ydCksIDApO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNTktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz0xMTY2PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTY3Onl0OTIxeF9kc2FfcG9ydF9wb2xpY2VyX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNjgtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBmbG93X2FjdGlvbl9wb2xpY2UgKnBvbGljZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzAte1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzE6XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzI6XFx0c3RydWN0IHl0OTIxeF9tYXJrZXIgbWFya2VyO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExNzMtXFx0dTMyIGN0cmw7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTc1LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExNzY6XFx0cmVzID0geXQ5MjF4X3BvbGljZV92YWxpZGF0ZShwb2xpY2UsIE5VTEwsIE5VTEwsIGV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3Ny1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE3OS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzoxMTgwOlxcdHJlcyA9IHl0OTIxeF9tYXJrZXJfdGZtX3BvbGljZShcXHUwMDI2bWFya2VyLCBwb2xpY2UsIDAsIHByaXYsIHBvcnQsIGV4dGFjayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4MS1cXHRpZiAocmVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtMTE4NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6MTE4NTpcXHRyZXMgPSB5dDkyMXhfbWV0ZXJfY29uZmlnKHByaXYsIHBvcnQgKyBZVDkyMVhfTUVURVJfTlVNLCBcXHUwMDI2bWFya2VyKTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTg2LVxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy0xMTg5LVxcdGN0cmwgPSBZVDkyMVhfUE9SVF9NRVRFUl9JRChwb3J0KSB8IFlUOTIxWF9QT1JUX01FVEVSX0VOO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjExOTA6XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fTUVURVIocG9ydCksIGN0cmwpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTExOTEtZW5kOlxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE2OjQxLjY1MTE5Nzc3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MTAwNzA4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozNDAzNiwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNjo0My4yNjEyNzIxNzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjk3NzgyMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IG9mIE1vdG9yY29tbSBMRUQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSBuZWVkIHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzLCB3aGljaCBhZGRzIExFRCBzdXBwb3J0IHRvIHRoZSBNb3RvcmNvbW0gRFNBIGRyaXZlciAoYGRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jYCksIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHdvcnRoIGZ1enppbmcuIEl0IGFwcGVhcnMgdG8gYmUgYSBzdHJhaWdodC1mb3J3YXJkIGRyaXZlciBmZWF0dXJlLCByZWdpc3RlcmluZyBMRUQgY2xhc3MgZGV2aWNlcyBhbmQgaGFuZGxpbmcgdGhpbmdzIGxpa2UgYmxpbmtpbmcgYW5kIGJyaWdodG5lc3MuIEZ1bmN0aW9uYWxseSwgYWJzb2x1dGVseSB5ZXMsIHRoaXMgaXMgYSBjb2RlIHBhdGggdGhhdCBuZWVkcyBzY3J1dGlueS4gQnV0IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBpcyBpdCAqcmVhY2hhYmxlKj9cblxuVGhpcyBpcyBhIERTQSBzd2l0Y2ggZHJpdmVyLCBzbyBpdCByZWxpZXMgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBzd2l0Y2ggaGFyZHdhcmUuICBSZWFsaXN0aWNhbGx5LCB0aGlzIG1lYW5zIGFuIE1ESU8gYnVzIGlzIGludm9sdmVkLCBhbmQgRFNBIGRyaXZlcnMgYXJlIHR5cGljYWxseSBub3QgZWFzaWx5IGVtdWxhdGVkIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoZSBoYXJkd2FyZS4gIEkgbmVlZCB0byB0aGluayBhYm91dCBzeXprYWxsZXIncyBjYXBhYmlsaXRpZXMgaGVyZS4gIENhbiBpdCBpbnN0YW50aWF0ZSBhbiBNRElPIGRldmljZSBsaWtlIHRoaXM/IE15IHVuZGVyc3RhbmRpbmcgaXMgc3l6a2FsbGVyICpjYW4qIGZ1enogTURJTyBkZXZpY2VzLCBlc3BlY2lhbGx5IGlmIHRoZXJlJ3MgYSBuZXRsaW5rIG9yIHN5c2ZzIGludGVyZmFjZSBpbnZvbHZlZC4gQW5kIGJpbmdvLCBMRUQgY2xhc3MgZGV2aWNlcyBhcmUgZXhwb3NlZCB2aWEgYC9zeXMvY2xhc3MvbGVkcy9gISBTbywgaWYgdGhlIGRyaXZlciBwcm9iZXMsIHRoZSBMRURzIGFyZSByZWdpc3RlcmVkLCBhbmQgY29udHJvbCBjYW4gYmUgZG9uZSB2aWEgc3lzZnMuIFRoaXMgaXMgdGhlIGtleS5cblxuU28sIGNhbiB0aGUgZHJpdmVyICpwcm9iZSo/IEl0J3MgYSBgeXQ5MjF4YCBkZXZpY2UuIEkgbmVlZCB0byBsb29rIGF0IHRoZSBwcm9iZSBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNgIG9yLCB0aGUgb3JpZ2luYWwgZmlsZSwgYHl0OTIxeC5jYC4gSXQncyBNRElPIG9yIFNQSSBiYXNlZC4gSWYgdGhlIGRldmljZSBpc24ndCBwcmVzZW50LCB0aGUgcHJvYmUgZmFpbHMuIE5vIHByb2JlLCBubyBMRURzLiBUaGVyZWZvcmUsIGl0J3Mgbm90IHByZXNlbnQgZm9yIHN5emthbGxlciB0byB1c2UuXG5cblRoZSByZWFsIGNydXggaXM6IENhbiBzeXprYWxsZXIgaW5zdGFudGlhdGUgdGhpcyBkZXZpY2U/ICBJJ20gdGhpbmtpbmcgb2YgYHZoY2lgLCBgbmV0ZGV2c2ltYCwgYW5kIHNpbWlsYXIsIGJ1dCBEU0Egc3dpdGNoZXMgYXJlIHRyaWNreS4gSSBkb24ndCB0aGluayBpdCBjYW4ganVzdCBlYXNpbHkgaW5zdGFudGlhdGUgYXJiaXRyYXJ5IE1ESU8gZGV2aWNlcyB1bmxlc3MgdGhlcmUncyBhIHZpcnR1YWwgTURJTyBidXMgd2hlcmUgd2UgY2FuIGluamVjdCBub2Rlcywgb3IgbWF5YmUgdXNpbmcgYGRzYV9sb29wYC4gSSB2YWd1ZWx5IHJlY2FsbCBzb21lIG1lbnRpb24gb2YgZGV2aWNlIHRyZWUgaW5qZWN0aW9uIHN1cHBvcnQgaW4gc3l6a2FsbGVyLCBidXQgSSBkb3VidCBpdCBpcyBzdXBwb3J0ZWQuIE5vLCBgZHNhX2xvb3BgIGlzIGEgc3BlY2lmaWMgZHJpdmVyLCBub3QgYSBnZW5lcmFsIHZpcnR1YWxpemVyLlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGtpY2tlciBmcm9tIHRoZSBpbnN0cnVjdGlvbnM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyAuLi4gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoYXQncyB3aGF0IEkgYW0gd29ycmllZCBhYm91dC5cblxuSXMgdGhpcyBgeXQ5MjF4YCByZWFjaGFibGUgaW4gUUVNVT8gQW5kLCB0aGUgdXN1YWwgYW5zd2VyIGlzIG5vLCByaWdodD8gU3BlY2lmaWMgRXRoZXJuZXQgc3dpdGNoIGNoaXBzIG9uIE1ESU8vU1BJIGJ1c2VzIGFyZSBnZW5lcmFsbHkgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVW5sZXNzIHNvbWVvbmUncyBzcGVjaWZpY2FsbHkgYWRkZWQgZW11bGF0aW9uIGZvciBgeXQ5MjF4YCwgb3IgdGhlcmUncyBzb21lIGNsZXZlciBzb2Z0d2FyZSBmYWxsYmFjaywgaXQncyBhIGRlYWQgZW5kLiBJIG5lZWQgdG8gY2hlY2suICBJIG5lZWQgdG8gc2VhcmNoIGZvciB0aGUgYHl0OTIxeGAgcHJvYmUgZnVuY3Rpb24gYW5kIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlLCBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgaGludHMgYWJvdXQgdmlydHVhbCBNRElPIG9yIHNvZnR3YXJlLWVtdWxhdGVkIHByb2JpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHNvIEkgZG9uJ3Qgd2FzdGUgdGltZSBsb29raW5nIGZvciBhIGJ1ZyB0aGF0IGRvZXNuJ3QgZXhpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNzQwLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6NTYuMjM5MDk1ODA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzkzMjA0OTIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTY6NTguODE4NDI5MTA3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTYwOTcxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTW90b3Jjb21tIERTQSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgYWJvdXQgdGhpcyBNb3RvcmNvbW0gRFNBIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gYGNoaXAuY2AuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiB3aGF0IEkga25vdyBhYm91dCB0aGVzZSBkcml2ZXJzLCBpcyB0byBsb29rIGZvciBhIHNwZWNpZmljIGZ1bmN0aW9uIG9yIHN0cnVjdHVyZSByZWxhdGVkIHRvIG1vZHVsZXMsIGxpa2VseSB0aGUgZHJpdmVyJ3MgY29yZSBpbml0aWFsaXphdGlvbiBvciBjb25maWd1cmF0aW9uIGxvZ2ljLiBJJ2xsIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBtb2R1bGVfYCDigJMgdGhhdCBwcmVmaXggaXMgYSBwcmV0dHkgc3RhbmRhcmQgaW5kaWNhdG9yIG9mIG1vZHVsZS1yZWxhdGVkIGNvZGUgd2l0aGluIHRoZSBrZXJuZWwuIFRoaXMgdXN1YWxseSBlbmNvbXBhc3NlcyBmdW5jdGlvbnMgbGlrZSBtb2R1bGUgbG9hZGluZy91bmxvYWRpbmcsIHBvdGVudGlhbGx5IG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcsIG9yIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZSdzIHN0cnVjdHVyZSBpdHNlbGYuIEl0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciBpcyBvcmdhbml6ZWQgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwncyBtb2R1bGUgc3lzdGVtLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEyNywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjAzLjkyODA0MTI4M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1MTUyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlXy4qZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ3Njg9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Nzc3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Nzg6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MDQuMDU1NTYyNDA4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYyMDU3MzcyNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNRElPIERyaXZlciBhbmQgSXRzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYW4gTURJTyBkcml2ZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBldmVuIGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcyBkaXJlY3RseT8gUHJvYmFibHkgbm90LCB1bmxlc3MgdGhlcmUncyBzb21lIHNwZWNpYWwgTURJTy1zcGVjaWZpYyBmdXp6ZXIgb3Igc29tZSB0cmljayB3aXRoIGRldmljZSB0cmVlIG92ZXJsYXkgaW5qZWN0aW9uLiBUaG91Z2gsIHdhaXQsIGlzbid0IHRoZXJlICpzb21lKiBsaW1pdGVkIG5ldGxpbmsgb3Igc3lzZnMgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIGRldmljZXMgaW4gc3l6a2FsbGVyPyBObywgdHlwaWNhbGx5IE1ESU8gZGV2aWNlcyBhcmUgcHJvYmVkIHRocm91Z2ggdGhlIGRldmljZSB0cmVlLlxuXG5IbW0sIGNhbiBJIHRyaWdnZXIgdGhlIExFRCBjb2RlIGluZGVwZW5kZW50bHkgb2YgdGhlIGRldmljZSBiZWluZyBwcmVzZW50PyBObywgYmVjYXVzZSBgeXQ5MjF4X2xlZHNfc2V0dXBgIGlzIGNsZWFybHkgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpcyBvbmx5IHRyaWdnZXJlZCBkdXJpbmcgdGhlIERTQSBzd2l0Y2ggc2V0dXAuIFRoYXQgbWVhbnMsIGlmIHRoZSBkZXZpY2UgaXNuJ3QgcHJvYmVkLCB0aGF0IGNvZGUncyB1bnJlYWNoYWJsZS5cblxuT2theSwgaXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgdGhhdCBtaWdodCBoZWxwPyBOb3RoaW5nIGluIHRoZSBrZXJuZWwgb3IgUUVNVSwgYXMgZmFyIGFzIEkga25vdy4gU28sIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCB0aGlzIGNvZGUgcGF0aCBpcyBwcmV0dHkgbXVjaCBkZWFkLlxuXG5XYWl0LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZSwgbWF5YmUgdGhlcmUncyBzb21lIG9ic2N1cmUgd2F5IHRvIGhpdCBNRElPIGRyaXZlcnMuLi4gQWgsIHRoZSBgZHNhX2xvb3BgIGRyaXZlciwgYnV0IHRoYXQncyBmb3IgYSBmaXhlZCBkdW1teSBzd2l0Y2guIE9rYXksIHdoYXQgYWJvdXQgYG1kaW8tbW9ja3VwYCwgb3Igc29tZXRoaW5nIHNpbWlsYXI/IExldCdzIHF1aWNrbHkgdmVyaWZ5IGlmIHRoYXQgZXhpc3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTUwMywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzoxMC4yNjEzMDMzNDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjMzMzU0NjksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MTIuOTI0NjQ5ODgyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Nzg4ODY3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbiBmcm9tIFVzZXJzcGFjZTogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgTURJTyBkZXZpY2VzIGFuZCBob3cgd2UgbWlnaHQgaW50ZXJhY3Qgd2l0aCB0aGVpciBpbnN0YW50aWF0aW9uIGZyb20gdXNlcnNwYWNlLiBUaGUgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIGlmIHdlIGNhbiBkaXJlY3RseSBtYW5pcHVsYXRlIGAvc3lzL2J1cy9tZGlvX2J1cy9kZXZpY2VzLy4uLmAsIGJ1dCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIGEgZGVhZCBlbmQuIEZyb20gbXkgZXhwZXJpZW5jZSwgTURJTyBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgYnJvdWdodCBvbmxpbmUgYnkgdGhlIE1ESU8gYnVzIGNvbnRyb2xsZXIgaXRzZWxmLCBlaXRoZXIgdGhyb3VnaCBoYXJkd2FyZSBwcm9iaW5nLCByZWFkaW5nIHRob3NlIGNydWNpYWwgUEhZIElEIHJlZ2lzdGVycywgb3IgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUuXG5cblRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwgTURJTyBidXMsIHNvbWV0aGluZyBsaWtlIGBmaXhlZC1tZGlvYCBvciBtYXliZSBldmVuIHRoZSBNRElPIGJ1cyB3aXRoaW4gYGRzYV9sb29wYCwgaXMgdGhlcmUgYSB3YXkgdG8gdHJpY2sgdGhlIHN5c3RlbSBpbnRvIHByb2JpbmcgYSB2aXJ0dWFsIGRldmljZT8gQ291bGQgd2UgcG90ZW50aWFsbHkgbW9jayB0aGUgcmVhZCBvZiB0aGUgUEhZIElEIHJlZ2lzdGVyPyBJZiB3ZSBjb3VsZCBzaW11bGF0ZSB0aGF0IHJlYWQsIHdvdWxkIGl0IHRyaWNrIHRoZSBzeXN0ZW0gdG8gbG9hZCBkcml2ZXJzP1xuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgZXhhY3QgZHJpdmVyIG1hdGNoaW5nIHNjaGVtZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGB5dDkyMXhfbWRpb19kcml2ZXJgIGZ1bmN0aW9ucywgdG8gc2VlIGlmIG1vY2tpbmcgdGhlIFBIWSBJRCBtaWdodCB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA5NiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzoxNy43MDM1NDE1NzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDQ2ODQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInl0OTIxeF9tZGlvX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY2PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY4OnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjktXFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Nzc3LVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3Nzg6bWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MTcuNzc5NTkzODA4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MzA1NTg3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgYXNzdW1pbmcgSSdtIHRoZSBvbmUgaGF2aW5nIHRoZXNlIHRob3VnaHRzIGFuZCBJIGFtIGFuIGV4cGVydCBpbiBteSBmaWVsZC5cblxuKipNYXRjaGluZyBDcml0ZXJpYSBhbmQgVGFibGUgSWRlbnRpZmljYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGludGVybmFsIHByb2Nlc3MgaXMgY29uZmlybWluZyBhIG1hdGNoIGJhc2VkIG9uIHRoZSBgb2ZfbWF0Y2hfdGFibGVgLiBUaGF0J3MgdGhlIGtleS4gSSdtIHJlbHlpbmcgb24gdGhhdCBzcGVjaWZpYyB0YWJsZSwgdGhlIGB5dDkyMXhfb2ZfbWF0Y2hgLCB0byBkZXRlcm1pbmUgaWYgYSBtYXRjaCBpcyB2YWxpZC4gTXkgZm9jdXMgbm93IGlzIHB1cmVseSBvbiB0aGUgb3V0cHV0IG9mIGB5dDkyMXhfb2ZfbWF0Y2hgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc0MCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjIwLjYxMDE1NTA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzE0NDI4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfb2ZfbWF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDcxND1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjEtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDc2MjpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00NzYzLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NjUtfTtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY2Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc2Ny1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NzY4PXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDc3My1cXHRcXHQubmFtZSA9IFlUOTIxWF9OQU1FLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ3NzQ6XFx0XFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MjAuNjgzMzA0MjU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODI2ODcxMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBZVDkyMTUgRHJpdmVyJ3MgUHJvYmFibGUgQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uIGlkZW50aWZpZXMgaXRzZWxmIHZpYSB0aGUgZGV2aWNlIHRyZWUgY29tcGF0aWJsZSBzdHJpbmcgXCJtb3RvcmNvbW0seXQ5MjE1XCIuIFJpZ2h0IG5vdywgSSBjYW4ndCBzZWUgdGhpcyBkcml2ZXIgZ2V0dGluZyBsb2FkZWQgd2l0aCB0aGUgc3RhbmRhcmQgU3l6a2FsbGVyIHNldHVwIGJlY2F1c2UgaXQgY2FuJ3QgaW5qZWN0IGFyYml0cmFyeSBkZXZpY2UgdHJlZSBub2RlcyB5ZXQuIFdoaWxlIHRoZXJlJ3Mgd29yayBiZWluZyBkb25lIG9uIERUIG92ZXJsYXlzLCB0aGF0J3Mgbm90IGEgZ28tdG8gc29sdXRpb24gZm9yIGV2ZXJ5IGRyaXZlci4gU28sIGluaXRpYWwgcHJvYmluZyBpcyB1bmxpa2VseS5cblxuSG93ZXZlciwgbGV0J3MgYXNzdW1lLCBmb3IgdGhlIHNha2Ugb2YgYXJndW1lbnQsIHRoYXQgaXQgKmRvZXMqIHNvbWVob3cgbWFuYWdlIHRvIHByb2JlLiBJZiB0aGF0IGhhcHBlbnMsIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGVsdmUgaW50byB0aGUgYHl0OTIxeF9tZGlvX3Byb2JlYCBvciBgeXQ5MjF4X3NldHVwYCBmdW5jdGlvbnMuIFRoaXMgaXMgYmVjYXVzZSwgZXZlbiBpZiBpdCdzIHRoZXJlLCB0aGUgZHJpdmVyJ3MgZ29pbmcgdG8gYXR0ZW1wdCB0byB2ZXJpZnkgdGhlIGNoaXAgSUQgYnkgcmVhZGluZyByZWdpc3RlcnMgdGhyb3VnaCBNRElPLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IE1ESU8gaW50ZXJhY3Rpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBHb3R0YSBmb2xsb3cgdGhhdCBNRElPIGRhdGEgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcyODYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MjQuNjY1OTk0MzM3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU0MTM3MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X21kaW9fcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDY4Mj1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDcxMy1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzE0OnN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3MTUte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDc2OD1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NzY5OlxcdC5wcm9iZSA9IHl0OTIxeF9tZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ3NzAtXFx0LnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6MjQuNzcxNDEzNTIzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTI4NzM1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgeXQ5MjF4X21kaW9fcHJvYmVgIGJhc2VkIG9uIHdoYXQgSSBjYW4gc2VlOlxuXG4qKkRpc3NlY3RpbmcgYHl0OTIxeF9tZGlvX3Byb2JlYCoqXG5cbkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgcHJldHR5IGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBvZiB0aGlzIGB5dDkyMXhfbWRpb19wcm9iZWAgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2UgaXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgb2Ygc29tZXRoaW5nIHJlbGF0ZWQgdG8gTURJTyAoTWFuYWdlbWVudCBEYXRhIElucHV0L091dHB1dCkgY29tbXVuaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGZvciB0aGUgYHl0OTIxeGAgZGV2aWNlLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdGhhdCBNRElPIGlzIHVzdWFsbHkgaG93IHRoZSBzeXN0ZW0gdGFsa3MgdG8gUEhZcyAoUGh5c2ljYWwgTGF5ZXIgVHJhbnNjZWl2ZXJzKSBhbmQgb3RoZXIgbG93LWxldmVsIG5ldHdvcmsgaW50ZXJmYWNlIGNvbXBvbmVudHMuIFNvLCBJIGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlIHJlc3BvbnNpYmxlIGZvciB0aGluZ3MgbGlrZTogZGV0ZWN0aW5nIHRoZSBQSFksIGNvbmZpZ3VyaW5nIGl0cyByZWdpc3RlcnMsIHNldHRpbmcgdXAgdGhlIG5lY2Vzc2FyeSBjbG9ja3Mgb3IgaW50ZXJydXB0IGxpbmVzIGZvciBjb21tdW5pY2F0aW9uLCBhbmQgZmluYWxseSwgZ2V0dGluZyB0aGUgZGV2aWNlIHJlYWR5IGZvciBkYXRhIHRyYW5zZmVyLiBJJ2xsIG5lZWQgdG8gbG9vayBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWNzIG9mICpob3cqIGl0IGRvZXMgdGhvc2UgdGhpbmdzLCBidXQgdGhhdCdzIG15IHdvcmtpbmcgaHlwb3RoZXNpcy4gVGltZSB0byBnZXQgc3RhcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc5MTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzoyNy45ODQyOTExNTFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3MTQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ3MTQ6XFx0c3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuNDcxNTpcXHR7XFxuNDcxNjpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2O1xcbjQ3MTc6XFx0XFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG40NzE4OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcXG40NzE5OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG40NzIwOlxcdFxcbjQ3MjE6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbjQ3MjI6XFx0XFx0aWYgKCFwcml2KVxcbjQ3MjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuNDcyNDpcXHRcXG40NzI1OlxcdFxcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG40NzI2OlxcdFxcdGlmICghbWRpbylcXG40NzI3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjQ3Mjg6XFx0XFxuNDcyOTpcXHRcXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuNDczMDpcXHRcXHRtZGlvLVxcdTAwM2VhZGRyID0gbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG40NzMxOlxcdFxcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG40NzMyOlxcdFxcbjQ3MzM6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ3MzQ6XFx0XFxuNDczNTpcXHRcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuNDczNjpcXHRcXHRwcml2LVxcdTAwM2VyZWdfY3R4ID0gbWRpbztcXG40NzM3OlxcdFxcbjQ3Mzg6XFx0XFx0Zm9yIChzaXplX3QgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXBvcnRzKTsgaSsrKSB7XFxuNDczOTpcXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbjQ3NDA6XFx0XFxuNDc0MTpcXHRcXHRcXHRwcC1cXHUwMDNlaW5kZXggPSBpO1xcbjQ3NDI6XFx0XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcXG40NzQzOlxcdFxcdH1cXG40NzQ0OlxcdFxcbjQ3NDU6XFx0XFx0ZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDc0NjpcXHRcXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbjQ3NDc6XFx0XFx0ZHMtXFx1MDAzZWFzc2lzdGVkX2xlYXJuaW5nX29uX2NwdV9wb3J0ID0gdHJ1ZTtcXG40NzQ4OlxcdFxcdGRzLVxcdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xcbjQ3NDk6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbjQ3NTA6XFx0XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XFxuNDc1MTpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XFxuNDc1MjpcXHRcXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XFxuNDc1MzpcXHRcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XFxuNDc1NDpcXHRcXHRkcy1cXHUwMDNlbnVtX2xhZ19pZHMgPSBZVDkyMVhfTEFHX05VTTtcXG40NzU1OlxcdFxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XFxuNDc1NjpcXHRcXG40NzU3OlxcdFxcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XFxuNDc1ODpcXHRcXG40NzU5OlxcdFxcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcXG40NzYwOlxcdH1cXG40NzYxOlxcdFxcbjQ3NjI6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XFxuNDc2MzpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDkyMTVcXFwiIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjI3Ljk4NDYzMTE4MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjU1ODYyNjg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY29kaW5nIFRoaXMgRFNBIFN3aXRjaCBSZWdpc3RyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgcHJvY2VzcyBiZWdpbnMgd2l0aCBhIGNhbGwgdG8gYGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZpcnN0IHN0ZXAgaW4gZ2V0dGluZyB0aGlzIHN3aXRjaCBpbnRlZ3JhdGVkLiAgTm93LCBJJ20gZXhwZWN0aW5nIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB0byB0aGVuIGNhbGwgdGhlIHNldHVwIGZ1bmN0aW9uIHNwZWNpZmljIHRvIHRoZSBzd2l0Y2ggaGFyZHdhcmUsIHdoaWNoLCBpbiB0aGlzIGNhc2UsIGlzIGB5dDkyMXhfZHNhX3NldHVwYC4gIEl0J3MgbGlrZWx5IHRoYXQgYGRzLVx1MDAzZW9wc2AgaG9sZHMgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCBzbyBpdCdzIGNhbGxpbmcgKnRoYXQqIGZ1bmN0aW9uLCBwYXNzZWQgdGhyb3VnaCB0aGUgYGRzYCBzdHJ1Y3R1cmUuIFJpZ2h0LCBgZHMtXHUwMDNlb3BzYCBpcyB0aGUga2V5LiAgTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB5dDkyMXhfZHNhX3NldHVwYCBhY3R1YWxseSAqZG9lcyouIExldCdzIGRlbHZlIGludG8gdGhhdCBmdW5jdGlvbiB0byBzZWUgdGhlIGRldGFpbHMgb2YgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA3NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTc6NDQuNTQzMjYyMTMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTg0OTQwMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2RzYV9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NDk1PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTM3OnN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDUzOC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00NTk4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjF4X2RzYV9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY2OC1cXHQvKiBjaGlwICovXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDY2OTpcXHQuc2V0dXBcXHRcXHRcXHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDY3MC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzo0NC44NjE3NjEzMjFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ5OTE5MDM5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgdGhlIENoaXAgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIGhhcmR3YXJlIHZlcmlmaWNhdGlvbiBpcyBvY2N1cnJpbmcgd2l0aGluIHRoZSBzZXR1cCByb3V0aW5lcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBlaXRoZXIgYHl0OTIxeF9jaGlwX3NldHVwYCBvciBgeXQ5MjF4X2RzYV9zZXR1cGAuIFRoZXNlIGFyZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcywgZ2l2ZW4gdGhlaXIgcm9sZSBpbiBpbml0aWFsaXppbmcgdGhlIGhhcmR3YXJlLiBJJ20gYXNzdW1pbmcgdGhhdCBzb21ld2hlcmUgaW4gb25lIG9mIHRob3NlLCB3ZSdsbCBmaW5kIHRoZSBsb2dpYyB0aGF0J3MgZGlyZWN0bHkgaW50ZXJyb2dhdGluZyB0aGUgcmVnaXN0ZXJzIHRvIGNvbmZpcm0gdGhlIGNoaXAncyBwcmVzZW5jZSBhbmQgcHJvcGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgZmVlbHMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGluIHRyYWNraW5nIGRvd24gdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTYzNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE3OjU5Ljg1MzY2OTg4M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDQ5NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDQ5NTpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG40NDk2OlxcdHtcXG40NDk3OlxcdFxcdHUzMiBjdHJsO1xcbjQ0OTg6XFx0XFx0aW50IHJlcztcXG40NDk5OlxcdFxcbjQ1MDA6XFx0XFx0Y3RybCA9IFlUOTIxWF9GVU5DX01JQiB8IFlUOTIxWF9GVU5DX0FDTCB8IFlUOTIxWF9GVU5DX01FVEVSO1xcbjQ1MDE6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMVhfRlVOQywgY3RybCk7XFxuNDUwMjpcXHRcXHRpZiAocmVzKVxcbjQ1MDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTA0OlxcdFxcbjQ1MDU6XFx0XFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXBfZHNhKHByaXYpO1xcbjQ1MDY6XFx0XFx0aWYgKHJlcylcXG40NTA3OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUwODpcXHRcXG40NTA5OlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX3RjKHByaXYpO1xcbjQ1MTA6XFx0XFx0aWYgKHJlcylcXG40NTExOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUxMjpcXHRcXG40NTEzOlxcdFxcdHJlcyA9IHl0OTIxeF9jaGlwX3NldHVwX2FjbChwcml2KTtcXG40NTE0OlxcdFxcdGlmIChyZXMpXFxuNDUxNTpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1MTY6XFx0XFxuNDUxNzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfRENCKVxcbjQ1MTg6XFx0XFx0cmVzID0geXQ5MjF4X2NoaXBfc2V0dXBfcW9zKHByaXYpO1xcbjQ1MTk6XFx0XFx0aWYgKHJlcylcXG40NTIwOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUyMTpcXHQjZW5kaWZcXG40NTIyOlxcdFxcbjQ1MjM6XFx0XFx0LyogQ2xlYXIgTUlCICovXFxuNDUyNDpcXHRcXHRjdHJsID0gWVQ5MjFYX01JQl9DVFJMX0NMRUFOIHwgWVQ5MjFYX01JQl9DVFJMX0FMTF9QT1JUO1xcbjQ1MjU6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfTUlCX0NUUkwsIGN0cmwpO1xcbjQ1MjY6XFx0XFx0aWYgKHJlcylcXG40NTI3OlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDUyODpcXHRcXG40NTI5OlxcdFxcdC8qIE1pc2NlbGxhbmVvdXMgKi9cXG40NTMwOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjFYX1NFTlNPUiwgWVQ5MjFYX1NFTlNPUl9URU1QKTtcXG40NTMxOlxcdFxcdGlmIChyZXMpXFxuNDUzMjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1MzM6XFx0XFxuNDUzNDpcXHRcXHRyZXR1cm4gMDtcXG40NTM1OlxcdH1cXG40NTM2OlxcdFxcbjQ1Mzc6XFx0c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG40NTM4OlxcdHtcXG40NTM5OlxcdFxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG40NTQwOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG40NTQxOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXFx1MDAzZW9mX25vZGU7XFxuNDU0MjpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xcbjQ1NDM6XFx0XFx0aW50IHJlcztcXG40NTQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxNzo1OS44NTM5MzcyNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3NDA3MjM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBZVDkyMXggRHJpdmVyKipcblxuSG1tLCBzb21ldGhpbmcncyBub3QgcXVpdGUgcmlnaHQuIEl0IGxvb2tzIGxpa2UgdGhlIGB5dDkyMXhfY2hpcF9zZXR1cGAgZnVuY3Rpb24gaXNuJ3QgdGhlIG9uZSByZXNwb25zaWJsZSBmb3IgcHVsbGluZyB0aGUgY2hpcCBJRC4gVGhhdCdzIHVuZXhwZWN0ZWQuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCB0aGlzIHdvdWxkIGJlIHdoZXJlIGl0IGxpdmVkLiBPa2F5LCBsZXQncyBiYWNrIHVwIGEgYml0IGFuZCB0YWtlIGEgbG9vayBhdCBgeXQ5MjF4X2RzYV9zZXR1cGAgaW5zdGVhZC4gSXQncyBsaWtlbHkgdGhhdCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcmVsZXZhbnQgaW5pdGlhbGl6YXRpb24gYW5kIGlkZW50aWZpY2F0aW9uIHN0ZXBzIGFjdHVhbGx5IG9jY3VyLiBUaW1lIHRvIHNlZSB3aGF0J3MgcmVhbGx5IGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlLCBiZWNhdXNlIHRoZSBhcmNoaXRlY3R1cmUgc2VlbXMgc2xpZ2h0bHkgdW51c3VhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2MzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjAzLjcyODAxMTU0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUzNyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDUzNzpcXHRzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbjQ1Mzg6XFx0e1xcbjQ1Mzk6XFx0XFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbjQ1NDA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQ1NDE6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi1cXHUwMDNlb2Zfbm9kZTtcXG40NTQyOlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuNDU0MzpcXHRcXHRpbnQgcmVzO1xcbjQ1NDQ6XFx0XFxuNDU0NTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU0NjpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcXG40NTQ3OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ1NDg6XFx0XFxuNDU0OTpcXHRcXHRpZiAocmVzKVxcbjQ1NTA6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTUxOlxcdFxcbjQ1NTI6XFx0XFx0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiBOb2RlcyBmb3IgaW50ZXJuYWwgcG9ydHMgc2hvdWxkIGhhdmVcXG40NTUzOlxcdFxcdCAqIHByb3BlciBwaHktaGFuZGxlIHBvaW50aW5nIHRvIHRoZWlyIFBIWXMuIE5vdCBlbmFibGluZyB0aGUgaW50ZXJuYWxcXG40NTU0OlxcdFxcdCAqIGJ1cyBpcyBwb3NzaWJsZSwgdGhvdWdoIHByZXR0eSB3aXJlZCwgaWYgaW50ZXJuYWwgcG9ydHMgYXJlIG5vdCB1c2VkLlxcbjQ1NTU6XFx0XFx0ICovXFxuNDU1NjpcXHRcXHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcXFwibWRpb1xcXCIpO1xcbjQ1NTc6XFx0XFx0aWYgKGNoaWxkKSB7XFxuNDU1ODpcXHRcXHRcXHRyZXMgPSB5dDkyMXhfbWJ1c19pbnRfaW5pdChwcml2LCBjaGlsZCk7XFxuNDU1OTpcXHRcXHRcXHRvZl9ub2RlX3B1dChjaGlsZCk7XFxuNDU2MDpcXHRcXHRcXHRpZiAocmVzKVxcbjQ1NjE6XFx0XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTYyOlxcdFxcdH1cXG40NTYzOlxcdFxcbjQ1NjQ6XFx0XFx0LyogRXh0ZXJuYWwgbWRpbyBidXMgaXMgb3B0aW9uYWwgKi9cXG40NTY1OlxcdFxcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFxcXCJtZGlvLWV4dGVybmFsXFxcIik7XFxuNDU2NjpcXHRcXHRpZiAoY2hpbGQpIHtcXG40NTY3OlxcdFxcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2V4dF9pbml0KHByaXYsIGNoaWxkKTtcXG40NTY4OlxcdFxcdFxcdG9mX25vZGVfcHV0KGNoaWxkKTtcXG40NTY5OlxcdFxcdFxcdGlmIChyZXMpXFxuNDU3MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQ1NzE6XFx0XFxuNDU3MjpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVudGVzdGVkIGV4dGVybmFsIG1kaW8gYnVzXFxcXG5cXFwiKTtcXG40NTczOlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjQ1NzQ6XFx0XFx0fVxcbjQ1NzU6XFx0XFxuNDU3NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuNDU3NzpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9zZXR1cChwcml2KTtcXG40NTc4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbjQ1Nzk6XFx0XFxuNDU4MDpcXHRcXHRpZiAocmVzKVxcbjQ1ODE6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40NTgyOlxcdFxcbjQ1ODM6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfWVQ5MjFYX0xFRFMpXFxuNDU4NDpcXHRcXHRyZXMgPSB5dDkyMXhfbGVkc19zZXR1cChwcml2KTtcXG40NTg1OlxcdFxcdGlmIChyZXMpXFxuNDU4NjpcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJGYWlsZWQgdG8gc2V0dXAgTEVEczogJWRcXFxcblxcXCIsIHJlcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjAzLjcyODI3NDY1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjEwMjM4OTU4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIENoaXAgUmVzZXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGluaXRpYXRpbmcgYSByZXNldCB3aXRoIGB5dDkyMXhfY2hpcF9yZXNldChwcml2KWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBkaXZlIGludG8gdGhhdCBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBwcmVjaXNlbHkgd2hhdCBpdCdzIGRvaW5nLiBJIG5lZWQgdG8ga25vdyB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVzZXQg4oCTIGlzIGl0IGEgZnVsbCBwb3dlciBjeWNsZSwgYSBzb2Z0IHJlc2V0LCBhIHJlZ2lzdGVyIGNsZWFyLCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0J3MgdGhlIGBwcml2YCBhcmd1bWVudD8gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyBkZWZpbml0aW9uIGFuZCBzZWUgd2hhdCBkYXRhIHN0cnVjdHVyZSBpdCBob2xkcyDigJMgdGhhdCdsbCBnaXZlIG1lIGNvbnRleHQgb24gd2hhdCBoYXJkd2FyZSByZXNvdXJjZXMgdGhpcyByZXNldCBtaWdodCBiZSBhZmZlY3RpbmcuIEknbGwgYmUgbG9va2luZyBmb3IgcmVnaXN0ZXIgd3JpdGVzLCBkZWxheXMsIGludGVycnVwdCBkaXNhYmxlL2VuYWJsZSBzZXF1ZW5jZXMg4oCTIGFueXRoaW5nIHRoYXQgbWlnaHQgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIHJlc2V0J3Mgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb24gZGV2aWNlIGZ1bmN0aW9uYWxpdHkgb3IgZGF0YSBpbnRlZ3JpdHkuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc2VxdWVuY2luZywgdG9vOyB0aGUgKm9yZGVyKiBvZiBvcGVyYXRpb25zIGNhbiBiZSBhcyBpbXBvcnRhbnQgYXMgdGhlIG9wZXJhdGlvbnMgdGhlbXNlbHZlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGlzIHByb2JhYmx5IHNvbWV0aGluZyBmYWlybHkgc3RhbmRhcmQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdHMgc3BlY2lmaWMgaGFuZGxpbmcgb2YgdGhpcyBwYXJ0aWN1bGFyIGNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNjUwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxODoyNS44MzA2NjgxNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTg3NTk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ5dDkyMXhfY2hpcF9yZXNldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYz00MjI3PXN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQyOTMtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM6NDI5NDpzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYy00Mjk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jPTQ1Mzc9c3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1NDUtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jOjQ1NDY6XFx0cmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU0Ny1cXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTg6MjUuOTYyNTUxNTIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxODY1MDQyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIGEgZmlyc3QtcGVyc29uIG5hcnJhdGl2ZTpcblxuKipUaW1lIHRvIERpYWdub3NlOiBgeXQ5MjF4YCBSZXNldCBhbmQgRGV0ZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBlc3NlbnRpYWxzIGZvciBhIHN5c3RlbSBsaWtlIHRoaXMuIEJlZm9yZSBJIHN0YXJ0IGdvaW5nIGRvd24gYW55IHJhYmJpdCBob2xlcyB3aXRoIG1vcmUgY29tcGxleCBkZWJ1Z2dpbmcsIEknbSBnb2luZyB0byB0YWtlIGEgZmlyc3QgcGFzcyBvbiB0aGUgb2J2aW91cy4gVGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMgYWx3YXlzIHN0YXJ0cyBmcm9tIGJhc2ljcy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGRldmljZSBpcyByZXNldCBwcm9wZXJseSwgYW5kIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBkZXRlY3RpbmcgdGhlIGludGVuZGVkIGNoaXAuIFNvLCBmaXJzdCBvbiBteSBsaXN0OiBkb3VibGUgY2hlY2sgdGhlIGZ1bmN0aW9ucyBgeXQ5MjF4X2NoaXBfcmVzZXRgIGFuZCBgeXQ5MjF4X2NoaXBfZGV0ZWN0YC4gSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY2hpcCBpcyBnZXR0aW5nIGEgc29saWQgcmVzZXQgc2lnbmFsLCBhbmQgdGhhdCB0aGUgZGV2aWNlIGRldGVjdGlvbiByb3V0aW5lIGlzIGV2ZW4gcGlja2luZyB1cCBvbiBpdHMgcHJlc2VuY2UuIFRoaXMgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIyMzEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxODoyOS4xNDkwNjAxMTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyMjcsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQyMjc6XFx0c3RhdGljIGludCB5dDkyMXhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyMjg6XFx0e1xcbjQyMjk6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyMzA6XFx0XFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xcbjQyMzE6XFx0XFx0dTggZXh0bW9kZTtcXG40MjMyOlxcdFxcdHUzMiBjaGlwaWQ7XFxuNDIzMzpcXHRcXHR1MzIgbWFqb3I7XFxuNDIzNDpcXHRcXHR1MzIgbW9kZTtcXG40MjM1OlxcdFxcdHUzMiB2YWw7XFxuNDIzNjpcXHRcXHRpbnQgcmVzO1xcbjQyMzc6XFx0XFxuNDIzODpcXHRcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFxcdTAwMjZjaGlwaWQpO1xcbjQyMzk6XFx0XFx0aWYgKHJlcylcXG40MjQwOlxcdFxcdFxcdHJldHVybiByZXM7XFxuNDI0MTpcXHRcXG40MjQyOlxcdFxcdG1ham9yID0gRklFTERfR0VUKFlUOTIxWF9DSElQX0lEX01BSk9SLCBjaGlwaWQpO1xcbjQyNDM6XFx0XFxuNDI0NDpcXHRcXHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXFx1MDAzZW5hbWU7IGluZm8rKylcXG40MjQ1OlxcdFxcdFxcdGlmIChpbmZvLVxcdTAwM2VtYWpvciA9PSBtYWpvcilcXG40MjQ2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNDc6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI0ODpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXFxcblxcXCIsIGNoaXBpZCk7XFxuNDI0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjUwOlxcdFxcdH1cXG40MjUxOlxcdFxcbjQyNTI6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DSElQX01PREUsIFxcdTAwMjZtb2RlKTtcXG40MjUzOlxcdFxcdGlmIChyZXMpXFxuNDI1NDpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTU6XFx0XFx0cmVzID0geXQ5MjF4X2VkYXRhX3JlYWQocHJpdiwgWVQ5MjFYX0VEQVRBX0VYVE1PREUsIFxcdTAwMjZleHRtb2RlKTtcXG40MjU2OlxcdFxcdGlmIChyZXMpXFxuNDI1NzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNTg6XFx0XFxuNDI1OTpcXHRcXHRmb3IgKDsgaW5mby1cXHUwMDNlbmFtZTsgaW5mbysrKVxcbjQyNjA6XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW1ham9yID09IG1ham9yIFxcdTAwMjZcXHUwMDI2IGluZm8tXFx1MDAzZW1vZGUgPT0gbW9kZSBcXHUwMDI2XFx1MDAyNlxcbjQyNjE6XFx0XFx0XFx0ICAgIGluZm8tXFx1MDAzZWV4dG1vZGUgPT0gZXh0bW9kZSlcXG40MjYyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQyNjM6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2VuYW1lKSB7XFxuNDI2NDpcXHRcXHRcXHRkZXZfZXJyKGRldixcXG40MjY1OlxcdFxcdFxcdFxcdFxcXCJVbnN1cHBvcnRlZCBjaGlwaWQgMHgleCB3aXRoIGNoaXBtb2RlIDB4JXggMHgleFxcXFxuXFxcIixcXG40MjY2OlxcdFxcdFxcdFxcdGNoaXBpZCwgbW9kZSwgZXh0bW9kZSk7XFxuNDI2NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG40MjY4OlxcdFxcdH1cXG40MjY5OlxcdFxcbjQyNzA6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9TWVNfQ0xLLCBcXHUwMDI2dmFsKTtcXG40MjcxOlxcdFxcdGlmIChyZXMpXFxuNDI3MjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQyNzM6XFx0XFx0c3dpdGNoIChGSUVMRF9HRVQoWVQ5MjFYX1NZU19DTEtfU0VMX00sIHZhbCkpIHtcXG40Mjc0OlxcdFxcdGNhc2UgMDpcXG40Mjc1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWN5Y2xlX25zID0gaW5mby1cXHUwMDNlbWFqb3IgPT0gWVQ5MjE1X01BSk9SID8gOCA6IDY7XFxuNDI3NjpcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTg6MjkuMTQ5MzEzMTMzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NTA1NTkxNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBsb2dpYywgYXMgaWYgSSB3ZXJlIHByb2Nlc3NpbmcgaXQgbXlzZWxmOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogeXQ5MjF4IENoaXAgRGV0ZWN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBgeXQ5MjF4X2NoaXBfZGV0ZWN0YCBmdW5jdGlvbiBpcyBlc3NlbnRpYWxseSB0aGUgZ2F0ZWtlZXBlciBmb3Igb3VyIFlUOTIxWCBjaGlwJ3MgcHJlc2VuY2UuIEl0J3MgdGFza2VkIHdpdGggaWRlbnRpZnlpbmcgdGhlIGNoaXAgbW9kZWwuIFNwZWNpZmljYWxseSwgaXQncyBncmFiYmluZyB0aGUgdmFsdWUgb2YgYFlUOTIxWF9DSElQX0lEYC4gVGhhdCdzIHRoZSBrZXkgaWRlbnRpZmllciwgdGhlIGNoaXAncyBcImZpbmdlcnByaW50XCIgc28gdG8gc3BlYWsuIFRoZW4sIHRoaXMgdmFsdWUgaXMgY29tcGFyZWQgd2l0aCB0aGUgc2V0IG9mIGV4cGVjdGVkIGlkZW50aWZpZXJzIGRlZmluZWQgaW4gYHl0OTIxeF9pbmZvc2AuIElmIHRoZSBncmFiYmVkIElEIGRvZXNuJ3Qgaml2ZSB3aXRoIGFueSBvZiB0aGUgZXhwZWN0ZWQgdmFsdWVzLCB0aGF0J3MgYSByZWQgZmxhZy4gVGhlIGZ1bmN0aW9uIHNpZ25hbHMgYSBzZXJpb3VzIHByb2JsZW0sIHJldHVybmluZyBgLUVOT0RFVmAsIGluZGljYXRpbmcgdGhhdCB0aGUgZGV2aWNlIGlzbid0IHRoZSBvbmUgd2UncmUgZXhwZWN0aW5nIG9yIGl0J3Mgc2ltcGx5IG5vdCBkZXRlY3RlZC4gVGhpcyBpcyBhIGNyaXRpY2FsIGNoZWNrLlxuXG5Ob3csIGEgcmVsYXRlZCBxdWVzdGlvbiBwb3BzIGludG8gbWluZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dCBvZiBob3cgdGhpcyBkZXRlY3Rpb24gaXMgdXNlZC4gSXMgYHl0OTIxeF9jaGlwX2RldGVjdGAgaW52b2tlZCBmcm9tIGB5dDkyMXhfY2hpcF9yZXNldGA/IFVuZGVyc3RhbmRpbmcgdGhpcyByZWxhdGlvbnNoaXAgaXMgY3JpdGljYWwgdG8gZmlndXJpbmcgb3V0IHRoZSBvdmVyYWxsIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGhvdyBkbyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlcj8gSXMgdGhlIGBjaGlwX2RldGVjdGAgcGFydCBvZiB0aGUgb3ZlcmFsbCBjaGlwIHJlc2V0PyBEb2VzIHRoZSByZXNldCBmdW5jdGlvbiByZXF1aXJlIGEga25vd24sIGRldGVjdGFibGUgY2hpcD8gRG9lcyB0aGUgcmVzZXQgZnVuY3Rpb24gb2NjdXIgcmVnYXJkbGVzcz8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI5NiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTg6NDguNjU0OTA3MTAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0Mjk0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0Mjk0OlxcdHN0YXRpYyBpbnQgeXQ5MjF4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbjQyOTU6XFx0e1xcbjQyOTY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xcbjQyOTc6XFx0XFx0dTE2IGV0aF9wX3RhZztcXG40Mjk4OlxcdFxcdHUzMiB2YWw7XFxuNDI5OTpcXHRcXHRpbnQgcmVzO1xcbjQzMDA6XFx0XFxuNDMwMTpcXHRcXHRyZXMgPSB5dDkyMXhfY2hpcF9kZXRlY3QocHJpdik7XFxuNDMwMjpcXHRcXHRpZiAocmVzKVxcbjQzMDM6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA0OlxcdFxcbjQzMDU6XFx0XFx0LyogUmVzZXQgKi9cXG40MzA2OlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XFxuNDMwNzpcXHRcXHRpZiAocmVzKVxcbjQzMDg6XFx0XFx0XFx0cmV0dXJuIHJlcztcXG40MzA5OlxcdFxcbjQzMTA6XFx0XFx0LyogUlNUX0hXIGlzIGFsbW9zdCBzYW1lIGFzIEdQSU8gaGFyZCByZXNldCwgc28gd2UgbmVlZCB0aGlzIGRlbGF5LiAqL1xcbjQzMTE6XFx0XFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbjQzMTI6XFx0XFxuNDMxMzpcXHRcXHR2YWwgPSAwO1xcbjQzMTQ6XFx0XFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG40MzE1OlxcdFxcdGlmIChyZXMpXFxuNDMxNjpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMTc6XFx0XFxuNDMxODpcXHRcXHQvKiBDaGVjayBmb3IgdGFnIEV0aGVyVHlwZTsgZG8gaXQgYWZ0ZXIgcmVzZXQgaW4gY2FzZSB5b3UgbWVzc2VkIGl0IHVwXFxuNDMxOTpcXHRcXHQgKiBiZWZvcmUuXFxuNDMyMDpcXHRcXHQgKi9cXG40MzIxOlxcdFxcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcXHUwMDI2dmFsKTtcXG40MzIyOlxcdFxcdGlmIChyZXMpXFxuNDMyMzpcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbjQzMjQ6XFx0XFx0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xcbjQzMjU6XFx0XFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG40MzI2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxcXG5cXFwiLCBldGhfcF90YWcsXFxuNDMyNzpcXHRcXHRcXHRcXHRFVEhfUF9ZVDkyMVgpO1xcbjQzMjg6XFx0XFx0XFx0LyogRGVzcGl0ZSBiZWluZyBwb3NzaWJsZSwgd2UgY2hvb3NlIG5vdCB0byBzZXQgQ1BVX1RBR19UUElELFxcbjQzMjk6XFx0XFx0XFx0ICogc2luY2UgdGhlcmUgaXMgbm8gd2F5IGl0IGNhbiBiZSBkaWZmZXJlbnQgdW5sZXNzIHlvdSBoYXZlIHRoZVxcbjQzMzA6XFx0XFx0XFx0ICogd3JvbmcgY2hpcC5cXG40MzMxOlxcdFxcdFxcdCAqL1xcbjQzMzI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNDMzMzpcXHRcXHR9XFxuNDMzNDpcXHRcXG40MzM1OlxcdFxcdHJldHVybiAwO1xcbjQzMzY6XFx0fVxcbjQzMzc6XFx0XFxuNDMzODpcXHRzdGF0aWMgaW50IHl0OTIxeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuNDMzOTpcXHR7XFxuNDM0MDpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuNDM0MTpcXHRcXHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xcbjQzNDI6XFx0XFx0dTMyIGN0cmxzWzJdO1xcbjQzNDM6XFx0XFx0dTMyIGN0cmw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjQ4LjY1NTA5NzU4M1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTkwNDM0Nzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHl0OTIxeF9jaGlwX3Jlc2V0YCBGdW5jdGlvbiBDYWxsKipcblxuT2theSwgc28gYHl0OTIxeF9jaGlwX3Jlc2V0YCBkZWZpbml0ZWx5IGNhbGxzIGB5dDkyMXhfY2hpcF9kZXRlY3RgLCBJIGNhbiBzZWUgdGhhdC4gQW5kIGlmIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGNhbid0IGlkZW50aWZ5IHRoZSBjaGlwLCBpdCdzIGdvaW5nIHRvIHJldHVybiBgLUVOT0RFVmAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE5vdywgdGhlIHByb2JsZW0gaXMsIHN5emthbGxlciBpcyBydW5uaW5nIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCDigJMgc29tZXRoaW5nIGxpa2UgUUVNVSBvciBHQ0UsIHJpZ2h0PyBXZSBkb24ndCAqYWN0dWFsbHkqIGhhdmUgdGhpcyBzcGVjaWZpYyBwaWVjZSBvZiBoYXJkd2FyZSBpbiB0aGUgc3lzdGVtLiBXaGljaCBtZWFucyB0aG9zZSBNRElPIHJlYWRzIGFyZSBlaXRoZXIgZ29pbmcgdG8gY29tcGxldGVseSBmYWlsLCBvciByZXR1cm4gc29tZSBnYXJiYWdlIHZhbHVlLCBwcm9iYWJseSAwIG9yIG1heWJlIGAweGZmZmZgLiBFaXRoZXIgd2F5LCBpdCdzIG5vdCBnb2luZyB0byBtYXRjaCBgWVQ5MjE1X01BSk9SYCwgd2hhdGV2ZXIgdGhhdCBkZWZpbmVzLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiBjYW4gc3l6a2FsbGVyICptb2NrKiB0aG9zZSBNRElPIHJlYWRzPyBUaGF0IHdvdWxkIGJlIHRoZSBpZGVhbCBzaXR1YXRpb24uIEkgZG9uJ3QgcmVjYWxsIHNlZWluZyBhIGdlbmVyaWMgTURJTyBtb2NrIGRyaXZlciBpbiB0aGUgYmFzZSBzeXprYWxsZXIgc2V0dXAgdGhhdCBhbGxvd3MgaW5qZWN0aW5nIGFyYml0cmFyeSByZWFkIHZhbHVlcyBmb3IgYXJiaXRyYXJ5IFBIWXMgb3IgZGV2aWNlcyB1bmxlc3Mgb25lIGhhcyBiZWVuIHNwZWNpZmljYWxseSB3cml0dGVuIGZvciBpdC4gSSBkb24ndCByZWNhbGwgc2VlaW5nIGl0LlxuXG5Ib2xkIG9uLCB0aGVyZSdzIGBtZGlvLW1vY2t1cGAsIHJpZ2h0PyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0byBzZWUgaWYgYG1kaW8tbW9ja3VwYCBvciBwb3RlbnRpYWxseSBldmVuIGBtZGlvLWZhdWx0LWluamVjdGAgZXhpc3RzLiBUaGF0IGNvdWxkIGJlIGEgZ2FtZS1jaGFuZ2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU2MSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE4OjU4LjI0NTUzNTA2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTUyMjk3NTk4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZGlvLiptb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxOTowMS4xOTc4NDY0NjhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNzYzMDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkV4cGxvcmluZyB0aGUgRnV6emluZyBMYW5kc2NhcGUqKi5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBmdXp6aW5nIGxhbmRzY2FwZSBmb3IgYW55dGhpbmcgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgbWRpb2AuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNydWNpYWwgc3RlcC4gVW5kZXJzdGFuZGluZyB3aGF0J3MgYWxyZWFkeSBiZWVuIGV4cGxvcmVkLCB3aGF0J3MgYmVlbiB0cmllZCwgYW5kIHdoYXQgdnVsbmVyYWJpbGl0aWVzIG1heSBoYXZlIGJlZW4gdW5lYXJ0aGVkIGlzIHZpdGFsIGJlZm9yZSBJIGV2ZW4gYmVnaW4gdG8gY29uc2lkZXIgbXkgb3duIGFwcHJvYWNoLiBJIHdhbnQgdG8gYXZvaWQgZHVwbGljYXRpbmcgZWZmb3J0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZW5zdXJlIEknbSBidWlsZGluZyBvbiBleGlzdGluZyBrbm93bGVkZ2UuIEZ1enppbmcgaXMgYSBkZWVwIGZpZWxkIGFuZCBJIG5lZWQgYSBiYXNlbGluZSBiZWZvcmUgZGVjaWRpbmcgaWYgSSdtIHJlaW52ZW50aW5nIHRoZSB3aGVlbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwODEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxOTowNC4wMDU0ODE2ODFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk4MjQ5MzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKmZ1enpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDE3OjE5OjA2LjY4NTMxNDgxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODE3ODA3ODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHl0OTIxeGAgRHJpdmVyIFByb2JlIGFuZCBMRUQgU2V0dXAqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgaGVyZSwgc3BlY2lmaWNhbGx5IGhvdyB0aGUgTEVEIGNvZGUgaW4gYHl0OTIxeGAgaXMgcmVhY2hlZCwgYW5kIEknbSBhIGJpdCBodW5nIHVwLiBMZXQgbWUgYnJlYWsgdGhpcyBkb3duIGxvZ2ljYWxseS4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCBgZHNhX2xvb3BgLiBJdCdzIGEgbW9jayBEU0Egc3dpdGNoLCBidXQgaXQgdXNlcyBpdHMgb3duIGRyaXZlciwgYGRzYV9sb29wLmNgLCBub3QgdGhlIGB5dDkyMXhgIGRyaXZlci4gVGhhdCdzIGltcG9ydGFudC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGB5dDkyMXhgIGRyaXZlciBzaG91bGQgb25seSBwcm9iZSBpZiB0d28gY29uZGl0aW9ucyBhcmUgbWV0OiBhIGRldmljZSB0cmVlIG5vZGUgd2l0aCBgbW90b3Jjb21tLHl0OTIxNWAgZXhpc3RzLCAqYW5kKiB0aGUgTURJTyBidXMgcmV0dXJucyB0aGUgY29ycmVjdCBjaGlwIElELiBSaWdodCwgbWFrZXMgc2Vuc2UuXG5cbkdpdmVuIHRoZSB0eXBpY2FsIHN5emthbGxlciBlbnZpcm9ubWVudCwgSSBrbm93IHdlIGRvbid0IGhhdmUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoZXJlIGlzbid0IGFueSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgaXQsIHNvIG15IGd1dCB0ZWxscyBtZSB0aGUgZHJpdmVyJ3MgcHJvYmUgd2lsbCAqYWx3YXlzKiBmYWlsIGF0IGB5dDkyMXhfY2hpcF9kZXRlY3RgLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gdGhlIExFRCBjb2RlIGV2ZXIgZXhlY3V0ZSB3aXRob3V0IGEgc3VjY2Vzc2Z1bCBwcm9iZT8gVGhlIHNlcXVlbmNlIGFwcGVhcnMgdG8gYmU6IGB5dDkyMXhfbGVkc19zZXR1cGAgaXMgY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgYHl0OTIxeF9tZGlvX3Byb2JlYC4gU28gaWYgYHl0OTIxeF9jaGlwX2RldGVjdGAgZmFpbHMsIHRoZW4gYHl0OTIxeF9kc2Ffc2V0dXBgIHdpbGwgZmFpbCBhbmQgcmV0dXJuIGFuIGVycm9yIGFuZCBzdWJzZXF1ZW50bHksIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB3aWxsIGZhaWwuIEkndmUgZ290IHRoYXQgcGFydC5cblxuSG9sZCBvbiwgSSdtIHNlZWluZyBhIHBvdGVudGlhbCBpbmNvbnNpc3RlbmN5LiBJIGhhZCBhIHF1aWNrIG1lbnRhbCBoaWNjdXAsIGJ1dCBJIHJlbWVtYmVyIGl0J3MgYHl0OTIxeF9kc2Ffc2V0dXBgIHRoYXQgaXMgY2FsbGVkICpieSogYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHJlY29uZmlybS4gTGV0J3MgZ28gdG8gdGhlIHNvdXJjZSwgZWl0aGVyIGBuZXQvZHNhL2RzYS5jYCBvciBgbmV0L2RzYS9kc2EyLmNgLiBHb3QgaXQsIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBjYWxscyBgZHMtXHUwMDNlb3BzLVx1MDAzZXNldHVwKGRzKWAuIElmIHRoYXQgYHNldHVwYCBmdW5jdGlvbiBmYWlscywgdGhlIHN3aXRjaCBpcyBub3QgcmVnaXN0ZXJlZC4gQW5kIHNpbmNlIGB5dDkyMXhfY2hpcF9kZXRlY3RgIGlzIHBhcnQgb2YgYHl0OTIxeF9kc2Ffc2V0dXBgLCB0aGUgY2hlY2sgd2lsbCBmYWlsIHRoZXJlLiBUaGVyZWZvcmUsIG15IExFRCBzZXR1cCBjb2RlIChgeXQ5MjF4X2xlZHNfc2V0dXBgKSBpcyBuZXZlciByZWFjaGVkLiBBbHJpZ2h0LCBJJ20gcHJldHR5IGNvbWZvcnRhYmxlIHdpdGggdGhhdCBjb25jbHVzaW9uLiBCdXQuLi4gaXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gZG91YmxlIGNoZWNrLCBqdXN0IHRvIGJlIGNlcnRhaW4uIExldCBtZSBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBvdGVudGlhbCBjYWxsIHBhdGhzIHRvIGB5dDkyMXhfbGVkc19zZXR1cGAuIEFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTI1OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxNzoxOTo0My41MDMxMjYyMjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjAwMDQ5NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieXQ5MjF4X2xlZHNfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmM9NDUzNz1zdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9jaGlwLmMtNDU4My0jaWYgSVNfRU5BQkxFRChDT05GSUdfTkVUX0RTQV9ZVDkyMVhfTEVEUylcXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2NoaXAuYzo0NTg0OlxcdHJlcyA9IHl0OTIxeF9sZWRzX3NldHVwKHByaXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vY2hpcC5jLTQ1ODUtXFx0aWYgKHJlcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5jPTQ5OT1zdGF0aWMgdm9pZCB5dDkyMXhfbGVkc190ZWFyZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuYy01MzUtXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmM6NTM2OmludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmMtNTM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oPTk2PXN0cnVjdCB5dDkyMXhfbGVkIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oLTEwNi1cXG5kcml2ZXJzL25ldC9kc2EvbW90b3Jjb21tL2xlZHMuaDoxMDc6aW50IHl0OTIxeF9sZWRzX3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdik7XFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTA4LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTEwLVxcbmRyaXZlcnMvbmV0L2RzYS9tb3RvcmNvbW0vbGVkcy5oOjExMTpzdGF0aWMgaW5saW5lIGludCB5dDkyMXhfbGVkc19zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvZHNhL21vdG9yY29tbS9sZWRzLmgtMTEyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTk6NDYuMDYzMTM1ODA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODc1NTIyMTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZyBBc3Nlc3NtZW50OiBgZmFsc2VgKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHl0OTIxeF9sZWRzX3NldHVwYCBpcyAqb25seSogY2FsbGVkIGZyb20gYHl0OTIxeF9kc2Ffc2V0dXBgLCBhbmQgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgYXMgdGhlIGAuc2V0dXBgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYGRzYV9zd2l0Y2hfb3BzYCBzdHJ1Y3R1cmUuIFRoZSBgLnNldHVwYCBjYWxsYmFjayBpdHNlbGYgaXMgY2FsbGVkIGR1cmluZyBEU0EgdHJlZSBpbnN0YW50aWF0aW9uLCB3aGljaCBoaW5nZXMgb24gdGhlIHN3aXRjaCBiZWluZyByZWdpc3RlcmVkLCBhbmQgY3JpdGljYWxseSwgdGhlIGhhcmR3YXJlIGJlaW5nIHByZXNlbnQgKmFuZCogZGV0ZWN0ZWQgKG9yLCBhdCBhIGJhcmUgbWluaW11bSwgdGhlIGBzZXR1cGAgY2FsbGJhY2sgbm90IHJldHVybmluZyBhbiBlcnJvcikuXG5cblNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIHBpZWNlIG9mIGhhcmR3YXJlIOKAkyB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gg4oCTIGFuZCB0aGF0IGhhcmR3YXJlIGNoZWNrLCBzcGVjaWZpY2FsbHkgYHl0OTIxeF9jaGlwX2RldGVjdGAsIHdpbGwgZGVmaW5pdGVseSBmYWlsIGFuZCByZXR1cm4gYC1FTk9ERVZgIGlmIHRoZSBjaGlwIGlzbid0IHRoZXJlLiBTbywgYHl0OTIxeF9sZWRzX3NldHVwYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGFueSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZS5cblxuTm93LCB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjbGVhcjogaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgdW5yZWFjaGFibGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGV2ZW4gd2l0aCBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSksIHRoZW4gd2UgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZXhpc3RzLCBzbyB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gU2ltcGxlLlxuXG5JJ3ZlIGNoZWNrZWQgaWYgdGhlcmUncyBhbnkgd2F5IGFyb3VuZCB0aGUgaGFyZHdhcmUgY2hlY2suIEFueSBkZWJ1Z2ZzL3N5c2ZzIGludGVyZmFjZSBmb3IgYnlwYXNzPyBOb3BlLiBJcyBgeXQ5MjF4X2xlZHNfc2V0dXBgIHVzZWQgYW55d2hlcmUgZWxzZT8gTm8sIGl0J3Mgc3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIuIElzIHRoZXJlIGFuIGVtdWxhdG9yIGZvciB0aGlzIGNoaXA/IEkgY291bGRuJ3QgZmluZCBvbmUuIENhbiBzeXprYWxsZXIgc29tZWhvdyBtb2NrIHRoZSBNRElPIHJlYWQ/IFdlbGwsIG5vLCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIGEgZ2VuZXJpYyBNRElPIG1vY2sgdGhhdCBjYW4gYmUgY29uZmlndXJlZCBmcm9tIHVzZXJzcGFjZSB0byByZXR1cm4gYXJiaXRyYXJ5IHZhbHVlcywgYW5kIGV2ZW4gaWYgaXQgZGlkLCBpdCB3b3VsZCByZXF1aXJlIGEgaGlnaGx5IHNwZWNpZmljIHNlcXVlbmNlIG9mIHJlZ2lzdGVyIHZhbHVlcywgd2hpY2ggc3l6a2FsbGVyIHdvdWxkbid0IGtub3cgYXV0b21hdGljYWxseS5cblxuQWxyaWdodCwgbGV0IG1lIGRvdWJsZS1jaGVjazogaXMgYENPTkZJR19ORVRfRFNBX1lUOTIxWGAgZXZlbiBlbmFibGVkIGluIHN0YW5kYXJkIHN5emthbGxlciBjb25maWd1cmF0aW9ucz8gSXQgbWlnaHQgYmUsIGJ1dCBpdCBzdGlsbCB3b24ndCBwcm9iZSB3aXRob3V0IHRoZSBoYXJkd2FyZS4gSSBoYXZlIGFsc28gdmVyaWZpZWQgdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjb25kaXRpb24gaW4gdGhlIGluc3RydWN0aW9ucywgYW5kIGl0IGRlZmluaXRlbHkgYXBwbGllcywgYmVjYXVzZSB0aGUgY29kZSBpc24ndCByZWFjaGFibGUuXG5cbkkgYWxzbyBjaGVja2VkIHdoaWNoIGZpbGVzIHdlcmUgdG91Y2hlZC4gQXNpZGUgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYnVpbGQgc3lzdGVtIGNoYW5nZXMsIHRoZSBtYWluIGNoYW5nZXMgYXJlOiBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBgeXQ5MjF4YCBkcml2ZXIsIGFuZCB0aGUgYWRkaXRpb24gb2YgYGxlZHMuY2AgYW5kIGBsZWRzLmhgLCBtb3Zpbmcgc29tZSBgc21pYCBmdW5jdGlvbnMgaW50byBgc21pLmNgIGFuZCBgc21pLmhgLCBhbmQgYWRkaW5nIHRoZSBjYWxsIHRvIGB5dDkyMXhfbGVkc19zZXR1cGAuIFRoZSBMRUQtc3BlY2lmaWMgbG9naWMgaXMgbm93IHRoZXJlLCBidXQgdGhlIGZ1bmRhbWVudGFsIHByb2JsZW0gcmVtYWluczogaXQncyB0aWVkIHRvIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuXG5cblNvLCB0aGUgcGF0Y2ggaXMganVzdCByZWZhY3RvcmluZyBhbmQgYWRkaW5nIExFRCBzdXBwb3J0IHRvIHRoZSBgeXQ5MjF4YCBkcml2ZXIuIFNpbmNlIHRoYXQgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCB0aGUgbmV3IGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cblRoZXJlZm9yZSwgYW5kIGZvciBhbGwgdGhvc2UgcmVhc29ucywgbXkgYXNzZXNzbWVudCBpcyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gV2UncmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlLXNwZWNpZmljIGNvZGUgdGhhdCdzIGZ1bmRhbWVudGFsbHkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2ODIwLCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTc6MTk6NTkuOTM4NjYyNzExWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IERTQSBzd2l0Y2ggZHJpdmVyIGFuZCBhZGRzIExFRCBzdXBwb3J0IGZvciBpdC4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBNb3RvcmNvbW0gc3dpdGNoIGNoaXAgdG8gYmUgcHJlc2VudCBvbiBhbiBNRElPIGJ1cyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgKGl0IHJlYWRzIHRoZSBjaGlwIElEIHZpYSBNRElPIGluIGB5dDkyMXhfY2hpcF9kZXRlY3RgKS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUvc3l6a2FsbGVyLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIE1vdG9yY29tbSBZVDkyMTUgRFNBIHN3aXRjaCBkcml2ZXIgYW5kIGFkZHMgTEVEIHN1cHBvcnQgZm9yIGl0LiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIE1vdG9yY29tbSBzd2l0Y2ggY2hpcCB0byBiZSBwcmVzZW50IG9uIGFuIE1ESU8gYnVzIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSAoaXQgcmVhZHMgdGhlIGNoaXAgSUQgdmlhIE1ESU8gaW4gYHl0OTIxeF9jaGlwX2RldGVjdGApLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVS9zeXprYWxsZXIsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgmf27[1] Phase: Running StartedAt: 2026-07-03 17:20:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgmf27[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 17:20:12 +0000 UTC FinishedAt: 2026-07-03 17:20:18 +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,}